On Thu, Aug 28, 2014 at 8:46 PM, Fujii Masao <masao.fu...@gmail.com> wrote: > On Tue, Aug 26, 2014 at 4:55 AM, Heikki Linnakangas > <hlinnakan...@vmware.com> wrote: >> On 08/25/2014 10:48 PM, Heikki Linnakangas wrote: >>> >>> On 08/25/2014 09:22 PM, Fujii Masao wrote: >>>> >>>> On Tue, Aug 26, 2014 at 1:34 AM, Heikki Linnakangas >>>> <hlinnakan...@vmware.com> wrote: >>>>> >>>>> I agree that refactoring this would be nice in the long-term, and I also >>>>> agree that it's probably OK as it is in the short-term. I don't like the >>>>> name PSQLexecInternal, though. PSQLexec is used for "internal" commands >>>>> anyway. In fact it's backwards, because PSQLexecInternal is used for >>>>> non-internal queries, given by \watch, while PSQLexec is used for >>>>> internal >>>>> commands. >>>> >>>> >>>> Agreed. So what about PSQLexecCommon (inspired by >>>> the relation between LWLockAcquireCommon and LWLockAcquire)? >>>> Or any better name? >>> >>> >>> Actually, perhaps it would be better to just copy-paste PSQLexec, and >>> modify the copy to suite \watch's needs. (PSQLexecWatch? >>> SendWatchQuery?). PSQLexec doesn't do much, and there isn't very much >>> overlap between what \watch wants and what other PSQLexec callers want. >>> \watch wants timing output, others don't. \watch doesn't want >>> transaction handling. > > Agreed. Attached is the revised version of the patch. I implemented > PSQLexecWatch() which sends the query, prints the results and outputs > the query execution time (if \timing is enabled). > > This patch was marked as ready for committer, but since I revised > the code very much, I marked this as needs review again. > >>> Do we want --echo-hidden to print the \watch'd >>> query? Not sure.. > > Per document, --echo-hidden prints the actual queries generated by > backslash command. But \watch doesn't handle backslash commands. > So I think that PSQLexecWatch doesn't need to handle --echo-hidden. > >> BTW, I just noticed that none of the callers of PSQLexec pass >> "start_xact=true". So that part of the function is dead code. We might want >> to remove it, and replace with a comment noting that PSQLexec never starts a >> new transaction block, even in autocommit-off mode. (I know you're hacking >> on this, so I didnn't want to joggle your elbow by doing it right now) > > Good catch. So I will remove start_xact code later.
Attached patch removes start_xact from PSQLexec. Regards, -- Fujii Masao
*** a/src/bin/psql/command.c --- b/src/bin/psql/command.c *************** *** 966,972 **** exec_command(const char *cmd, printfPQExpBuffer(&buf, "ALTER USER %s PASSWORD ", fmtId(user)); appendStringLiteralConn(&buf, encrypted_password, pset.db); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) success = false; --- 966,972 ---- printfPQExpBuffer(&buf, "ALTER USER %s PASSWORD ", fmtId(user)); appendStringLiteralConn(&buf, encrypted_password, pset.db); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) success = false; *************** *** 2173,2179 **** process_file(char *filename, bool single_txn, bool use_relative_path) if (single_txn) { ! if ((res = PSQLexec("BEGIN", false)) == NULL) { if (pset.on_error_stop) { --- 2173,2179 ---- if (single_txn) { ! if ((res = PSQLexec("BEGIN")) == NULL) { if (pset.on_error_stop) { *************** *** 2189,2195 **** process_file(char *filename, bool single_txn, bool use_relative_path) if (single_txn) { ! if ((res = PSQLexec("COMMIT", false)) == NULL) { if (pset.on_error_stop) { --- 2189,2195 ---- if (single_txn) { ! if ((res = PSQLexec("COMMIT")) == NULL) { if (pset.on_error_stop) { *** a/src/bin/psql/common.c --- b/src/bin/psql/common.c *************** *** 426,435 **** AcceptResult(const PGresult *result) * This is the way to send "backdoor" queries (those not directly entered * by the user). It is subject to -E but not -e. * - * In autocommit-off mode, a new transaction block is started if start_xact - * is true; nothing special is done when start_xact is false. Typically, - * start_xact = false is used for SELECTs and explicit BEGIN/COMMIT commands. - * * Caller is responsible for handling the ensuing processing if a COPY * command is sent. * --- 426,431 ---- *************** *** 437,443 **** AcceptResult(const PGresult *result) * caller uses this path to issue "SET CLIENT_ENCODING". */ PGresult * ! PSQLexec(const char *query, bool start_xact) { PGresult *res; --- 433,439 ---- * caller uses this path to issue "SET CLIENT_ENCODING". */ PGresult * ! PSQLexec(const char *query) { PGresult *res; *************** *** 468,488 **** PSQLexec(const char *query, bool start_xact) SetCancelConn(); - if (start_xact && - !pset.autocommit && - PQtransactionStatus(pset.db) == PQTRANS_IDLE) - { - res = PQexec(pset.db, "BEGIN"); - if (PQresultStatus(res) != PGRES_COMMAND_OK) - { - psql_error("%s", PQerrorMessage(pset.db)); - PQclear(res); - ResetCancelConn(); - return NULL; - } - PQclear(res); - } - res = PQexec(pset.db, query); ResetCancelConn(); --- 464,469 ---- *** a/src/bin/psql/common.h --- b/src/bin/psql/common.h *************** *** 38,44 **** extern void setup_cancel_handler(void); extern void SetCancelConn(void); extern void ResetCancelConn(void); ! extern PGresult *PSQLexec(const char *query, bool start_xact); extern int PSQLexecWatch(const char *query, const printQueryOpt *opt); extern bool SendQuery(const char *query); --- 38,44 ---- extern void SetCancelConn(void); extern void ResetCancelConn(void); ! extern PGresult *PSQLexec(const char *query); extern int PSQLexecWatch(const char *query, const printQueryOpt *opt); extern bool SendQuery(const char *query); *** a/src/bin/psql/describe.c --- b/src/bin/psql/describe.c *************** *** 114,120 **** describeAggregates(const char *pattern, bool verbose, bool showSystem) appendPQExpBufferStr(&buf, "ORDER BY 1, 2, 4;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 114,120 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2, 4;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 195,201 **** describeTablespaces(const char *pattern, bool verbose) appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 195,201 ---- appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 458,464 **** describeFunctions(const char *functypes, const char *pattern, bool verbose, bool appendPQExpBufferStr(&buf, "ORDER BY 1, 2, 4;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 458,464 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2, 4;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 570,576 **** describeTypes(const char *pattern, bool verbose, bool showSystem) appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 570,576 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 645,651 **** describeOperators(const char *pattern, bool verbose, bool showSystem) appendPQExpBufferStr(&buf, "ORDER BY 1, 2, 3, 4;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 645,651 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2, 3, 4;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 716,722 **** listAllDbs(const char *pattern, bool verbose) NULL, "d.datname", NULL, NULL); appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 716,722 ---- NULL, "d.datname", NULL, NULL); appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 796,802 **** permissionsList(const char *pattern) appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data, false); if (!res) { termPQExpBuffer(&buf); --- 796,802 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data); if (!res) { termPQExpBuffer(&buf); *************** *** 870,876 **** listDefaultACLs(const char *pattern) appendPQExpBufferStr(&buf, "ORDER BY 1, 2, 3;"); ! res = PSQLexec(buf.data, false); if (!res) { termPQExpBuffer(&buf); --- 870,876 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2, 3;"); ! res = PSQLexec(buf.data); if (!res) { termPQExpBuffer(&buf); *************** *** 1046,1052 **** objectDescription(const char *pattern, bool showSystem) appendPQExpBufferStr(&buf, "ORDER BY 1, 2, 3;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 1046,1052 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2, 3;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 1098,1104 **** describeTableDetails(const char *pattern, bool verbose, bool showSystem) appendPQExpBufferStr(&buf, "ORDER BY 2, 3;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 1098,1104 ---- appendPQExpBufferStr(&buf, "ORDER BY 2, 3;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 1289,1295 **** describeOneTableDetails(const char *schemaname, oid); } ! res = PSQLexec(buf.data, false); if (!res) goto error_return; --- 1289,1295 ---- oid); } ! res = PSQLexec(buf.data); if (!res) goto error_return; *************** *** 1331,1337 **** describeOneTableDetails(const char *schemaname, /* must be separate because fmtId isn't reentrant */ appendPQExpBuffer(&buf, ".%s;", fmtId(relationname)); ! res = PSQLexec(buf.data, false); if (!res) goto error_return; --- 1331,1337 ---- /* must be separate because fmtId isn't reentrant */ appendPQExpBuffer(&buf, ".%s;", fmtId(relationname)); ! res = PSQLexec(buf.data); if (!res) goto error_return; *************** *** 1391,1397 **** describeOneTableDetails(const char *schemaname, appendPQExpBuffer(&buf, "\nWHERE a.attrelid = '%s' AND a.attnum > 0 AND NOT a.attisdropped", oid); appendPQExpBufferStr(&buf, "\nORDER BY a.attnum;"); ! res = PSQLexec(buf.data, false); if (!res) goto error_return; numrows = PQntuples(res); --- 1391,1397 ---- appendPQExpBuffer(&buf, "\nWHERE a.attrelid = '%s' AND a.attnum > 0 AND NOT a.attisdropped", oid); appendPQExpBufferStr(&buf, "\nORDER BY a.attnum;"); ! res = PSQLexec(buf.data); if (!res) goto error_return; numrows = PQntuples(res); *************** *** 1505,1511 **** describeOneTableDetails(const char *schemaname, printfPQExpBuffer(&buf, "SELECT pg_catalog.pg_get_viewdef('%s'::pg_catalog.oid, true);", oid); ! result = PSQLexec(buf.data, false); if (!result) goto error_return; --- 1505,1511 ---- printfPQExpBuffer(&buf, "SELECT pg_catalog.pg_get_viewdef('%s'::pg_catalog.oid, true);", oid); ! result = PSQLexec(buf.data); if (!result) goto error_return; *************** *** 1644,1650 **** describeOneTableDetails(const char *schemaname, "AND i.indrelid = c2.oid;", oid); ! result = PSQLexec(buf.data, false); if (!result) goto error_return; else if (PQntuples(result) != 1) --- 1644,1650 ---- "AND i.indrelid = c2.oid;", oid); ! result = PSQLexec(buf.data); if (!result) goto error_return; else if (PQntuples(result) != 1) *************** *** 1723,1729 **** describeOneTableDetails(const char *schemaname, "\n AND d.deptype='a'", oid); ! result = PSQLexec(buf.data, false); if (!result) goto error_return; else if (PQntuples(result) == 1) --- 1723,1729 ---- "\n AND d.deptype='a'", oid); ! result = PSQLexec(buf.data); if (!result) goto error_return; else if (PQntuples(result) == 1) *************** *** 1780,1786 **** describeOneTableDetails(const char *schemaname, "WHERE c.oid = '%s' AND c.oid = i.indrelid AND i.indexrelid = c2.oid\n" "ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname;", oid); ! result = PSQLexec(buf.data, false); if (!result) goto error_return; else --- 1780,1786 ---- "WHERE c.oid = '%s' AND c.oid = i.indrelid AND i.indexrelid = c2.oid\n" "ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname;", oid); ! result = PSQLexec(buf.data); if (!result) goto error_return; else *************** *** 1864,1870 **** describeOneTableDetails(const char *schemaname, "WHERE r.conrelid = '%s' AND r.contype = 'c'\n" "ORDER BY 1;", oid); ! result = PSQLexec(buf.data, false); if (!result) goto error_return; else --- 1864,1870 ---- "WHERE r.conrelid = '%s' AND r.contype = 'c'\n" "ORDER BY 1;", oid); ! result = PSQLexec(buf.data); if (!result) goto error_return; else *************** *** 1895,1901 **** describeOneTableDetails(const char *schemaname, "FROM pg_catalog.pg_constraint r\n" "WHERE r.conrelid = '%s' AND r.contype = 'f' ORDER BY 1;", oid); ! result = PSQLexec(buf.data, false); if (!result) goto error_return; else --- 1895,1901 ---- "FROM pg_catalog.pg_constraint r\n" "WHERE r.conrelid = '%s' AND r.contype = 'f' ORDER BY 1;", oid); ! result = PSQLexec(buf.data); if (!result) goto error_return; else *************** *** 1926,1932 **** describeOneTableDetails(const char *schemaname, "FROM pg_catalog.pg_constraint c\n" "WHERE c.confrelid = '%s' AND c.contype = 'f' ORDER BY 1;", oid); ! result = PSQLexec(buf.data, false); if (!result) goto error_return; else --- 1926,1932 ---- "FROM pg_catalog.pg_constraint c\n" "WHERE c.confrelid = '%s' AND c.contype = 'f' ORDER BY 1;", oid); ! result = PSQLexec(buf.data); if (!result) goto error_return; else *************** *** 1969,1975 **** describeOneTableDetails(const char *schemaname, "WHERE r.ev_class = '%s' ORDER BY 1;", oid); } ! result = PSQLexec(buf.data, false); if (!result) goto error_return; else --- 1969,1975 ---- "WHERE r.ev_class = '%s' ORDER BY 1;", oid); } ! result = PSQLexec(buf.data); if (!result) goto error_return; else *************** *** 2060,2066 **** describeOneTableDetails(const char *schemaname, "FROM pg_catalog.pg_rewrite r\n" "WHERE r.ev_class = '%s' AND r.rulename != '_RETURN' ORDER BY 1;", oid); ! result = PSQLexec(buf.data, false); if (!result) goto error_return; --- 2060,2066 ---- "FROM pg_catalog.pg_rewrite r\n" "WHERE r.ev_class = '%s' AND r.rulename != '_RETURN' ORDER BY 1;", oid); ! result = PSQLexec(buf.data); if (!result) goto error_return; *************** *** 2117,2123 **** describeOneTableDetails(const char *schemaname, " WHERE d.classid = t.tableoid AND d.objid = t.oid AND d.deptype = 'i' AND c.contype = 'f'))"); appendPQExpBufferStr(&buf, "\nORDER BY 1;"); ! result = PSQLexec(buf.data, false); if (!result) goto error_return; else --- 2117,2123 ---- " WHERE d.classid = t.tableoid AND d.objid = t.oid AND d.deptype = 'i' AND c.contype = 'f'))"); appendPQExpBufferStr(&buf, "\nORDER BY 1;"); ! result = PSQLexec(buf.data); if (!result) goto error_return; else *************** *** 2246,2252 **** describeOneTableDetails(const char *schemaname, " pg_catalog.pg_foreign_server s\n" "WHERE f.ftrelid = %s AND s.oid = f.ftserver;", oid); ! result = PSQLexec(buf.data, false); if (!result) goto error_return; else if (PQntuples(result) != 1) --- 2246,2252 ---- " pg_catalog.pg_foreign_server s\n" "WHERE f.ftrelid = %s AND s.oid = f.ftserver;", oid); ! result = PSQLexec(buf.data); if (!result) goto error_return; else if (PQntuples(result) != 1) *************** *** 2273,2279 **** describeOneTableDetails(const char *schemaname, /* print inherited tables */ printfPQExpBuffer(&buf, "SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhparent AND i.inhrelid = '%s' ORDER BY inhseqno;", oid); ! result = PSQLexec(buf.data, false); if (!result) goto error_return; else --- 2273,2279 ---- /* print inherited tables */ printfPQExpBuffer(&buf, "SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhparent AND i.inhrelid = '%s' ORDER BY inhseqno;", oid); ! result = PSQLexec(buf.data); if (!result) goto error_return; else *************** *** 2306,2312 **** describeOneTableDetails(const char *schemaname, else printfPQExpBuffer(&buf, "SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhrelid AND i.inhparent = '%s' ORDER BY c.relname;", oid); ! result = PSQLexec(buf.data, false); if (!result) goto error_return; else --- 2306,2312 ---- else printfPQExpBuffer(&buf, "SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhrelid AND i.inhparent = '%s' ORDER BY c.relname;", oid); ! result = PSQLexec(buf.data); if (!result) goto error_return; else *************** *** 2453,2459 **** add_tablespace_footer(printTableContent *const cont, char relkind, printfPQExpBuffer(&buf, "SELECT spcname FROM pg_catalog.pg_tablespace\n" "WHERE oid = '%u';", tablespace); ! result = PSQLexec(buf.data, false); if (!result) return; /* Should always be the case, but.... */ --- 2453,2459 ---- printfPQExpBuffer(&buf, "SELECT spcname FROM pg_catalog.pg_tablespace\n" "WHERE oid = '%u';", tablespace); ! result = PSQLexec(buf.data); if (!result) return; /* Should always be the case, but.... */ *************** *** 2552,2558 **** describeRoles(const char *pattern, bool verbose) appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data, false); if (!res) return false; --- 2552,2558 ---- appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data); if (!res) return false; *************** *** 2683,2689 **** listDbRoleSettings(const char *pattern, const char *pattern2) return false; } ! res = PSQLexec(buf.data, false); if (!res) return false; --- 2683,2689 ---- return false; } ! res = PSQLexec(buf.data); if (!res) return false; *************** *** 2844,2850 **** listTables(const char *tabtypes, const char *pattern, bool verbose, bool showSys appendPQExpBufferStr(&buf, "ORDER BY 1,2;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 2844,2850 ---- appendPQExpBufferStr(&buf, "ORDER BY 1,2;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 2931,2937 **** listLanguages(const char *pattern, bool verbose, bool showSystem) appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 2931,2937 ---- appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 3018,3024 **** listDomains(const char *pattern, bool verbose, bool showSystem) appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 3018,3024 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 3092,3098 **** listConversions(const char *pattern, bool verbose, bool showSystem) appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 3092,3098 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 3158,3164 **** listEventTriggers(const char *pattern, bool verbose) appendPQExpBufferStr(&buf, "ORDER BY 1"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 3158,3164 ---- appendPQExpBufferStr(&buf, "ORDER BY 1"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 3257,3263 **** listCasts(const char *pattern, bool verbose) appendPQExpBufferStr(&buf, ") )\nORDER BY 1, 2;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 3257,3263 ---- appendPQExpBufferStr(&buf, ") )\nORDER BY 1, 2;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 3333,3339 **** listCollations(const char *pattern, bool verbose, bool showSystem) appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 3333,3339 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 3392,3398 **** listSchemas(const char *pattern, bool verbose, bool showSystem) appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 3392,3398 ---- appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 3449,3455 **** listTSParsers(const char *pattern, bool verbose) appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 3449,3455 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 3490,3496 **** listTSParsersVerbose(const char *pattern) appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 3490,3496 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 3587,3593 **** describeOneTSParser(const char *oid, const char *nspname, const char *prsname) gettext_noop("Get token types"), oid); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 3587,3593 ---- gettext_noop("Get token types"), oid); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 3619,3625 **** describeOneTSParser(const char *oid, const char *nspname, const char *prsname) gettext_noop("Description"), oid); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 3619,3625 ---- gettext_noop("Description"), oid); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 3695,3701 **** listTSDictionaries(const char *pattern, bool verbose) appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 3695,3701 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 3763,3769 **** listTSTemplates(const char *pattern, bool verbose) appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 3763,3769 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 3820,3826 **** listTSConfigs(const char *pattern, bool verbose) appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 3820,3826 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 3862,3868 **** listTSConfigsVerbose(const char *pattern) appendPQExpBufferStr(&buf, "ORDER BY 3, 2;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 3862,3868 ---- appendPQExpBufferStr(&buf, "ORDER BY 3, 2;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 3940,3946 **** describeOneTSConfig(const char *oid, const char *nspname, const char *cfgname, gettext_noop("Dictionaries"), oid); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 3940,3946 ---- gettext_noop("Dictionaries"), oid); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 4041,4047 **** listForeignDataWrappers(const char *pattern, bool verbose) appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 4041,4047 ---- appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 4120,4126 **** listForeignServers(const char *pattern, bool verbose) appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 4120,4126 ---- appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 4178,4184 **** listUserMappings(const char *pattern, bool verbose) appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 4178,4184 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 4252,4258 **** listForeignTables(const char *pattern, bool verbose) appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 4252,4258 ---- appendPQExpBufferStr(&buf, "ORDER BY 1, 2;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 4306,4312 **** listExtensions(const char *pattern) appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 4306,4312 ---- appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 4352,4358 **** listExtensionContents(const char *pattern) appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 4352,4358 ---- appendPQExpBufferStr(&buf, "ORDER BY 1;"); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *************** *** 4412,4418 **** listOneExtensionContents(const char *extname, const char *oid) gettext_noop("Object Description"), oid); ! res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) return false; --- 4412,4418 ---- gettext_noop("Object Description"), oid); ! res = PSQLexec(buf.data); termPQExpBuffer(&buf); if (!res) return false; *** a/src/bin/psql/large_obj.c --- b/src/bin/psql/large_obj.c *************** *** 73,79 **** start_lo_xact(const char *operation, bool *own_transaction) { case PQTRANS_IDLE: /* need to start our own xact */ ! if (!(res = PSQLexec("BEGIN", false))) return false; PQclear(res); *own_transaction = true; --- 73,79 ---- { case PQTRANS_IDLE: /* need to start our own xact */ ! if (!(res = PSQLexec("BEGIN"))) return false; PQclear(res); *own_transaction = true; *************** *** 103,111 **** finish_lo_xact(const char *operation, bool own_transaction) if (own_transaction && pset.autocommit) { /* close out our own xact */ ! if (!(res = PSQLexec("COMMIT", false))) { ! res = PSQLexec("ROLLBACK", false); PQclear(res); return false; } --- 103,111 ---- if (own_transaction && pset.autocommit) { /* close out our own xact */ ! if (!(res = PSQLexec("COMMIT"))) { ! res = PSQLexec("ROLLBACK"); PQclear(res); return false; } *************** *** 126,132 **** fail_lo_xact(const char *operation, bool own_transaction) if (own_transaction && pset.autocommit) { /* close out our own xact */ ! res = PSQLexec("ROLLBACK", false); PQclear(res); } --- 126,132 ---- if (own_transaction && pset.autocommit) { /* close out our own xact */ ! res = PSQLexec("ROLLBACK"); PQclear(res); } *************** *** 209,215 **** do_lo_import(const char *filename_arg, const char *comment_arg) bufptr += PQescapeStringConn(pset.db, bufptr, comment_arg, slen, NULL); strcpy(bufptr, "'"); ! if (!(res = PSQLexec(cmdbuf, false))) { free(cmdbuf); return fail_lo_xact("\\lo_import", own_transaction); --- 209,215 ---- bufptr += PQescapeStringConn(pset.db, bufptr, comment_arg, slen, NULL); strcpy(bufptr, "'"); ! if (!(res = PSQLexec(cmdbuf))) { free(cmdbuf); return fail_lo_xact("\\lo_import", own_transaction); *************** *** 301,307 **** do_lo_list(void) gettext_noop("Description")); } ! res = PSQLexec(buf, false); if (!res) return false; --- 301,307 ---- gettext_noop("Description")); } ! res = PSQLexec(buf); if (!res) return false;
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers