Changeset: f7f82d51fd77 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f7f82d51fd77
Modified Files:
sql/backends/monet5/sql_optimizer.c
sql/test/mergetables/Tests/mergequery.stable.out
Branch: default
Log Message:
also mark tid statements as part of merge tables
diffs (truncated from 738 to 300 lines):
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
@@ -109,9 +109,28 @@ SQLgetStatistics(Client cntxt, mvc *m, M
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;
+ char *tname = getVarConstant(mb, getArg(p, 3)).val.sval;
+ sql_schema *s = mvc_bind_schema(m, sname);
+ sql_table *t;
+
+ if (!s || strcmp(s->base.name, dt_schema) == 0) {
+ pushInstruction(mb, p);
+ continue;
+ }
+
+ t = mvc_bind_table(m, s, tname);
+ /* skip alter on remote statements */
+ 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));
+ }
+ }
if (getModuleId(p) == sqlRef && (f == bindRef || f ==
bindidxRef)) {
- ValRecord vr;
int upd = (p->argc == 7 || p->argc == 9);
char *sname = getVarConstant(mb, getArg(p, 2 +
upd)).val.sval;
char *tname = getVarConstant(mb, getArg(p, 3 +
upd)).val.sval;
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
@@ -90,135 +90,199 @@ Ready.
% clob # type
% 110 # length
function user.s13_1{autoCommit=true}(A0:dbl,A1:dbl):void;
-barrier X_204 := language.dataflow();
+barrier X_295 := language.dataflow();
X_4 := sql.mvc();
X_5:bat[:oid,:dbl] := bat.new(nil:oid,nil:dbl);
- X_11:bat[:oid,:dbl] := sql.bind(X_4,"sys","part1","x",0);
- X_8:bat[:oid,:oid] := sql.tid(X_4,"sys","part1");
- X_85 := algebra.subselect(X_11,X_8,A0,A1,true,true,false);
- (X_14,r1_14) := sql.bind(X_4,"sys","part1","x",2);
- X_86 := algebra.subselect(r1_14,nil:bat[:oid,:oid],A0,A1,true,true,false);
- X_17:bat[:oid,:dbl] := sql.bind(X_4,"sys","part1","x",1);
- X_88 := algebra.subselect(X_17,X_8,A0,A1,true,true,false);
- X_19 := sql.subdelta(X_85,X_8,X_14,X_86,X_88);
- X_21 := sql.projectdelta(X_19,X_11,X_14,r1_14,X_17);
- X_22 := bat.append(X_5,X_21,true);
- X_100:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,0,4);
- X_93:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",0,4);
- X_141 := algebra.subselect(X_100,X_93,A0,A1,true,true,false);
- (X_104:bat[:oid,:oid] ,X_105:bat[:oid,:dbl] ) :=
sql.bind(X_4,"sys","part2","x",2,0,4);
- X_145 := algebra.subselect(X_105,nil:bat[:oid,:oid],A0,A1,true,true,false);
- X_149 := sql.subdelta(X_141,X_93,X_104,X_145);
- X_154 := sql.projectdelta(X_149,X_100,X_104,X_105);
- X_101:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,1,4);
- X_95:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",1,4);
- X_142 := algebra.subselect(X_101,X_95,A0,A1,true,true,false);
- (X_106:bat[:oid,:oid] ,X_107:bat[:oid,:dbl] ) :=
sql.bind(X_4,"sys","part2","x",2,1,4);
- X_146 := algebra.subselect(X_107,nil:bat[:oid,:oid],A0,A1,true,true,false);
- X_150 := sql.subdelta(X_142,X_95,X_106,X_146);
- X_156 := sql.projectdelta(X_150,X_101,X_106,X_107);
- X_102:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,2,4);
- X_97:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",2,4);
- X_143 := algebra.subselect(X_102,X_97,A0,A1,true,true,false);
- (X_108:bat[:oid,:oid] ,X_109:bat[:oid,:dbl] ) :=
sql.bind(X_4,"sys","part2","x",2,2,4);
- X_147 := algebra.subselect(X_109,nil:bat[:oid,:oid],A0,A1,true,true,false);
- X_151 := sql.subdelta(X_143,X_97,X_108,X_147);
- X_158 := sql.projectdelta(X_151,X_102,X_108,X_109);
- X_103:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,3,4);
- X_99:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",3,4);
- X_144 := algebra.subselect(X_103,X_99,A0,A1,true,true,false);
- (X_110:bat[:oid,:oid] ,X_111:bat[:oid,:dbl] ) :=
sql.bind(X_4,"sys","part2","x",2,3,4);
- X_148 := algebra.subselect(X_111,nil:bat[:oid,:oid],A0,A1,true,true,false);
- X_24:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",1);
- X_90 := algebra.subselect(X_24,X_99,A0,A1,true,true,false);
- X_152 := sql.subdelta(X_144,X_99,X_110,X_148,X_90);
- X_160 := sql.projectdelta(X_152,X_103,X_110,X_111,X_24);
- X_169 := mat.packIncrement(X_154,4);
- X_170 := mat.packIncrement(X_169,X_156);
- X_171 := mat.packIncrement(X_170,X_158);
- X_26 := mat.packIncrement(X_171,X_160);
- X_27 := bat.append(X_22,X_26,true);
- language.pass(X_8);
- language.pass(X_11);
- language.pass(X_14);
- language.pass(r1_14);
- language.pass(X_17);
+ X_88:bat[:oid,:dbl] := sql.bind(X_4,"sys","part1","x",0,0,4);
+ X_81:bat[:oid,:oid] := sql.tid(X_4,"sys","part1",0,4);
+ X_175 := algebra.subselect(X_88,X_81,A0,A1,true,true,false);
+ (X_92:bat[:oid,:oid] ,X_93:bat[:oid,:dbl] ) :=
sql.bind(X_4,"sys","part1","x",2,0,4);
+ X_179 := algebra.subselect(X_93,nil:bat[:oid,:oid],A0,A1,true,true,false);
+ X_186 := sql.subdelta(X_175,X_81,X_92,X_179);
+ X_190 := sql.projectdelta(X_186,X_88,X_92,X_93);
+ X_89:bat[:oid,:dbl] := sql.bind(X_4,"sys","part1","x",0,1,4);
+ X_83:bat[:oid,:oid] := sql.tid(X_4,"sys","part1",1,4);
+ X_176 := algebra.subselect(X_89,X_83,A0,A1,true,true,false);
+ (X_94:bat[:oid,:oid] ,X_95:bat[:oid,:dbl] ) :=
sql.bind(X_4,"sys","part1","x",2,1,4);
+ X_181 := algebra.subselect(X_95,nil:bat[:oid,:oid],A0,A1,true,true,false);
+ X_187 := sql.subdelta(X_176,X_83,X_94,X_181);
+ X_191 := sql.projectdelta(X_187,X_89,X_94,X_95);
+ X_90:bat[:oid,:dbl] := sql.bind(X_4,"sys","part1","x",0,2,4);
+ X_85:bat[:oid,:oid] := sql.tid(X_4,"sys","part1",2,4);
+ X_177 := algebra.subselect(X_90,X_85,A0,A1,true,true,false);
+ (X_96:bat[:oid,:oid] ,X_97:bat[:oid,:dbl] ) :=
sql.bind(X_4,"sys","part1","x",2,2,4);
+ X_183 := algebra.subselect(X_97,nil:bat[:oid,:oid],A0,A1,true,true,false);
+ X_188 := sql.subdelta(X_177,X_85,X_96,X_183);
+ X_192 := sql.projectdelta(X_188,X_90,X_96,X_97);
+ X_91:bat[:oid,:dbl] := sql.bind(X_4,"sys","part1","x",0,3,4);
+ X_87:bat[:oid,:oid] := sql.tid(X_4,"sys","part1",3,4);
+ X_178 := algebra.subselect(X_91,X_87,A0,A1,true,true,false);
+ (X_98:bat[:oid,:oid] ,X_99:bat[:oid,:dbl] ) :=
sql.bind(X_4,"sys","part1","x",2,3,4);
+ X_185 := algebra.subselect(X_99,nil:bat[:oid,:oid],A0,A1,true,true,false);
+ X_13:bat[:oid,:dbl] := sql.bind(X_4,"sys","part1","x",1);
+ X_76 := algebra.subselect(X_13,X_87,A0,A1,true,true,false);
+ X_189 := sql.subdelta(X_178,X_87,X_98,X_185,X_76);
+ X_193 := sql.projectdelta(X_189,X_91,X_98,X_99,X_13);
+ X_234 := mat.packIncrement(X_190,4);
+ X_235 := mat.packIncrement(X_234,X_191);
+ X_236 := mat.packIncrement(X_235,X_192);
+ X_16 := mat.packIncrement(X_236,X_193);
+ X_17 := bat.append(X_5,X_16,true);
+ X_104:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,0,4);
+ X_100:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",0,4);
+ X_194 := algebra.subselect(X_104,X_100,A0,A1,true,true,false);
+ (X_108:bat[:oid,:oid] ,X_109:bat[:oid,:dbl] ) :=
sql.bind(X_4,"sys","part2","x",2,0,4);
+ X_198 := algebra.subselect(X_109,nil:bat[:oid,:oid],A0,A1,true,true,false);
+ X_203 := sql.subdelta(X_194,X_100,X_108,X_198);
+ X_207 := sql.projectdelta(X_203,X_104,X_108,X_109);
+ X_105:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,1,4);
+ X_101:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",1,4);
+ X_195 := algebra.subselect(X_105,X_101,A0,A1,true,true,false);
+ (X_110:bat[:oid,:oid] ,X_111:bat[:oid,:dbl] ) :=
sql.bind(X_4,"sys","part2","x",2,1,4);
+ X_199 := algebra.subselect(X_111,nil:bat[:oid,:oid],A0,A1,true,true,false);
+ X_204 := sql.subdelta(X_195,X_101,X_110,X_199);
+ X_209 := sql.projectdelta(X_204,X_105,X_110,X_111);
+ X_106:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,2,4);
+ X_102:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",2,4);
+ X_196 := algebra.subselect(X_106,X_102,A0,A1,true,true,false);
+ (X_112:bat[:oid,:oid] ,X_113:bat[:oid,:dbl] ) :=
sql.bind(X_4,"sys","part2","x",2,2,4);
+ X_200 := algebra.subselect(X_113,nil:bat[:oid,:oid],A0,A1,true,true,false);
+ X_205 := sql.subdelta(X_196,X_102,X_112,X_200);
+ X_211 := sql.projectdelta(X_205,X_106,X_112,X_113);
+ X_107:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",0,3,4);
+ X_103:bat[:oid,:oid] := sql.tid(X_4,"sys","part2",3,4);
+ X_197 := algebra.subselect(X_107,X_103,A0,A1,true,true,false);
+ (X_115:bat[:oid,:oid] ,X_116:bat[:oid,:dbl] ) :=
sql.bind(X_4,"sys","part2","x",2,3,4);
+ X_201 := algebra.subselect(X_116,nil:bat[:oid,:oid],A0,A1,true,true,false);
+ X_19:bat[:oid,:dbl] := sql.bind(X_4,"sys","part2","x",1);
+ X_78 := algebra.subselect(X_19,X_103,A0,A1,true,true,false);
+ X_206 := sql.subdelta(X_197,X_103,X_115,X_201,X_78);
+ X_213 := sql.projectdelta(X_206,X_107,X_115,X_116,X_19);
+ X_238 := mat.packIncrement(X_207,4);
+ X_239 := mat.packIncrement(X_238,X_209);
+ X_240 := mat.packIncrement(X_239,X_211);
+ X_21 := mat.packIncrement(X_240,X_213);
+ X_22 := bat.append(X_17,X_21,true);
+ language.pass(X_81);
+ language.pass(X_88);
+ language.pass(X_92);
language.pass(X_93);
+ language.pass(X_83);
+ language.pass(X_89);
+ language.pass(X_94);
+ language.pass(X_95);
+ language.pass(X_85);
+ language.pass(X_90);
+ language.pass(X_96);
+ language.pass(X_97);
+ language.pass(nil:bat[:oid,:oid]);
+ language.pass(X_87);
+ language.pass(X_91);
+ language.pass(X_98);
+ language.pass(X_99);
+ language.pass(X_13);
language.pass(X_100);
language.pass(X_104);
- language.pass(X_105);
- language.pass(X_95);
- language.pass(X_101);
- language.pass(X_106);
- language.pass(X_107);
- language.pass(X_97);
- language.pass(X_102);
language.pass(X_108);
language.pass(X_109);
- language.pass(nil:bat[:oid,:oid]);
- language.pass(X_99);
- language.pass(X_103);
+ language.pass(X_101);
+ language.pass(X_105);
language.pass(X_110);
language.pass(X_111);
- language.pass(X_24);
-exit X_204;
- X_28 := sql.append(X_4,"sys","answ","x",X_27);
-barrier X_207 := language.dataflow();
- X_32:bat[:oid,:dbl] := bat.new(nil:oid,nil:dbl);
- X_35:bat[:oid,:dbl] := sql.bind(X_28,"sys","part1","y",0);
- (X_39,r1_53) := sql.bind(X_28,"sys","part1","y",2);
- X_42:bat[:oid,:dbl] := sql.bind(X_28,"sys","part1","y",1);
- X_44 := sql.projectdelta(X_19,X_35,X_39,r1_53,X_42);
- X_45 := bat.append(X_32,X_44,true);
- X_112:bat[:oid,:dbl] := sql.bind(X_28,"sys","part2","y",0,0,4);
- (X_116:bat[:oid,:oid] ,X_117:bat[:oid,:dbl] ) :=
sql.bind(X_28,"sys","part2","y",2,0,4);
- X_161 := sql.projectdelta(X_149,X_112,X_116,X_117);
- X_113:bat[:oid,:dbl] := sql.bind(X_28,"sys","part2","y",0,1,4);
- (X_118:bat[:oid,:oid] ,X_119:bat[:oid,:dbl] ) :=
sql.bind(X_28,"sys","part2","y",2,1,4);
- X_162 := sql.projectdelta(X_150,X_113,X_118,X_119);
- X_114:bat[:oid,:dbl] := sql.bind(X_28,"sys","part2","y",0,2,4);
- (X_120:bat[:oid,:oid] ,X_121:bat[:oid,:dbl] ) :=
sql.bind(X_28,"sys","part2","y",2,2,4);
- X_163 := sql.projectdelta(X_151,X_114,X_120,X_121);
- X_115:bat[:oid,:dbl] := sql.bind(X_28,"sys","part2","y",0,3,4);
- (X_122:bat[:oid,:oid] ,X_123:bat[:oid,:dbl] ) :=
sql.bind(X_28,"sys","part2","y",2,3,4);
- X_47:bat[:oid,:dbl] := sql.bind(X_28,"sys","part2","y",1);
- X_164 := sql.projectdelta(X_152,X_115,X_122,X_123,X_47);
- X_173 := mat.packIncrement(X_161,4);
- X_174 := mat.packIncrement(X_173,X_162);
- X_175 := mat.packIncrement(X_174,X_163);
- X_48 := mat.packIncrement(X_175,X_164);
- X_49 := bat.append(X_45,X_48,true);
-exit X_207;
- X_51 := sql.append(X_28,"sys","answ","y",X_49);
-barrier X_210 := language.dataflow();
- X_52:bat[:oid,:dbl] := bat.new(nil:oid,nil:dbl);
- X_53:bat[:oid,:dbl] := sql.bind(X_51,"sys","part1","z",0);
- (X_56,r1_78) := sql.bind(X_51,"sys","part1","z",2);
- X_58:bat[:oid,:dbl] := sql.bind(X_51,"sys","part1","z",1);
- X_59 := sql.projectdelta(X_19,X_53,X_56,r1_78,X_58);
- X_60 := bat.append(X_52,X_59,true);
- X_126:bat[:oid,:dbl] := sql.bind(X_51,"sys","part2","z",0,0,4);
- (X_133:bat[:oid,:oid] ,X_134:bat[:oid,:dbl] ) :=
sql.bind(X_51,"sys","part2","z",2,0,4);
- X_165 := sql.projectdelta(X_149,X_126,X_133,X_134);
- X_128:bat[:oid,:dbl] := sql.bind(X_51,"sys","part2","z",0,1,4);
- (X_135:bat[:oid,:oid] ,X_136:bat[:oid,:dbl] ) :=
sql.bind(X_51,"sys","part2","z",2,1,4);
- X_166 := sql.projectdelta(X_150,X_128,X_135,X_136);
- X_130:bat[:oid,:dbl] := sql.bind(X_51,"sys","part2","z",0,2,4);
- (X_137:bat[:oid,:oid] ,X_138:bat[:oid,:dbl] ) :=
sql.bind(X_51,"sys","part2","z",2,2,4);
- X_167 := sql.projectdelta(X_151,X_130,X_137,X_138);
- X_132:bat[:oid,:dbl] := sql.bind(X_51,"sys","part2","z",0,3,4);
- (X_139:bat[:oid,:oid] ,X_140:bat[:oid,:dbl] ) :=
sql.bind(X_51,"sys","part2","z",2,3,4);
- X_63:bat[:oid,:dbl] := sql.bind(X_51,"sys","part2","z",1);
- X_168 := sql.projectdelta(X_152,X_132,X_139,X_140,X_63);
- X_177 := mat.packIncrement(X_165,4);
- X_178 := mat.packIncrement(X_177,X_166);
- X_179 := mat.packIncrement(X_178,X_167);
- X_65 := mat.packIncrement(X_179,X_168);
- X_66 := bat.append(X_60,X_65,true);
-exit X_210;
- X_67 := sql.append(X_51,"sys","answ","z",X_66);
- X_69 := aggr.count(X_66);
- sql.affectedRows(X_67,X_69,"");
+ language.pass(X_102);
+ language.pass(X_106);
+ language.pass(X_112);
+ language.pass(X_113);
+ language.pass(nil:bat[:oid,:oid]);
+ language.pass(X_103);
+ language.pass(X_107);
+ language.pass(X_115);
+ language.pass(X_116);
+ language.pass(X_19);
+exit X_295;
+ X_23 := sql.append(X_4,"sys","answ","x",X_22);
+barrier X_298 := language.dataflow();
+ X_27:bat[:oid,:dbl] := bat.new(nil:oid,nil:dbl);
+ X_118:bat[:oid,:dbl] := sql.bind(X_23,"sys","part1","y",0,0,4);
+ (X_125:bat[:oid,:oid] ,X_126:bat[:oid,:dbl] ) :=
sql.bind(X_23,"sys","part1","y",2,0,4);
+ X_214 := sql.projectdelta(X_186,X_118,X_125,X_126);
+ X_120:bat[:oid,:dbl] := sql.bind(X_23,"sys","part1","y",0,1,4);
+ (X_127:bat[:oid,:oid] ,X_128:bat[:oid,:dbl] ) :=
sql.bind(X_23,"sys","part1","y",2,1,4);
+ X_215 := sql.projectdelta(X_187,X_120,X_127,X_128);
+ X_122:bat[:oid,:dbl] := sql.bind(X_23,"sys","part1","y",0,2,4);
+ (X_129:bat[:oid,:oid] ,X_130:bat[:oid,:dbl] ) :=
sql.bind(X_23,"sys","part1","y",2,2,4);
+ X_216 := sql.projectdelta(X_188,X_122,X_129,X_130);
+ X_124:bat[:oid,:dbl] := sql.bind(X_23,"sys","part1","y",0,3,4);
+ (X_131:bat[:oid,:oid] ,X_132:bat[:oid,:dbl] ) :=
sql.bind(X_23,"sys","part1","y",2,3,4);
+ X_34:bat[:oid,:dbl] := sql.bind(X_23,"sys","part1","y",1);
+ X_217 := sql.projectdelta(X_189,X_124,X_131,X_132,X_34);
+ X_242 := mat.packIncrement(X_214,4);
+ X_243 := mat.packIncrement(X_242,X_215);
+ X_244 := mat.packIncrement(X_243,X_216);
+ X_36 := mat.packIncrement(X_244,X_217);
+ X_37 := bat.append(X_27,X_36,true);
+ X_133:bat[:oid,:dbl] := sql.bind(X_23,"sys","part2","y",0,0,4);
+ (X_137:bat[:oid,:oid] ,X_138:bat[:oid,:dbl] ) :=
sql.bind(X_23,"sys","part2","y",2,0,4);
+ X_218 := sql.projectdelta(X_203,X_133,X_137,X_138);
+ X_134:bat[:oid,:dbl] := sql.bind(X_23,"sys","part2","y",0,1,4);
+ (X_139:bat[:oid,:oid] ,X_140:bat[:oid,:dbl] ) :=
sql.bind(X_23,"sys","part2","y",2,1,4);
+ X_219 := sql.projectdelta(X_204,X_134,X_139,X_140);
+ X_135:bat[:oid,:dbl] := sql.bind(X_23,"sys","part2","y",0,2,4);
+ (X_141:bat[:oid,:oid] ,X_142:bat[:oid,:dbl] ) :=
sql.bind(X_23,"sys","part2","y",2,2,4);
+ X_220 := sql.projectdelta(X_205,X_135,X_141,X_142);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list