Changeset: fb9da9f2ad92 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/fb9da9f2ad92
Modified Files:
        sql/server/rel_exp.c
        sql/test/prepare/Tests/sqlancer_prepare.sql
        sql/test/prepare/Tests/sqlancer_prepare.stable.err
        sql/test/prepare/Tests/sqlancer_prepare.stable.err.int128
Branch: default
Log Message:

Don't look for parameters if not found under set relations. Later we could 
attempt to set parameters types used as freevars


diffs (66 lines):

diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -3080,6 +3080,10 @@ rel_set_type_param(mvc *sql, sql_subtype
        else if (upcast && type->type->eclass == EC_FLT)
                type = sql_bind_localtype("dbl");
 
+       /* TODO we could use the sql_query* struct to set paremeters used as 
freevars,
+          but it requires to change a lot of interfaces */
+       /* if (is_freevar(exp))
+               rel = query_fetch_outer(query, is_freevar(exp)-1); */
        return set_exp_type(sql, type, rel, exp);
 }
 
@@ -3246,7 +3250,7 @@ rel_find_parameter(mvc *sql, sql_subtype
                return 0;
 
        const char *nrname = relname, *nename = expname;
-       if ((is_simple_project(rel->op) || is_groupby(rel->op)) && 
!list_empty(rel->exps)) {
+       if (is_project(rel->op) && !list_empty(rel->exps)) {
                sql_exp *e = NULL;
 
                if (nrname && nename) { /* find the column reference and 
propagate type setting */
@@ -3256,6 +3260,10 @@ rel_find_parameter(mvc *sql, sql_subtype
                }
                if (!e)
                        return 0; /* not found */
+               if (is_set(rel->op)) { /* TODO for set relations this needs 
further improvement */
+                       (void) sql_error(sql, 10, SQLSTATE(42000) "Cannot set 
parameter types under set relations at the moment");
+                       return -1;
+               }
                /* set order by column types */
                if (is_simple_project(rel->op) && !list_empty(rel->r)) {
                        sql_exp *ordere = NULL;
diff --git a/sql/test/prepare/Tests/sqlancer_prepare.sql 
b/sql/test/prepare/Tests/sqlancer_prepare.sql
--- a/sql/test/prepare/Tests/sqlancer_prepare.sql
+++ b/sql/test/prepare/Tests/sqlancer_prepare.sql
@@ -91,3 +91,6 @@ create or replace function mybooludf(a b
 PREPARE (SELECT ?) EXCEPT (SELECT 'a' FROM (SELECT 1) x(x) JOIN ((SELECT 
FALSE) EXCEPT (SELECT ?)) y(y) ON sys.mybooludf(y.y));
 EXEC **('b',true);
 ROLLBACK;
+
+-- TODO it requires some internal changes to be able to set types on 
parameters used as freevars
+PREPARE SELECT 1 FROM (SELECT ?) x(x) CROSS JOIN LATERAL (SELECT 1 FROM 
((SELECT 1) INTERSECT (SELECT 2)) vx(vx) JOIN (SELECT 1) z(z) ON x.x) w(w); 
--error, Could not determine type for argument number 1
diff --git a/sql/test/prepare/Tests/sqlancer_prepare.stable.err 
b/sql/test/prepare/Tests/sqlancer_prepare.stable.err
--- a/sql/test/prepare/Tests/sqlancer_prepare.stable.err
+++ b/sql/test/prepare/Tests/sqlancer_prepare.stable.err
@@ -47,3 +47,7 @@ CODE  = 42000
 QUERY = PREPARE SELECT 1 FROM (SELECT 1) x(x) LEFT OUTER JOIN (SELECT DISTINCT 
?) y(y) ON (SELECT TRUE FROM (SELECT 1) z(z)); --error while unnesting because 
of unknown type
 ERROR = !Cannot rewrite subquery because of parameter with unknown type
 CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-185783/.s.monetdb.32587
+QUERY = PREPARE SELECT 1 FROM (SELECT ?) x(x) CROSS JOIN LATERAL (SELECT 1 
FROM ((SELECT 1) INTERSECT (SELECT 2)) vx(vx) JOIN (SELECT 1) z(z) ON x.x) 
w(w); --error, Could not determine type for argument number 1
+ERROR = !Could not determine type for argument number 1
+CODE  = 42000
diff --git a/sql/test/prepare/Tests/sqlancer_prepare.stable.err.int128 
b/sql/test/prepare/Tests/sqlancer_prepare.stable.err.int128
--- a/sql/test/prepare/Tests/sqlancer_prepare.stable.err.int128
+++ b/sql/test/prepare/Tests/sqlancer_prepare.stable.err.int128
@@ -47,3 +47,7 @@ CODE  = 42000
 QUERY = PREPARE SELECT 1 FROM (SELECT 1) x(x) LEFT OUTER JOIN (SELECT DISTINCT 
?) y(y) ON (SELECT TRUE FROM (SELECT 1) z(z)); --error while unnesting because 
of unknown type
 ERROR = !Cannot rewrite subquery because of parameter with unknown type
 CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-185783/.s.monetdb.32587
+QUERY = PREPARE SELECT 1 FROM (SELECT ?) x(x) CROSS JOIN LATERAL (SELECT 1 
FROM ((SELECT 1) INTERSECT (SELECT 2)) vx(vx) JOIN (SELECT 1) z(z) ON x.x) 
w(w); --error, Could not determine type for argument number 1
+ERROR = !Could not determine type for argument number 1
+CODE  = 42000
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to