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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list