Changeset: 035e117d3d00 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=035e117d3d00 Modified Files: monetdb5/extras/rdf/rdfscan.c monetdb5/extras/rdf/rdfscan.h monetdb5/extras/rdf/rdfschema.h sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/backends/monet5/sql.h sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_rdf.c sql/backends/monet5/sql_rdf.h sql/backends/monet5/sql_rdf.mal sql/backends/monet5/sql_rdf_jgraph.c sql/backends/monet5/sql_statement.c sql/backends/monet5/sql_statement.h sql/common/sql_types.c sql/server/rel_exp.c sql/server/rel_exp.h sql/server/rel_rdfscan.c sql/server/rel_rdfscan.h Branch: rdf Log Message:
Handling exceptions diffs (truncated from 709 to 300 lines): diff --git a/monetdb5/extras/rdf/rdfscan.c b/monetdb5/extras/rdf/rdfscan.c --- a/monetdb5/extras/rdf/rdfscan.c +++ b/monetdb5/extras/rdf/rdfscan.c @@ -164,7 +164,7 @@ void freeParams(RdfScanParams *rsParam){ } -str RDFscan(str s, str schema){ +str RDFscan_old(str s, str schema){ str query; RdfScanParams *rsParam = NULL; @@ -185,3 +185,10 @@ str RDFscan(str s, str schema){ return MAL_SUCCEED; } + +str +RDFscan(oid *props, BAT **resBATs){ + (void) props; + (void) resBATs; + return MAL_SUCCEED; +} diff --git a/monetdb5/extras/rdf/rdfscan.h b/monetdb5/extras/rdf/rdfscan.h --- a/monetdb5/extras/rdf/rdfscan.h +++ b/monetdb5/extras/rdf/rdfscan.h @@ -44,6 +44,9 @@ typedef struct RdfScanParams { rdf_export str -RDFscan(str query, str schema); +RDFscan_old(str query, str schema); + +rdf_export str +RDFscan(oid *props, BAT **resBATs); #endif /* RDFSCAN */ diff --git a/monetdb5/extras/rdf/rdfschema.h b/monetdb5/extras/rdf/rdfschema.h --- a/monetdb5/extras/rdf/rdfschema.h +++ b/monetdb5/extras/rdf/rdfschema.h @@ -93,6 +93,11 @@ typedef struct PropStat { int maxNumPPerCS; /* Maximum number of different properties in one CS */ } PropStat; +typedef struct PsoPropStat { + BAT* pBat; /* Store the list of properties */ + BAT* offsetBat; /* Store the first pos where the prop starts in PSO table */ +} PsoPropStat; + #define INIT_PROP_NUM 10 #define INIT_CS_PER_PROP 10 #define USINGTFIDF 1 diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -2416,6 +2416,15 @@ rel2bin_select( mvc *sql, sql_rel *rel, return stmt_list(sql->sa, l); } + +static stmt * +rel2bin_rdfscan( mvc *sql, sql_rel *rel, list *refs) +{ + (void) rel; + (void) refs; + return stmt_rdfscan(sql->sa); +} + static stmt * rel2bin_groupby( mvc *sql, sql_rel *rel, list *refs) { @@ -4433,8 +4442,12 @@ subrel_bin(mvc *sql, sql_rel *rel, list sql->type = Q_TABLE; break; case op_select: + s = rel2bin_select(sql, rel, refs); + sql->type = Q_TABLE; + break; case op_rdfscan: - s = rel2bin_select(sql, rel, refs); + if (1) s = rel2bin_rdfscan(sql, rel, refs); + else s = rel2bin_select(sql, rel, refs); sql->type = Q_TABLE; break; case op_groupby: diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -130,7 +130,7 @@ sql_symbol2relation(mvc *c, symbol *sym) if (1) c->emode = m_normal; - if (0) c->emod = mod_explain; + if (1) c->emod = mod_explain; } } else { diff --git a/sql/backends/monet5/sql.h b/sql/backends/monet5/sql.h --- a/sql/backends/monet5/sql.h +++ b/sql/backends/monet5/sql.h @@ -131,16 +131,6 @@ sql5_export str SQLdrop_hash(Client cntx sql5_export str SQLnewDictionary(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str SQLdropDictionary(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str SQLargRecord(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -sql5_export str SQLrdfShred(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -sql5_export str SQLrdfreorganize(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -sql5_export str SQLrdfRetrieveSubschema(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -sql5_export str SQLrdfScan(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -sql5_export str SQLrdfdeserialize(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -//sql5_export str SQLrdfidtostr(str *ret, oid *id); -sql5_export str SQLrdfidtostr(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -sql5_export str SQLrdfidtostr_bat(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -sql5_export str SQLrdfstrtoid(oid *ret, str *s); -//sql5_export str SQLrdfstrtoid(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str SQLoptimizersUpdate(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str month_interval_str(int *ret, const str *s, const int *ek, const int *sk); sql5_export str second_interval_str(lng *res, const str *s, const int *ek, const int *sk); diff --git a/sql/backends/monet5/sql_gencode.c b/sql/backends/monet5/sql_gencode.c --- a/sql/backends/monet5/sql_gencode.c +++ b/sql/backends/monet5/sql_gencode.c @@ -1367,6 +1367,14 @@ static int s->nr = newTmpVariable(mb, TYPE_any); } break; + + case st_rdfscan: + q = newStmt1(mb, sqlRef, "rdfscan"); + q = pushArgument(mb, q, 222) ; + q = pushStr(mb, q, "Testing rdfscan"); + if (q == NULL) + return -1; + break; case st_uselect2: case st_join2:{ InstrPtr r, p; diff --git a/sql/backends/monet5/sql_rdf.c b/sql/backends/monet5/sql_rdf.c --- a/sql/backends/monet5/sql_rdf.c +++ b/sql/backends/monet5/sql_rdf.c @@ -1473,7 +1473,7 @@ SQLrdfstrtoid(oid *ret, str *s){ #endif str -SQLrdfScan(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ +SQLrdfScan_old(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ str msg; int ret; mvc *m = NULL; @@ -1483,13 +1483,85 @@ SQLrdfScan(Client cntxt, MalBlkPtr mb, M rethrow("sql.rdfScan", msg, getSQLContext(cntxt, mb, &m, NULL)); - rethrow("sql.rdfScan", msg, RDFscan(*params, *schema)); + rethrow("sql.rdfScan", msg, RDFscan_old(*params, *schema)); (void) ret; return MAL_SUCCEED; } +/* + * This is the same as the function in sql.c + * */ +static void +bat2return(MalStkPtr stk, InstrPtr pci, BAT **b) +{ + int i; + + for (i = 0; i < pci->retc; i++) { + *getArgReference_bat(stk, pci, i) = b[i]->batCacheid; + BBPkeepref(b[i]->batCacheid); + } +} + + +/* + * The input for this pattern should be + * Number of Ps, Number of RPs, <List of Prop Ids> + * */ +str +SQLrdfScan(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ + + BAT **b = NULL; //List of BATs (columns) to be returned + int nRet = -1; //Number of BATs to return + int *nP = NULL; //Number of props + int *nRP = NULL; + oid *lstProps = NULL; + int i; + + + (void) cntxt; + (void) mb; + (void) stk; + (void) pci; + + + nP = (int *) getArgReference(stk, pci, pci->retc + 0); + nRP = (int *) getArgReference(stk, pci, pci->retc + 1); + nRet = 2 * *nP; + + (void) nRP; + + assert (pci->retc == nRet); + + b = (BAT **) GDKmalloc (sizeof (BAT*) * pci->retc); + lstProps = (oid *)GDKmalloc(sizeof(oid) * (*nP)); + for (i = 0; i < (*nP); i++){ + oid *tmpp = (oid *) getArgReference(stk, pci, pci->retc + 2 + i); + lstProps[i] = *tmpp; + } + + for (i = 0; i < pci->retc; i++){ + int tmp = -1; + //Get type from pci + int bat_type = ATOMstorage(getColumnType(getArgType(mb,pci,i))); + + if (bat_type == TYPE_str) printf("bat_type is string\n"); + else printf("bat_type is %d\n", bat_type); + + b[i] = BATnew(TYPE_void, bat_type, smallbatsz, TRANSIENT); + tmp = i; + BUNappend(b[i], &tmp, TRUE); + } + + printf("There are %d props, among them %d RPs /n", *nP, *nRP); + bat2return(stk, pci, b); + GDKfree(b); + + return MAL_SUCCEED; +} + + str SQLrdfRetrieveSubschema(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { @@ -1656,6 +1728,90 @@ PropStat *global_p_propstat = NULL; PropStat *global_c_propstat = NULL; BAT *global_mbat = NULL; BATiter global_mapi; +PsoPropStat *pso_propstat = NULL; /* Store the offsets of a prop + in the exceptional PSO table */ +static +void getOffsets(PsoPropStat *pso_pstat, oid *p, BUN *start, BUN *end){ + + BUN pos; + + pos = BUNfnd(pso_pstat->pBat, p); + if (pos == BUN_NONE) + fprintf(stderr, "[Error] The prop "BUNFMT " must be there!\n", *p); + else{ + oid *tmpstart = (oid *) Tloc(pso_pstat->offsetBat, pos); + *start = (*tmpstart); + if (pos == BATcount(pso_pstat->pBat) - 1){ //This is the last prop + *end = BUN_NONE; + } + else{ + oid *tmpend = (oid *) Tloc(pso_pstat->offsetBat, pos + 1); + *end = (*tmpend) - 1; + } + + } +} + +void getSlides_per_P(PsoPropStat *pso_pstat, oid *p, BAT *obat, BAT *sbat, BAT **ret_oBat, BAT **ret_sBat){ + BUN l, h; + + getOffsets(pso_pstat, p, &l, &h); + + *ret_oBat = BATslice(obat, l, h); + + *ret_sBat = BATslice(sbat, l, h); + + +} + +/* + * From the full P BAT (column P) of the PSO + * triple table, extract the offsets where each + * prop starts. + * */ +static +void build_PsoPropStat(BAT *full_pbat, int maxNumP, BAT *full_sbat, BAT *full_obat){ + BUN p, q; + oid *poid; + BATiter pi; + oid curP; + int batsize = 150000; + pi = bat_iterator(full_pbat); + + batsize = maxNumP; //Can be smaller + + pso_propstat = (PsoPropStat *) GDKmalloc(sizeof(PsoPropStat)); + pso_propstat->pBat = BATnew(TYPE_void, TYPE_oid, batsize, TRANSIENT); + pso_propstat->pBat->tsorted = 1; + pso_propstat->offsetBat = BATnew(TYPE_void, TYPE_oid, batsize, TRANSIENT); + + curP = BUN_NONE; + BATloop(full_pbat, p, q){ + poid = (oid *) BUNtloc(pi, p); + if (*poid != curP){ //Start new poid + oid tmpoffset = p; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list