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

Reply via email to