!1131 修复bypass执行带setMaxRows报错

Merge pull request !1131 from maxiang/bypass-master
This commit is contained in:
opengauss-bot
2021-07-29 11:18:30 +00:00
committed by Gitee
2 changed files with 17 additions and 5 deletions

View File

@ -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);
CachedPlanSource* cps = opFusionObj->m_global->m_psrc;
if (cps != NULL && cps->gplan) {
setCachedPlanBucketId(cps->gplan, opFusionObj->m_local.m_params);
@ -4594,7 +4592,6 @@ 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);
if (snapshot_set)
@ -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();

View File

@ -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);