Changeset: 2f950c1e77d2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2f950c1e77d2
Modified Files:
        sql/server/rel_unnest.c
        sql/test/SQLancer/Tests/sqlancer07.sql
        sql/test/SQLancer/Tests/sqlancer07.stable.err
        sql/test/SQLancer/Tests/sqlancer07.stable.err.int128
        sql/test/SQLancer/Tests/sqlancer07.stable.out
        sql/test/SQLancer/Tests/sqlancer07.stable.out.int128
Branch: Oct2020
Log Message:

SQLancer crash and fix, ie set parameter type before resolving function


diffs (102 lines):

diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -2769,6 +2769,8 @@ rewrite_exists(visitor *v, sql_rel *rel,
 
                                if (exp_is_rel(ie))
                                        ie->l = sq;
+                               if (!exp_subtype(le) && 
rel_set_type_param(v->sql, sql_bind_localtype("bit"), rel, le, 0) < 0) /* 
workaround */
+                                       return NULL;
                                ea = sql_bind_func(v->sql->sa, 
v->sql->session->schema, is_exists(sf)?"exist":"not_exist", exp_subtype(le), 
NULL, F_AGGR);
                                le = exp_aggr1(v->sql->sa, le, ea, 0, 0, 
CARD_AGGR, 0);
                                le = rel_groupby_add_aggr(v->sql, sq, le);
diff --git a/sql/test/SQLancer/Tests/sqlancer07.sql 
b/sql/test/SQLancer/Tests/sqlancer07.sql
--- a/sql/test/SQLancer/Tests/sqlancer07.sql
+++ b/sql/test/SQLancer/Tests/sqlancer07.sql
@@ -322,3 +322,8 @@ PREPARE SELECT (1 + CAST(l0t0.c0 AS BIGI
 PREPARE SELECT DISTINCT ((((CAST(l0t0.c0 AS INT))-(CAST(? AS 
BIGINT))))*(scale_up(?, ((-438139776)*(-813129345))))) FROM (select 1) AS 
l0t0(c0);
 
 select interval '1' month * cast(1 as bigint);
+
+START TRANSACTION;
+create view v10(vc0) as (select l0v0.vc0 from (values (1, 2)) as l0v0(vc0, 
vc1));
+prepare select case when true then false when ? then not exists (select ?, ?, 
6) end from v10 as l0v10;
+ROLLBACK;
diff --git a/sql/test/SQLancer/Tests/sqlancer07.stable.err 
b/sql/test/SQLancer/Tests/sqlancer07.stable.err
--- a/sql/test/SQLancer/Tests/sqlancer07.stable.err
+++ b/sql/test/SQLancer/Tests/sqlancer07.stable.err
@@ -56,6 +56,10 @@ MAPI  = (monetdb) /var/tmp/mtest-20193/.
 QUERY = PREPARE SELECT (1 + CAST(l0t0.c0 AS BIGINT)) * scale_up(?, 2) FROM 
(select 1) AS l0t0(c0);
 ERROR = !SELECT: no such binary operator 'sql_mul(bigint,month_interval)'
 CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-299030/.s.monetdb.30707
+QUERY = prepare select case when true then false when ? then not exists 
(select ?, ?, 6) end from v10 as l0v10;
+ERROR = !Could not determine type for argument number 3
+CODE  = 42000
 
 # 10:16:14 >  
 # 10:16:14 >  "Done."
diff --git a/sql/test/SQLancer/Tests/sqlancer07.stable.err.int128 
b/sql/test/SQLancer/Tests/sqlancer07.stable.err.int128
--- a/sql/test/SQLancer/Tests/sqlancer07.stable.err.int128
+++ b/sql/test/SQLancer/Tests/sqlancer07.stable.err.int128
@@ -56,6 +56,10 @@ MAPI  = (monetdb) /var/tmp/mtest-14251/.
 QUERY = PREPARE SELECT DISTINCT ((((CAST(l0t0.c0 AS INT))-(CAST(? AS 
BIGINT))))*(scale_up(?, ((-438139776)*(-813129345))))) FROM (select 1) AS 
l0t0(c0);
 ERROR = !SELECT: no such binary operator 'sql_mul(hugeint,day_interval)'
 CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-299030/.s.monetdb.30707
+QUERY = prepare select case when true then false when ? then not exists 
(select ?, ?, 6) end from v10 as l0v10;
+ERROR = !Could not determine type for argument number 3
+CODE  = 42000
 
 # 10:16:14 >  
 # 10:16:14 >  "Done."
diff --git a/sql/test/SQLancer/Tests/sqlancer07.stable.out 
b/sql/test/SQLancer/Tests/sqlancer07.stable.out
--- a/sql/test/SQLancer/Tests/sqlancer07.stable.out
+++ b/sql/test/SQLancer/Tests/sqlancer07.stable.out
@@ -201,8 +201,8 @@ stdout of test 'sqlancer07` in directory
 #INSERT INTO "t2" VALUES (596983192), (-601428889), (1688368391);
 [ 3    ]
 #SELECT 1 FROM t2, t0 CROSS JOIN t1 WHERE t0.c0 % (SELECT 1 WHERE FALSE) <= 
t1.c0;
-% .%3 # table_name
-% %3 # name
+% .%4 # table_name
+% %4 # name
 % tinyint # type
 % 1 # length
 #SELECT t1.c0 FROM t2, t0 CROSS JOIN t1 WHERE ((((t0.c0)%((SELECT DISTINCT 
t0.c0 FROM t1, t0, t2 WHERE FALSE))))<=(t1.c0));
@@ -455,8 +455,8 @@ stdout of test 'sqlancer07` in directory
 % 1,   1 # length
 [ 1,   2       ]
 #SELECT FALSE FROM v3, v0 FULL OUTER JOIN v4 ON sql_max(FALSE, (0.6902854) NOT 
