aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/ecpglib/execute.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/ecpg/ecpglib/execute.c')
-rw-r--r--src/interfaces/ecpg/ecpglib/execute.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c
index 4c499fb457d..2bdb558fabd 100644
--- a/src/interfaces/ecpg/ecpglib/execute.c
+++ b/src/interfaces/ecpg/ecpglib/execute.c
@@ -2074,9 +2074,32 @@ ECPGdo(const int lineno, const int compat, const int force_indicator, const char
{
va_list args;
bool ret;
+ const char *real_connection_name = NULL;
+
+ real_connection_name = connection_name;
+
+ if (!query)
+ {
+ ecpg_raise(lineno, ECPG_EMPTY, ECPG_SQLSTATE_ECPG_INTERNAL_ERROR, NULL);
+ return false;
+ }
+
+ /* Handle the EXEC SQL EXECUTE... statement */
+ if (ECPGst_execute == st)
+ {
+ real_connection_name = ecpg_get_con_name_by_declared_name(query);
+ if (real_connection_name == NULL)
+ {
+ /*
+ * If can't get the connection name by declared name then using connection name
+ * coming from the parameter connection_name
+ */
+ real_connection_name = connection_name;
+ }
+ }
va_start(args, query);
- ret = ecpg_do(lineno, compat, force_indicator, connection_name,
+ ret = ecpg_do(lineno, compat, force_indicator, real_connection_name,
questionmarks, st, query, args);
va_end(args);