Changeset: 4e16b08fa079 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4e16b08fa079 Added Files: sql/test/mergetables/Tests/sqlsmith-apply-outer-join-or.sql sql/test/mergetables/Tests/sqlsmith-apply-outer-join-or.stable.err sql/test/mergetables/Tests/sqlsmith-apply-outer-join-or.stable.out Modified Files: sql/server/rel_optimizer.c sql/test/mergetables/Tests/All Branch: Jul2017 Log Message:
fixed crash in apply handling with anti/semijoins diffs (192 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 @@ -8684,9 +8684,12 @@ rel_apply_rewrite(int *changes, mvc *sql p = rel_projections(sql, rel, NULL, 1, 1); nl = rel_apply(sql, rel_dup(rel->l), rel_dup(r->l), rel->exps, rel->flag); nr = rel_apply(sql, rel_dup(rel->l), rel_dup(r->r), rel->exps, rel->flag); + nl = rel_project(sql->sa, nl, rel_projections(sql, nl, NULL, 1, 1)); + nr = rel_project(sql->sa, nr, rel_projections(sql, nr, NULL, 1, 1)); l = rel_setop(sql->sa, nl, nr, op_union); l->flag = r->flag; - l->exps = list_merge(p, r->exps, (fdup)NULL); + l->exps = p; //list_merge(p, r->exps, (fdup)NULL); + assert(list_length(nl->exps) == list_length(nr->exps) && list_length(nl->exps) == list_length(l->exps)); set_processed(l); rel_destroy(rel); (*changes)++; @@ -8760,11 +8763,17 @@ rel_apply_rewrite(int *changes, mvc *sql return l; } else { /* both unused */ int flag = rel->flag; - list *exps = r->exps; - - assert(is_join(r->op)); - r = rel_crossproduct(sql->sa, rel_dup(r->l), rel_dup(r->r), flag == APPLY_LOJ?op_left:op_join); - r->exps = exps_copy(sql->sa, exps); + + assert(is_join(r->op) || is_semi(r->op)); + if (is_join(r->op)) { + list *exps = r->exps; + + r = rel_crossproduct(sql->sa, rel_dup(r->l), rel_dup(r->r), flag == APPLY_LOJ?op_left:op_join); + r->exps = exps_copy(sql->sa, exps); + } else if (is_semi(r->op)) { + assert(flag != APPLY_LOJ); + r = rel_dup(r); + } rel_destroy(rel); (*changes)++; return r; diff --git a/sql/test/mergetables/Tests/All b/sql/test/mergetables/Tests/All --- a/sql/test/mergetables/Tests/All +++ b/sql/test/mergetables/Tests/All @@ -28,4 +28,5 @@ HAVE_NETCDF?sqlsmith.Bug-6453 HAVE_NETCDF&HAVE_SAMTOOLS?sqlsmith.Bug-6455 HAVE_GEOM?sqlsmith.Bug-6459 HAVE_NETCDF?sqlsmith-exist-lateral +HAVE_NETCDF?sqlsmith-apply-outer-join-or mergedb_drop diff --git a/sql/test/mergetables/Tests/sqlsmith-apply-outer-join-or.sql b/sql/test/mergetables/Tests/sqlsmith-apply-outer-join-or.sql new file mode 100644 --- /dev/null +++ b/sql/test/mergetables/Tests/sqlsmith-apply-outer-join-or.sql @@ -0,0 +1,44 @@ +select + cast(coalesce(ref_8.name, + cast(nullif(ref_7.column, + cast(null as clob)) as clob)) as clob) as c0, + ref_10.function_id as c1, + cast(coalesce(ref_6.action, + ref_6.id) as int) as c2 +from + sys.types as ref_0 + left join sys.netcdf_attrs as ref_1 + inner join sys.keys as ref_6 + inner join sys.storagemodelinput as ref_7 + left join sys.optimizers as ref_8 + inner join sys.users as ref_9 + right join sys.systemfunctions as ref_10 + on (ref_9.default_schema = ref_10.function_id ) + on (true) + on (ref_7.typewidth = ref_9.default_schema ) + inner join sys.systemfunctions as ref_11 + on (ref_9.default_schema = ref_11.function_id ) + on (ref_6.action is NULL) + on (ref_6.action is not NULL) + on (ref_0.radix = ref_11.function_id ) +where EXISTS ( + select + case when ref_8.name is NULL then ref_7.orderidx else ref_7.orderidx end + as c0 + from + (select + ref_8.def as c0, + ref_9.fullname as c1 + from + sys.r2 as ref_12 + where ref_11.function_id is NULL + limit 79) as subq_0 + left join tmp._tables as ref_13 + inner join sys.netcdf_vardim as ref_14 + on (ref_14.dimpos is NULL) + on ((ref_1.att_type is not NULL) + or (ref_0.id is NULL)) + inner join sys.netcdf_vardim as ref_15 + on (ref_10.function_id is not NULL) + where ref_0.systemname is NULL) +limit 77; diff --git a/sql/test/mergetables/Tests/sqlsmith-apply-outer-join-or.stable.err b/sql/test/mergetables/Tests/sqlsmith-apply-outer-join-or.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/mergetables/Tests/sqlsmith-apply-outer-join-or.stable.err @@ -0,0 +1,34 @@ +stderr of test 'sqlsmith-apply-outer-join-or` in directory 'sql/test/mergetables` itself: + + +# 13:26:58 > +# 13:26:58 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=39204" "--set" "mapi_usock=/var/tmp/mtest-12177/.s.monetdb.39204" "--set" "monet_prompt=" "--forcemito" "--dbpath=/home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_mergetables" +# 13:26:58 > + +# 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 = 39204 +# cmdline opt mapi_usock = /var/tmp/mtest-12177/.s.monetdb.39204 +# cmdline opt monet_prompt = +# cmdline opt gdk_dbpath = /home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_mergetables +# cmdline opt gdk_debug = 536870922 + +# 13:26:58 > +# 13:26:58 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-12177" "--port=39204" +# 13:26:58 > + + +# 13:26:58 > +# 13:26:58 > "Done." +# 13:26:58 > + diff --git a/sql/test/mergetables/Tests/sqlsmith-apply-outer-join-or.stable.out b/sql/test/mergetables/Tests/sqlsmith-apply-outer-join-or.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/mergetables/Tests/sqlsmith-apply-outer-join-or.stable.out @@ -0,0 +1,50 @@ +stdout of test 'sqlsmith-apply-outer-join-or` in directory 'sql/test/mergetables` itself: + + +# 13:26:58 > +# 13:26:58 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=39204" "--set" "mapi_usock=/var/tmp/mtest-12177/.s.monetdb.39204" "--set" "monet_prompt=" "--forcemito" "--dbpath=/home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_mergetables" +# 13:26:58 > + +# MonetDB 5 server v11.27.6 +# This is an unreleased version +# Serving database 'mTests_sql_test_mergetables', using 4 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 128bit integers +# Found 7.330 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:39204/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-12177/.s.monetdb.39204 +# MonetDB/GIS module loaded +# MonetDB/SQL module loaded + +Ready. + +# 13:26:58 > +# 13:26:58 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-12177" "--port=39204" +# 13:26:58 > + +#select +# cast(coalesce(ref_8.name, +# cast(nullif(ref_7.column, +# cast(null as clob)) as clob)) as clob) as c0, +# ref_10.function_id as c1, +# cast(coalesce(ref_6.action, +# ref_6.id) as int) as c2 +#from +# sys.types as ref_0 +# left join sys.netcdf_attrs as ref_1 +# inner join sys.keys as ref_6 +# inner join sys.storagemodelinput as ref_7 +# left join sys.optimizers as ref_8 +# inner join sys.users as ref_9 +# right join sys.systemfunctions as ref_10 +% .L36, .L40, .L43 # table_name +% c0, c1, c2 # name +% clob, int, int # type +% 0, 1, 1 # length + +# 13:26:58 > +# 13:26:58 > "Done." +# 13:26:58 > + _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list