From 42fcad68a9c0e0ebecf6842888723cad1f9d5be2 Mon Sep 17 00:00:00 2001 From: Michael Meskes Date: Mon, 13 Mar 2017 20:47:27 +0100 Subject: [PATCH] Add test case for two phase commit. Also by Masahiko Sawada. --- src/interfaces/ecpg/test/ecpg_schedule | 1 + .../ecpg/test/expected/sql-twophase.c | 114 ++++++++++++++++++ .../ecpg/test/expected/sql-twophase.stderr | 34 ++++++ .../ecpg/test/expected/sql-twophase.stdout | 0 src/interfaces/ecpg/test/sql/Makefile | 1 + src/interfaces/ecpg/test/sql/twophase.pgc | 44 +++++++ 6 files changed, 194 insertions(+) create mode 100644 src/interfaces/ecpg/test/expected/sql-twophase.c create mode 100644 src/interfaces/ecpg/test/expected/sql-twophase.stderr create mode 100644 src/interfaces/ecpg/test/expected/sql-twophase.stdout create mode 100644 src/interfaces/ecpg/test/sql/twophase.pgc diff --git a/src/interfaces/ecpg/test/ecpg_schedule b/src/interfaces/ecpg/test/ecpg_schedule index c3ec125c36..206f712552 100644 --- a/src/interfaces/ecpg/test/ecpg_schedule +++ b/src/interfaces/ecpg/test/ecpg_schedule @@ -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 diff --git a/src/interfaces/ecpg/test/expected/sql-twophase.c b/src/interfaces/ecpg/test/expected/sql-twophase.c new file mode 100644 index 0000000000..cf491fc078 --- /dev/null +++ b/src/interfaces/ecpg/test/expected/sql-twophase.c @@ -0,0 +1,114 @@ +/* Processed by ecpg (regression mode) */ +/* These include files are added by the preprocessor */ +#include +#include +#include +/* End of automatic include section */ +#define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y)) + +#line 1 "twophase.pgc" +#include +#include +#include + + +#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); +} diff --git a/src/interfaces/ecpg/test/expected/sql-twophase.stderr b/src/interfaces/ecpg/test/expected/sql-twophase.stderr new file mode 100644 index 0000000000..18415ff5a3 --- /dev/null +++ b/src/interfaces/ecpg/test/expected/sql-twophase.stderr @@ -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 port +[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 diff --git a/src/interfaces/ecpg/test/expected/sql-twophase.stdout b/src/interfaces/ecpg/test/expected/sql-twophase.stdout new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/interfaces/ecpg/test/sql/Makefile b/src/interfaces/ecpg/test/sql/Makefile index 6bc67e92da..b7bc034e4e 100644 --- a/src/interfaces/ecpg/test/sql/Makefile +++ b/src/interfaces/ecpg/test/sql/Makefile @@ -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) diff --git a/src/interfaces/ecpg/test/sql/twophase.pgc b/src/interfaces/ecpg/test/sql/twophase.pgc new file mode 100644 index 0000000000..867a28e4c4 --- /dev/null +++ b/src/interfaces/ecpg/test/sql/twophase.pgc @@ -0,0 +1,44 @@ +#include +#include +#include + +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); +} -- 2.40.0