Changeset: a6c413edae91 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a6c413edae91
Modified Files:
sql/server/rel_unnest.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:
Another prepared statement small issue
diffs (53 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
@@ -937,6 +937,9 @@ push_up_project(mvc *sql, sql_rel *rel,
rel_bind_var(sql,
rel->l, e);
if (is_left(rel->op)) {
/* add ifthenelse */
/* if id is
NULL then NULL else e */
+ sql_subtype *tp
= exp_subtype(e);
+ if (!tp)
+ return
sql_error(sql, 10, SQLSTATE(42000) "Query projection must have at least one
parameter with known SQL type");
if (!id) {
sql_rel
*l = r->l;
if
(is_join(l->op))
@@ -946,7 +949,7 @@ push_up_project(mvc *sql, sql_rel *rel,
}
sql_exp *ne =
rel_unop_(sql, NULL, exp_ref(sql, id), "sys", "isnull", card_value);
set_has_no_nil(ne);
- ne =
rel_nop_(sql, NULL, ne, exp_null(sql->sa, exp_subtype(e)), e, NULL, "sys",
"ifthenelse", card_value);
+ ne =
rel_nop_(sql, NULL, ne, exp_null(sql->sa, tp), e, NULL, "sys", "ifthenelse",
card_value);
exp_prop_alias(sql->sa, ne, e);
e = ne;
}
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
@@ -94,3 +94,5 @@ 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
+
+PREPARE SELECT 2 FROM (SELECT DISTINCT 1) z(z) LEFT OUTER JOIN LATERAL (SELECT
z.z, ? WHERE TRUE) a(a,b) ON TRUE; --error, push_up_project requires a type
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
@@ -51,3 +51,7 @@ MAPI = (monetdb) /var/tmp/mtest-185783/
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
+MAPI = (monetdb) /var/tmp/mtest-185783/.s.monetdb.32587
+QUERY = PREPARE SELECT 2 FROM (SELECT DISTINCT 1) z(z) LEFT OUTER JOIN LATERAL
(SELECT z.z, ? WHERE TRUE) a(a,b) ON TRUE; --error, push_up_project requires a
type
+ERROR = !Query projection must have at least one parameter with known SQL type
+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
@@ -51,3 +51,7 @@ MAPI = (monetdb) /var/tmp/mtest-185783/
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
+MAPI = (monetdb) /var/tmp/mtest-185783/.s.monetdb.32587
+QUERY = PREPARE SELECT 2 FROM (SELECT DISTINCT 1) z(z) LEFT OUTER JOIN LATERAL
(SELECT z.z, ? WHERE TRUE) a(a,b) ON TRUE; --error, push_up_project requires a
type
+ERROR = !Query projection must have at least one parameter with known SQL type
+CODE = 42000
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]