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

Reply via email to