From e5ee95e88aa4b36dd77aae4b40ce0f6afd210bc9 Mon Sep 17 00:00:00 2001 From: yanghao Date: Wed, 5 Mar 2025 11:27:02 +0800 Subject: [PATCH] fix problem that size is not same when opfusion is on|off --- src/gausskernel/runtime/executor/nodeModifyTable.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/gausskernel/runtime/executor/nodeModifyTable.cpp b/src/gausskernel/runtime/executor/nodeModifyTable.cpp index 7877b9bff..b171ca7d1 100644 --- a/src/gausskernel/runtime/executor/nodeModifyTable.cpp +++ b/src/gausskernel/runtime/executor/nodeModifyTable.cpp @@ -4124,6 +4124,17 @@ ModifyTableState* ExecInitModifyTable(ModifyTable* node, EState* estate, int efl mt_state->mt_plans[i] = ExecInitNode(sub_plan, estate, eflags); } InitMultipleModify(mt_state, mt_state->mt_plans[i], (uint32)resultRelationNum); + + if (operation == CMD_INSERT && mt_state->mt_plans[i]->ps_ResultTupleSlot != NULL) { + /* Reset attstorage */ + TupleDesc plan_tuple_desc = mt_state->mt_plans[i]->ps_ResultTupleSlot->tts_tupleDescriptor; + TupleDesc ret_tuple_desc = result_rel_info->ri_RelationDesc->rd_att; + for (int i = 0; i < plan_tuple_desc->natts; i++) { + if (likely(i < ret_tuple_desc->natts)) { + plan_tuple_desc->attrs[i].attstorage = ret_tuple_desc->attrs[i].attstorage; + } + } + } estate->es_result_relation_info = result_rel_info; /* * If there are indices on the result relation, open them and save