mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Add test case for two phase commit. Also by Masahiko Sawada.
This commit is contained in:
		@@ -46,6 +46,7 @@ test: sql/indicators
 | 
			
		||||
test: sql/oldexec
 | 
			
		||||
test: sql/quote
 | 
			
		||||
test: sql/show
 | 
			
		||||
test: sql/twophase
 | 
			
		||||
test: sql/insupd
 | 
			
		||||
test: sql/parser
 | 
			
		||||
test: thread/thread
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										114
									
								
								src/interfaces/ecpg/test/expected/sql-twophase.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								src/interfaces/ecpg/test/expected/sql-twophase.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,114 @@
 | 
			
		||||
/* Processed by ecpg (regression mode) */
 | 
			
		||||
/* These include files are added by the preprocessor */
 | 
			
		||||
#include <ecpglib.h>
 | 
			
		||||
#include <ecpgerrno.h>
 | 
			
		||||
#include <sqlca.h>
 | 
			
		||||
/* End of automatic include section */
 | 
			
		||||
#define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y))
 | 
			
		||||
 | 
			
		||||
#line 1 "twophase.pgc"
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#line 1 "regression.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#line 5 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* exec sql whenever sqlerror  sqlprint ; */
 | 
			
		||||
#line 7 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int main(void)
 | 
			
		||||
{
 | 
			
		||||
	char msg[128];
 | 
			
		||||
 | 
			
		||||
	ECPGdebug(1, stderr);
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "connect");
 | 
			
		||||
	{ ECPGconnect(__LINE__, 0, "ecpg1_regression" , NULL, NULL , NULL, 0); 
 | 
			
		||||
#line 16 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
if (sqlca.sqlcode < 0) sqlprint();}
 | 
			
		||||
#line 16 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
	{ ECPGsetcommit(__LINE__, "off", NULL);
 | 
			
		||||
#line 17 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
if (sqlca.sqlcode < 0) sqlprint();}
 | 
			
		||||
#line 17 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "create");
 | 
			
		||||
	{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "create table t1 ( c int )", ECPGt_EOIT, ECPGt_EORT);
 | 
			
		||||
#line 20 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
if (sqlca.sqlcode < 0) sqlprint();}
 | 
			
		||||
#line 20 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "commit");
 | 
			
		||||
	{ ECPGtrans(__LINE__, NULL, "commit");
 | 
			
		||||
#line 23 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
if (sqlca.sqlcode < 0) sqlprint();}
 | 
			
		||||
#line 23 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "begin");
 | 
			
		||||
	{ ECPGtrans(__LINE__, NULL, "begin");
 | 
			
		||||
#line 26 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
if (sqlca.sqlcode < 0) sqlprint();}
 | 
			
		||||
#line 26 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "insert");
 | 
			
		||||
	{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into t1 values ( 1 )", ECPGt_EOIT, ECPGt_EORT);
 | 
			
		||||
#line 29 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
if (sqlca.sqlcode < 0) sqlprint();}
 | 
			
		||||
#line 29 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "prepare transaction");
 | 
			
		||||
	{ ECPGtrans(__LINE__, NULL, "prepare transaction 'gxid'");
 | 
			
		||||
#line 32 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
if (sqlca.sqlcode < 0) sqlprint();}
 | 
			
		||||
#line 32 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "commit prepared");
 | 
			
		||||
	{ ECPGtrans(__LINE__, NULL, "commit prepared 'gxid'");
 | 
			
		||||
#line 35 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
if (sqlca.sqlcode < 0) sqlprint();}
 | 
			
		||||
#line 35 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "drop");
 | 
			
		||||
	{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table t1", ECPGt_EOIT, ECPGt_EORT);
 | 
			
		||||
#line 38 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
if (sqlca.sqlcode < 0) sqlprint();}
 | 
			
		||||
#line 38 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "disconnect");
 | 
			
		||||
	{ ECPGdisconnect(__LINE__, "CURRENT");
 | 
			
		||||
#line 41 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
if (sqlca.sqlcode < 0) sqlprint();}
 | 
			
		||||
#line 41 "twophase.pgc"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										34
									
								
								src/interfaces/ecpg/test/expected/sql-twophase.stderr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/interfaces/ecpg/test/expected/sql-twophase.stderr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
[NO_PID]: ECPGdebug: set to 1
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ECPGconnect: opening database ecpg1_regression on <DEFAULT> port <DEFAULT>  
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ECPGsetcommit on line 17: action "off"; connection "ecpg1_regression"
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ecpg_execute on line 20: query: create table t1 ( c int ); with 0 parameter(s) on connection ecpg1_regression
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ecpg_execute on line 20: using PQexec
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ecpg_process_output on line 20: OK: CREATE TABLE
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ECPGtrans on line 23: action "commit"; connection "ecpg1_regression"
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ECPGtrans on line 26: action "begin"; connection "ecpg1_regression"
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ecpg_execute on line 29: query: insert into t1 values ( 1 ); with 0 parameter(s) on connection ecpg1_regression
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ecpg_execute on line 29: using PQexec
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ecpg_process_output on line 29: OK: INSERT 0 1
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ECPGtrans on line 32: action "prepare transaction 'gxid'"; connection "ecpg1_regression"
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ECPGtrans on line 35: action "commit prepared 'gxid'"; connection "ecpg1_regression"
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ecpg_execute on line 38: query: drop table t1; with 0 parameter(s) on connection ecpg1_regression
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ecpg_execute on line 38: using PQexec
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ecpg_process_output on line 38: OK: DROP TABLE
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
[NO_PID]: ecpg_finish: connection ecpg1_regression closed
 | 
			
		||||
[NO_PID]: sqlca: code: 0, state: 00000
 | 
			
		||||
@@ -22,6 +22,7 @@ TESTS = array array.c \
 | 
			
		||||
        parser parser.c \
 | 
			
		||||
        quote quote.c \
 | 
			
		||||
        show show.c \
 | 
			
		||||
        twophase twophase.c \
 | 
			
		||||
        insupd insupd.c
 | 
			
		||||
 | 
			
		||||
all: $(TESTS)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								src/interfaces/ecpg/test/sql/twophase.pgc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/interfaces/ecpg/test/sql/twophase.pgc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
exec sql include ../regression;
 | 
			
		||||
 | 
			
		||||
exec sql whenever sqlerror sqlprint;
 | 
			
		||||
 | 
			
		||||
int main(void)
 | 
			
		||||
{
 | 
			
		||||
	char msg[128];
 | 
			
		||||
 | 
			
		||||
	ECPGdebug(1, stderr);
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "connect");
 | 
			
		||||
	exec sql connect to REGRESSDB1;
 | 
			
		||||
	exec sql set autocommit to off;
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "create");
 | 
			
		||||
	exec sql create table t1(c int);
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "commit");
 | 
			
		||||
	exec sql commit;
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "begin");
 | 
			
		||||
	exec sql begin;
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "insert");
 | 
			
		||||
	exec sql insert into t1 values(1);
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "prepare transaction");
 | 
			
		||||
	exec sql prepare transaction 'gxid';
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "commit prepared");
 | 
			
		||||
	exec sql commit prepared 'gxid';
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "drop");
 | 
			
		||||
	exec sql drop table t1;
 | 
			
		||||
 | 
			
		||||
	strcpy(msg, "disconnect");
 | 
			
		||||
	exec sql disconnect current;
 | 
			
		||||
 | 
			
		||||
	return (0);
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user