On Thu, Aug 28, 2014 at 8:46 PM, Fujii Masao <[email protected]> wrote:
> On Tue, Aug 26, 2014 at 4:55 AM, Heikki Linnakangas
> <[email protected]> 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
>>>> <[email protected]> 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 ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers