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

Reply via email to