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