From 0672e427e78f524b1a684c9305ac38da20fdd0de Mon Sep 17 00:00:00 2001 From: luozihao <1165977584@qq.com> Date: Thu, 8 Dec 2022 15:04:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=8B=E5=8A=A1=E5=9D=97se?= =?UTF-8?q?t=20autocommit=20=3D=200=20rollback=E5=A4=B1=E8=B4=A5=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/utils/misc/guc/guc_storage.cpp | 2 +- .../storage/access/transam/xact.cpp | 8 +------- src/include/access/xact.h | 1 - src/test/regress/expected/autocommit_test.out | 19 ++++++++++++++++++- src/test/regress/sql/autocommit_test.sql | 8 ++++++++ 5 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/common/backend/utils/misc/guc/guc_storage.cpp b/src/common/backend/utils/misc/guc/guc_storage.cpp index 521a9523f..bccbd50e3 100755 --- a/src/common/backend/utils/misc/guc/guc_storage.cpp +++ b/src/common/backend/utils/misc/guc/guc_storage.cpp @@ -4672,7 +4672,7 @@ static void assign_phony_autocommit(bool newval, void* extra) { /* change autocommit from false to on */ if (newval && u_sess->attr.attr_storage.phony_autocommit != newval) { - if (!IsTransactionDefaultState() && !EndTransactionBlock()) { + if (IsTransactionInProgressState() && !EndTransactionBlock()) { ereport(ERROR, (errmsg("end transaction failed"))); } } diff --git a/src/gausskernel/storage/access/transam/xact.cpp b/src/gausskernel/storage/access/transam/xact.cpp index 6fdb04a52..df5d2307b 100755 --- a/src/gausskernel/storage/access/transam/xact.cpp +++ b/src/gausskernel/storage/access/transam/xact.cpp @@ -8485,16 +8485,10 @@ static void AtEOXact_Proceed_PatchSeq() } } -bool IsTransactionDefaultState() -{ - TransactionState s = CurrentTransactionState; - return s->blockState == TBLOCK_DEFAULT; -} - bool IsTransactionInProgressState() { TransactionState s = CurrentTransactionState; - return s->blockState == TBLOCK_INPROGRESS; + return (s->blockState == TBLOCK_INPROGRESS) || (s->blockState == TBLOCK_SUBINPROGRESS); } void BeginTxnForAutoCommitOff() diff --git a/src/include/access/xact.h b/src/include/access/xact.h index 0ff8a562d..5893f3bb6 100644 --- a/src/include/access/xact.h +++ b/src/include/access/xact.h @@ -466,5 +466,4 @@ extern char* GetCurrentTransactionName(); extern List* GetTransactionList(List *head); extern void BeginTxnForAutoCommitOff(); extern bool IsTransactionInProgressState(); -extern bool IsTransactionDefaultState(); #endif /* XACT_H */ diff --git a/src/test/regress/expected/autocommit_test.out b/src/test/regress/expected/autocommit_test.out index 05ac4ec7f..5fdc53300 100644 --- a/src/test/regress/expected/autocommit_test.out +++ b/src/test/regress/expected/autocommit_test.out @@ -85,7 +85,7 @@ SELECT * FROM test_a; ROLLBACK; SELECT * FROM test_a; -ERROR: relation "test_a" does not exist on datanode1 +--?ERROR: relation "test_a" does not exist on .* LINE 1: SELECT * FROM test_a; ^ COMMIT; @@ -238,6 +238,23 @@ SELECT * FROM test_table; aaaaa (1 row) +-- set autocommit = 0 and rollback +BEGIN; +INSERT INTO test_table values('ccccc'); +SET autocommit = 0; +ROLLBACK; +SELECT * FROM test_table; + a +------- + aaaaa +(1 row) + +SHOW autocommit; + autocommit +------------ + on +(1 row) + \c regression DROP DATABASE test_db; DROP DATABASE test_drop; diff --git a/src/test/regress/sql/autocommit_test.sql b/src/test/regress/sql/autocommit_test.sql index 1d4d6e172..98d9cad05 100644 --- a/src/test/regress/sql/autocommit_test.sql +++ b/src/test/regress/sql/autocommit_test.sql @@ -116,6 +116,14 @@ SET autocommit = 1; ROLLBACK; SELECT * FROM test_table; +-- set autocommit = 0 and rollback +BEGIN; +INSERT INTO test_table values('ccccc'); +SET autocommit = 0; +ROLLBACK; +SELECT * FROM test_table; +SHOW autocommit; + \c regression DROP DATABASE test_db; DROP DATABASE test_drop;