Changeset: fd14ae1a7de1 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fd14ae1a7de1
Modified Files:
        monetdb5/extras/rdf/rdf.h
        monetdb5/extras/rdf/rdfalgebra.c
        sql/backends/monet5/sql.mx
Branch: lodrdf
Log Message:

Use the sql with latest version and apply the changes


diffs (truncated from 1358 to 300 lines):

diff --git a/monetdb5/extras/rdf/rdf.h b/monetdb5/extras/rdf/rdf.h
--- a/monetdb5/extras/rdf/rdf.h
+++ b/monetdb5/extras/rdf/rdf.h
@@ -27,6 +27,8 @@
 #ifndef _RDF_H_
 #define _RDF_H_
 
+#include <gdk.h>
+
 #ifdef WIN32
 #ifndef LIBRDF
 #define rdf_export extern __declspec(dllimport)
@@ -43,8 +45,10 @@
 rdf_export str
 RDFParser(BAT **graph, str *location, str *graphname, str *schemam);
 
-rdf_export str RDFleftfetchjoin_sortedestimate(int *result, int *lid, int 
*rid, lng *estimate);
-rdf_export str RDFleftfetchjoin_sorted(int *result, int* lid, int *rid);
+rdf_export str 
+RDFleftfetchjoin_sortedestimate(int *result, int *lid, int *rid, lng 
*estimate);
+rdf_export str 
+RDFleftfetchjoin_sorted(int *result, int* lid, int *rid);
 
 
 #define TRIPLE_STORE 1
diff --git a/monetdb5/extras/rdf/rdfalgebra.c b/monetdb5/extras/rdf/rdfalgebra.c
--- a/monetdb5/extras/rdf/rdfalgebra.c
+++ b/monetdb5/extras/rdf/rdfalgebra.c
@@ -25,15 +25,30 @@
 #include "algebra.h"
 #include <gdk.h>
 
-static BAT* leftfetchjoin_sorted(BAT* left, BAT *right, BUN estimate) {
-        BAT *bn = BATleftfetchjoin(left, right, estimate);
-        if (bn) bn->tsorted = TRUE; /* OK: we must be sure of this, but you 
are, aren't you? */
-        return bn;
-}
-
 str
 RDFleftfetchjoin_sorted(bat *result, bat *lid, bat *rid)
 {
-        return ALGbinaryestimate(result, lid, rid, NULL, leftfetchjoin_sorted, 
"rdf.leftfetchjoin_sorted");
+        BAT *left, *right, *bn = NULL;
+
+        if ((left = BATdescriptor(*lid)) == NULL) {
+                throw(MAL, "rdf.leftfetchjoin_sorted", RUNTIME_OBJECT_MISSING);
+        }
+        if ((right = BATdescriptor(*rid)) == NULL) {
+                BBPreleaseref(left->batCacheid);
+                throw(MAL, "rdf.leftfetchjoin_sorted", RUNTIME_OBJECT_MISSING);
+        }
+        bn = BATleftfetchjoin(left, right, BUN_NONE);
+        BBPreleaseref(left->batCacheid);
+        BBPreleaseref(right->batCacheid);
+        if (bn == NULL)
+                throw(MAL, "rdf.leftfetchjoin_sorted", GDK_EXCEPTION);
+
+        bn->tsorted = TRUE;
+
+        if (!(bn->batDirty&2))
+                bn = BATsetaccess(bn, BAT_READ);
+        *result = bn->batCacheid;
+        BBPkeepref(*result);
+        return MAL_SUCCEED;
 }
 
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -61,6 +61,10 @@ pattern commit()
 address SQLcommit
 comment "Trigger the commit operation for a MAL block";
 
+pattern abort()
+address SQLabort
+comment "Trigger the abort operation for a MAL block";
+
 pattern catalog(type:int,sname:str,name:str,action:int):void
 address SQLcatalog
 comment "a catalog statement";
