Changeset: 6ba207a6d33f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6ba207a6d33f
Modified Files:
monetdb5/modules/mal/tokenizer.c
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:
Create udf for converting rdf str<->id
diffs (187 lines):
diff --git a/monetdb5/modules/mal/tokenizer.c b/monetdb5/modules/mal/tokenizer.c
--- a/monetdb5/modules/mal/tokenizer.c
+++ b/monetdb5/modules/mal/tokenizer.c
@@ -488,6 +488,9 @@ str TKNRstringToOid(oid *id, str *s)
oid prv = 0;
oid comp;
+ if (TRANS == NULL){
+ throw(MAL, "tokenizer", "no tokenizer store open");
+ }
if ((url = GDKstrdup(*s)) == NULL) {
throw(MAL, "tokenizer.append", OPERATION_FAILED
MAL_MALLOC_FAIL);
@@ -536,6 +539,10 @@ takeOid(oid id, str *val)
str s;
BATiter biidx; /* Iterator for index bat */
+ if (TRANS == NULL) {
+ throw(MAL, "tokenizer", "no tokenizer store open");
+ }
+
if (id >= BATcount(tokenBAT[INDEX].val)) {
throw(MAL, "tokenizer.takeOid", OPERATION_FAILED " illegal
oid");
}
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,8 +148,8 @@ 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 SQLrdfstrtoid(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
+sql5_export str SQLrdfidtostr(str *ret, oid *id);
+sql5_export str SQLrdfstrtoid(oid *ret, str *s);
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
@@ -1140,6 +1140,7 @@ SQLrdfreorganize(Client cntxt, MalBlkPtr
#endif /* HAVE_RAPTOR */
}
+#if 0
str
SQLrdfidtostr(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){
str msg;
@@ -1190,8 +1191,47 @@ SQLrdfidtostr(Client cntxt, MalBlkPtr mb
return msg;
}
+#endif
+str
+SQLrdfidtostr(str *ret, oid *id){
+ str msg;
+ BAT *lmapBat = NULL, *rmapBat = NULL;
+ bat lmapBatId, rmapBatId;
+ str bnamelBat = "map_to_tknz_left";
+ str bnamerBat = "map_to_tknz_right";
+ BUN pos;
+ oid *origId;
+ 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);
+
+ rethrow("SQLrdfidtostr", msg, takeOid(*origId, ret));
+
+ //printf("String for "BUNFMT" is: %s \n",*id, *ret);
+
+ return msg;
+}
+
+#if 0
str
SQLrdfstrtoid(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){
str msg;
@@ -1241,6 +1281,47 @@ SQLrdfstrtoid(Client cntxt, MalBlkPtr mb
return msg;
}
+#endif
+
+str
+SQLrdfstrtoid(oid *ret, str *s){
+ str msg;
+ BAT *mapBat = NULL;
+ bat mapBatId;
+ str bnameBat = "tknzr_to_map";
+ oid origId;
+ oid *id;
+
+ //printf("Get the encoded id for the string %s\n", *s);
+
+ mapBatId = BBPindex(bnameBat);
+
+ if ((mapBat= BATdescriptor(mapBatId)) == NULL) {
+ throw(MAL, "SQLrdfstrtoid", RUNTIME_OBJECT_MISSING);
+ }
+
+ rethrow("sql.rdfstrtoid", msg, TKNRstringToOid(&origId, s));
+
+ if (msg != MAL_SUCCEED){
+ throw(SQL, "SQLrdfstrtoid", "Problem in locating string: %s\n",
msg);
+ }
+
+ if (origId == oid_nil){
+ throw(SQL, "SQLrdfstrtoid","String %s is not stored", *s);
+ }
+
+ id = (oid *) Tloc(mapBat, origId);
+
+ if (id == NULL){
+ *ret = BUN_NONE;
+ throw(SQL, "SQLrdfstrtoid","No Id found for string %s", *s);
+ }
+ else
+ *ret = *id;
+
+ return msg;
+}
+
str
SQLrdfScan(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci){
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
@@ -38,10 +38,13 @@ pattern rdfscan(query:str, schema:str)
address SQLrdfScan
comment "RDF scan operator"
-pattern rdfidtostr(id:oid)
+#pattern rdfidtostr(id:oid)
+command rdfidtostr(id:oid):str
address SQLrdfidtostr
comment "Convert from oid to string"
-pattern rdfstrtoid(urlstr:str)
+#pattern rdfstrtoid(urlstr:str)
+command rdfstrtoid(urlstr:str):oid
address SQLrdfstrtoid
comment "Convert from string to encoded id"
+
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
@@ -47,9 +47,15 @@ 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;
+--create procedure rdf_idtostr(id oid)
+-- external name sql.rdfidtostr;
-create procedure rdf_strtoid(urlstr string)
- external name sql.rdfstrtoid;
+--create procedure rdf_strtoid(urlstr string)
+-- external name sql.rdfstrtoid;
+
+create function rdf_idtostr(id oid)
+ returns string external name sql.rdfidtostr;
+create function rdf_strtoid(urlstr string)
+ returns oid external name sql.rdfstrtoid;
+
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list