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