Changeset: 36590d364aaf for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=36590d364aaf
Modified Files:
        clients/Tests/exports.stable.out
        monetdb5/mal/mal.h
        monetdb5/mal/mal_instruction.c
        monetdb5/mal/mal_instruction.h
        monetdb5/optimizer/opt_constants.c
        monetdb5/optimizer/opt_mitosis.c
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        sql/backends/monet5/sql_optimizer.c
        sql/test/mergetables/Tests/mergequery.stable.out
        sql/test/remote/Tests/partition_elim.stable.out
Branch: default
Log Message:

Move the mitosis property to MAL instruction records


diffs (truncated from 1330 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
@@ -2342,7 +2342,6 @@ char monet_characteristics[PATHLENGTH];
 char monet_cwd[PATHLENGTH];
 size_t monet_memory;
 void moveInstruction(MalBlkPtr mb, int pc, int target);
-int mtProp;
 str mtimeRef;
 str mulRef;
 str multicolumnRef;
diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h
--- a/monetdb5/mal/mal.h
+++ b/monetdb5/mal/mal.h
@@ -178,6 +178,7 @@ typedef struct {
        int pc;                                         /* location in MAL plan 
for profiler*/
        MALfcn fcn;                                     /* resolved function 
address */
        struct MALBLK *blk;                     /* resolved MAL function 
address */
+       int mitosis;                            /* old mtProp value */
        /* inline statistics */
        struct timeval clock;           /* when the last call was started */
        lng ticks;                                      /* total micro seconds 
spent in last call */
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
@@ -480,6 +480,7 @@ newInstruction(MalBlkPtr mb, int kind)
        p->recycle = 0;
        p->argc = 1;
        p->retc = 1;
+       p->mitosis = -1;
        p->argv[0] = -1;                        /* watch out for direct use in 
variable table */
        /* Flow of control instructions are always marked as an assignment
         * with modifier */
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
@@ -95,6 +95,10 @@
 
 #define setRowCnt(M,I,C)       (M)->var[I]->rowcnt = C
 #define getRowCnt(M,I)         ((M)->var[I]->rowcnt)
+
+#define setMitosisPartition(P,C)       (P)->mitosis = C
+#define getMitosisPartition(P)         ((P)->mitosis)
+
 #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/opt_constants.c 
b/monetdb5/optimizer/opt_constants.c
--- a/monetdb5/optimizer/opt_constants.c
+++ b/monetdb5/optimizer/opt_constants.c
@@ -56,6 +56,7 @@ OPTconstantsImplementation(Client cntxt,
                        for( k= n-1; k>=0; k--){
                                y= cst[k];
                                if ( x->type == y->type &&
+                                        x->rowcnt == y->rowcnt &&
                                         x->value.vtype == y->value.vtype &&
                                        ATOMcmp(x->value.vtype, 
VALptr(&x->value), VALptr(&y->value)) == 0){
                                        OPTDEBUGconstants {
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
@@ -29,19 +29,6 @@ eligible(MalBlkPtr mb)
        return 1;
 }
 
-static int
-getVarMergeTableId(MalBlkPtr mb, int v)
-{
-       VarPtr p = varGetProp(mb, v, mtProp);
-
-       if (!p)
-               return -1;
-       if (p->value.vtype == TYPE_int)
-               return p->value.val.ival;
-       return -1;
-}
-
-
 /* The plans are marked with the concurrent user load.
  *  * If this has changed, we may want to recompile the query
  *   */
@@ -190,7 +177,6 @@ OPTmitosisImplementation(Client cntxt, M
 
        schema = getVarConstant(mb, getArg(target, 2)).val.sval;
        table = getVarConstant(mb, getArg(target, 3)).val.sval;
-       mt = getVarMergeTableId(mb, getArg(target, 0));
        for (i = 0; i < limit; i++) {
                int upd = 0, qtpe, rtpe = 0, qv, rv;
                InstrPtr matq, matr = NULL;
@@ -216,12 +202,14 @@ OPTmitosisImplementation(Client cntxt, M
                }
                if (p->retc == 2)
                        upd = 1;
+               if( mt == -1)
+                       mt = getMitosisPartition(p);
                if (mt < 0 && (strcmp(schema, getVarConstant(mb, getArg(p, 2 + 
upd)).val.sval) ||
                               strcmp(table, getVarConstant(mb, getArg(p, 3 + 
upd)).val.sval))) {
                        pushInstruction(mb, p);
                        continue;
                }
-               if (mt >= 0 && getVarMergeTableId(mb, getArg(p, 0)) != mt) {
+               if (mt >= 0 && getMitosisPartition(p) != mt) {
                        pushInstruction(mb, p);
                        continue;
                }
diff --git a/monetdb5/optimizer/opt_prelude.c b/monetdb5/optimizer/opt_prelude.c
--- a/monetdb5/optimizer/opt_prelude.c
+++ b/monetdb5/optimizer/opt_prelude.c
@@ -235,7 +235,6 @@ int unsafeProp;
 
 int horiginProp;               /* original oid source */
 int toriginProp;               /* original oid source */
-int mtProp;
 
 void optimizerInit(void)
 {
@@ -459,7 +458,6 @@ void optimizerInit(void)
 
        horiginProp = PropertyIndex("horigin");
        toriginProp = PropertyIndex("torigin");
-       mtProp = PropertyIndex("mergetable");
        /*
         * Set the optimizer debugging flag
         */
diff --git a/monetdb5/optimizer/opt_prelude.h b/monetdb5/optimizer/opt_prelude.h
--- a/monetdb5/optimizer/opt_prelude.h
+++ b/monetdb5/optimizer/opt_prelude.h
@@ -235,5 +235,4 @@ opt_export int unsafeProp;          /* binary */
 
 opt_export int horiginProp;            /* original oid source */
 opt_export int toriginProp;            /* original oid source */
-opt_export int mtProp;         
 #endif
diff --git a/sql/backends/monet5/sql_optimizer.c 
b/sql/backends/monet5/sql_optimizer.c
--- a/sql/backends/monet5/sql_optimizer.c
+++ b/sql/backends/monet5/sql_optimizer.c
@@ -69,7 +69,6 @@ static void SQLgetStatistics(Client cntx
        for (i = 0; i < oldtop; i++) {
                InstrPtr p = old[i];
                char *f = getFunctionId(p);
-               ValRecord vr;
 
                if (getModuleId(p) == sqlRef && f == tidRef) {
                        char *sname = getVarConstant(mb, getArg(p, 2)).val.sval;
@@ -85,9 +84,8 @@ static void SQLgetStatistics(Client cntx
                        t = mvc_bind_table(m, s, tname);
 
                        if (t && (!isRemote(t) && !isMergeTable(t)) && t->p) {
-                               int k = getArg(p, 0), mt_member = t->p->base.id;
-
-                               varSetProp(mb, k, mtProp, op_eq, VALset(&vr, 
TYPE_int, &mt_member));
+                               int mt_member = t->p->base.id;
+                               setMitosisPartition(p,mt_member);
                        }
                }
                if (getModuleId(p) == sqlRef && (f == bindRef || f == 
bindidxRef)) {
@@ -146,7 +144,7 @@ static void SQLgetStatistics(Client cntx
                        if (rows > 1 && mode != RD_INS)
                                setRowCnt(mb,k,rows);
                        if (mt_member && mode != RD_INS)
-                               varSetProp(mb, k, mtProp, op_eq, VALset(&vr, 
TYPE_int, &mt_member));
+                               setMitosisPartition(p,mt_member);
 
                        pushInstruction(mb, p);
                } else {
diff --git a/sql/test/mergetables/Tests/mergequery.stable.out 
b/sql/test/mergetables/Tests/mergequery.stable.out
--- a/sql/test/mergetables/Tests/mergequery.stable.out
+++ b/sql/test/mergetables/Tests/mergequery.stable.out
@@ -91,195 +91,195 @@ Ready.
 % 130 # length
 function user.s13_1{autoCommit=true}(A0:dbl,A1:dbl):void;
     X_44:void := querylog.define("explain insert into answ\nselect * from 
complete where x>=1.0 and x <=2.0;","default_pipe",195);
-barrier X_271 := language.dataflow();
+barrier X_269 := language.dataflow();
     X_4 := sql.mvc();
     X_5:bat[:oid,:dbl]  := bat.new(nil:oid,nil:dbl);
-    X_64:bat[:oid,:dbl] := sql.bind(X_4,"sys","part1","x",0,0,4);
-    X_59:bat[:oid,:oid] := sql.tid(X_4,"sys","part1",0,4);
+    X_62:bat[:oid,:dbl] := sql.bind(X_4,"sys","part1","x",0,0,4);
+    X_57:bat[:oid,:oid] := sql.tid(X_4,"sys","part1",0,4);
+    X_143 := algebra.subselect(X_62,X_57,A0,A1,true,true,false);
+    (X_66:bat[:oid,:oid],X_67:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part1","x",2,0,4);
+    X_147 := algebra.subselect(X_67,nil:bat[:oid,:oid],A0,A1,true,true,false);
+    X_157 := sql.subdelta(X_143,X_57,X_66,X_147);
+    X_161 := sql.projectdelta(X_157,X_62,X_66,X_67);
+    X_63:bat[:oid,:dbl] := sql.bind(X_4,"sys","part1","x",0,1,4);
+    X_58:bat[:oid,:oid] := sql.tid(X_4,"sys","part1",1,4);
+    X_144 := algebra.subselect(X_63,X_58,A0,A1,true,true,false);
+    (X_68:bat[:oid,:oid],X_69:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part1","x",2,1,4);
+    X_150 := algebra.subselect(X_69,nil:bat[:oid,:oid],A0,A1,true,true,false);
+    X_158 := sql.subdelta(X_144,X_58,X_68,X_150);
+    X_162 := sql.projectdelta(X_158,X_63,X_68,X_69);
+    X_64:bat[:oid,:dbl] := sql.bind(X_4,"sys","part1","x",0,2,4);
+    X_59:bat[:oid,:oid] := sql.tid(X_4,"sys","part1",2,4);
     X_145 := algebra.subselect(X_64,X_59,A0,A1,true,true,false);
-    (X_68:bat[:oid,:oid],X_69:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part1","x",2,0,4);
-    X_149 := algebra.subselect(X_69,nil:bat[:oid,:oid],A0,A1,true,true,false);
-    X_159 := sql.subdelta(X_145,X_59,X_68,X_149);
-    X_163 := sql.projectdelta(X_159,X_64,X_68,X_69);
-    X_65:bat[:oid,:dbl] := sql.bind(X_4,"sys","part1","x",0,1,4);
-    X_60:bat[:oid,:oid] := sql.tid(X_4,"sys","part1",1,4);
-    X_146 := algebra.subselect(X_65,X_60,A0,A1,true,true,false);
-    (X_70:bat[:oid,:oid],X_71:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part1","x",2,1,4);
-    X_152 := algebra.subselect(X_71,nil:bat[:oid,:oid],A0,A1,true,true,false);
-    X_160 := sql.subdelta(X_146,X_60,X_70,X_152);
-    X_164 := sql.projectdelta(X_160,X_65,X_70,X_71);
-    X_66:bat[:oid,:dbl] := sql.bind(X_4,"sys","part1","x",0,2,4);
-    X_61:bat[:oid,:oid] := sql.tid(X_4,"sys","part1",2,4);
-    X_147 := algebra.subselect(X_66,X_61,A0,A1,true,true,false);
-    (X_72:bat[:oid,:oid],X_73:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part1","x",2,2,4);
-    X_155 := algebra.subselect(X_73,nil:bat[:oid,:oid],A0,A1,true,true,false);
-    X_161 := sql.subdelta(X_147,X_61,X_72,X_155);
-    X_165 := sql.projectdelta(X_161,X_66,X_72,X_73);
-    X_67:bat[:oid,:dbl] := sql.bind(X_4,"sys","part1","x",0,3,4);
-    X_63:bat[:oid,:oid] := sql.tid(X_4,"sys","part1",3,4);
-    X_148 := algebra.subselect(X_67,X_63,A0,A1,true,true,false);
-    (X_74:bat[:oid,:oid],X_75:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part1","x",2,3,4);
-    X_158 := algebra.subselect(X_75,nil:bat[:oid,:oid],A0,A1,true,true,false);
+    (X_70:bat[:oid,:oid],X_71:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part1","x",2,2,4);
+    X_153 := algebra.subselect(X_71,nil:bat[:oid,:oid],A0,A1,true,true,false);
+    X_159 := sql.subdelta(X_145,X_59,X_70,X_153);
+    X_163 := sql.projectdelta(X_159,X_64,X_70,X_71);
+    X_65:bat[:oid,:dbl] := sql.bind(X_4,"sys","part1","x",0,3,4);
+    X_61:bat[:oid,:oid] := sql.tid(X_4,"sys","part1",3,4);
+    X_146 := algebra.subselect(X_65,X_61,A0,A1,true,true,false);
+    (X_72:bat[:oid,:oid],X_73:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part1","x",2,3,4);
+    X_156 := algebra.subselect(X_73,nil:bat[:oid,:oid],A0,A1,true,true,false);
     X_13:bat[:oid,:dbl]  := sql.bind(X_4,"sys","part1","x",1);
-    C_56 := algebra.subselect(X_13,X_63,A0,A1,true,true,false);
-    X_162 := sql.subdelta(X_148,X_63,X_74,X_158,C_56);
-    X_166 := sql.projectdelta(X_162,X_67,X_74,X_75,X_13);
-    X_212 := mat.packIncrement(X_163,4);
-    X_213 := mat.packIncrement(X_212,X_164);
-    X_214 := mat.packIncrement(X_213,X_165);
-    X_16 := mat.packIncrement(X_214,X_166);
+    C_54 := algebra.subselect(X_13,X_61,A0,A1,true,true,false);
+    X_160 := sql.subdelta(X_146,X_61,X_72,X_156,C_54);
+    X_164 := sql.projectdelta(X_160,X_65,X_72,X_73,X_13);
+    X_210 := mat.packIncrement(X_161,4);
+    X_211 := mat.packIncrement(X_210,X_162);
+    X_212 := mat.packIncrement(X_211,X_163);
+    X_16 := mat.packIncrement(X_212,X_164);
     X_17 := bat.append(X_5,X_16,true);
-    X_80:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,0,4);
-    X_76:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",0,4);
+    X_78:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,0,4);
+    X_74:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",0,4);
+    X_165 := algebra.subselect(X_78,X_74,A0,A1,true,true,false);
+    (X_82:bat[:oid,:oid],X_83:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part2","x",2,0,4);
+    X_171 := algebra.subselect(X_83,nil:bat[:oid,:oid],A0,A1,true,true,false);
+    X_175 := sql.subdelta(X_165,X_74,X_82,X_171);
+    X_185 := sql.projectdelta(X_175,X_78,X_82,X_83);
+    X_79:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,1,4);
+    X_75:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",1,4);
+    X_166 := algebra.subselect(X_79,X_75,A0,A1,true,true,false);
+    (X_84:bat[:oid,:oid],X_85:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part2","x",2,1,4);
+    X_172 := algebra.subselect(X_85,nil:bat[:oid,:oid],A0,A1,true,true,false);
+    X_178 := sql.subdelta(X_166,X_75,X_84,X_172);
+    X_186 := sql.projectdelta(X_178,X_79,X_84,X_85);
+    X_80:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,2,4);
+    X_76:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",2,4);
     X_167 := algebra.subselect(X_80,X_76,A0,A1,true,true,false);
-    (X_84:bat[:oid,:oid],X_85:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part2","x",2,0,4);
-    X_173 := algebra.subselect(X_85,nil:bat[:oid,:oid],A0,A1,true,true,false);
-    X_177 := sql.subdelta(X_167,X_76,X_84,X_173);
-    X_187 := sql.projectdelta(X_177,X_80,X_84,X_85);
-    X_81:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,1,4);
-    X_77:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",1,4);
+    (X_86:bat[:oid,:oid],X_87:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part2","x",2,2,4);
+    X_173 := algebra.subselect(X_87,nil:bat[:oid,:oid],A0,A1,true,true,false);
+    X_181 := sql.subdelta(X_167,X_76,X_86,X_173);
+    X_187 := sql.projectdelta(X_181,X_80,X_86,X_87);
+    X_81:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,3,4);
+    X_77:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",3,4);
     X_168 := algebra.subselect(X_81,X_77,A0,A1,true,true,false);
-    (X_86:bat[:oid,:oid],X_87:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part2","x",2,1,4);
-    X_174 := algebra.subselect(X_87,nil:bat[:oid,:oid],A0,A1,true,true,false);
-    X_180 := sql.subdelta(X_168,X_77,X_86,X_174);
-    X_188 := sql.projectdelta(X_180,X_81,X_86,X_87);
-    X_82:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,2,4);
-    X_78:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",2,4);
-    X_169 := algebra.subselect(X_82,X_78,A0,A1,true,true,false);
-    (X_88:bat[:oid,:oid],X_89:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part2","x",2,2,4);
-    X_175 := algebra.subselect(X_89,nil:bat[:oid,:oid],A0,A1,true,true,false);
-    X_183 := sql.subdelta(X_169,X_78,X_88,X_175);
-    X_189 := sql.projectdelta(X_183,X_82,X_88,X_89);
-    X_83:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,3,4);
-    X_79:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",3,4);
-    X_170 := algebra.subselect(X_83,X_79,A0,A1,true,true,false);
-    (X_90:bat[:oid,:oid],X_91:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part2","x",2,3,4);
-    X_176 := algebra.subselect(X_91,nil:bat[:oid,:oid],A0,A1,true,true,false);
+    (X_88:bat[:oid,:oid],X_89:bat[:oid,:dbl]) := 
sql.bind(X_4,"sys","part2","x",2,3,4);
+    X_174 := algebra.subselect(X_89,nil:bat[:oid,:oid],A0,A1,true,true,false);
     X_19:bat[:oid,:dbl]  := sql.bind(X_4,"sys","part2","x",1);
-    C_57 := algebra.subselect(X_19,X_79,A0,A1,true,true,false);
-    X_186 := sql.subdelta(X_170,X_79,X_90,X_176,C_57);
-    X_190 := sql.projectdelta(X_186,X_83,X_90,X_91,X_19);
-    X_216 := mat.packIncrement(X_187,4);
-    X_217 := mat.packIncrement(X_216,X_188);
-    X_218 := mat.packIncrement(X_217,X_189);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to