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