Changeset: 595f2fed54eb for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=595f2fed54eb Added Files: sql/test/BugTracker-2017/Tests/coalesc-limit.Bug-6316.stable.err sql/test/BugTracker-2017/Tests/coalesc-limit.Bug-6316.stable.out sql/test/BugTracker-2017/Tests/exist-bigint-missing.Bug-6315.stable.err sql/test/BugTracker-2017/Tests/exist-bigint-missing.Bug-6315.stable.out sql/test/BugTracker-2017/Tests/lateral02.Bug-6314.stable.err sql/test/BugTracker-2017/Tests/lateral02.Bug-6314.stable.out sql/test/BugTracker-2017/Tests/limit_clause.Bug-6312.stable.err sql/test/BugTracker-2017/Tests/limit_clause.Bug-6312.stable.out sql/test/BugTracker-2017/Tests/type-resolution-error.Bugs-6313.stable.err sql/test/BugTracker-2017/Tests/type-resolution-error.Bugs-6313.stable.out Modified Files: sql/server/rel_optimizer.c sql/server/rel_rel.c sql/server/rel_rel.h sql/server/rel_select.c sql/test/BugTracker-2017/Tests/lateral.Bug-6310.sql Branch: default Log Message:
fixes for bug 6313, ie compare types of a union on the parts which need to be unioned (ie not the intermediate selects + subquery crossproducts or joins) diffs (truncated from 649 to 300 lines): 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 @@ -7333,7 +7333,7 @@ rel_split_outerjoin(int *changes, mvc *s e = rel->exps->h->data; nll->exps = exps_copy(sql->sa, e->l); nlr->exps = exps_copy(sql->sa, e->r); - nl = rel_or( sql, nll, nlr, NULL, NULL, NULL); + nl = rel_or( sql, NULL, nll, nlr, NULL, NULL, NULL); if (rel->op == op_full) { l = rel_dup(l); diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c --- a/sql/server/rel_rel.c +++ b/sql/server/rel_rel.c @@ -1095,9 +1095,9 @@ rel_push_join(mvc *sql, sql_rel *rel, sq } sql_rel * -rel_or(mvc *sql, sql_rel *l, sql_rel *r, list *oexps, list *lexps, list *rexps) +rel_or(mvc *sql, sql_rel *rel, sql_rel *l, sql_rel *r, list *oexps, list *lexps, list *rexps) { - sql_rel *rel, *ll = l->l, *rl = r->l; + sql_rel *ll = l->l, *rl = r->l; list *ls, *rs; assert(!lexps || l == r); @@ -1115,7 +1115,7 @@ rel_or(mvc *sql, sql_rel *l, sql_rel *r, /* favor or expressions over union */ if (l->op == r->op && l->op == op_select && - ll == rl && !rel_is_ref(l) && !rel_is_ref(r)) { + ll == rl && ll == rel && !rel_is_ref(l) && !rel_is_ref(r)) { sql_exp *e = exp_or(sql->sa, l->exps, r->exps); list *nl = new_exp_list(sql->sa); @@ -1135,8 +1135,13 @@ rel_or(mvc *sql, sql_rel *l, sql_rel *r, return l; } - ls = rel_projections(sql, l, NULL, 1, 1); - rs = rel_projections(sql, r, NULL, 1, 1); + if (rel) { + ls = rel_projections(sql, rel, NULL, 1, 1); + rs = rel_projections(sql, rel, NULL, 1, 1); + } else { + ls = rel_projections(sql, l, NULL, 1, 1); + rs = rel_projections(sql, r, NULL, 1, 1); + } set_processed(l); set_processed(r); rel = rel_setop_check_types(sql, l, r, ls, rs, op_union); diff --git a/sql/server/rel_rel.h b/sql/server/rel_rel.h --- a/sql/server/rel_rel.h +++ b/sql/server/rel_rel.h @@ -70,7 +70,7 @@ extern list *rel_projections(mvc *sql, s extern sql_rel *rel_push_select(mvc *sql, sql_rel *rel, sql_exp *ls, sql_exp *e); extern sql_rel *rel_push_join(mvc *sql, sql_rel *rel, sql_exp *ls, sql_exp *rs, sql_exp *rs2, sql_exp *e); -extern sql_rel *rel_or(mvc *sql, sql_rel *l, sql_rel *r, list *oexps, list *lexps, list *rexps); +extern sql_rel *rel_or(mvc *sql, sql_rel *rel, sql_rel *l, sql_rel *r, list *oexps, list *lexps, list *rexps); extern sql_table *rel_ddl_table_get(sql_rel *r); 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 @@ -1062,9 +1062,9 @@ rel_column_ref(mvc *sql, sql_rel **rel, if (rel && *rel && (*rel)->card == CARD_AGGR && f == sql_sel) { sql_rel *gb = *rel; - while(gb->l && !is_groupby(gb->op)) + while(gb->l && !is_groupby(gb->op) && is_project(gb->op)) gb = gb->l; - if (gb && gb->l && rel_bind_column2(sql, gb->l, tname, cname, f)) + if (gb && is_groupby(gb->op) && gb->l && rel_bind_column2(sql, gb->l, tname, cname, f)) return sql_error(sql, 02, "SELECT: cannot use non GROUP BY column '%s.%s' in query results without an aggregate function", tname, cname); } return sql_error(sql, 02, "42S22!SELECT: no such column '%s.%s'", tname, cname); @@ -2353,6 +2353,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel, rexps = rr->exps; rr = rr->l; } + rel = NULL; sql->pushdown = pushdown; } else { lr = rel_logical_exp(sql, lr, lo, f); @@ -2361,7 +2362,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel, if (!lr || !rr) return NULL; - return rel_or(sql, lr, rr, exps, lexps, rexps); + return rel_or(sql, rel, lr, rr, exps, lexps, rexps); } case SQL_AND: { diff --git a/sql/test/BugTracker-2017/Tests/coalesc-limit.Bug-6316.stable.err b/sql/test/BugTracker-2017/Tests/coalesc-limit.Bug-6316.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2017/Tests/coalesc-limit.Bug-6316.stable.err @@ -0,0 +1,34 @@ +stderr of test 'coalesc-limit.Bug-6316` in directory 'sql/test/BugTracker-2017` itself: + + +# 16:32:28 > +# 16:32:28 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=36678" "--set" "mapi_usock=/var/tmp/mtest-27183/.s.monetdb.36678" "--set" "monet_prompt=" "--forcemito" "--dbpath=/home/niels/scratch/rc-old/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2017" +# 16:32:28 > + +# builtin opt gdk_dbpath = /home/niels/scratch/rc-old/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 = 36678 +# cmdline opt mapi_usock = /var/tmp/mtest-27183/.s.monetdb.36678 +# cmdline opt monet_prompt = +# cmdline opt gdk_dbpath = /home/niels/scratch/rc-old/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2017 +# cmdline opt gdk_debug = 536870922 + +# 16:32:28 > +# 16:32:28 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-27183" "--port=36678" +# 16:32:28 > + + +# 16:32:28 > +# 16:32:28 > "Done." +# 16:32:28 > + diff --git a/sql/test/BugTracker-2017/Tests/coalesc-limit.Bug-6316.stable.out b/sql/test/BugTracker-2017/Tests/coalesc-limit.Bug-6316.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2017/Tests/coalesc-limit.Bug-6316.stable.out @@ -0,0 +1,39 @@ +stdout of test 'coalesc-limit.Bug-6316` in directory 'sql/test/BugTracker-2017` itself: + + +# 16:32:28 > +# 16:32:28 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=36678" "--set" "mapi_usock=/var/tmp/mtest-27183/.s.monetdb.36678" "--set" "monet_prompt=" "--forcemito" "--dbpath=/home/niels/scratch/rc-old/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2017" +# 16:32:28 > + +# MonetDB 5 server v11.28.0 +# This is an unreleased version +# Serving database 'mTests_sql_test_BugTracker-2017', using 4 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 128bit integers +# Found 7.331 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2017 MonetDB B.V., all rights reserved +# Visit https://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://localhost.nes.nl:36678/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-27183/.s.monetdb.36678 +# MonetDB/GIS module loaded +# MonetDB/SQL module loaded + +Ready. + +# 16:32:28 > +# 16:32:28 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-27183" "--port=36678" +# 16:32:28 > + +#select role_id, +# cast(coalesce(role_id, login_id) as int) +#from sys.user_role +#limit 145; +% sys.user_role, sys.L3 # table_name +% role_id, L3 # name +% int, int # type +% 1, 1 # length + +# 16:32:28 > +# 16:32:28 > "Done." +# 16:32:28 > + diff --git a/sql/test/BugTracker-2017/Tests/exist-bigint-missing.Bug-6315.stable.err b/sql/test/BugTracker-2017/Tests/exist-bigint-missing.Bug-6315.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2017/Tests/exist-bigint-missing.Bug-6315.stable.err @@ -0,0 +1,57 @@ +stderr of test 'exist-bigint-missing.Bug-6315` in directory 'sql/test/BugTracker-2017` itself: + + +# 16:32:27 > +# 16:32:27 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=36678" "--set" "mapi_usock=/var/tmp/mtest-27183/.s.monetdb.36678" "--set" "monet_prompt=" "--forcemito" "--dbpath=/home/niels/scratch/rc-old/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2017" +# 16:32:27 > + +# builtin opt gdk_dbpath = /home/niels/scratch/rc-old/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 = 36678 +# cmdline opt mapi_usock = /var/tmp/mtest-27183/.s.monetdb.36678 +# cmdline opt monet_prompt = +# cmdline opt gdk_dbpath = /home/niels/scratch/rc-old/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2017 +# cmdline opt gdk_debug = 536870922 +#WARNING To speedup user.columnsize a bulk operator implementation is needed +# X_110:bat[:lng] := mal.multiplex("user":str, "columnsize":str, X_46:bat[:str], X_60:bat[:lng], X_67:bat[:lng]); +#WARNING To speedup user.heapsize a bulk operator implementation is needed +# X_113:bat[:lng] := mal.multiplex("user":str, "heapsize":str, X_46:bat[:str], X_67:bat[:lng], X_74:bat[:int]); +#WARNING To speedup user.hashsize a bulk operator implementation is needed +# X_115:bat[:lng] := mal.multiplex("user":str, "hashsize":str, X_81:bat[:bit], X_60:bat[:lng]); +#WARNING To speedup user.imprintsize a bulk operator implementation is needed +# X_117:bat[:lng] := mal.multiplex("user":str, "imprintsize":str, X_60:bat[:lng], X_46:bat[:str]); + +# 16:32:28 > +# 16:32:28 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-27183" "--port=36678" +# 16:32:28 > + +MAPI = (monetdb) /var/tmp/mtest-27183/.s.monetdb.36678 +QUERY = insert into sys.privileges values ( + 1, + 31, + 87, + case when EXISTS ( + select (select io from sys.querylog_calls) as c0 + from + sys.rejects as ref_0 + where ref_0.fldid is NULL) + then 56 else 56 end , + case when (select dependency_type_name from sys.dependency_types) + is not NULL then 7 else 7 end + ); +ERROR = !cardinality violation, scalar value expected + +# 16:32:28 > +# 16:32:28 > "Done." +# 16:32:28 > + diff --git a/sql/test/BugTracker-2017/Tests/exist-bigint-missing.Bug-6315.stable.out b/sql/test/BugTracker-2017/Tests/exist-bigint-missing.Bug-6315.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2017/Tests/exist-bigint-missing.Bug-6315.stable.out @@ -0,0 +1,102 @@ +stdout of test 'exist-bigint-missing.Bug-6315` in directory 'sql/test/BugTracker-2017` itself: + + +# 16:32:27 > +# 16:32:27 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=36678" "--set" "mapi_usock=/var/tmp/mtest-27183/.s.monetdb.36678" "--set" "monet_prompt=" "--forcemito" "--dbpath=/home/niels/scratch/rc-old/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2017" +# 16:32:27 > + +# MonetDB 5 server v11.28.0 +# This is an unreleased version +# Serving database 'mTests_sql_test_BugTracker-2017', using 4 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 128bit integers +# Found 7.331 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2017 MonetDB B.V., all rights reserved +# Visit https://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://localhost.nes.nl:36678/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-27183/.s.monetdb.36678 +# MonetDB/GIS module loaded +# MonetDB/SQL module loaded + +Ready. + +# 16:32:28 > +# 16:32:28 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-27183" "--port=36678" +# 16:32:28 > + +#select +# case when EXISTS ( select hashes from sys.tablestoragemodel ) +# then (true) +# else (false) +# end +#from sys.tables; +% .L72 # table_name +% L72 # name +% boolean # type +% 5 # length +[ true ] +[ true ] +[ true ] +[ true ] +[ true ] +[ true ] +[ true ] +[ true ] +[ true ] +[ true ] +[ true ] +[ true ] +[ true ] +[ true ] +[ true ] +[ true ] +[ true ] +[ true ] _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list