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