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