summaryrefslogtreecommitdiff
path: root/src/bin/psql/common.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/psql/common.c')
-rw-r--r--src/bin/psql/common.c59
1 files changed, 38 insertions, 21 deletions
diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index 066dccbd841..8a9211db41a 100644
--- a/src/bin/psql/common.c
+++ b/src/bin/psql/common.c
@@ -1275,27 +1275,7 @@ sendquery_cleanup:
}
/* clean up after extended protocol queries */
- switch (pset.send_mode)
- {
- case PSQL_SEND_EXTENDED_CLOSE: /* \close */
- free(pset.stmtName);
- break;
- case PSQL_SEND_EXTENDED_PARSE: /* \parse */
- free(pset.stmtName);
- break;
- case PSQL_SEND_EXTENDED_QUERY_PARAMS: /* \bind */
- case PSQL_SEND_EXTENDED_QUERY_PREPARED: /* \bind_named */
- for (i = 0; i < pset.bind_nparams; i++)
- free(pset.bind_params[i]);
- free(pset.bind_params);
- free(pset.stmtName);
- pset.bind_params = NULL;
- break;
- case PSQL_SEND_QUERY:
- break;
- }
- pset.stmtName = NULL;
- pset.send_mode = PSQL_SEND_QUERY;
+ clean_extended_state();
/* reset \gset trigger */
if (pset.gset_prefix)
@@ -2288,6 +2268,43 @@ uri_prefix_length(const char *connstr)
}
/*
+ * Reset state related to extended query protocol
+ *
+ * Clean up any state related to bind parameters, statement name and
+ * PSQL_SEND_MODE. This needs to be called after processing a query or when
+ * running a new meta-command that uses the extended query protocol, like
+ * \parse, \bind, etc.
+ */
+void
+clean_extended_state(void)
+{
+ int i;
+
+ switch (pset.send_mode)
+ {
+ case PSQL_SEND_EXTENDED_CLOSE: /* \close */
+ free(pset.stmtName);
+ break;
+ case PSQL_SEND_EXTENDED_PARSE: /* \parse */
+ free(pset.stmtName);
+ break;
+ case PSQL_SEND_EXTENDED_QUERY_PARAMS: /* \bind */
+ case PSQL_SEND_EXTENDED_QUERY_PREPARED: /* \bind_named */
+ for (i = 0; i < pset.bind_nparams; i++)
+ free(pset.bind_params[i]);
+ free(pset.bind_params);
+ free(pset.stmtName);
+ pset.bind_params = NULL;
+ break;
+ case PSQL_SEND_QUERY:
+ break;
+ }
+
+ pset.stmtName = NULL;
+ pset.send_mode = PSQL_SEND_QUERY;
+}
+
+/*
* Recognized connection string either starts with a valid URI prefix or
* contains a "=" in it.
*