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