mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Ecpg should support COMMIT PREPARED and ROLLBACK PREPARED.
The problem was that "begin transaction" was issued automatically before executing COMMIT/ROLLBACK PREPARED if not in auto commit. This fix by Masahiko Sawada fixes this.
This commit is contained in:
		@@ -213,9 +213,15 @@ ECPGtrans(int lineno, const char *connection_name, const char *transaction)
 | 
			
		||||
		 * If we got a transaction command but have no open transaction, we
 | 
			
		||||
		 * have to start one, unless we are in autocommit, where the
 | 
			
		||||
		 * developers have to take care themselves. However, if the command is
 | 
			
		||||
		 * a begin statement, we just execute it once.
 | 
			
		||||
		 * a begin statement, we just execute it once. And if the command is
 | 
			
		||||
		 * commit or rollback prepared, we don't execute it.
 | 
			
		||||
		 */
 | 
			
		||||
		if (PQtransactionStatus(con->connection) == PQTRANS_IDLE && !con->autocommit && strncmp(transaction, "begin", 5) != 0 && strncmp(transaction, "start", 5) != 0)
 | 
			
		||||
		if (PQtransactionStatus(con->connection) == PQTRANS_IDLE &&
 | 
			
		||||
			!con->autocommit &&
 | 
			
		||||
			strncmp(transaction, "begin", 5) != 0 &&
 | 
			
		||||
			strncmp(transaction, "start", 5) != 0 &&
 | 
			
		||||
			strncmp(transaction, "commit prepared", 15) != 0 &&
 | 
			
		||||
			strncmp(transaction, "rollback prepared", 17) != 0)
 | 
			
		||||
		{
 | 
			
		||||
			res = PQexec(con->connection, "begin transaction");
 | 
			
		||||
			if (!ecpg_check_PQresult(res, lineno, con->connection, ECPG_COMPAT_PGSQL))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user