Changeset: eab7f8a17e65 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=eab7f8a17e65
Added Files:
        sql/test/BugTracker-2017/Tests/createorreplace-system-func.Bug-6499.sql
        
sql/test/BugTracker-2017/Tests/createorreplace-system-func.Bug-6499.stable.err
        
sql/test/BugTracker-2017/Tests/createorreplace-system-func.Bug-6499.stable.out
        sql/test/BugTracker-2017/Tests/select-in-returns-null.Bug-6491.sql
        
sql/test/BugTracker-2017/Tests/select-in-returns-null.Bug-6491.stable.err
        
sql/test/BugTracker-2017/Tests/select-in-returns-null.Bug-6491.stable.out
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-comparisons-between-floating-points-and-NULL.Bug-6496.stable.err
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-comparisons-between-floating-points-and-NULL.Bug-6496.stable.out
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-hidden-alias.Bug-6495.stable.err
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-hidden-alias.Bug-6495.stable.out
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-min-distinct-empty-table.Bug-6493.stable.err
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-min-distinct-empty-table.Bug-6493.stable.out
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-not-between.Bug-6497.stable.err
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-not-between.Bug-6497.stable.out
        sql/test/BugTracker-2017/Tests/union_all_null.Bug-6487.sql
        sql/test/BugTracker-2017/Tests/union_all_null.Bug-6487.stable.err
        sql/test/BugTracker-2017/Tests/union_all_null.Bug-6487.stable.out
Modified Files:
        sql/backends/monet5/sql_statement.c
        sql/common/sql_types.c
        sql/server/rel_optimizer.c
        sql/server/rel_psm.c
        sql/server/rel_select.c
        sql/server/sql_parser.y
        sql/server/sql_semantic.h
        
sql/test/BugDay_2005-10-06_2.9.3/Tests/simple_union.SF-1005596.stable.out
        
sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
        sql/test/BugTracker-2012/Tests/null_except_null.Bug-3040.stable.out
        
sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.err.int128
        sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.out
        
sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.out.int128
        sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out
        
sql/test/BugTracker-2015/Tests/crash_in_reduce_groupby.Bug-3818.stable.out.int128
        sql/test/BugTracker-2016/Tests/select-in-from.Bug-6121.stable.out
        sql/test/BugTracker-2017/Tests/All
        
sql/test/BugTracker-2017/Tests/distinct_minus_count_distinct.Bug-6296.stable.out
        sql/test/BugTracker-2017/Tests/limit.Bug-6322.stable.out
        sql/test/BugTracker-2017/Tests/spurious_error.Bug-6344.stable.out
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-comparisons-between-floating-points-and-NULL.Bug-6496.sql
        
sql/test/BugTracker-2017/Tests/sqlitelogictest-select-in-column.Bug-6490.stable.out
        sql/test/BugTracker-2017/Tests/sqllitelogistest_case.Bug-6335.stable.err
        sql/test/BugTracker-2017/Tests/sqllitelogistest_case.Bug-6335.stable.out
        
sql/test/BugTracker-2017/Tests/type-resolution-error.Bugs-6313.stable.err
        
sql/test/bugs/Tests/subselect_multiple_unionall_where_1=1-bug-sf-1005596.stable.out
        sql/test/bugs/Tests/union_all-bug-sf-941788.stable.out
        sql/test/mapi/Tests/sql_int128.stable.out.int128
        sql/test/mergetables/Tests/sqlsmith.Bug-6480.stable.err
        sql/test/remote/Tests/partition_elim.stable.out
Branch: default
Log Message:

merged with Jul2017


diffs (truncated from 1889 to 300 lines):

diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -1574,7 +1574,7 @@ select2_join2(backend *be, stmt *op1, st
                q = pushBit(mb, q, TRUE);
                q = pushBit(mb, q, TRUE);
                q = pushBit(mb, q, TRUE);
-               q = pushBit(mb, q, FALSE);
+               q = pushBit(mb, q, (anti)?TRUE:FALSE);
                if (q == NULL)
                        return NULL;
        } else {
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -350,8 +350,9 @@ subtype_cmp(sql_subtype *t1, sql_subtype
 {
        if (!t1->type || !t2->type)
                return -1;
+
        if ( !(t1->type->eclass == t2->type->eclass && 
-              EC_INTERVAL(t1->type->eclass)) &&
+             (EC_INTERVAL(t1->type->eclass) || t1->type->eclass == EC_NUM)) &&
              (t1->digits != t2->digits || 
              (!(t1->type->eclass == t2->type->eclass && 
               t1->type->eclass == EC_FLT) &&
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
@@ -5063,6 +5063,9 @@ rel_reduce_groupby_exps(int *changes, mv
 
                                if (!exp_is_atom(e))
                                        append(ngbe, e);
+                               /* we need at least one gbe */
+                               else if (!n->next && list_empty(ngbe))
+                                       append(ngbe, e);
                                else
                                        append(dgbe, e);
                        }
@@ -5088,8 +5091,8 @@ rel_reduce_groupby_exps(int *changes, mv
                                        append(nexps, e);
                                }
                                rel->exps = nexps;
-                       }
-                       (*changes)++;
+                               (*changes)++;
+                       }
                }
        }
        return rel;
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -810,6 +810,9 @@ rel_create_func(mvc *sql, dlist *qname, 
                        }
                        if (mvc_check_dependency(sql, func->base.id, 
!IS_PROC(func) ? FUNC_DEPENDENCY : PROC_DEPENDENCY, NULL))
                                return sql_error(sql, 02, SQLSTATE(42000) 
"CREATE OR REPLACE %s%s: there are database objects dependent on %s%s %s;", KF, 
F, kf, fn, func->base.name);
+                       if (!func->s) {
+                               return sql_error(sql, 02, SQLSTATE(42000) 
"CREATE OR REPLACE %s%s: not allowed to replace system %s%s %s;", KF, F, kf, 
fn, func->base.name);
+                       }
 
                        mvc_drop_func(sql, s, func, action);
                        sf = NULL;
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
@@ -1450,7 +1450,7 @@ rel_convert_types(mvc *sql, sql_exp **L,
                sql_subtype *i = lt;
                sql_subtype *r = rt;
 
-               if (subtype_cmp(lt, rt) != 0 || lt->type->localtype==0 || 
rt->type->localtype==0) {
+               if (subtype_cmp(lt, rt) != 0 || (tpe == type_equal_no_any && 
(lt->type->localtype==0 || rt->type->localtype==0))) {
                        sql_subtype super;
 
                        supertype(&super, r, i);
@@ -2139,7 +2139,7 @@ rel_logical_value_exp(mvc *sql, sql_rel 
                                        if (l)
                                                st = exp_subtype(l);
                                }
-                               if (l && !r && !n->next) { /* possibly a (not) 
in function call */
+                               if (l && !r) { /* possibly a (not) in function 
call */
                                        /* reset error */
                                        sql->session->status = 0;
                                        sql->errstr[0] = 0;
@@ -2147,23 +2147,17 @@ rel_logical_value_exp(mvc *sql, sql_rel 
                                        z = left;
                                        r = rel_value_exp(sql, &z, sval, f, 
ek); 
                                        if (z == left && r) {
-                                               sql_subfunc *f = NULL;
-
-                                               l = rel_check_type(sql, 
exp_subtype(r), l, type_equal);
-                                               if (!l) 
-                                                       return NULL;
-                                               f = sql_bind_func(sql->sa, 
sql->session->schema, "=", exp_subtype(l), exp_subtype(r), F_FUNC);
-                                               if (f)
-                                                       l = exp_binop(sql->sa, 
l, r, f);
-                                               if (f && l && sc->token == 
SQL_NOT_IN) {
-                                                       f = 
sql_bind_func(sql->sa, sql->session->schema, "not", exp_subtype(l), NULL, 
F_FUNC);
-                                                       return 
exp_unop(sql->sa, l, f);
-                                               } else if (f && l && sc->token 
== SQL_IN) {
-                                                       return l;
+                                               if (l && r && 
IS_ANY(st->type->eclass)){
+                                                       l = rel_check_type(sql, 
exp_subtype(r), l, type_equal);
+                                                       if (l)
+                                                               st = 
exp_subtype(l);
+                                                       else
+                                                               return NULL;
                                                }
-
-                                       }       
-                                       r = NULL;
+                                               z = NULL;
+                                       } else {
+                                               r = NULL;
+                                       }
                                }
                                if (!l || !r || !(r=rel_check_type(sql, st, r, 
type_equal))) {
                                        rel_destroy(right);
@@ -2227,7 +2221,11 @@ rel_logical_value_exp(mvc *sql, sql_rel 
                                reset_processed(left);
                        } else
                                *rel = left;
-                       if (sc->token == SQL_NOT_IN)
+                       if (f == sql_sel) {
+                               e = rel_unop_(sql, r, NULL, "isnull", 
card_value);
+                               if (sc->token == SQL_IN)
+                                       e = rel_unop_(sql, e, NULL, "not", 
card_value);
+                       } else if (sc->token == SQL_NOT_IN)
                                e = rel_binop_(sql, l, r, NULL, "<>", 
card_value);
                        else
                                e = rel_binop_(sql, l, r, NULL, "=", 
card_value);
@@ -2601,7 +2599,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel, 
                                        sql_exp *e;
 
                                        l = ll->h->data;
-                                       if (rel_convert_types(sql, &l, &r, 1, 
type_equal) < 0) 
+                                       if (rel_convert_types(sql, &l, &r, 1, 
type_equal_no_any) < 0) 
                                                return NULL;
                                        e = exp_compare(sql->sa, l, r, 
cmp_equal );
                                        if (!e)
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -713,16 +713,17 @@ create:
 create_or_replace:
        create
 |      CREATE OR REPLACE { $$ = TRUE; }
-
+;
 
 if_exists:
        /* empty */   { $$ = FALSE; }
 |      IF EXISTS     { $$ = TRUE; }
+;
 
 if_not_exists:
        /* empty */   { $$ = FALSE; }
 |      IF NOT EXISTS { $$ = TRUE; }
-
+;
 
 drop:
     DROP               
@@ -4168,6 +4169,7 @@ column_exp:
 opt_alias_name:
     /* empty */        { $$ = NULL; }
  |  AS ident   { $$ = $2; }
+ |  ident      { $$ = $1; }
  ;
 
 atom:
diff --git a/sql/server/sql_semantic.h b/sql/server/sql_semantic.h
--- a/sql/server/sql_semantic.h
+++ b/sql/server/sql_semantic.h
@@ -32,6 +32,7 @@ extern sql_subtype *supertype(sql_subtyp
 typedef enum {
        type_set,       /* set operations have very limiting coersion rules */
        type_equal,
+       type_equal_no_any,
        type_cast       /* also truncate */
 } check_type;
 
diff --git 
a/sql/test/BugDay_2005-10-06_2.9.3/Tests/simple_union.SF-1005596.stable.out 
b/sql/test/BugDay_2005-10-06_2.9.3/Tests/simple_union.SF-1005596.stable.out
--- a/sql/test/BugDay_2005-10-06_2.9.3/Tests/simple_union.SF-1005596.stable.out
+++ b/sql/test/BugDay_2005-10-06_2.9.3/Tests/simple_union.SF-1005596.stable.out
@@ -26,8 +26,8 @@ Ready.
 
 % .tables,     .tables,        .tables,        .tables,        .tables,        
.tables,        .tables,        .tables,        .tables,        .tables # 
table_name
 % TABLE_CAT,   TABLE_SCHEM,    TABLE_NAME,     TABLE_TYPE,     REMARKS,        
TYPE_CAT,       TYPE_SCHEM,     TYPE_NAME,      SELF_REFERENCING_COL_NAME,      
REF_GENERATION # name
-% char,        varchar,        varchar,        char,   char,   smallint,       
smallint,       smallint,       char,   char # type
-% 4,   3,      4,      20,     0,      1,      1,      1,      5,      6 # 
length
+% char,        varchar,        varchar,        char,   char,   char,   char,   
char,   char,   char # type
+% 4,   3,      4,      20,     0,      0,      0,      0,      5,      6 # 
length
 [ "demo",      "sys",  "test", "TABLE",        "",     NULL,   NULL,   NULL,   
"rowid",        "SYSTEM"        ]
 
 # 12:42:09 >  
diff --git 
a/sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
 
b/sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
--- 
a/sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
+++ 
b/sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
@@ -21,8 +21,8 @@ Ready.
 # 16:24:01 >  
 
 #debug select * from tables;
-mdb>#X_1=0@0:void := querylog.define("debug select * from tables;", 
"sequential_pipe", 191:int);
-mdb>#X_160=nil:bat[:int] := bat.new(nil:int);
+mdb>#X_1=0@0:void := querylog.define("debug select * from tables;", 
"sequential_pipe", 190:int);
+mdb>#X_159=nil:bat[:int] := bat.new(nil:int);
 
 # 16:24:01 >  
 # 16:24:01 >  "Done."
diff --git 
a/sql/test/BugTracker-2012/Tests/null_except_null.Bug-3040.stable.out 
b/sql/test/BugTracker-2012/Tests/null_except_null.Bug-3040.stable.out
--- a/sql/test/BugTracker-2012/Tests/null_except_null.Bug-3040.stable.out
+++ b/sql/test/BugTracker-2012/Tests/null_except_null.Bug-3040.stable.out
@@ -50,8 +50,8 @@ Ready.
 #SELECT null EXCEPT SELECT null;
 % .L11 # table_name
 % L2 # name
-% smallint # type
-% 1 # length
+% char # type
+% 0 # length
 
 # 14:34:20 >  
 # 14:34:20 >  "Done."
diff --git 
a/sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.err.int128
 
b/sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.err.int128
--- 
a/sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.err.int128
+++ 
b/sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.err.int128
@@ -30,15 +30,7 @@ stderr of test 'hexadecimal_literals.Bug
 # 17:24:30 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-30147" "--port=33525"
 # 17:24:30 >  
 
-MAPI  = (monetdb) /var/tmp/mtest-27483/.s.monetdb.35395
-QUERY = select 0xg;
-ERROR = !syntax error, unexpected IDENT, expecting SCOLON in: "select 0xg"
-CODE  = 42000
-MAPI  = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
-QUERY = select 0xG;
-ERROR = !syntax error, unexpected IDENT, expecting SCOLON in: "select 0xg"
-CODE  = 42000
-MAPI  = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
+MAPI  = (monetdb) /var/tmp/mtest-19106/.s.monetdb.36358
 QUERY = select 0x80000000000000000000000000000000;
 ERROR = !Invalid hexadecimal number or hexadecimal too large 
(0x80000000000000000000000000000000) in: "select 
0x80000000000000000000000000000000"
 CODE  = 22003
@@ -54,15 +46,7 @@ MAPI  = (monetdb) /var/tmp/mtest-30274/.
 QUERY = select 0x123456789abcdef0123456789abcdef01;
 ERROR = !Invalid hexadecimal number or hexadecimal too large 
(0x123456789abcdef0123456789abcdef01) in: "select 
0x123456789abcdef0123456789abcdef01"
 CODE  = 22003
-MAPI  = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
-QUERY = select -0xg;
-ERROR = !syntax error, unexpected IDENT, expecting SCOLON in: "select -0xg"
-CODE  = 42000
-MAPI  = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
-QUERY = select -0xG;
-ERROR = !syntax error, unexpected IDENT, expecting SCOLON in: "select -0xg"
-CODE  = 42000
-MAPI  = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
+MAPI  = (monetdb) /var/tmp/mtest-19106/.s.monetdb.36358
 QUERY = select -0x80000000000000000000000000000000;
 ERROR = !Invalid hexadecimal number or hexadecimal too large 
(0x80000000000000000000000000000000) in: "select 
-0x80000000000000000000000000000000"
 CODE  = 22003
diff --git 
a/sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.out 
b/sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.out
--- a/sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.out
+++ b/sql/test/BugTracker-2014/Tests/hexadecimal_literals.Bug-3621.stable.out
@@ -186,6 +186,18 @@ Ready.
 % tinyint # type
 % 2 # length
 [ 15   ]
+#select 0xg;
+% .L2 # table_name
+% xg # name
+% tinyint # type
+% 1 # length
+[ 0    ]
+#select 0xG;
+% .L2 # table_name
+% xg # name
+% tinyint # type
+% 1 # length
+[ 0    ]
 #select 0x00;
 % .L2 # table_name
 % L2 # name
@@ -721,6 +733,18 @@ Ready.
 % tinyint # type
 % 3 # length
 [ -15  ]
+#select -0xg;
+% .L2 # table_name
+% xg # name
+% tinyint # type
+% 1 # length
+[ 0    ]
+#select -0xG;
+% .L2 # table_name
+% xg # name
+% tinyint # type
+% 1 # length
+[ 0    ]
 #select -0x00;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to