From 0488d303317aeea9ba7707ba67a58adb7c04196c Mon Sep 17 00:00:00 2001 From: Xiao__Ma Date: Thu, 29 Jul 2021 15:35:44 +0800 Subject: [PATCH] bypass --- src/gausskernel/process/tcop/postgres.cpp | 9 ++++----- src/gausskernel/runtime/executor/opfusion.cpp | 13 +++++++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/gausskernel/process/tcop/postgres.cpp b/src/gausskernel/process/tcop/postgres.cpp index d1967e098..555d8c1a8 100644 --- a/src/gausskernel/process/tcop/postgres.cpp +++ b/src/gausskernel/process/tcop/postgres.cpp @@ -4187,9 +4187,7 @@ static void exec_bind_message(StringInfo input_message) opFusionObj->clean(); opFusionObj->updatePreAllocParamter(input_message); opFusionObj->setCurrentOpFusionObj(opFusionObj); - if (portal_name[0] != '\0') - opFusionObj->storeFusion(portal_name); - + opFusionObj->storeFusion(portal_name); CachedPlanSource* cps = opFusionObj->m_global->m_psrc; if (cps != NULL && cps->gplan) { setCachedPlanBucketId(cps->gplan, opFusionObj->m_local.m_params); @@ -4594,8 +4592,7 @@ static void exec_bind_message(StringInfo input_message) ((OpFusion*)psrc->opFusionObj)->useOuterParameter(params); ((OpFusion*)psrc->opFusionObj)->setCurrentOpFusionObj((OpFusion*)psrc->opFusionObj); ((OpFusion*)psrc->opFusionObj)->CopyFormats(rformats, numRFormats); - if (portal_name[0] != '\0') - ((OpFusion *)psrc->opFusionObj)->storeFusion(portal_name); + ((OpFusion *)psrc->opFusionObj)->storeFusion(portal_name); if (snapshot_set) PopActiveSnapshot(); @@ -9900,6 +9897,7 @@ static void exec_one_in_batch(CachedPlanSource* psrc, ParamListInfo params, int opFusionObj->bindClearPosition(); opFusionObj->useOuterParameter(params); opFusionObj->setCurrentOpFusionObj(opFusionObj); + opFusionObj->storeFusion(""); CachedPlanSource* cps = opFusionObj->m_global->m_psrc; if (cps != NULL && cps->gplan) { @@ -10006,6 +10004,7 @@ static void exec_one_in_batch(CachedPlanSource* psrc, ParamListInfo params, int ((OpFusion*)psrc->opFusionObj)->useOuterParameter(params); ((OpFusion*)psrc->opFusionObj)->setCurrentOpFusionObj((OpFusion*)psrc->opFusionObj); ((OpFusion*)psrc->opFusionObj)->CopyFormats(rformats, numRFormats); + ((OpFusion*)psrc->opFusionObj)->storeFusion(""); if (OpFusion::process(FUSION_EXECUTE, NULL, completionTag, true, NULL)) { CommandCounterIncrement(); diff --git a/src/gausskernel/runtime/executor/opfusion.cpp b/src/gausskernel/runtime/executor/opfusion.cpp index edc519dcf..be8b8cd99 100644 --- a/src/gausskernel/runtime/executor/opfusion.cpp +++ b/src/gausskernel/runtime/executor/opfusion.cpp @@ -1103,6 +1103,10 @@ void OpFusion::clean() void OpFusion::storeFusion(const char *portalname) { + if (portalname == NULL || portalname[0] == '\0') { + pfree_ext(m_local.m_portalName); + return; + } pnFusionObj *entry = NULL; if (!u_sess->pcache_cxt.pn_fusion_htab) initFusionHtab(); @@ -1258,6 +1262,11 @@ bool SelectFusion::execute(long max_rows, char* completionTag) } else { m_local.m_isCompleted = true; } + /* for unnamed portal, should no need to wait for next E msg */ + if (m_local.m_portalName == NULL || m_local.m_portalName[0] == '\0') { + m_local.m_isCompleted = true; + } + success = true; /**************** @@ -2638,6 +2647,10 @@ bool SelectForUpdateFusion::execute(long max_rows, char* completionTag) } else { m_local.m_isCompleted = true; } + /* for unnamed portal, should no need to wait for next E msg */ + if (m_local.m_portalName == NULL || m_local.m_portalName[0] == '\0') { + m_local.m_isCompleted = true; + } (void)ExecClearTuple(m_local.m_reslot);