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

Reply via email to