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