IN (0.5854332103580835, CASE WHEN v4.vc0 THEN (SELECT 0.023816515 WHERE TRUE) 
END));
-% .%15 # table_name
-% %15 # name
+% .%20 # table_name
+% %20 # name
 % boolean # type
 % 5 # length
 [ false        ]
diff --git a/sql/test/SQLancer/Tests/sqlancer07.stable.out.int128 
b/sql/test/SQLancer/Tests/sqlancer07.stable.out.int128
--- a/sql/test/SQLancer/Tests/sqlancer07.stable.out.int128
+++ b/sql/test/SQLancer/Tests/sqlancer07.stable.out.int128
@@ -201,8 +201,8 @@ stdout of test 'sqlancer07` in directory
 #INSERT INTO "t2" VALUES (596983192), (-601428889), (1688368391);
 [ 3    ]
 #SELECT 1 FROM t2, t0 CROSS JOIN t1 WHERE t0.c0 % (SELECT 1 WHERE FALSE) <= 
t1.c0;
-% .%3 # table_name
-% %3 # name
+% .%4 # table_name
+% %4 # name
 % tinyint # type
 % 1 # length
 #SELECT t1.c0 FROM t2, t0 CROSS JOIN t1 WHERE ((((t0.c0)%((SELECT DISTINCT 
t0.c0 FROM t1, t0, t2 WHERE FALSE))))<=(t1.c0));
@@ -455,8 +455,8 @@ stdout of test 'sqlancer07` in directory
 % 1,   1 # length
 [ 1,   2       ]
 #SELECT FALSE FROM v3, v0 FULL OUTER JOIN v4 ON sql_max(FALSE, (0.6902854) NOT 
IN (0.5854332103580835, CASE WHEN v4.vc0 THEN (SELECT 0.023816515 WHERE TRUE) 
END));
-% .%15 # table_name
-% %15 # name
+% .%20 # table_name
+% %20 # name
 % boolean # type
 % 5 # length
 [ false        ]
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to