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