From 02effd45aa715e45a13d24728ecfcf07e4bbd53f Mon Sep 17 00:00:00 2001 From: wangfeihuo Date: Tue, 15 Apr 2025 19:46:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dsmp=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=E5=B5=8C=E5=A5=97=E4=BA=8B=E5=8A=A1=E4=BA=A7=E7=94=9F?= =?UTF-8?q?core=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/optimizer/plan/createplan.cpp | 3 ++- src/test/regress/expected/smp.out | 12 ++++++++++++ src/test/regress/sql/smp.sql | 16 ++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/gausskernel/optimizer/plan/createplan.cpp b/src/gausskernel/optimizer/plan/createplan.cpp index 7dcedd1bf7..8dce2a5611 100755 --- a/src/gausskernel/optimizer/plan/createplan.cpp +++ b/src/gausskernel/optimizer/plan/createplan.cpp @@ -9645,9 +9645,10 @@ ModifyTable* make_modifytable(CmdType operation, bool canSetTag, List* resultRel isUstore = result_rte->is_ustore; } + int nest_level = GetCurrentTransactionNestLevel(); // not support the smp in nest transaction. bool supportIUDParallel = (operation == CMD_DELETE || operation == CMD_UPDATE || (operation == CMD_INSERT && !upsertClause)) && - returningLists == NIL && !isUstore && list_length(subplans) == 1 && + returningLists == NIL && !isUstore && list_length(subplans) == 1 && nest_level <= 1 && (linitial_node(RangeTblEntry, root->parse->rtable)->orientation == REL_ROW_ORIENTED); Assert(list_length(resultRelations) == list_length(subplans)); diff --git a/src/test/regress/expected/smp.out b/src/test/regress/expected/smp.out index 2026bf5db6..0bea03e687 100644 --- a/src/test/regress/expected/smp.out +++ b/src/test/regress/expected/smp.out @@ -1564,6 +1564,18 @@ select /*+ set(query_dop 1002) indexonlyscan(ios_t1) */ count(*) from ios_t1; (1 row) drop table ios_t1; +create table pktable2(f1 int primary key); +NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "pktable2_pkey" for table "pktable2" +create table fktable2(f1 int references pktable2 deferrable initially deferred); +insert into pktable2 values(1); +begin; +insert into fktable2 values(1); +savepoint x; +delete from fktable2; +rollback to x; +commit; +drop table fktable2; +drop table pktable2; --clean set search_path=public; drop schema test_smp cascade; diff --git a/src/test/regress/sql/smp.sql b/src/test/regress/sql/smp.sql index fdb88ae94c..3f8979132e 100644 --- a/src/test/regress/sql/smp.sql +++ b/src/test/regress/sql/smp.sql @@ -304,6 +304,22 @@ explain(costs off) select /*+ set(query_dop 1002) indexonlyscan(ios_t1) */ count select /*+ set(query_dop 1002) indexonlyscan(ios_t1) */ count(*) from ios_t1; drop table ios_t1; + + +create table pktable2(f1 int primary key); +create table fktable2(f1 int references pktable2 deferrable initially deferred); +insert into pktable2 values(1); + +begin; +insert into fktable2 values(1); +savepoint x; +delete from fktable2; +rollback to x; +commit; + +drop table fktable2; +drop table pktable2; + --clean set search_path=public; drop schema test_smp cascade; -- Gitee