Changeset: 9fc70054243d for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9fc70054243d Added Files: clients/Tests/SQL-dump.timeout sql/test/BugTracker-2013/Tests/crash_after_creation_of_unique_key.Bug-3363.sql sql/test/BugTracker-2013/Tests/crash_after_creation_of_unique_key.Bug-3363.stable.err sql/test/BugTracker-2013/Tests/crash_after_creation_of_unique_key.Bug-3363.stable.out Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.Windows sql/benchmarks/tpch/Tests/21-explain.stable.out.32bit sql/server/rel_optimizer.c sql/test/BugTracker-2013/Tests/All sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.single Branch: default Log Message:
merged diffs (truncated from 416 to 300 lines): diff --git a/clients/Tests/MAL-signatures.stable.out b/clients/Tests/MAL-signatures.stable.out --- a/clients/Tests/MAL-signatures.stable.out +++ b/clients/Tests/MAL-signatures.stable.out @@ -2476,7 +2476,7 @@ command algebra.likesubselect(b:bat[:oid address PCRElikesubselect1; comment Select all head values for which the tail value is "like" the given (SQL-style) pattern. Input is a dense-headed BAT, output is a dense-headed BAT with in the tail the head value of the input BAT for which the relationship holds. The output BAT is sorted on the tail value. -command algebra.leftfetchjoin(left:bat[:any_1,:oid],right:bat[:oid,:any_3]):bat[:any_1,:any_3] +command algebra.leftfetchjoin(left:bat[:oid,:oid],right:bat[:oid,:any_3]):bat[:oid,:any_3] address ALGleftfetchjoin; comment Hook directly into the left fetch join implementation. diff --git a/clients/Tests/MAL-signatures.stable.out.Windows b/clients/Tests/MAL-signatures.stable.out.Windows --- a/clients/Tests/MAL-signatures.stable.out.Windows +++ b/clients/Tests/MAL-signatures.stable.out.Windows @@ -2476,7 +2476,7 @@ command algebra.likesubselect(b:bat[:oid address PCRElikesubselect1; comment Select all head values for which the tail value is "like" the given (SQL-style) pattern. Input is a dense-headed BAT, output is a dense-headed BAT with in the tail the head value of the input BAT for which the relationship holds. The output BAT is sorted on the tail value. -command algebra.leftfetchjoin(left:bat[:any_1,:oid],right:bat[:oid,:any_3]):bat[:any_1,:any_3] +command algebra.leftfetchjoin(left:bat[:oid,:oid],right:bat[:oid,:any_3]):bat[:oid,:any_3] address ALGleftfetchjoin; comment Hook directly into the left fetch join implementation. diff --git a/clients/Tests/SQL-dump.timeout b/clients/Tests/SQL-dump.timeout new file mode 100644 --- /dev/null +++ b/clients/Tests/SQL-dump.timeout @@ -0,0 +1,1 @@ +2 diff --git a/sql/benchmarks/tpch/Tests/21-explain.stable.out.32bit b/sql/benchmarks/tpch/Tests/21-explain.stable.out.32bit --- a/sql/benchmarks/tpch/Tests/21-explain.stable.out.32bit +++ b/sql/benchmarks/tpch/Tests/21-explain.stable.out.32bit @@ -76,12 +76,12 @@ function user.s2_1{autoCommit=true}(A0:s X_24 := algebra.leftfetchjoin(X_5,X_23); X_25:bat[:oid,:bit] := batcalc.>(X_17,X_24); X_26 := algebra.subselect(X_25,true,true,true,true,false); - X_244 := algebra.leftfetchjoin(X_26,X_5); + X_246 := algebra.leftfetchjoin(X_26,X_5); X_28 := sql.bind_idxbat(X_4,"sys","lineitem","lineitem_l_orderkey_fkey",0); (X_30,r1_32) := sql.bind_idxbat(X_4,"sys","lineitem","lineitem_l_orderkey_fkey",2); X_32 := sql.bind_idxbat(X_4,"sys","lineitem","lineitem_l_orderkey_fkey",1); X_33 := sql.delta(X_28,X_30,r1_32,X_32); - X_34:bat[:oid,:oid] := algebra.leftfetchjoin(X_244,X_33); + X_34:bat[:oid,:oid] := algebra.leftfetchjoin(X_246,X_33); X_35:bat[:oid,:oid] := sql.tid(X_4,"sys","orders"); X_38 := sql.bind(X_4,"sys","orders","o_orderstatus",0); (X_41,r1_44) := sql.bind(X_4,"sys","orders","o_orderstatus",2); @@ -91,20 +91,20 @@ function user.s2_1{autoCommit=true}(A0:s X_48 := algebra.subselect(X_47,A0,A0,true,true,false); X_50 := algebra.leftfetchjoin(X_48,X_35); (X_51,r1_55) := algebra.join(X_34,X_50); - X_245 := algebra.leftfetchjoin(X_51,X_26); + X_247 := algebra.leftfetchjoin(X_51,X_26); X_53 := sql.bind_idxbat(X_4,"sys","lineitem","lineitem_l_suppkey_fkey",0); (X_56,r1_60) := sql.bind_idxbat(X_4,"sys","lineitem","lineitem_l_suppkey_fkey",2); X_58 := sql.bind_idxbat(X_4,"sys","lineitem","lineitem_l_suppkey_fkey",1); X_59 := sql.delta(X_53,X_56,r1_60,X_58); - X_60:bat[:oid,:oid] := algebra.leftfetchjoinPath(X_245,X_5,X_59); + X_60:bat[:oid,:oid] := algebra.leftfetchjoinPath(X_247,X_5,X_59); X_61:bat[:oid,:oid] := sql.tid(X_4,"sys","supplier"); (X_63,r1_69) := algebra.join(X_60,X_61); - X_246 := algebra.leftfetchjoin(r1_69,X_61); + X_248 := algebra.leftfetchjoin(r1_69,X_61); X_65 := sql.bind_idxbat(X_4,"sys","supplier","supplier_s_nationkey_fkey",0); (X_68,r1_74) := sql.bind_idxbat(X_4,"sys","supplier","supplier_s_nationkey_fkey",2); X_70 := sql.bind_idxbat(X_4,"sys","supplier","supplier_s_nationkey_fkey",1); X_71 := sql.delta(X_65,X_68,r1_74,X_70); - X_72:bat[:oid,:oid] := algebra.leftfetchjoin(X_246,X_71); + X_72:bat[:oid,:oid] := algebra.leftfetchjoin(X_248,X_71); X_73:bat[:oid,:oid] := sql.tid(X_4,"sys","nation"); X_75 := sql.bind(X_4,"sys","nation","n_name",0); (X_78,r1_85) := sql.bind(X_4,"sys","nation","n_name",2); @@ -114,19 +114,19 @@ function user.s2_1{autoCommit=true}(A0:s X_85 := algebra.subselect(X_84,A1,A1,true,true,false); X_88 := algebra.leftfetchjoin(X_85,X_73); (X_89,r1_97) := algebra.join(X_72,X_88); - X_247 := algebra.leftfetchjoin(X_89,r1_69); + X_249 := algebra.leftfetchjoin(X_89,r1_69); X_91 := sql.bind(X_4,"sys","supplier","s_suppkey",0); (X_93,r1_101) := sql.bind(X_4,"sys","supplier","s_suppkey",2); X_96 := sql.bind(X_4,"sys","supplier","s_suppkey",1); X_98 := sql.delta(X_91,X_93,r1_101,X_96); - X_99:bat[:oid,:int] := algebra.leftfetchjoinPath(X_247,X_61,X_98); + X_99:bat[:oid,:int] := algebra.leftfetchjoinPath(X_249,X_61,X_98); X_100 := bat.mirror(X_99); - X_248 := algebra.leftfetchjoin(X_89,X_63); + X_250 := algebra.leftfetchjoin(X_89,X_63); X_101 := sql.bind(X_4,"sys","lineitem","l_orderkey",0); (X_104,r1_114) := sql.bind(X_4,"sys","lineitem","l_orderkey",2); X_106 := sql.bind(X_4,"sys","lineitem","l_orderkey",1); X_107 := sql.delta(X_101,X_104,r1_114,X_106); - X_108:bat[:oid,:int] := algebra.leftfetchjoinPath(X_248,X_51,X_26,X_5,X_107); + X_108:bat[:oid,:int] := algebra.leftfetchjoinPath(X_250,X_51,X_26,X_5,X_107); X_109:bat[:oid,:oid] := sql.tid(X_4,"sys","lineitem"); X_113 := algebra.leftfetchjoin(X_109,X_107); (X_114,r1_133) := algebra.join(X_108,X_113); @@ -136,7 +136,7 @@ function user.s2_1{autoCommit=true}(A0:s X_122 := sql.delta(X_116,X_118,r1_137,X_121); X_123 := algebra.leftfetchjoin(X_109,X_122); X_124 := algebra.leftfetchjoin(r1_133,X_123); - X_126:bat[:oid,:int] := algebra.leftfetchjoinPath(X_248,X_51,X_26,X_5,X_122); + X_126:bat[:oid,:int] := algebra.leftfetchjoinPath(X_250,X_51,X_26,X_5,X_122); X_127 := algebra.leftfetchjoin(X_114,X_126); X_128:bat[:oid,:bit] := batcalc.!=(X_124,X_127); X_129 := algebra.subselect(X_128,true,true,true,true,false); @@ -165,29 +165,30 @@ function user.s2_1{autoCommit=true}(A0:s X_164 := algebra.subselect(X_163,true,true,true,true,false); X_167 := algebra.leftfetchjoin(X_164,X_159); X_168 := algebra.tdiff(X_135,X_167); - X_249 := algebra.leftfetchjoin(X_133,X_89); + X_251 := algebra.leftfetchjoin(X_133,X_89); X_169 := sql.bind(X_4,"sys","supplier","s_name",0); (X_174,r1_224) := sql.bind(X_4,"sys","supplier","s_name",2); X_177 := sql.bind(X_4,"sys","supplier","s_name",1); X_179 := sql.delta(X_169,X_174,r1_224,X_177); - X_180:bat[:oid,:str] := algebra.leftfetchjoinPath(X_168,X_249,r1_69,X_61,X_179); + X_180:bat[:oid,:str] := algebra.leftfetchjoinPath(X_168,X_251,r1_69,X_61,X_179); (X_181,r1_235,r2_235) := group.subgroupdone(X_180); X_184:bat[:oid,:wrd] := aggr.subcount(X_181,X_181,r1_235,false); X_188 := algebra.leftfetchjoin(r1_235,X_180); X_186 := pqueue.utopn_min(X_184,100:wrd); X_187 := bat.mirror(X_186); - X_189 := algebra.leftfetchjoin(X_187,X_188); + X_189 := algebra.leftjoin(X_187,X_188); X_190 := pqueue.topn_max(X_186,X_189,100:wrd); - X_191 := algebra.subslice(X_190,0:wrd,99:wrd); - X_192 := algebra.leftfetchjoin(X_191,X_188); - X_193 := algebra.subslice(X_192,0:wrd,99:wrd); - X_194 := algebra.leftfetchjoin(X_193,X_192); - X_195:bat[:oid,:wrd] := algebra.leftfetchjoinPath(X_193,X_191,X_184); - X_196 := sql.resultSet(2,1,X_194); - sql.rsColumn(X_196,"sys.supplier","s_name","varchar",25,0,X_194); - sql.rsColumn(X_196,"sys.L1","numwait","wrd",32,0,X_195); - X_210 := io.stdout(); - sql.exportResult(X_210,X_196); + X_192 := algebra.markT(X_190,0@0); + X_193 := bat.reverse(X_192); + X_194 := algebra.leftfetchjoin(X_193,X_188); + X_195 := algebra.subslice(X_194,0:wrd,99:wrd); + X_196 := algebra.leftfetchjoin(X_195,X_194); + X_197:bat[:oid,:wrd] := algebra.leftfetchjoinPath(X_195,X_193,X_184); + X_198 := sql.resultSet(2,1,X_196); + sql.rsColumn(X_198,"sys.supplier","s_name","varchar",25,0,X_196); + sql.rsColumn(X_198,"sys.L1","numwait","wrd",32,0,X_197); + X_212 := io.stdout(); + sql.exportResult(X_212,X_198); end s2_1; # querylog.define("explain select\n\ts_name,\n\tcount(*) as numwait\nfrom\n\tsupplier,\n\tlineitem l1,\n\torders,\n\tnation\nwhere\n\ts_suppkey = l1.l_suppkey\n\tand o_orderkey = l1.l_orderkey\n\tand o_orderstatus = \\'F\\'\n\tand l1.l_receiptdate > l1.l_commitdate\n\tand exists (\n\t\tselect\n\t\t\t*\n\t\tfrom\n\t\t\tlineitem l2\n\t\twhere\n\t\t\tl2.l_orderkey = l1.l_orderkey\n\t\t\tand l2.l_suppkey <> l1.l_suppkey\n\t)\n\tand not exists (\n\t\tselect\n\t\t\t*\n\t\tfrom\n\t\t\tlineitem l3\n\t\twhere\n\t\t\tl3.l_orderkey = l1.l_orderkey\n\t\t\tand l3.l_suppkey <> l1.l_suppkey\n\t\t\tand l3.l_receiptdate > l3.l_commitdate\n\t)\n\tand s_nationkey = n_nationkey\n\tand n_name = \\'SAUDI ARABIA\\'\ngroup by\n\ts_name\norder by\n\tnumwait desc,\n\ts_name\nlimit 100;","sequential_pipe") diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c --- a/sql/server/rel_optimizer.c +++ b/sql/server/rel_optimizer.c @@ -1443,7 +1443,7 @@ rel_push_func_down(int *changes, mvc *sq append(r->exps, ne); else append(l->exps, ne); - ne = exp_column(sql->sa, NULL, exp_name(ne), exp_subtype(ne), ne->card, has_nil(ne), is_intern(ne)); + ne = exp_column(sql->sa, exp_relname(ne), exp_name(ne), exp_subtype(ne), ne->card, has_nil(ne), is_intern(ne)); (*changes)++; } e->l = ne; @@ -1457,7 +1457,7 @@ rel_push_func_down(int *changes, mvc *sq append(r->exps, ne); else append(l->exps, ne); - ne = exp_column(sql->sa, NULL, exp_name(ne), exp_subtype(ne), ne->card, has_nil(ne), is_intern(ne)); + ne = exp_column(sql->sa, exp_relname(ne), exp_name(ne), exp_subtype(ne), ne->card, has_nil(ne), is_intern(ne)); (*changes)++; } e->r = ne; @@ -1472,7 +1472,7 @@ rel_push_func_down(int *changes, mvc *sq append(r->exps, ne); else append(l->exps, ne); - ne = exp_column(sql->sa, NULL, exp_name(ne), exp_subtype(ne), ne->card, has_nil(ne), is_intern(ne)); + ne = exp_column(sql->sa, exp_relname(ne), exp_name(ne), exp_subtype(ne), ne->card, has_nil(ne), is_intern(ne)); (*changes)++; } e->f = ne; diff --git a/sql/test/BugTracker-2013/Tests/All b/sql/test/BugTracker-2013/Tests/All --- a/sql/test/BugTracker-2013/Tests/All +++ b/sql/test/BugTracker-2013/Tests/All @@ -48,3 +48,4 @@ binary_copy_into.Bug-3345 copy-into-compressed.Bug-3351 median.Bug-3352 check-constraint.Bug-3335 +crash_after_creation_of_unique_key.Bug-3363 diff --git a/sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out b/sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out --- a/sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out +++ b/sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out @@ -46,29 +46,39 @@ Ready. % clob # type % 173 # length function user.s2_1():void; -barrier X_46 := language.dataflow(); +barrier X_58 := language.dataflow(); X_1 := sql.mvc(); X_2:bat[:oid,:oid] := sql.tid(X_1,"sys","treeitems"); - X_5 := sql.bind(X_1,"sys","treeitems","pre",0); + X_5 := sql.bind(X_1,"sys","treeitems","subject",0); X_8 := algebra.leftfetchjoin(X_2,X_5); - X_9 := sql.bind(X_1,"sys","treeitems","size",0); - X_11 := algebra.leftfetchjoin(X_2,X_9); - X_12:bat[:oid,:lng] := batcalc.+(X_8,X_11); - (X_13,r1_18) := algebra.join(X_8,X_8,X_12,true,true); - X_16 := sql.bind(X_1,"sys","treeitems","subject",0); + (X_9,r1_12) := algebra.crossproduct(X_8,X_8); + X_11 := sql.bind(X_1,"sys","treeitems","pre",0); + X_13 := algebra.leftfetchjoin(X_2,X_11); + X_14 := algebra.leftfetchjoin(r1_12,X_13); + X_15 := algebra.leftfetchjoin(X_9,X_13); + X_25:bat[:oid,:bit] := batcalc.>=(X_14,X_15); + X_16 := sql.bind(X_1,"sys","treeitems","size",0); X_18 := algebra.leftfetchjoin(X_2,X_16); - X_19 := algebra.leftfetchjoin(r1_18,X_18); - X_20 := algebra.leftfetchjoin(X_13,X_18); + X_19:bat[:oid,:lng] := batcalc.+(X_13,X_18); + X_20 := algebra.leftfetchjoin(X_9,X_19); + X_21:bat[:oid,:bit] := batcalc.<=(X_14,X_20); + X_22 := algebra.subselect(X_21,true,true,true,true,false); + X_26 := algebra.subselect(X_25,X_22,true,true,true,true,false); + X_27:bat[:oid,:int] := algebra.leftfetchjoinPath(X_26,X_9,X_8); + X_28:bat[:oid,:int] := algebra.leftfetchjoinPath(X_26,r1_12,X_8); + language.pass(X_2); + language.pass(X_13); + language.pass(X_14); + language.pass(X_9); + language.pass(X_26); + language.pass(r1_12); language.pass(X_8); - language.pass(X_8); - language.pass(X_2); - language.pass(X_18); -exit X_46; - X_21 := sql.resultSet(2,1,X_19); - sql.rsColumn(X_21,"sys.L","id1","int",32,0,X_19); - sql.rsColumn(X_21,"sys.L","id2","int",32,0,X_20); - X_31 := io.stdout(); - sql.exportResult(X_31,X_21); +exit X_58; + X_29 := sql.resultSet(2,1,X_27); + sql.rsColumn(X_29,"sys.L","id1","int",32,0,X_27); + sql.rsColumn(X_29,"sys.L","id2","int",32,0,X_28); + X_40 := io.stdout(); + sql.exportResult(X_40,X_29); end s2_1; # querylog.define("explain\nselect t1.subject as id1, t2.subject as id2\nfrom treeitems t1, treeitems t2\nwhere t2.pre between t1.pre and t1.pre + t1.size;","default_pipe") #ROLLBACK; diff --git a/sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.single b/sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.single --- a/sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.single +++ b/sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.single @@ -48,21 +48,28 @@ Ready. function user.s2_1():void; X_1 := sql.mvc(); X_2:bat[:oid,:oid] := sql.tid(X_1,"sys","treeitems"); - X_5 := sql.bind(X_1,"sys","treeitems","pre",0); + X_5 := sql.bind(X_1,"sys","treeitems","subject",0); X_8 := algebra.leftfetchjoin(X_2,X_5); - X_9 := sql.bind(X_1,"sys","treeitems","size",0); - X_11 := algebra.leftfetchjoin(X_2,X_9); - X_12:bat[:oid,:lng] := batcalc.+(X_8,X_11); - (X_13,r1_41) := algebra.join(X_8,X_8,X_12,true,true); - X_16 := sql.bind(X_1,"sys","treeitems","subject",0); - X_21 := algebra.leftfetchjoin(X_2,X_16); - X_22 := algebra.leftfetchjoin(r1_41,X_21); - X_24 := algebra.leftfetchjoin(X_13,X_21); - X_26 := sql.resultSet(2,1,X_22); - sql.rsColumn(X_26,"sys.L","id1","int",32,0,X_22); - sql.rsColumn(X_26,"sys.L","id2","int",32,0,X_24); - X_35 := io.stdout(); - sql.exportResult(X_35,X_26); + (X_9,r1_12) := algebra.crossproduct(X_8,X_8); + X_11 := sql.bind(X_1,"sys","treeitems","pre",0); + X_13 := algebra.leftfetchjoin(X_2,X_11); + X_14 := algebra.leftfetchjoin(r1_12,X_13); + X_15 := algebra.leftfetchjoin(X_9,X_13); + X_25:bat[:oid,:bit] := batcalc.>=(X_14,X_15); + X_16 := sql.bind(X_1,"sys","treeitems","size",0); + X_18 := algebra.leftfetchjoin(X_2,X_16); + X_19:bat[:oid,:lng] := batcalc.+(X_13,X_18); + X_20 := algebra.leftfetchjoin(X_9,X_19); + X_21:bat[:oid,:bit] := batcalc.<=(X_14,X_20); + X_22 := algebra.subselect(X_21,true,true,true,true,false); + X_26 := algebra.subselect(X_25,X_22,true,true,true,true,false); + X_27:bat[:oid,:int] := algebra.leftfetchjoinPath(X_26,X_9,X_8); + X_28:bat[:oid,:int] := algebra.leftfetchjoinPath(X_26,r1_12,X_8); + X_29 := sql.resultSet(2,1,X_27); + sql.rsColumn(X_29,"sys.L","id1","int",32,0,X_27); + sql.rsColumn(X_29,"sys.L","id2","int",32,0,X_28); + X_40 := io.stdout(); + sql.exportResult(X_40,X_29); end s2_1; # querylog.define("explain\nselect t1.subject as id1, t2.subject as id2\nfrom treeitems t1, treeitems t2\nwhere t2.pre between t1.pre and t1.pre + t1.size;","default_pipe") #ROLLBACK; diff --git a/sql/test/BugTracker-2013/Tests/crash_after_creation_of_unique_key.Bug-3363.sql b/sql/test/BugTracker-2013/Tests/crash_after_creation_of_unique_key.Bug-3363.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2013/Tests/crash_after_creation_of_unique_key.Bug-3363.sql @@ -0,0 +1,19 @@ _______________________________________________ checkin-list mailing list checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list