Changeset: 860ca030d222 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=860ca030d222
Added Files:
        sql/test/mergetables/Tests/sqlsmith.Bug-6451.sql
        sql/test/mergetables/Tests/sqlsmith.Bug-6451.stable.err
        sql/test/mergetables/Tests/sqlsmith.Bug-6451.stable.out
        sql/test/mergetables/Tests/sqlsmith.Bug-6453.sql
        sql/test/mergetables/Tests/sqlsmith.Bug-6453.stable.err
        sql/test/mergetables/Tests/sqlsmith.Bug-6453.stable.out
        sql/test/mergetables/Tests/sqlsmith.Bug-6455.sql
        sql/test/mergetables/Tests/sqlsmith.Bug-6455.stable.err
        sql/test/mergetables/Tests/sqlsmith.Bug-6455.stable.out
Modified Files:
        sql/server/rel_dump.c
        sql/server/rel_optimizer.c
        sql/server/rel_rel.c
        sql/server/rel_select.c
        sql/test/mergetables/Tests/All
Branch: Jul2017
Log Message:

fixes for bugs 6451, 6453 and 6455

fixed bug in apply expression name conflict resolution

fixed naming of relations with correlations

also added tests and stable output


diffs (truncated from 699 to 300 lines):

diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -72,6 +72,7 @@ exp_print(mvc *sql, stream *fout, sql_ex
        (void)sql;
        if (!e)
                return;
+       //mnstr_printf(fout, "%p ", e);
        switch(e->type) {
        case e_psm: {
                if (e->flag & PSM_SET) {
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
@@ -8345,13 +8345,6 @@ exp_mark_conflicts(mvc *sql, sql_exp *e,
                        if (!ne->used)
                                exp_label_table(sql->sa, ne, ++sql->label);
                        ne->used = 1;
-               } else if (!ne && always && e->name[0] == '%') {
-                       ne = exp_column(sql->sa, e->l, e->r, exp_subtype(e), 
e->card, has_nil(e), is_intern(e));
-                       exp_label_table(sql->sa, ne, ++sql->label);
-                       ne->used = 1;
-                       if (e->p)
-                               ne->p = prop_copy(sql->sa, e->p);
-                       append(conflicts, ne);
                }
        }
 }
@@ -8692,6 +8685,7 @@ rel_apply_rewrite(int *changes, mvc *sql
                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);
                l = rel_setop(sql->sa, nl, nr, op_union);
+               l->flag = r->flag;
                l->exps = list_merge(p, r->exps, (fdup)NULL);
                set_processed(l);
                rel_destroy(rel);
@@ -8759,7 +8753,6 @@ rel_apply_rewrite(int *changes, mvc *sql
                        sql_rel *nl = rel_apply(sql, rel_dup(rel->l), 
rel_dup(r->l), rel->exps, rel->flag);
                        sql_rel *nr = rel_apply(sql, rel_dup(rel->l), 
rel_dup(r->r), rel->exps, rel->flag);
 
-                       assert(is_semi(r->op));
                        l = rel_crossproduct(sql->sa, nl, nr, r->op);
                        l->exps = exps_copy(sql->sa, r->exps);
                        rel_destroy(rel);
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
@@ -15,8 +15,11 @@
 const char *
 rel_name( sql_rel *r )
 {
-       if (!is_project(r->op) && !is_base(r->op) && r->l)
+       if (!is_project(r->op) && !is_base(r->op) && r->l) {
+               if (is_apply(r->op))
+                       return rel_name(r->r);
                return rel_name(r->l);
+       }
        if (r->exps && list_length(r->exps)) {
                sql_exp *e = r->exps->h->data;
                if (e->rname)
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
@@ -204,14 +204,16 @@ static sql_rel * rel_unionjoinquery(mvc 
 static sql_rel *
 rel_table_optname(mvc *sql, sql_rel *sq, symbol *optname)
 {
+       sql_rel *osq = sq;
+
        if (optname && optname->token == SQL_NAME) {
                dlist *columnrefs = NULL;
                char *tname = optname->data.lval->h->data.sval;
                list *l = sa_list(sql->sa);
 
                columnrefs = optname->data.lval->h->next->data.lval;
-               if (!is_project(sq->op) && !is_base(sq->op)) 
-                       sq = rel_project(sql->sa, sq, rel_projections(sql, sq, 
NULL, 1, 1));
+               if (is_apply(sq->op))
+                       sq = sq->r;
                if (columnrefs && sq->exps) {
                        dnode *d = columnrefs->h;
                        node *ne = sq->exps->h;
@@ -251,7 +253,7 @@ rel_table_optname(mvc *sql, sql_rel *sq,
                        }
                }
        }
-       return sq;
+       return osq;
 }
 
 static sql_rel *
@@ -5283,7 +5285,13 @@ rel_joinquery_(mvc *sql, sql_rel *rel, s
        }
 
        lateral = check_is_lateral(tab2);
-       t1 = table_ref(sql, rel, tab1, 0);
+       t1 = table_ref(sql, NULL, tab1, 0);
+       if (rel && !t1 && sql->session->status != -ERR_AMBIGUOUS) {
+               /* reset error */
+               sql->session->status = 0;
+               sql->errstr[0] = 0;
+               t1 = table_ref(sql, rel_dup(rel), tab1, 0);
+       }
        if (t1) {
                if (lateral) {
                        list *pre_exps = rel_projections(sql, t1, NULL, 1, 1);
@@ -5294,9 +5302,17 @@ rel_joinquery_(mvc *sql, sql_rel *rel, s
                                t2->exps = list_merge(t2->exps, pre_exps, 
(fdup)NULL);
                        }
                } else {
-                       t2 = table_ref(sql, rel, tab2, 0);
+                       t2 = table_ref(sql, NULL, tab2, 0);
+                       if (rel && !t2 && sql->session->status != 
-ERR_AMBIGUOUS) {
+                               /* reset error */
+                               sql->session->status = 0;
+                               sql->errstr[0] = 0;
+                               t2 = table_ref(sql, rel_dup(rel), tab2, 0);
+                       }
                }
        }
+       if (rel)
+               rel_destroy(rel);
        if (!t1 || !t2)
                return NULL;
 
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
@@ -23,4 +23,7 @@ addtable
 mergedb_create
 mergedb.Bug-6820
 sqlsmith.Bug-6426
+sqlsmith.Bug-6451
+sqlsmith.Bug-6453
+sqlsmith.Bug-6455
 mergedb_drop
diff --git a/sql/test/mergetables/Tests/sqlsmith.Bug-6451.sql 
b/sql/test/mergetables/Tests/sqlsmith.Bug-6451.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/mergetables/Tests/sqlsmith.Bug-6451.sql
@@ -0,0 +1,53 @@
+select  
+  ref_2.y as c0, 
+  cast(coalesce(ref_2.z,
+    ref_2.z) as clob) as c1, 
+  ref_2.z as c2, 
+  case when ref_2.y is NULL then subq_0.c0 else subq_0.c0 end
+     as c3, 
+  ref_2.y as c4, 
+  cast(coalesce(subq_0.c0,
+    ref_2.z) as clob) as c5, 
+  ref_2.x as c6
+from 
+  sys.r2 as ref_2,
+  lateral (select  
+        ref_2.z as c0
+      from 
+        sys.netcdf_vardim as ref_3
+      where ref_3.dim_id is NULL) as subq_0
+where EXISTS (
+  select  
+      case when false then ref_9.z else ref_9.z end
+         as c0, 
+      subq_2.c5 as c1, 
+      subq_0.c0 as c2, 
+      ref_2.z as c3, 
+      subq_2.c5 as c4
+    from 
+      (select  
+                ref_2.y as c0, 
+                ref_4.type as c1, 
+                subq_0.c0 as c2, 
+                ref_2.y as c3
+              from 
+                sys.keys as ref_4
+              where ref_2.z is NULL) as subq_1
+          left join (select  
+                ref_5.gr_name as c0, 
+                ref_5.att_name as c1, 
+                ref_2.z as c2, 
+                subq_0.c0 as c3, 
+                44 as c4, 
+                subq_0.c0 as c5, 
+                ref_2.y as c6, 
+                ref_2.x as c7, 
+                ref_2.y as c8
+              from 
+                sys.netcdf_attrs as ref_5
+              where false) as subq_2
+          on (subq_1.c2 = subq_2.c2 )
+        right join sys.r as ref_9
+        on (subq_2.c4 = ref_9.x )
+    where ref_9.x is not NULL)
+limit 64;
diff --git a/sql/test/mergetables/Tests/sqlsmith.Bug-6451.stable.err 
b/sql/test/mergetables/Tests/sqlsmith.Bug-6451.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/mergetables/Tests/sqlsmith.Bug-6451.stable.err
@@ -0,0 +1,34 @@
+stderr of test 'sqlsmith.Bug-6451` in directory 'sql/test/mergetables` itself:
+
+
+# 12:30:55 >  
+# 12:30:55 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=36313" "--set" 
"mapi_usock=/var/tmp/mtest-26380/.s.monetdb.36313" "--set" "monet_prompt=" 
"--forcemito" 
"--dbpath=/home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_mergetables"
+# 12:30:55 >  
+
+# 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 = 36313
+# cmdline opt  mapi_usock = /var/tmp/mtest-26380/.s.monetdb.36313
+# 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
+
+# 12:30:55 >  
+# 12:30:55 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-26380" "--port=36313"
+# 12:30:55 >  
+
+
+# 12:30:56 >  
+# 12:30:56 >  "Done."
+# 12:30:56 >  
+
diff --git a/sql/test/mergetables/Tests/sqlsmith.Bug-6451.stable.out 
b/sql/test/mergetables/Tests/sqlsmith.Bug-6451.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/mergetables/Tests/sqlsmith.Bug-6451.stable.out
@@ -0,0 +1,57 @@
+stdout of test 'sqlsmith.Bug-6451` in directory 'sql/test/mergetables` itself:
+
+
+# 12:30:55 >  
+# 12:30:55 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=36313" "--set" 
"mapi_usock=/var/tmp/mtest-26380/.s.monetdb.36313" "--set" "monet_prompt=" 
"--forcemito" 
"--dbpath=/home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_mergetables"
+# 12:30:55 >  
+
+# 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:36313/
+# Listening for UNIX domain connection requests on 
mapi:monetdb:///var/tmp/mtest-26380/.s.monetdb.36313
+# MonetDB/GIS module loaded
+# MonetDB/SQL module loaded
+
+Ready.
+
+# 12:30:55 >  
+# 12:30:55 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-26380" "--port=36313"
+# 12:30:55 >  
+
+#select  
+#  ref_2.y as c0, 
+#  cast(coalesce(ref_2.z,
+#    ref_2.z) as clob) as c1, 
+#  ref_2.z as c2, 
+#  case when ref_2.y is NULL then subq_0.c0 else subq_0.c0 end
+#     as c3, 
+#  ref_2.y as c4, 
+#  cast(coalesce(subq_0.c0,
+#    ref_2.z) as clob) as c5, 
+#  ref_2.x as c6
+#from 
+#  sys.r2 as ref_2,
+#  lateral (select  
+#        ref_2.z as c0
+#      from 
+#        sys.netcdf_vardim as ref_3
+#      where ref_3.dim_id is NULL) as subq_0
+#where EXISTS (
+#  select  
+#      case when false then ref_9.z else ref_9.z end
+#         as c0, 
+% sys.L62,     sys.L65,        sys.L67,        sys.L71,        sys.L73,        
sys.L76,        sys.L100 # table_name
+% c0,  c1,     c2,     c3,     c4,     c5,     c6 # name
+% int, clob,   clob,   clob,   int,    clob,   int # type
+% 1,   0,      0,      0,      1,      0,      1 # length
+
+# 12:30:56 >  
+# 12:30:56 >  "Done."
+# 12:30:56 >  
+
diff --git a/sql/test/mergetables/Tests/sqlsmith.Bug-6453.sql 
b/sql/test/mergetables/Tests/sqlsmith.Bug-6453.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/mergetables/Tests/sqlsmith.Bug-6453.sql
@@ -0,0 +1,68 @@
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to