Changeset: ea6d31745ec7 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ea6d31745ec7 Modified Files: monetdb5/extras/rdf/rdfschema.c monetdb5/extras/rdf/rdfschema.h sql/backends/monet5/sql.h sql/backends/monet5/sql_rdf.c sql/backends/monet5/sql_rdf.mal sql/scripts/30_rdf.sql Branch: rdf Log Message:
Add procedure returning the literal value for an oid in RDF tables. call rdf_idtostr(id: oid) diffs (130 lines): diff --git a/monetdb5/extras/rdf/rdfschema.c b/monetdb5/extras/rdf/rdfschema.c --- a/monetdb5/extras/rdf/rdfschema.c +++ b/monetdb5/extras/rdf/rdfschema.c @@ -11303,6 +11303,10 @@ str buildTKNZRMappingBat(BAT *lmap, BAT plmapBat = BATcopy(tmplmapBat, tmplmapBat->htype, tmplmapBat->ttype, TRUE, PERSISTENT); prmapBat = BATcopy(tmprmapBat, tmprmapBat->htype, tmprmapBat->ttype, TRUE, PERSISTENT); + plmapBat->tkey = 1; + plmapBat->tsorted = 1; + + if (BKCsetName(&ret, (int *) &(plmapBat->batCacheid), (str *) &bnamelBat) != MAL_SUCCEED) throw(MAL, "tokenizer.open", OPERATION_FAILED); 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 @@ -540,6 +540,4 @@ printTKNZStringFromOid(oid id); rdf_export BAT* createEncodedSubjBat(int tblIdx, int num); - - #endif /* _RDFSCHEMA_H_ */ 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 @@ -148,6 +148,7 @@ sql5_export str SQLrdfShred(Client cntxt 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 SQLrdfidtostr(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, str *s, int *ek, int *sk); sql5_export str second_interval_str(lng *res, str *s, int *ek, int *sk); 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 @@ -1052,6 +1052,57 @@ SQLrdfreorganize(Client cntxt, MalBlkPtr #endif /* HAVE_RAPTOR */ } +str +SQLrdfidtostr(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ + str msg; + mvc *m = NULL; + BAT *lmapBat = NULL, *rmapBat = NULL; + bat lmapBatId, rmapBatId; + str bnamelBat = "map_to_tknz_left"; + str bnamerBat = "map_to_tknz_right"; + BUN pos; + oid *origId; + oid *id = (oid *)getArgReference(stk,pci,1); + str *s; + + rethrow("sql.rdfidtostr", msg, getSQLContext(cntxt, mb, &m, NULL)); + + lmapBatId = BBPindex(bnamelBat); + rmapBatId = BBPindex(bnamerBat); + + if (lmapBatId == 0 || rmapBatId == 0){ + throw(SQL, "sql.SQLrdfidtostr", "The lmap/rmap Bats should be built already"); + } + + if ((lmapBat= BATdescriptor(lmapBatId)) == NULL) { + throw(MAL, "rdf.RDFreorganize", RUNTIME_OBJECT_MISSING); + } + + if ((rmapBat= BATdescriptor(rmapBatId)) == NULL) { + throw(MAL, "rdf.RDFreorganize", RUNTIME_OBJECT_MISSING); + } + + pos = BUNfnd(BATmirror(lmapBat),id); + if (pos == BUN_NONE) //this id is not converted to a new id + origId = id; + else + origId = (oid *) Tloc(rmapBat, pos); + + VALset(getArgReference(stk, pci, 1), TYPE_oid, origId); + + /*First convert the id to the original tokenizer odi */ + rethrow("sql.rdfidtostr", msg, TKNZRtakeOid(cntxt,mb,stk,pci)); + + s = (str *) getArgReference(stk, pci, 0); + + if (msg == MAL_SUCCEED){ + //throw(SQL, "sql.rdfidtostr", "String for "BUNFMT" is %s\n",*id, *s); + return sql_message("Literal value: %s\n", *s); + } + + return msg; +} + str SQLrdfScan(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){ str msg; @@ -1061,10 +1112,10 @@ SQLrdfScan(Client cntxt, MalBlkPtr mb, M str *params = (str *)getArgReference(stk,pci,1); str *schema = (str *)getArgReference(stk,pci,2); - rethrow("sql.rdfShred", msg, getSQLContext(cntxt, mb, &m, NULL)); + rethrow("sql.rdfScan", msg, getSQLContext(cntxt, mb, &m, NULL)); rethrow("sql.rdfScan", msg, RDFscan(*params, *schema)); - + (void) ret; return MAL_SUCCEED; diff --git a/sql/backends/monet5/sql_rdf.mal b/sql/backends/monet5/sql_rdf.mal --- a/sql/backends/monet5/sql_rdf.mal +++ b/sql/backends/monet5/sql_rdf.mal @@ -37,3 +37,7 @@ The views link to the base schema. Wrapp pattern rdfscan(query:str, schema:str) address SQLrdfScan comment "RDF scan operator" + +pattern rdfidtostr(id:oid) +address SQLrdfidtostr +comment "Convert from oid to string" diff --git a/sql/scripts/30_rdf.sql b/sql/scripts/30_rdf.sql --- a/sql/scripts/30_rdf.sql +++ b/sql/scripts/30_rdf.sql @@ -46,3 +46,6 @@ create procedure rdf_reorganize(sch stri create procedure rdf_scan(query string, sch string) external name sql.rdfscan; + +create procedure rdf_idtostr(id oid) + external name sql.rdfidtostr; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list