From 680962280a0946c750b37c9bf593cf765a4ccf4e Mon Sep 17 00:00:00 2001 From: luozihao <1165977584@qq.com> Date: Thu, 21 Jul 2022 16:56:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dmerge=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E4=B8=B4=E6=97=B6=E8=A1=A8=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/backend/catalog/storage_gtt.cpp | 2 +- src/test/regress/input/gtt_merge.source | 11 +++++++++++ src/test/regress/output/gtt_merge.source | 20 ++++++++++++++++++++ src/test/regress/parallel_schedule0 | 1 + 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/test/regress/input/gtt_merge.source create mode 100644 src/test/regress/output/gtt_merge.source diff --git a/src/common/backend/catalog/storage_gtt.cpp b/src/common/backend/catalog/storage_gtt.cpp index 544116ae0..17240b5bf 100644 --- a/src/common/backend/catalog/storage_gtt.cpp +++ b/src/common/backend/catalog/storage_gtt.cpp @@ -1317,7 +1317,7 @@ void init_gtt_storage(CmdType operation, ResultRelInfo* resultRelInfo) "to enable this feature."))); } - if (!(operation == CMD_UTILITY || operation == CMD_INSERT)) { + if (!(operation == CMD_UTILITY || operation == CMD_INSERT || operation == CMD_MERGE)) { return; } diff --git a/src/test/regress/input/gtt_merge.source b/src/test/regress/input/gtt_merge.source new file mode 100644 index 000000000..afb3b807f --- /dev/null +++ b/src/test/regress/input/gtt_merge.source @@ -0,0 +1,11 @@ +CREATE TABLE test_template ( A INT ); +INSERT INTO test_template VALUES( 1 ); + +CREATE USER test_user WITH PASSWORD 'openGauss@123'; +GRANT ALL PRIVILEGES TO test_user; + +\! @abs_bindir@/gsql -r -U test_user -W openGauss@123 -p @portstring@ -d regression -c "CREATE GLOBAL TEMPORARY TABLE test_gt ( ID INT, NAME TEXT );" +SELECT pg_sleep(1); +\! @abs_bindir@/gsql -r -U test_user -W openGauss@123 -p @portstring@ -d regression -c "MERGE INTO test_gt USING test_template ON test_template.a >= 1 WHEN NOT MATCHED THEN INSERT VALUES ( 1, '1' ) WHEN MATCHED THEN UPDATE SET name = '1'; SELECT * FROM test_gt;" + +DROP USER test_user CASCADE; diff --git a/src/test/regress/output/gtt_merge.source b/src/test/regress/output/gtt_merge.source new file mode 100644 index 000000000..cf368b3ae --- /dev/null +++ b/src/test/regress/output/gtt_merge.source @@ -0,0 +1,20 @@ +CREATE TABLE test_template ( A INT ); +INSERT INTO test_template VALUES( 1 ); +CREATE USER test_user WITH PASSWORD 'openGauss@123'; +GRANT ALL PRIVILEGES TO test_user; +\! @abs_bindir@/gsql -r -U test_user -W openGauss@123 -p @portstring@ -d regression -c "CREATE GLOBAL TEMPORARY TABLE test_gt ( ID INT, NAME TEXT );" +CREATE TABLE +SELECT pg_sleep(1); + pg_sleep +---------- + +(1 row) + +\! @abs_bindir@/gsql -r -U test_user -W openGauss@123 -p @portstring@ -d regression -c "MERGE INTO test_gt USING test_template ON test_template.a >= 1 WHEN NOT MATCHED THEN INSERT VALUES ( 1, '1' ) WHEN MATCHED THEN UPDATE SET name = '1'; SELECT * FROM test_gt;" +MERGE 1 + id | name +----+------ + 1 | 1 +(1 row) + +DROP USER test_user CASCADE; diff --git a/src/test/regress/parallel_schedule0 b/src/test/regress/parallel_schedule0 index 9504097ab..854f32bc2 100644 --- a/src/test/regress/parallel_schedule0 +++ b/src/test/regress/parallel_schedule0 @@ -319,6 +319,7 @@ test: gtt_function test: gtt_prepare test: gtt_parallel_1 gtt_parallel_2 test: gtt_clean +test: gtt_merge #openGauss synchronization test cases test: partiton_pathkey_col_plan partiton_pathkey_col_randomexec partiton_pathkey_row_plan partiton_pathkey_row_randomexec