Changeset: ed3cd2f14a19 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ed3cd2f14a19
Added Files:
sql/test/prepare/Tests/named_placeholders.test
Modified Files:
sql/server/rel_psm.c
sql/server/rel_select.c
sql/test/prepare/Tests/All
Branch: default
Log Message:
improved error messages for missing or incorrect named placeholders
diffs (50 lines):
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -1530,7 +1530,7 @@ rel_paramlist( sql_query *query, symbol
ops = ops->next;
sql_arg *a = sql_find_param(query->sql, ops->data.sval);
if (!a)
- return NULL;
+ return sql_error(query->sql, 06, SQLSTATE(42000) "Named
placeholder ('%s') not used in the query.", ops->data.sval);
a->type = *exp_subtype(e);
append(exps, e);
}
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
@@ -5469,10 +5469,14 @@ rel_value_exp2(sql_query *query, sql_rel
return NULL;
}
case SQL_PARAMETER: {
- if (sql->emode != m_prepare)
- return sql_error(sql, 02, SQLSTATE(42000) "SELECT:
parameters ('?') not allowed in normal queries, use PREPARE");
assert(se->type == type_int);
sql_arg *a = sql_bind_paramnr(sql, se->data.i_val);
+ if (sql->emode != m_prepare) {
+ if (a && a->name && a->name[0])
+ return sql_error(sql, 02, SQLSTATE(42000)
"SELECT: named placeholder ('%s') but named values list is missing", a->name);
+ else
+ return sql_error(sql, 02, SQLSTATE(42000)
"SELECT: parameters ('?') not allowed in normal queries, use PREPARE");
+ }
return exp_atom_ref(sql->sa, se->data.i_val, a?&a->type:NULL);
}
case SQL_NULL:
diff --git a/sql/test/prepare/Tests/All b/sql/test/prepare/Tests/All
--- a/sql/test/prepare/Tests/All
+++ b/sql/test/prepare/Tests/All
@@ -32,3 +32,4 @@ prepare-view
prepare-mergetable
insert-prepare.Bug-7230
prepare-insert-into
+named_placeholders
diff --git a/sql/test/prepare/Tests/named_placeholders.test
b/sql/test/prepare/Tests/named_placeholders.test
new file mode 100644
--- /dev/null
+++ b/sql/test/prepare/Tests/named_placeholders.test
@@ -0,0 +1,5 @@
+statement error 42000!SELECT: named placeholder ('banana') but named values
list is missing
+SELECT :banana;
+
+statement error 42000!Named placeholder ('pear') not used in the query.
+SELECT :banana : ( pear 'mango' );
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]