From d65e447034e6ea2746e127341a2d3a0c8de756e0 Mon Sep 17 00:00:00 2001 From: chenxiaobin19 <1025221611@qq.com> Date: Tue, 8 Apr 2025 21:12:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dsmp=E4=B8=8Bcstore=20insert?= =?UTF-8?q?=E5=9C=BA=E6=99=AF=E6=B2=A1=E6=9C=89=E5=88=86=E9=85=8D=E4=BA=8B?= =?UTF-8?q?=E5=8A=A1=E5=8F=B7=E7=9A=84=E9=97=AE=E9=A2=98=20&&=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8Dsmp=E4=B8=8B=E6=89=A7=E8=A1=8C=E5=B8=A6userset?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E8=AF=AD=E5=8F=A5=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 --- src/common/backend/parser/gram.y | 1 - src/gausskernel/process/stream/execStream.cpp | 3 ++- .../process/threadpool/threadpool_stream.cpp | 1 + src/gausskernel/runtime/executor/execQual.cpp | 3 ++- src/test/regress/input/hw_cstore_index1.source | 2 ++ .../set_user_defined_variables_test.source | 9 +++++++++ src/test/regress/output/hw_cstore_index1.source | 2 ++ .../set_user_defined_variables_test.source | 17 +++++++++++++++++ 8 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/common/backend/parser/gram.y b/src/common/backend/parser/gram.y index a1ec888165..01643038ac 100644 --- a/src/common/backend/parser/gram.y +++ b/src/common/backend/parser/gram.y @@ -28129,7 +28129,6 @@ a_expr: c_expr { $$ = $1; } errmsg("@var_name := expr is not yet supported in distributed database."))); #endif if (DB_IS_CMPT(B_FORMAT) && (u_sess->attr.attr_common.enable_set_variable_b_format || ENABLE_SET_VARIABLES)) { - u_sess->parser_cxt.has_equal_uservar = true; UserSetElem *n = makeNode(UserSetElem); n->name = list_make1((Node *)$1); n->val = (Expr *)$3; diff --git a/src/gausskernel/process/stream/execStream.cpp b/src/gausskernel/process/stream/execStream.cpp index a605ff3192..361c5ba526 100755 --- a/src/gausskernel/process/stream/execStream.cpp +++ b/src/gausskernel/process/stream/execStream.cpp @@ -1241,7 +1241,8 @@ static void StartupStreamThread(StreamState* node) StreamTxnContext transactionCxt; - if (IS_SPQ_RUNNING || nodeTag(node->ss.ps.plan->lefttree) != T_ModifyTable) { + if (IS_SPQ_RUNNING || (nodeTag(node->ss.ps.plan->lefttree) != T_ModifyTable && + nodeTag(node->ss.ps.plan->lefttree) != T_VecModifyTable)) { transactionCxt.txnId = GetCurrentTransactionIdIfAny(); } else { transactionCxt.txnId = GetCurrentTransactionId(); diff --git a/src/gausskernel/process/threadpool/threadpool_stream.cpp b/src/gausskernel/process/threadpool/threadpool_stream.cpp index 22012f5997..ee6e92f320 100644 --- a/src/gausskernel/process/threadpool/threadpool_stream.cpp +++ b/src/gausskernel/process/threadpool/threadpool_stream.cpp @@ -135,6 +135,7 @@ void ThreadPoolStream::InitStream() /* Init GUC option for this session. */ InitializeGUCOptions(); + init_set_user_params_htab(); /* Read in remaining GUC variables */ read_nondefault_variables(); diff --git a/src/gausskernel/runtime/executor/execQual.cpp b/src/gausskernel/runtime/executor/execQual.cpp index 92843d43a1..bde719c9ed 100644 --- a/src/gausskernel/runtime/executor/execQual.cpp +++ b/src/gausskernel/runtime/executor/execQual.cpp @@ -1119,7 +1119,7 @@ static Datum ExecEvalConst(ExprState* exprstate, ExprContext* econtext, bool* is con = (Const *)node; } } else { - con = makeConst(UNKNOWNOID, -1, InvalidOid, -2, (Datum)0, true, false); + con = (Const*)((UserVar *)exprstate->expr)->value; } if (u_sess->parser_cxt.in_userset) { u_sess->parser_cxt.has_set_uservar = true; @@ -6724,6 +6724,7 @@ ExprState* ExecInitExprByRecursion(Expr* node, PlanState* parent) state = (ExprState*)usestate; state->evalfunc = (ExprStateEvalFunc)ExecEvalUserSetElm; usestate->instate = ExecInitExpr((Expr *)useexpr->val, parent); + u_sess->parser_cxt.has_equal_uservar = true; } break; case T_PriorExpr: state = (ExprState*)makeNode(ExprState); diff --git a/src/test/regress/input/hw_cstore_index1.source b/src/test/regress/input/hw_cstore_index1.source index c0032cca6c..550f91e150 100644 --- a/src/test/regress/input/hw_cstore_index1.source +++ b/src/test/regress/input/hw_cstore_index1.source @@ -53,8 +53,10 @@ create table cstore_index_tbl( ,interval1 interval ,interval2 tinterval)with(orientation=column) ; +set query_dop = 1002; insert into cstore_index_tbl select * from row_index_tbl; select ctid from cstore_index_tbl order by 1; +set query_dop = 1; create index idx_int1 on cstore_index_tbl(id1); create index idx_int2 on cstore_index_tbl(id2); diff --git a/src/test/regress/input/set_user_defined_variables_test.source b/src/test/regress/input/set_user_defined_variables_test.source index fe4086f7a6..7534a54732 100644 --- a/src/test/regress/input/set_user_defined_variables_test.source +++ b/src/test/regress/input/set_user_defined_variables_test.source @@ -649,6 +649,15 @@ INSERT INTO demo VALUES ('5', 'E', '4'); INSERT INTO demo VALUES ('6', 'F', '1'); INSERT INTO demo VALUES ('7', 'G', '1'); +set query_dop = 1002; +SELECT @r , +(SELECT @r:= parent_id FROM demo WHERE id = @r) AS parent_id, +@l:= @l+ 1 AS lvl +FROM +(SELECT @r:= 5, @l:= 0) vars, +demo h +WHERE @r<> 0; +set query_dop = 1; SELECT @r , (SELECT @r:= parent_id FROM demo WHERE id = @r) AS parent_id, @l:= @l+ 1 AS lvl diff --git a/src/test/regress/output/hw_cstore_index1.source b/src/test/regress/output/hw_cstore_index1.source index 7c15a147b1..9251197c68 100644 --- a/src/test/regress/output/hw_cstore_index1.source +++ b/src/test/regress/output/hw_cstore_index1.source @@ -49,6 +49,7 @@ create table cstore_index_tbl( ,serial1 int ,interval1 interval ,interval2 tinterval)with(orientation=column) ; +set query_dop = 1002; insert into cstore_index_tbl select * from row_index_tbl; select ctid from cstore_index_tbl order by 1; ctid @@ -59,6 +60,7 @@ select ctid from cstore_index_tbl order by 1; (1001,4) (4 rows) +set query_dop = 1; create index idx_int1 on cstore_index_tbl(id1); create index idx_int2 on cstore_index_tbl(id2); create index idx_int4 on cstore_index_tbl(id4); diff --git a/src/test/regress/output/set_user_defined_variables_test.source b/src/test/regress/output/set_user_defined_variables_test.source index bfe3ef55d3..34b2265c80 100644 --- a/src/test/regress/output/set_user_defined_variables_test.source +++ b/src/test/regress/output/set_user_defined_variables_test.source @@ -1326,6 +1326,23 @@ INSERT INTO demo VALUES ('4', 'D', '2'); INSERT INTO demo VALUES ('5', 'E', '4'); INSERT INTO demo VALUES ('6', 'F', '1'); INSERT INTO demo VALUES ('7', 'G', '1'); +set query_dop = 1002; +SELECT @r , +(SELECT @r:= parent_id FROM demo WHERE id = @r) AS parent_id, +@l:= @l+ 1 AS lvl +FROM +(SELECT @r:= 5, @l:= 0) vars, +demo h +WHERE @r<> 0; + @r | parent_id | lvl +----+-----------+----- + 5 | 4 | 1 + 4 | 2 | 2 + 2 | 1 | 3 + 1 | 0 | 4 +(4 rows) + +set query_dop = 1; SELECT @r , (SELECT @r:= parent_id FROM demo WHERE id = @r) AS parent_id, @l:= @l+ 1 AS lvl -- Gitee