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

Making sqlancer happy with these esoteric prepared statements: disable 
parameters as order by or group by columns.


diffs (86 lines):

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
@@ -4056,6 +4056,8 @@ rel_group_column(sql_query *query, sql_r
                        return NULL;
                }
        }
+       if (!exp_subtype(e))
+               return sql_error(sql, 01, SQLSTATE(42000) "Cannot have a 
parameter (?) for group by column");
        return e;
 }
 
@@ -4408,6 +4410,8 @@ rel_order_by(sql_query *query, sql_rel *
                        }
                        if (!e)
                                return NULL;
+                       if (!exp_subtype(e))
+                               return sql_error(sql, 01, SQLSTATE(42000) 
"Cannot have a parameter (?) for order by column");
                        set_direction(e, direction);
                        list_append(exps, e);
                } else {
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
@@ -333,3 +333,7 @@ prepare values (0.34, (values ((select ?
 prepare with cte0(c0) as (select 1), cte1(c0,c1,c2) as (select distinct 1, 2, 
false)
 select distinct least('y', (values (''), (''))), 1, (select ? from (select 1) 
as l1v0(x))
 from cte0 as l0cte0, cte1 as l0cte1 order by l0cte0.c0 desc nulls last, 
l0cte1.c2 desc nulls first; -- ? can't be defined, so error
+
+prepare with cte0(c0) as (select 2) select 1 <> all(select 2 from (values 
(1),(2)) as t1) from cte0 as l0cte0 group by ?; --error, cannot have a 
parameter for group by column
+
+prepare with cte0(c0) as (select 2) select 1 <> all(select 2 from (values 
(1),(2)) as t1) from cte0 as l0cte0 order by ?; --error, cannot have a 
parameter for order by column
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
@@ -7,7 +7,7 @@ stderr of test 'sqlancer07` in directory
 
 MAPI  = (monetdb) /var/tmp/mtest-1050883/.s.monetdb.36353
 QUERY = PREPARE SELECT DISTINCT (SELECT DISTINCT r'|m<v' FROM t1 WHERE 
((t1.c0)<(?)) GROUP BY t1.c2, ?), ?, t1.c2 FROM t1 WHERE CAST(? AS BOOLEAN) 
LIMIT 2103332269785059850;
-ERROR = !Could not determine type for argument number 2
+ERROR = !Cannot have a parameter (?) for group by column
 CODE  = 42000
 MAPI  = (monetdb) /var/tmp/mtest-81449/.s.monetdb.32416
 QUERY = SELECT t0.c0 BETWEEN SYMMETRIC (SELECT t0.c0 FROM t0) AND t0.c0 FROM 
t0;
@@ -62,6 +62,14 @@ QUERY = prepare with cte0(c0) as (select
         from cte0 as l0cte0, cte1 as l0cte1 order by l0cte0.c0 desc nulls 
last, l0cte1.c2 desc nulls first; -- ? can't be defined, so error
 ERROR = !Could not determine type for argument number 1
 CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-185783/.s.monetdb.32587
+QUERY = prepare with cte0(c0) as (select 2) select 1 <> all(select 2 from 
(values (1),(2)) as t1) from cte0 as l0cte0 group by ?; --error, cannot have a 
parameter for group by column
+ERROR = !Cannot have a parameter (?) for group by column
+CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-185783/.s.monetdb.32587
+QUERY = prepare with cte0(c0) as (select 2) select 1 <> all(select 2 from 
(values (1),(2)) as t1) from cte0 as l0cte0 order by ?; --error, cannot have a 
parameter for order by column
+ERROR = !Cannot have a parameter (?) for order by column
+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
@@ -7,7 +7,7 @@ stderr of test 'sqlancer07` in directory
 
 MAPI  = (monetdb) /var/tmp/mtest-1050883/.s.monetdb.36353
 QUERY = PREPARE SELECT DISTINCT (SELECT DISTINCT r'|m<v' FROM t1 WHERE 
((t1.c0)<(?)) GROUP BY t1.c2, ?), ?, t1.c2 FROM t1 WHERE CAST(? AS BOOLEAN) 
LIMIT 2103332269785059850;
-ERROR = !Could not determine type for argument number 2
+ERROR = !Cannot have a parameter (?) for group by column
 CODE  = 42000
 MAPI  = (monetdb) /var/tmp/mtest-81449/.s.monetdb.32416
 QUERY = SELECT t0.c0 BETWEEN SYMMETRIC (SELECT t0.c0 FROM t0) AND t0.c0 FROM 
t0;
@@ -62,6 +62,14 @@ QUERY = prepare with cte0(c0) as (select
         from cte0 as l0cte0, cte1 as l0cte1 order by l0cte0.c0 desc nulls 
last, l0cte1.c2 desc nulls first; -- ? can't be defined, so error
 ERROR = !Could not determine type for argument number 1
 CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-185783/.s.monetdb.32587
+QUERY = prepare with cte0(c0) as (select 2) select 1 <> all(select 2 from 
(values (1),(2)) as t1) from cte0 as l0cte0 group by ?; --error, cannot have a 
parameter for group by column
+ERROR = !Cannot have a parameter (?) for group by column
+CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-185783/.s.monetdb.32587
+QUERY = prepare with cte0(c0) as (select 2) select 1 <> all(select 2 from 
(values (1),(2)) as t1) from cte0 as l0cte0 order by ?; --error, cannot have a 
parameter for order by column
+ERROR = !Cannot have a parameter (?) for order by column
+CODE  = 42000
 
 # 10:16:14 >  
 # 10:16:14 >  "Done."
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to