Changeset: 9002cd2e43b9 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9002cd2e43b9 Added Files: sql/test/BugTracker-2018/Tests/aggr-in-case.Bug-6526.sql sql/test/BugTracker-2018/Tests/crash-orderby-alias.Bug-6527.sql sql/test/BugTracker-2018/Tests/crash-orderby-alias.Bug-6527.stable.err sql/test/BugTracker-2018/Tests/crash-orderby-alias.Bug-6527.stable.out Modified Files: sql/server/rel_select.c sql/test/BugTracker-2010/Tests/ORDER_BY_over_UNION_EXCEPT_INTERSECT.Bug-2606.stable.out sql/test/BugTracker-2016/Tests/rename_exps.Bug-3974.stable.out sql/test/BugTracker-2018/Tests/All Branch: default Log Message:
Merge with Jul2017 branch. diffs (truncated from 395 to 300 lines): diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -238,6 +238,13 @@ rel_table_optname(mvc *sql, sql_rel *sq, columnrefs = optname->data.lval->h->next->data.lval; if (is_apply(sq->op)) sq = sq->r; + if (is_topn(sq->op) || (is_project(sq->op) && sq->r)) { + sq = rel_project(sql->sa, sq, rel_projections(sql, sq, NULL, 1, 1)); + if (osq != sq->l) /* apply */ + osq->r = sq; + else + osq = sq; + } if (columnrefs && sq->exps) { dnode *d = columnrefs->h; node *ne = sq->exps->h; @@ -257,15 +264,6 @@ rel_table_optname(mvc *sql, sql_rel *sq, if (!columnrefs && sq->exps) { node *ne; - if (is_topn(sq->op)) { - assert(sq->l); - assert(is_project(((sql_rel*)sq->l)->op)); - sq = rel_project(sql->sa, sq, rel_projections(sql, sq, NULL, 1, 1)); - if (osq != sq->l) /* apply */ - osq->r = sq; - else - osq = sq; - } ne = sq->exps->h; for (; ne; ne = ne->next) { sql_exp *e = ne->data; @@ -3626,6 +3624,7 @@ static sql_exp * e = exp_column(sql->sa, exp_relname(e), exp_name(e), exp_subtype(e), exp_card(e), has_nil(e), is_intern(e)); } rel_project_add_exp(sql, project, e); + e = exp_column(sql->sa, exp_relname(e), exp_name(e), exp_subtype(e), exp_card(e), has_nil(e), is_intern(e)); return e; } diff --git a/sql/test/BugTracker-2010/Tests/ORDER_BY_over_UNION_EXCEPT_INTERSECT.Bug-2606.stable.out b/sql/test/BugTracker-2010/Tests/ORDER_BY_over_UNION_EXCEPT_INTERSECT.Bug-2606.stable.out --- a/sql/test/BugTracker-2010/Tests/ORDER_BY_over_UNION_EXCEPT_INTERSECT.Bug-2606.stable.out +++ b/sql/test/BugTracker-2010/Tests/ORDER_BY_over_UNION_EXCEPT_INTERSECT.Bug-2606.stable.out @@ -310,24 +310,26 @@ project ( % .plan # table_name % rel # name % clob # type -% 51 # length +% 53 # length project ( -| distinct union ( -| | project ( -| | | group by ( -| | | | project ( -| | | | | table(sys.t2606a) [ "t2606a"."a" ] COUNT -| | | | ) [ "t2606a"."a" ] -| | | ) [ "t2606a"."a" ] [ "t2606a"."a" ] -| | ) [ "t2606a"."a" as "L5"."a" ], -| | project ( -| | | group by ( -| | | | project ( -| | | | | table(sys.t2606b) [ "t2606b"."a" ] COUNT -| | | | ) [ "t2606b"."a" ] -| | | ) [ "t2606b"."a" ] [ "t2606b"."a" ] -| | ) [ "t2606b"."a" as "L6"."a" ] -| ) [ "L5"."a" as "t"."a" ] +| project ( +| | distinct union ( +| | | project ( +| | | | group by ( +| | | | | project ( +| | | | | | table(sys.t2606a) [ "t2606a"."a" ] COUNT +| | | | | ) [ "t2606a"."a" ] +| | | | ) [ "t2606a"."a" ] [ "t2606a"."a" ] +| | | ) [ "t2606a"."a" as "L5"."a" ], +| | | project ( +| | | | group by ( +| | | | | project ( +| | | | | | table(sys.t2606b) [ "t2606b"."a" ] COUNT +| | | | | ) [ "t2606b"."a" ] +| | | | ) [ "t2606b"."a" ] [ "t2606b"."a" ] +| | | ) [ "t2606b"."a" as "L6"."a" ] +| | ) [ "L5"."a" as "L11"."a" ] +| ) [ "L11"."a" as "t"."a" ] ) [ "t"."a" ] [ "t"."a" ASC ] #select * from (select * from t2606a union select * from t2606b) as t order by a; % .t # table_name @@ -347,16 +349,18 @@ project ( % .plan # table_name % rel # name % clob # type -% 47 # length +% 49 # length project ( -| distinct except ( -| | project ( -| | | table(sys.t2606a) [ "t2606a"."a" ] COUNT -| | ) [ "t2606a"."a" as "L5"."a" ], -| | project ( -| | | table(sys.t2606b) [ "t2606b"."a" ] COUNT -| | ) [ "t2606b"."a" as "L6"."a" ] -| ) [ "L5"."a" as "t"."a" ] +| project ( +| | distinct except ( +| | | project ( +| | | | table(sys.t2606a) [ "t2606a"."a" ] COUNT +| | | ) [ "t2606a"."a" as "L5"."a" ], +| | | project ( +| | | | table(sys.t2606b) [ "t2606b"."a" ] COUNT +| | | ) [ "t2606b"."a" as "L6"."a" ] +| | ) [ "L5"."a" as "L11"."a" ] +| ) [ "L11"."a" as "t"."a" ] ) [ "t"."a" ] [ "t"."a" ASC ] #select * from (select * from t2606a except select * from t2606b) as t order by a; % sys.t # table_name @@ -370,16 +374,18 @@ project ( % .plan # table_name % rel # name % clob # type -% 47 # length +% 49 # length project ( -| distinct intersect ( -| | project ( -| | | table(sys.t2606a) [ "t2606a"."a" ] COUNT -| | ) [ "t2606a"."a" as "L5"."a" ], -| | project ( -| | | table(sys.t2606b) [ "t2606b"."a" ] COUNT -| | ) [ "t2606b"."a" as "L6"."a" ] -| ) [ "L5"."a" as "t"."a" ] +| project ( +| | distinct intersect ( +| | | project ( +| | | | table(sys.t2606a) [ "t2606a"."a" ] COUNT +| | | ) [ "t2606a"."a" as "L5"."a" ], +| | | project ( +| | | | table(sys.t2606b) [ "t2606b"."a" ] COUNT +| | | ) [ "t2606b"."a" as "L6"."a" ] +| | ) [ "L5"."a" as "L11"."a" ] +| ) [ "L11"."a" as "t"."a" ] ) [ "t"."a" ] [ "t"."a" ASC ] #select * from (select * from t2606a intersect select * from t2606b) as t order by a; % sys.t # table_name diff --git a/sql/test/BugTracker-2016/Tests/rename_exps.Bug-3974.stable.out b/sql/test/BugTracker-2016/Tests/rename_exps.Bug-3974.stable.out --- a/sql/test/BugTracker-2016/Tests/rename_exps.Bug-3974.stable.out +++ b/sql/test/BugTracker-2016/Tests/rename_exps.Bug-3974.stable.out @@ -36,7 +36,7 @@ Ready. % type, digits, scale, schema, table, column # name % varchar, int, int, str, str, str # type % 6, 2, 1, 0, 3, 3 # length -[ "bigint", 64, 0, "", "L17", "L16" ] +[ "bigint", 64, 0, "", "L20", "L17" ] #drop table foo; # 12:27:17 > diff --git a/sql/test/BugTracker-2018/Tests/All b/sql/test/BugTracker-2018/Tests/All --- a/sql/test/BugTracker-2018/Tests/All +++ b/sql/test/BugTracker-2018/Tests/All @@ -1,10 +1,10 @@ HAVE_LIBPY?pyUDF-crash.Bug-6508 HAVE_HGE?sqlitelogictest-wrong-aggregation-count.Bug-6510 sqlitelogictest-wrong-select-not-between.Bug-6511 +case_with_orderby_limit.Bug-6512 sqlitelogictest-wrong-mal-function-generation.Bug-6513 sqlitelogictest-select-range-null.Bug-6514 insert-null-second-interval-0.Bug-6515 -case_with_orderby_limit.Bug-6512 sqlitelogictest-bat-undefined.Bug-6516 sqlitelogictest-overflow-in-conversion.Bug-6517 HAVE_HGE?sqlitelogictest-count-not-in.Bug-6518 @@ -13,3 +13,5 @@ update-with-correlated-subquery.Bug-6520 sqlitelogictest-in-single-column.Bug-6522 sqlitelogictest-case-subquery-missing.Bug-6523 sqlitelogictest-group-by-having-in-count.Bug-6524 +aggr-in-case.Bug-6526 +crash-orderby-alias.Bug-6527 diff --git a/sql/test/BugTracker-2018/Tests/aggr-in-case.Bug-6526.sql b/sql/test/BugTracker-2018/Tests/aggr-in-case.Bug-6526.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2018/Tests/aggr-in-case.Bug-6526.sql @@ -0,0 +1,49 @@ +start transaction; + +create table "t1" ( + "id" int, + "c1" varchar(100), + "d1" int, + "d2" int +); + +insert into "t1" values +(1, 'A', 50, 80), +(2, 'A', 200, 350), +(3, 'A', 89, 125), +(4, 'B', 4845, 13), +(5, 'B', 194, 597), +(6, 'C', 5636, 5802), +(7, 'C', 375, 3405), +(7, 'D', 365, 0), +(7, 'D', 87, 0); + +-- Works +select + "c1", + sum("d1") as "d1", + sum("d2") as "d2" +from "t1" +group by "c1" +having sum("d1") < case when 5 > 10 then 500 else 400 end; + +-- Works +select + "c1", + sum("d1")as "d1", + sum("d2") as "d2", + 1.0 * sum("d1") / (1.0 * case when sum("d2") > 0 then sum("d2") else null end) as "formula" +from "t1" +group by "c1"; + +-- Crashes +select + "c1", + sum("d1")as "d1", + sum("d2") as "d2", + 1.0 * sum("d1") / (1.0 * case when sum("d2") > 0 then sum("d2") else null end) as "formula" +from "t1" +group by "c1" +having (1.0 * sum("d1") / (1.0 * case when sum("d2") > 0 then sum("d2") else null end)) > 1; + +rollback; diff --git a/sql/test/BugTracker-2018/Tests/crash-orderby-alias.Bug-6527.sql b/sql/test/BugTracker-2018/Tests/crash-orderby-alias.Bug-6527.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2018/Tests/crash-orderby-alias.Bug-6527.sql @@ -0,0 +1,33 @@ + +create table "t1" ("d1" int); +insert into "t1" values (1), (2), (3), (4), (5); + +-- Works +select + "d1" as "value" +from "t1" +order by "value"; + + +-- Works +select + a."value" +from ( + select + "d1" as "value" + from "t1" + order by "d1" +) as a; + + +-- Crashes +select + a."value" +from ( + select + "d1" as "value" + from "t1" + order by "value" +) as a; + +drop table t1; diff --git a/sql/test/BugTracker-2018/Tests/crash-orderby-alias.Bug-6527.stable.err b/sql/test/BugTracker-2018/Tests/crash-orderby-alias.Bug-6527.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2018/Tests/crash-orderby-alias.Bug-6527.stable.err @@ -0,0 +1,34 @@ +stderr of test 'crash-orderby-alias.Bug-6527` in directory 'sql/test/BugTracker-2018` itself: + + +# 21:50:49 > +# 21:50:49 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=31483" "--set" "mapi_usock=/var/tmp/mtest-31627/.s.monetdb.31483" "--set" "monet_prompt=" "--forcemito" "--dbpath=/home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2018" +# 21:50:49 > + +# builtin opt gdk_dbpath = /home/niels/scratch/rc-monetdb/Linux-x86_64/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# builtin opt gdk_vmtrim = no +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 50000 +# builtin opt mapi_open = false +# builtin opt mapi_autosense = false +# builtin opt sql_optimizer = default_pipe +# builtin opt sql_debug = 0 +# cmdline opt gdk_nr_threads = 0 +# cmdline opt mapi_open = true +# cmdline opt mapi_port = 31483 +# cmdline opt mapi_usock = /var/tmp/mtest-31627/.s.monetdb.31483 +# cmdline opt monet_prompt = +# cmdline opt gdk_dbpath = /home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2018 +# cmdline opt gdk_debug = 553648138 + +# 21:50:49 > _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list