Changeset: 5b8c17917c35 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5b8c17917c35 Added Files: sql/test/BugDay_2005-10-06_2.9.3/Tests/parser_crashes_server.SF-921996.stable.err.Darwin Modified Files: sql/server/rel_optimizer.c sql/server/rel_select.c sql/test/SQLancer/Tests/sqlancer03.sql sql/test/SQLancer/Tests/sqlancer03.stable.out Branch: oscar Log Message:
Merged with Jun2020 diffs (188 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 @@ -1389,8 +1389,11 @@ exp_needs_push_down(sql_exp *e) case e_convert: return exp_needs_push_down(e->l); case e_aggr: - case e_func: + case e_func: { + if (!e->l || exps_are_atoms(e->l)) + return 0; return 1; + } break; case e_column: case e_atom: default: @@ -1458,6 +1461,8 @@ exp_push_single_func_down(visitor *v, sq if (exp_unsafe(e, 0)) return e; + if (!e->l || exps_are_atoms(e->l)) + return e; if ((is_joinop(rel->op) && ((can_push_func(e, l, &mustl) && mustl) || (can_push_func(e, r, &mustr) && mustr))) || (is_select(rel->op) && can_push_func(e, l, &must) && must)) { exp_label(v->sql->sa, e, ++v->sql->label); @@ -7672,7 +7677,7 @@ rel_simplify_predicates(visitor *v, sql_ } } else if (is_atom(l->type) && is_atom(r->type) && !is_semantics(e)) { if (exp_is_null(v->sql, l) || exp_is_null(v->sql, r)) { - e = exp_null(v->sql->sa, exp_subtype(l)); + e = exp_null(v->sql->sa, sql_bind_localtype("bit")); v->changes++; } else if (l->l && r->l) { int res = atom_cmp(l->l, r->l); 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 @@ -2765,14 +2765,6 @@ rel_op(sql_query *query, sql_rel **rel, return sql_error(sql, 02, SQLSTATE(3F000) "SELECT: no such schema '%s'", sname); sf = find_func(sql, s, fname, 0, F_AGGR, NULL); - if (!sf && *rel && (*rel)->card == CARD_AGGR) { - if (is_sql_having(f) || is_sql_orderby(f)) - return NULL; - /* reset error */ - sql->session->status = 0; - sql->errstr[0] = '\0'; - return sql_error(sql, 02, SQLSTATE(42000) "SELECT: no such aggregate '%s'", fname); - } if (sf) return _rel_aggr(query, rel, 0, s, fname, NULL, f); return rel_op_(sql, s, fname, ek); diff --git a/sql/test/BugDay_2005-10-06_2.9.3/Tests/parser_crashes_server.SF-921996.stable.err.Darwin b/sql/test/BugDay_2005-10-06_2.9.3/Tests/parser_crashes_server.SF-921996.stable.err.Darwin new file mode 100644 --- /dev/null +++ b/sql/test/BugDay_2005-10-06_2.9.3/Tests/parser_crashes_server.SF-921996.stable.err.Darwin @@ -0,0 +1,24 @@ +stderr of test 'parser_crashes_server.SF-921996` in directory 'sql/test/BugDay_2005-10-06_2.9.3` itself: + + +# 14:52:27 > +# 14:52:27 > Mtimeout -timeout 180 Mserver "--config=/home/manegold/Monet/Testing/Current/.GNU.32.32.d.--enable-debug.PREFIX./etc/MonetDB.conf" --debug=10 --set "monet_mod_path=/home/manegold/Monet/Testing/Current/.GNU.32.32.d.--enable-debug.PREFIX./lib/MonetDB:/home/manegold/Monet/Testing/Current/.GNU.32.32.d.--enable-debug.PREFIX./lib/bin" --set "gdk_dbfarm=/home/manegold/Monet/Testing/Current/.GNU.32.32.d.--enable-debug.PREFIX./var/MonetDB/dbfarm" --set "sql_logdir=/home/manegold/Monet/Testing/Current/.GNU.32.32.d.--enable-debug.PREFIX./var/MonetDB/log" --set mapi_port=38897 --set sql_port=49478 --set xquery_port=59231 --set monet_prompt= --trace "--dbname=mTests_src_test_BugDay_2005-10-06_2.9.3" --dbinit="module(sql_server); sql_server_start();" ; echo ; echo Over.. +# 14:52:27 > + + +# 14:52:27 > +# 14:52:27 > Mtimeout -timeout 60 MapiClient -lsql -u monetdb -P monetdb --host=localhost --port=49478 < parser_crashes_server.SF-921996.sql +# 14:52:27 > + +MAPI = (monetdb) /var/tmp/mtest-23209/.s.monetdb.33225 +QUERY = CREATE TABLE bounds_test ( + id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, +ERROR = !syntax error: 42000!end of input stream in "create table bounds_test ( + !id int not null auto_increment primary key, + !" +CODE = 42000 + +# 14:52:27 > +# 14:52:27 > Done. +# 14:52:27 > + diff --git a/sql/test/SQLancer/Tests/sqlancer03.sql b/sql/test/SQLancer/Tests/sqlancer03.sql --- a/sql/test/SQLancer/Tests/sqlancer03.sql +++ b/sql/test/SQLancer/Tests/sqlancer03.sql @@ -142,3 +142,66 @@ COPY 1 RECORDS INTO "sys"."t0" FROM stdi select t0.c0 from t0 where not (true) union all select all t0.c0 from t0 where not (not (true)) union all select t0.c0 from t0 where (not (true)) is null; ROLLBACK; + +START TRANSACTION; +create table t0 (a int, b int); +insert into t0 values (1,1), (2,2); +select min(t0.a), pi() from t0 group by t0.b; + +SELECT 1 FROM t0 WHERE DATE '1970-01-01' = NULL; +SELECT 1 FROM t0 WHERE NULL IN (DATE '1970-01-01'); +SELECT ALL DATE '1970-01-01', CAST(COUNT(ALL TIMESTAMP '1970-01-01 01:06:52') AS INT) FROM t0 WHERE (NULL) NOT IN (DATE '1970-01-01') GROUP BY ((CAST(0.6 AS STRING))||(0.75)), INTERVAL '-13' SECOND; +ROLLBACK; + +START TRANSACTION; -- Bug 6924 +CREATE TABLE "sys"."t0" ("a" INTEGER, "b" INTEGER NOT NULL, CONSTRAINT "t0_a_b_unique" UNIQUE ("a","b")); +--This copy into must succeed +COPY 39 RECORDS INTO "sys"."t0" FROM stdin USING DELIMITERS E'\t',E'\n','"'; +-88162543 18 +-88162543 20 +-15649686 -544149211 +-88162543 1544983640 +NULL -22365094 +NULL 1606640302 +NULL -2022118335 +-706411503 -1573662742 +-88162543 117340240 +NULL 14 +1724946985 -1967779742 +NULL -1500350327 +NULL -174249097 +-88162543 29 +-88162543 42 +10 0 +NULL 1861748843 +NULL -1709541615 +NULL -143945879 +NULL 1 +NULL 1158178587 +-88162543 14 +-846070788 0 +-88162543 1242658499 +1149990738 -106077877 +NULL -70926511 +NULL 138623502 +NULL -1613851459 +NULL -724706022 +NULL 1259669628 +NULL 0 +NULL -297079149 +1545824064 16 +NULL 0 +NULL 1526452554 +NULL 1813972190 +NULL -30 +NULL -1536805627 +NULL 1602659226 + +SELECT 1 FROM t0 GROUP BY 1, 2 HAVING MAX(TRUE); + +SELECT ALL COUNT(ALL DATE '1970-01-02'), ((rtrim(CAST(0.4 AS STRING), trim(r'W', r'1')))||(lower(CAST(((r'3')||(INTERVAL '4' MONTH)) AS STRING)))) FROM t0 WHERE ((t0.b)<=(t0.a)) GROUP BY 0.1, TRUE HAVING MAX(ALL TRUE) +UNION ALL +SELECT COUNT(ALL DATE '1970-01-02'), ((rtrim(CAST(0.4 AS STRING), trim(r'W', r'1')))||(lower(CAST(((r'3')||(INTERVAL '4' MONTH)) AS STRING)))) FROM t0 WHERE ((t0.b)<=(t0.a)) GROUP BY 0.1, TRUE HAVING NOT (MAX(ALL TRUE)) +UNION ALL +SELECT ALL COUNT(ALL DATE '1970-01-02'), ((rtrim(CAST(0.4 AS STRING), trim(r'W', r'1')))||(lower(CAST(((r'3')||(INTERVAL '4' MONTH)) AS STRING)))) FROM t0 WHERE ((t0.b)<=(t0.a)) GROUP BY 0.1, TRUE HAVING (MAX(ALL TRUE)) IS NULL; +ROLLBACK; diff --git a/sql/test/SQLancer/Tests/sqlancer03.stable.out b/sql/test/SQLancer/Tests/sqlancer03.stable.out --- a/sql/test/SQLancer/Tests/sqlancer03.stable.out +++ b/sql/test/SQLancer/Tests/sqlancer03.stable.out @@ -231,6 +231,33 @@ stdout of test 'sqlancer03` in directory % 20 # length [ -1933820187.000 ] #ROLLBACK; +#START TRANSACTION; +#create table t0 (a int, b int); +#insert into t0 values (1,1), (2,2); +[ 2 ] +#select min(t0.a), pi() from t0 group by t0.b; +% sys.%1, .%2 # table_name +% %1, %2 # name +% int, double # type +% 1, 24 # length +[ 1, 3.141592654 ] +[ 2, 3.141592654 ] +#SELECT 1 FROM t0 WHERE DATE '1970-01-01' = NULL; +% .%1 # table_name +% %1 # name +% tinyint # type +% 1 # length +#SELECT 1 FROM t0 WHERE NULL IN (DATE '1970-01-01'); +% .%3 # table_name +% %3 # name +% tinyint # type +% 1 # length +#SELECT ALL DATE '1970-01-01', CAST(COUNT(ALL TIMESTAMP '1970-01-01 01:06:52') AS INT) FROM t0 WHERE (NULL) NOT IN (DATE '1970-01-01') GROUP BY ((CAST(0.6 AS STRING))||(0.75)), INTERVAL '-13' SECOND; +% .%11, .%7 # table_name +% %11, %7 # name +% date, int # type +% 10, 1 # length +#ROLLBACK; # 17:14:16 > # 17:14:16 > "Done." _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list