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 -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org