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

Reply via email to