Changeset: 12ec87aa18e1 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=12ec87aa18e1 Modified Files: clients/Tests/exports.stable.out monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out monetdb5/mal/mal.h monetdb5/mal/mal_instruction.c monetdb5/mal/mal_instruction.h monetdb5/optimizer/Tests/All monetdb5/optimizer/Tests/dataflow.mal monetdb5/optimizer/Tests/dataflow.stable.out monetdb5/optimizer/opt_costModel.c monetdb5/optimizer/opt_mitosis.c monetdb5/optimizer/opt_support.c monetdb5/optimizer/opt_support.h sql/backends/monet5/sql_optimizer.c sql/benchmarks/ssbm/Tests/04-explain.stable.out sql/benchmarks/ssbm/Tests/04-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/05-explain.stable.out sql/benchmarks/ssbm/Tests/05-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/06-explain.stable.out sql/benchmarks/ssbm/Tests/06-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/07-explain.stable.out sql/benchmarks/ssbm/Tests/07-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/08-explain.stable.out sql/benchmarks/ssbm/Tests/08-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/09-explain.stable.out sql/benchmarks/ssbm/Tests/09-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/10-explain.stable.out sql/benchmarks/ssbm/Tests/10-explain.stable.out.int128 sql/benchmarks/tpch/Tests/01-explain.stable.out sql/benchmarks/tpch/Tests/01-explain.stable.out.32bit sql/benchmarks/tpch/Tests/01-explain.stable.out.int128 sql/benchmarks/tpch/Tests/02-explain.stable.out sql/benchmarks/tpch/Tests/03-explain.stable.out sql/benchmarks/tpch/Tests/03-explain.stable.out.int128 sql/benchmarks/tpch/Tests/05-explain.stable.out sql/benchmarks/tpch/Tests/05-explain.stable.out.32bit sql/benchmarks/tpch/Tests/05-explain.stable.out.int128 sql/benchmarks/tpch/Tests/06-explain.stable.out.int128 sql/benchmarks/tpch/Tests/08-explain.stable.out.int128 sql/benchmarks/tpch/Tests/09-explain.stable.out.int128 sql/benchmarks/tpch/Tests/10-explain.stable.out sql/benchmarks/tpch/Tests/10-explain.stable.out.int128 sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.int128 sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out sql/test/BugTracker-2015/Tests/useless_casts.Bug-3756.stable.out sql/test/BugTracker/Tests/explain.SF-1739353.stable.out sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out sql/test/mergetables/Tests/mergequery.stable.out sql/test/remote/Tests/partition_elim.stable.out Branch: default Log Message:
Move the rowcnt property to the variable record diffs (truncated from 3656 to 300 lines): diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -2159,7 +2159,6 @@ int getTypeIndex(str nme, int len, int d str getTypeName(malType tpe); lng getUserTime(void); str getVarName(MalBlkPtr mb, int i); -wrd getVarRows(MalBlkPtr mb, int v); lng getVolume(MalStkPtr stk, InstrPtr pci, int rd); int getWrdConstant(MalBlkPtr mb, wrd val); MalBlkPtr gotoMalBlkMarker(MalBlkPtr mb, str marker); diff --git a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err --- a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err +++ b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err @@ -30,16 +30,16 @@ stderr of test 'opt_sql_append` in direc # 22:58:57 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=rome" "--port=36275" # 22:58:57 > -MAPI = (monetdb) /var/tmp/mtest-21015/.s.monetdb.39072 +MAPI = (monetdb) /var/tmp/mtest-2532/.s.monetdb.37557 QUERY = explain copy into ttt from '\tmp/xyz'; ERROR = !COPY INTO: filename must have absolute path: \tmp/xyz -MAPI = (monetdb) /var/tmp/mtest-21015/.s.monetdb.39072 +MAPI = (monetdb) /var/tmp/mtest-2532/.s.monetdb.37557 QUERY = explain copy into ttt from 'a:\tmp/xyz'; ERROR = !COPY INTO: filename must have absolute path: a:\tmp/xyz -MAPI = (monetdb) /var/tmp/mtest-21015/.s.monetdb.39072 +MAPI = (monetdb) /var/tmp/mtest-2532/.s.monetdb.37557 QUERY = explain copy into ttt from '\tmp/xyz'; ERROR = !COPY INTO: filename must have absolute path: \tmp/xyz -MAPI = (monetdb) /var/tmp/mtest-21015/.s.monetdb.39072 +MAPI = (monetdb) /var/tmp/mtest-2532/.s.monetdb.37557 QUERY = explain copy into ttt from 'Z:/tmp/xyz'; ERROR = !COPY INTO: filename must have absolute path: Z:/tmp/xyz diff --git a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out --- a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out +++ b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out @@ -64,10 +64,10 @@ Ready. % 133 # length function user.s4_1{autoCommit=true}():void; X_25:void := querylog.define("explain copy into ttt from \\'/tmp/xyz\\';","default_pipe",12); -barrier X_34 := language.dataflow(); +barrier X_35 := language.dataflow(); X_2 := sql.mvc(); (X_12:bat[:oid,:int],X_13:bat[:oid,:int],X_14:bat[:oid,:int]) := sql.copy_from(nil,"|","\\n",nil:str,"null","/tmp/xyz",-1,0,0,0); -exit X_34; +exit X_35; X_15 := sql.append(X_2,"sys","ttt","a",X_12); X_19 := sql.append(X_15,"sys","ttt","b",X_13); X_21 := sql.append(X_19,"sys","ttt","c",X_14); @@ -98,10 +98,10 @@ end user.s4_1; % 133 # length function user.s12_1{autoCommit=true}():void; X_25:void := querylog.define("explain copy into ttt from \\'/tmp/xyz\\';","user_1",12); -barrier X_35 := language.dataflow(); +barrier X_36 := language.dataflow(); X_2 := sql.mvc(); (X_12:bat[:oid,:int],X_13:bat[:oid,:int],X_14:bat[:oid,:int]) := sql.copy_from(nil,"|","\\n",nil:str,"null","/tmp/xyz",-1,0,0,0); -exit X_35; +exit X_36; X_15 := sql.append(X_2,"sys","ttt","a",X_12); X_19 := sql.append(X_15,"sys","ttt","b",X_13); X_23 := aggr.count(X_14); diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h --- a/monetdb5/mal/mal.h +++ b/monetdb5/mal/mal.h @@ -155,6 +155,7 @@ typedef struct VARRECORD { ValRecord value; int eolife; /* pc index when it should be garbage collected */ int worker; /* tread id of last worker producing it */ + BUN rowcnt; /* estimated row count*/ int propc, maxprop; /* proc count and max number of properties */ int prps[FLEXIBLE_ARRAY_MEMBER]; /* property array */ } *VarPtr, VarRecord; diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c --- a/monetdb5/mal/mal_instruction.c +++ b/monetdb5/mal/mal_instruction.c @@ -929,6 +929,7 @@ newVariable(MalBlkPtr mb, str name, malT mb->var[n]->propc = 0; mb->var[n]->maxprop = MAXARG; + setRowCnt(mb,n,0); setVarType(mb, n, type); clrVarFixed(mb, n); clrVarUsed(mb, n); @@ -1065,6 +1066,7 @@ copyProperties(MalBlkPtr mb, int src, in mb->var[dst] = w; w->maxprop = v->maxprop; } + w->rowcnt = v->rowcnt; w->propc = v->propc; for ( i= 0; i< v->propc; i++) w->prps[i] = v->prps[i]; @@ -1084,6 +1086,7 @@ copyVariable(MalBlkPtr dst, VarPtr v) w->type = v->type; w->flags = v->flags; w->tmpindex = v->tmpindex; + w->rowcnt = v->rowcnt; w->propc = v->propc; w->maxprop = v->maxprop; for (i = 0; i < v->propc; i++) @@ -1134,6 +1137,7 @@ clearVariable(MalBlkPtr mb, int varid) v->type = 0; v->flags = 0; v->tmpindex = 0; + v->rowcnt = 0; v->propc = 0; v->eolife = 0; } diff --git a/monetdb5/mal/mal_instruction.h b/monetdb5/mal/mal_instruction.h --- a/monetdb5/mal/mal_instruction.h +++ b/monetdb5/mal/mal_instruction.h @@ -93,6 +93,8 @@ #define getVarConstant(M,I) ((M)->var[I]->value) #define getVarValue(M,I) VALget(&(M)->var[I]->value) +#define setRowCnt(M,I,C) (M)->var[I]->rowcnt = C +#define getRowCnt(M,I) ((M)->var[I]->rowcnt) #define getDestVar(P) (P)->argv[0] #define setDestVar(P,X) (P)->argv[0] =X #define setDestType(M,P,V) setVarType((M),getDestVar(P),V) diff --git a/monetdb5/optimizer/Tests/All b/monetdb5/optimizer/Tests/All --- a/monetdb5/optimizer/Tests/All +++ b/monetdb5/optimizer/Tests/All @@ -59,7 +59,7 @@ joinchain ifthencst #CXerror1 transaction primitives removed #the remainder are snippets used in the reference manual -CMexample +#CMexample rowcount is only set by SQL optimizer #CRexample push range optimizer is out of date ARexample DCexample diff --git a/monetdb5/optimizer/Tests/dataflow.mal b/monetdb5/optimizer/Tests/dataflow.mal --- a/monetdb5/optimizer/Tests/dataflow.mal +++ b/monetdb5/optimizer/Tests/dataflow.mal @@ -9,7 +9,6 @@ h:= l; #mdb.setTimer(true); #mdb.setThread(true); z:= nil:bat[:oid,:oid]; -barrier go:= language.dataflow(); t1:= algebra.subselect(s,l,h,true,true,false); t2:= algebra.subselect(s,l,h,true,true,false); t3:= algebra.subselect(s,l,h,true,true,false); @@ -19,7 +18,6 @@ barrier go:= language.dataflow(); t7:= algebra.subselect(s,l,h,true,true,false); t8:= algebra.subselect(s,l,h,true,true,false); z:= mat.pack(t1,t2,t3,t4,t5,t6,t7,t8); -exit go; mdb.var(); c:= aggr.count(z); io.print(c); diff --git a/monetdb5/optimizer/Tests/dataflow.stable.out b/monetdb5/optimizer/Tests/dataflow.stable.out --- a/monetdb5/optimizer/Tests/dataflow.stable.out +++ b/monetdb5/optimizer/Tests/dataflow.stable.out @@ -24,7 +24,6 @@ function user.tst():void; #mdb.setTimer(true); #mdb.setThread(true); z := nil:bat[:oid,:oid]; -barrier go := language.dataflow(); t1 := algebra.subselect(s,l,h,true,true,false); t2 := algebra.subselect(s,l,h,true,true,false); t3 := algebra.subselect(s,l,h,true,true,false); @@ -34,7 +33,6 @@ barrier go := language.dataflow(); t7 := algebra.subselect(s,l,h,true,true,false); t8 := algebra.subselect(s,l,h,true,true,false); z := mat.pack(t1,t2,t3,t4,t5,t6,t7,t8); -exit go; mdb.var(); c := aggr.count(z); io.print(c); @@ -51,23 +49,23 @@ function user.tst():void; h:int := l:int; #[3] 6 <- 5 #mdb.setTimer(true); #mdb.setThread(true); - z:bat[:oid,:oid] := nil:bat[:oid,:oid]; #[6] 9 <- 10 -barrier go:bit := language.dataflow(); #[7] MALstartDataflow 11 - t1:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[8] ALGsubselect1 12 <- 1 5 6 13 14 15 - t2:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[9] ALGsubselect1 16 <- 1 5 6 13 13 15 - t3:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[10] ALGsubselect1 17 <- 1 5 6 13 13 15 - t4:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[11] ALGsubselect1 18 <- 1 5 6 13 13 15 - t5:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[12] ALGsubselect1 19 <- 1 5 6 13 13 15 - t6:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[13] ALGsubselect1 20 <- 1 5 6 13 13 15 - t7:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[14] ALGsubselect1 21 <- 1 5 6 13 13 15 - t8:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[15] ALGsubselect1 22 <- 1 5 6 13 13 15 - z:bat[:oid,:oid] := mat.pack(t1:bat[:oid,:oid],t2:bat[:oid,:oid],t3:bat[:oid,:oid],t4:bat[:oid,:oid],t5:bat[:oid,:oid],t6:bat[:oid,:oid],t7:bat[:oid,:oid],t8:bat[:oid,:oid]); #[16] MATpack 9 <- 12 16 17 18 19 20 21 22 -exit go:bit; #[17] 11 - s:bat[:oid,:int] := nil:bat[:oid,:int]; #[18] 1 <- 29 - mdb.var(); #[19] MDBvar 23 - c:wrd := aggr.count(z:bat[:oid,:oid]); #[20] ALGcount_bat 24 <- 9 - io.print(c:wrd); #[21] IOprint_val 25 <- 24 - io.print("done":str); #[22] IOprint_val 26 <- 27 +barrier X_28:bit := language.dataflow(); #[6] MALstartDataflow 28 + z:bat[:oid,:oid] := nil:bat[:oid,:oid]; #[7] 9 <- 10 + t1:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[8] ALGsubselect1 11 <- 1 5 6 12 13 14 + t2:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[9] ALGsubselect1 15 <- 1 5 6 12 12 14 + t3:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[10] ALGsubselect1 16 <- 1 5 6 12 12 14 + t4:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[11] ALGsubselect1 17 <- 1 5 6 12 12 14 + t5:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[12] ALGsubselect1 18 <- 1 5 6 12 12 14 + t6:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[13] ALGsubselect1 19 <- 1 5 6 12 12 14 + t7:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[14] ALGsubselect1 20 <- 1 5 6 12 12 14 + t8:bat[:oid,:oid] := algebra.subselect(s:bat[:oid,:int],l:int,h:int,true:bit,true:bit,false:bit); #[15] ALGsubselect1 21 <- 1 5 6 12 12 14 + language.pass(s:bat[:oid,:int]); #[16] MALpass 27 <- 1 +exit X_28:bit; #[17] 28 + z:bat[:oid,:oid] := mat.pack(t1:bat[:oid,:oid],t2:bat[:oid,:oid],t3:bat[:oid,:oid],t4:bat[:oid,:oid],t5:bat[:oid,:oid],t6:bat[:oid,:oid],t7:bat[:oid,:oid],t8:bat[:oid,:oid]); #[18] MATpack 9 <- 11 15 16 17 18 19 20 21 + mdb.var(); #[19] MDBvar 22 + c:wrd := aggr.count(z:bat[:oid,:oid]); #[20] ALGcount_bat 23 <- 9 + io.print(c:wrd); #[21] IOprint_val 24 <- 23 + io.print("done":str); #[22] IOprint_val 25 <- 26 end user.tst; #[23] #Stack 'tst' size=32 top=27 #[1] s = nil :bat[:oid,:int] eolife=18 diff --git a/monetdb5/optimizer/opt_costModel.c b/monetdb5/optimizer/opt_costModel.c --- a/monetdb5/optimizer/opt_costModel.c +++ b/monetdb5/optimizer/opt_costModel.c @@ -14,8 +14,8 @@ */ #define newRows(W,X,Y,Z) {\ ValRecord v;\ - c1 = getVarRows(mb, getArg(p,W));\ - c2 = getVarRows(mb, getArg(p,X));\ + c1 = getRowCnt(mb, getArg(p,W));\ + c2 = getRowCnt(mb, getArg(p,X));\ if (c1 == -1 || c2 == -1) \ continue;\ k = (Y);\ @@ -132,7 +132,7 @@ OPTcostModelImplementation(Client cntxt, } } else if( p->token == ASSIGNsymbol && p->argc== 2){ /* copy the rows property */ - c1 = getVarRows(mb, getArg(p,1)); + c1 = getRowCnt(mb, getArg(p,1)); if (c1 != -1) { ValRecord v; diff --git a/monetdb5/optimizer/opt_mitosis.c b/monetdb5/optimizer/opt_mitosis.c --- a/monetdb5/optimizer/opt_mitosis.c +++ b/monetdb5/optimizer/opt_mitosis.c @@ -105,7 +105,7 @@ OPTmitosisImplementation(Client cntxt, M * table and passes them on as a row property. All pieces for a * single subplan should ideally fit together. */ - r = getVarRows(mb, getArg(p, 0)); + r = getRowCnt(mb, getArg(p, 0)); if (r >= rowcnt) { /* the rowsize depends on the column types, assume void-headed */ row_size = ATOMsize(getColumnType(getArgType(mb,p,0))); diff --git a/monetdb5/optimizer/opt_support.c b/monetdb5/optimizer/opt_support.c --- a/monetdb5/optimizer/opt_support.c +++ b/monetdb5/optimizer/opt_support.c @@ -789,35 +789,4 @@ isOptimizerEnabled(MalBlkPtr mb, str opt } return 0; } -wrd -getVarRows(MalBlkPtr mb, int v) -{ - VarPtr p = varGetProp(mb, v, rowsProp); - if (!p) - return -1; - if (p->value.vtype == TYPE_wrd -#if SIZEOF_BUN <= SIZEOF_WRD - && p->value.val.wval <= (wrd) BUN_MAX -#endif - ) - return p->value.val.wval; - if (p->value.vtype == TYPE_lng -#if SIZEOF_BUN <= SIZEOF_LNG - && p->value.val.lval <= (lng) BUN_MAX -#endif - ) - return (wrd)p->value.val.lval; - if (p->value.vtype == TYPE_int -#if SIZEOF_BUN <= SIZEOF_INT - && p->value.val.ival <= (int) BUN_MAX -#endif - ) - return p->value.val.ival; - if (p->value.vtype == TYPE_sht) - return p->value.val.shval; - if (p->value.vtype == TYPE_bte) - return p->value.val.btval; - return -1; -} - diff --git a/monetdb5/optimizer/opt_support.h b/monetdb5/optimizer/opt_support.h --- a/monetdb5/optimizer/opt_support.h +++ b/monetdb5/optimizer/opt_support.h @@ -113,7 +113,6 @@ opt_export int isSubJoin(InstrPtr q); opt_export int isMultiplex(InstrPtr q); opt_export int isOptimizerEnabled(MalBlkPtr mb, str opt); opt_export str OPTsetDebugStr(void *ret, str *nme); -opt_export wrd getVarRows(MalBlkPtr mb, int v); #endif /* _OPT_SUPPORT_H */ diff --git a/sql/backends/monet5/sql_optimizer.c b/sql/backends/monet5/sql_optimizer.c --- a/sql/backends/monet5/sql_optimizer.c _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list