@@ -239,9 +243,9 @@ pattern append(mvc:int, sname:str, tname
 address mvc_append_wrap
 comment "Append b to the column tname.cname (possibly optimized to replace the 
insert bat of tname.cname (returns sequence number for order dependence)";
 
-pattern update(mvc:int, sname:str, tname:str, cname:str, ins:any):int
+pattern update(mvc:int, sname:str, tname:str, cname:str, rids:any, upd:any):int
 address mvc_update_wrap
-comment "Append b to the column tname.cname (possibly optimized to replace the 
insert bat of tname.cname (returns sequence number for order dependence)";
+comment "Update the values of the column tname.cname";
 
 pattern clear_table{unsafe}(sname:str, tname:str) :wrd
 address mvc_clear_table_wrap
@@ -360,6 +364,9 @@ address not_unique_oids ;
 command optimizers()(:bat[:oid,:str],:bat[:oid,:str],:bat[:oid,:str])
 address getPipeCatalog;
 
+pattern optimizer_updates()
+address SQLoptimizersUpdate;
+
 function times(elaps:int,inblock:lng, oublock:lng):void;
        io.printf("#times %d ms",elaps);
        io.printf(" %d reads",inblock);
@@ -850,46 +857,88 @@ comment "return the densely ranked bat";
 command aggr.exist(b:bat[:any_1,:any_2], h:any_1):bit 
 address ALGexist;
 
-function batcalc.mark_grp{inline}( b:bat[:oid,:any_1], a:bat[:any_2,:any_3], 
g:bat[:oid,:oid]) :bat[:oid,:int]; 
-       # order based on b
-       bm := algebra.markT(b,0:oid);
-       mb := bat.reverse(bm);
-       ma := algebra.leftfetchjoin(mb, a);
-       aa := bat.mirror(a);
-       maa := algebra.leftfetchjoin(mb, aa);
-       x := algebra.mark_grp(ma,g,1:oid);
+function batcalc.mark_grp{inline}( b:bat[:oid,:any_1], ord:bat[:oid,:oid], 
grp:bat[:oid,:oid], ext:bat[:oid,:oid]) :bat[:oid,:int]; 
+       # order is based on ord
+       og := algebra.leftfetchjoin(ord, grp);
+       x := algebra.mark_grp(og,ext,1:oid);
        mg := batcalc.int(x);
-       # restore the order based on a 
-       aam := bat.reverse(maa);
-       return mark_grp := algebra.leftfetchjoin(aam, mg);
+
+       # restore the order based on grp 
+       or := bat.reverse(ord);
+       gg := bat.mirror(grp);
+       go := algebra.fetchjoin(gg, or);
+       return mark_grp := algebra.leftfetchjoin(go, mg);
 end batcalc.mark_grp;
 
+function batcalc.mark_grp{inline}( b:bat[:oid,:any_1], ord:bat[:oid,:oid], 
orig:bat[:oid,:any_2]) :bat[:oid,:int]; 
+        x := algebra.markT(b,1:oid);
+        mg := batcalc.int(x);
+
+       # restore the order based on grp 
+       or := bat.reverse(ord);
+       gg := bat.mirror(orig);
+       go := algebra.fetchjoin(gg, or);
+       return mark_grp := algebra.leftfetchjoin(go, mg);
+end batcalc.mark_grp;
+
 function batcalc.mark_grp{inline}( b:bat[:oid,:any_1] ) :bat[:oid,:int]; 
-       x := algebra.markT(b,1:oid);
-       return mark_grp:= batcalc.int(x);
+        x := algebra.markT(b,1:oid);
+        return mark_grp:= batcalc.int(x);
 end batcalc.mark_grp;
 
-function batcalc.rank_grp{inline}( b:bat[:oid,:any_1], gp:bat[:oid,:oid], 
gpe:bat[:oid,:oid]) :bat[:oid,:int]; 
-       o := bat.mirror(b);
-       g := algebra.join(o, gp);
-       return rank_grp:= sql.rank_grp(b, g, gpe);
+function batcalc.rank_grp{inline}( b:bat[:oid,:any_1], ord:bat[:oid,:oid], 
grp:bat[:oid,:oid], ext:bat[:oid,:oid]) :bat[:oid,:int]; 
+       # order is based on ord
+       og := algebra.leftfetchjoin(ord, grp);
+       rg := sql.rank_grp(b, og, ext);
+
+       # restore the order based on grp 
+       or := bat.reverse(ord);
+       gg := bat.mirror(grp);
+       go := algebra.fetchjoin(gg, or);
+       return rank_grp := algebra.leftfetchjoin(go, rg);
+end batcalc.rank_grp;
+
+function batcalc.rank_grp{inline}( b:bat[:oid,:any_1], ord:bat[:oid,:oid], 
orig:bat[:oid,:any_2]) :bat[:oid,:int]; 
+       rg := sql.rank(b);
+
+       # restore the order based on grp 
+       or := bat.reverse(ord);
+       gg := bat.mirror(orig);
+       go := algebra.fetchjoin(gg, or);
+       return rank_grp := algebra.leftfetchjoin(go, rg);
 end batcalc.rank_grp;
 
 function batcalc.rank_grp{inline}( b:bat[:oid,:any_1]) :bat[:oid,:int]; 
        return rank_grp:= sql.rank(b);
 end batcalc.rank_grp;
 
-function batcalc.dense_rank_grp{inline}( b:bat[:oid,:any_1], 
gp:bat[:oid,:oid], gpe:bat[:oid,:oid]) :bat[:oid,:int]; 
-       o := bat.mirror(b);
-       g := algebra.join(o, gp);
-       return dense_rank_grp:= sql.dense_rank_grp(b, g, gpe);
+function batcalc.dense_rank_grp{inline}( b:bat[:oid,:any_1], 
ord:bat[:oid,:oid], grp:bat[:oid,:oid], ext:bat[:oid,:oid]) :bat[:oid,:int]; 
+       # order is based on ord
+       og := algebra.leftfetchjoin(ord, grp);
+       drg := sql.dense_rank_grp(b, og, ext);
+
+       # restore the order based on grp 
+       or := bat.reverse(ord);
+       gg := bat.mirror(grp);
+       go := algebra.fetchjoin(gg, or);
+       return rank_grp := algebra.leftfetchjoin(go, drg);
+end batcalc.dense_rank_grp;
+
+function batcalc.dense_rank_grp{inline}( b:bat[:oid,:any_1], 
ord:bat[:oid,:oid], orig:bat[:oid,:any_2]) :bat[:oid,:int]; 
+       drg := sql.dense_rank(b);
+
+       # restore the order based on grp 
+       or := bat.reverse(ord);
+       gg := bat.mirror(orig);
+       go := algebra.fetchjoin(gg, or);
+       return rank_grp := algebra.leftfetchjoin(go, drg);
 end batcalc.dense_rank_grp;
 
 function batcalc.dense_rank_grp{inline}( b:bat[:oid,:any_1]) :bat[:oid,:int]; 
        return dense_rank_grp:= sql.dense_rank(b);
 end batcalc.dense_rank_grp;
 
-function sql.zero_or_one{inline}( b:bat[:oid,:any_1], gp:bat[:oid,:oid], 
gpe:bat[:oid,:oid]) :bat[:oid,:any_1];
+function sql.subzero_or_one{inline}( b:bat[:oid,:any_1], gp:bat[:oid,:oid], 
gpe:bat[:oid,:oid], no_nil:int) :bat[:oid,:any_1];
        (e,g) := group.new(gp);
        m := aggr.max(e);
        c0 := calc.isnil(m);
@@ -901,7 +950,7 @@ function sql.zero_or_one{inline}( b:bat[
        msg1 := str.+(msg, ">1)");
        sql.assert(c11, msg1);
        return zero_or_one := b;
-end sql.zero_or_one;
+end sql.subzero_or_one;
 
 
 function mmath.rand{inline}( v:int ) :int;
@@ -1224,7 +1273,7 @@ sql.prelude();
 #include <str.h>
 #include "sql_privileges.h"
 #include "sql_rel2bin.h"
-#include <bin_optimizer.h>
+//#include <bin_optimizer.h>
 #include "sql_decimal.h"
 #include "sql_string.h"
 #include "sql_qc.h"
@@ -1275,6 +1324,7 @@ extern BAT *mvc_bind_idxbat(mvc *m, char
 sql5_export str SQLmvc(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str SQLtransaction(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str SQLcommit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
+sql5_export str SQLabort(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str SQLtransaction2(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str SQLcatalog(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 
@@ -1335,6 +1385,7 @@ sql5_export str SQLoctopusBind(Client cn
 sql5_export str SQLoctopusBinddbat(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 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 );
 sql5_export str dump_cache(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
@@ -1700,7 +1751,7 @@ sql_relation2stmt(mvc *c, sql_rel *r)
                if (s) {
                        /* only needed for delta tables */
                        s = rel2bin(c, s);      
-                       s = bin_optimizer(c, s);
+                       //s = bin_optimizer(c, s);
                        return s;
                }
        }
@@ -1867,6 +1918,19 @@ SQLcommit(Client cntxt, MalBlkPtr mb, Ma
 }
 
 str
+SQLabort(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       mvc *sql = NULL;
+       str msg = getSQLContext(cntxt, mb, &sql, NULL);
+       (void) stk;
+       (void) pci;
+
+       if (sql->session->active)
+               mvc_rollback(sql, 0, NULL);
+       return msg;
+}
+
+str
 SQLtransaction2(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        mvc *sql = NULL;
@@ -2420,7 +2484,7 @@ create_trigger( mvc *sql, char *sname, c
                s = cur_schema(sql);
        if (!schema_privs(sql->role_id, s)) 
                return sql_message("3F000!CREATE TRIGGER: access denied for %s 
to schema ;'%s'", stack_get_string(sql, "current_user"), s->base.name);
-       if ((tri = mvc_bind_trigger(sql, s, triggername )) != NULL) 
+       if (mvc_bind_trigger(sql, s, triggername ) != NULL) 
                return sql_message("3F000!CREATE TRIGGER: name '%s' already in 
use", triggername);
        
        if (!(t = mvc_bind_table(sql, s, tname)))
@@ -2714,6 +2778,10 @@ setVariable(Client cntxt, MalBlkPtr mb, 
        if ( strcmp("optimizer",  varname)== 0) {
                str newopt = *(str *) getArgReference(stk,pci,3);
                if ( newopt) {
+                       if ( ! isOptimizerPipe(newopt)  && 
strchr(newopt,(int)';') == 0){
+                               snprintf(buf, BUFSIZ, "optimizer '%s' unknown", 
newopt);
+                               throw(SQL, "sql.setVariable", "%s", buf);
+                       }
                        snprintf(buf,BUFSIZ,"user_%d",cntxt->idx);
                        if ( ! isOptimizerPipe(newopt) || strcmp(buf,newopt) == 
0){
                                msg = addPipeDefinition(cntxt, buf, newopt);
@@ -3055,6 +3123,7 @@ mvc_bind_wrap(Client cntxt, MalBlkPtr mb
        if (b) {
                if ( pci->argc == 8 && getArgType(mb,pci,6) == TYPE_oid){
                        /* partitioned access */
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to