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

Reply via email to