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