Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 13 additions & 68 deletions src/backend/gpopt/translate/CTranslatorDXLToPlStmt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -550,34 +550,6 @@ CTranslatorDXLToPlStmt::TranslateDXLOperatorToPlan(
return plan;
}

//---------------------------------------------------------------------------
// @function:
// CTranslatorDXLToPlStmt::SetParamIds
//
// @doc:
// Set the bitmapset with the param_ids defined in the plan
//
//---------------------------------------------------------------------------
void
CTranslatorDXLToPlStmt::SetParamIds(Plan *plan)
{
List *params_node_list = gpdb::ExtractNodesPlan(
plan, T_Param, true /* descend_into_subqueries */);

ListCell *lc = nullptr;

Bitmapset *bitmapset = nullptr;

ForEach(lc, params_node_list)
{
Param *param = (Param *) lfirst(lc);
bitmapset = gpdb::BmsAddMember(bitmapset, param->paramid);
}

plan->extParam = bitmapset;
plan->allParam = bitmapset;
}

List *
CTranslatorDXLToPlStmt::TranslatePartOids(IMdIdArray *parts, INT lockmode)
{
Expand Down Expand Up @@ -730,7 +702,6 @@ CTranslatorDXLToPlStmt::TranslateDXLTblScan(
// translate operator costs
TranslatePlanCosts(tbl_scan_dxlnode, plan);

SetParamIds(plan);

return plan_return;
}
Expand Down Expand Up @@ -835,7 +806,6 @@ CTranslatorDXLToPlStmt::TranslateDXLParallelTblScan(
plan->plan_rows = ceil(plan->plan_rows / parallel_workers);
}

SetParamIds(plan);

return plan_return;
}
Expand Down Expand Up @@ -1027,7 +997,6 @@ CTranslatorDXLToPlStmt::TranslateDXLIndexScan(
* As of 8.4, the indexstrategy and indexsubtype fields are no longer
* available or needed in IndexScan. Ignore them.
*/
SetParamIds(plan);

return (Plan *) index_scan;
}
Expand Down Expand Up @@ -1173,7 +1142,6 @@ CTranslatorDXLToPlStmt::TranslateDXLIndexOnlyScan(
}

index_scan->indexqual = index_cond;
SetParamIds(plan);

return (Plan *) index_scan;
}
Expand Down Expand Up @@ -1513,7 +1481,6 @@ CTranslatorDXLToPlStmt::TranslateDXLLimit(
limit->limitOffset = limit_offset;
}

SetParamIds(plan);

// cleanup
child_contexts->Release();
Expand Down Expand Up @@ -1751,7 +1718,6 @@ CTranslatorDXLToPlStmt::TranslateDXLHashJoin(

plan->lefttree = left_plan;
plan->righttree = right_plan;
SetParamIds(plan);

// cleanup
translation_context_arr_with_siblings->Release();
Expand Down Expand Up @@ -1844,7 +1810,6 @@ CTranslatorDXLToPlStmt::TranslateDXLTvf(
}
func_scan->functions = ListMake1(rtfunc);

SetParamIds(plan);

return (Plan *) func_scan;
}
Expand Down Expand Up @@ -2218,7 +2183,6 @@ CTranslatorDXLToPlStmt::TranslateDXLNLJoin(
}
plan->lefttree = left_plan;
plan->righttree = right_plan;
SetParamIds(plan);

// cleanup
translation_context_arr_with_siblings->Release();
Expand Down Expand Up @@ -2331,7 +2295,6 @@ CTranslatorDXLToPlStmt::TranslateDXLMergeJoin(

plan->lefttree = left_plan;
plan->righttree = right_plan;
SetParamIds(plan);

merge_join->mergeFamilies =
(Oid *) gpdb::GPDBAlloc(sizeof(Oid) * num_join_conds);
Expand Down Expand Up @@ -2438,7 +2401,6 @@ CTranslatorDXLToPlStmt::TranslateDXLHash(
plan->qual = NIL;
hash->rescannable = false;

SetParamIds(plan);

return (Plan *) hash;
}
Expand Down Expand Up @@ -2734,7 +2696,6 @@ CTranslatorDXLToPlStmt::TranslateDXLMotion(
plan->plan_rows = ceil(plan->plan_rows / sendslice->parallel_workers);
}

SetParamIds(plan);

return (Plan *) motion;
}
Expand Down Expand Up @@ -2867,7 +2828,6 @@ CTranslatorDXLToPlStmt::TranslateDXLRedistributeMotionToResultHashFilters(

plan->lefttree = child_plan;

SetParamIds(plan);

Plan *child_result = (Plan *) result;

Expand Down Expand Up @@ -2920,7 +2880,6 @@ CTranslatorDXLToPlStmt::TranslateDXLRedistributeMotionToResultHashFilters(
plan->qual = NIL;
plan->lefttree = child_result;

SetParamIds(plan);

return (Plan *) result;
}
Expand Down Expand Up @@ -3195,7 +3154,6 @@ CTranslatorDXLToPlStmt::TranslateDXLAgg(

m_dxl_to_plstmt_context->ResetAggInfosAndTransInfos();

SetParamIds(plan);

// cleanup
child_contexts->Release();
Expand Down Expand Up @@ -3525,7 +3483,6 @@ CTranslatorDXLToPlStmt::TranslateDXLWindowAgg(
}
}

SetParamIds(plan);

// cleanup
child_contexts->Release();
Expand Down Expand Up @@ -3729,7 +3686,6 @@ CTranslatorDXLToPlStmt::TranslateDXLWindowHashAgg(
}
}

SetParamIds(plan);

// cleanup
child_contexts->Release();
Expand Down Expand Up @@ -3803,7 +3759,6 @@ CTranslatorDXLToPlStmt::TranslateDXLSort(
TranslateSortCols(sort_col_list_dxl, &child_context, sort->sortColIdx,
sort->sortOperators, sort->collations, sort->nullsFirst);

SetParamIds(plan);

// cleanup
child_contexts->Release();
Expand Down Expand Up @@ -3924,7 +3879,6 @@ CTranslatorDXLToPlStmt::TranslateDXLProjectSet(const CDXLNode *result_dxlnode)
// translate operator costs
TranslatePlanCosts(result_dxlnode, plan);

SetParamIds(plan);

return (Plan *) project_set;
}
Expand Down Expand Up @@ -4272,7 +4226,6 @@ CTranslatorDXLToPlStmt::TranslateDXLResult(

plan->qual = quals_list;
result->resconstantqual = (Node *) one_time_quals_list;
SetParamIds(plan);

// Creating project set nodes plan tree
Plan *project_set_parent_plan = CreateProjectSetNodeTree(
Expand Down Expand Up @@ -4393,7 +4346,6 @@ CTranslatorDXLToPlStmt::TranslateDXLPartSelector(
partition_selector->part_prune_info = MakeNode(PartitionPruneInfo);
partition_selector->part_prune_info->prune_infos = prune_infos;

SetParamIds(plan);
// cleanup
child_contexts->Release();

Expand Down Expand Up @@ -4566,7 +4518,6 @@ CTranslatorDXLToPlStmt::TranslateDXLAppend(
nullptr, // translate context for the base table
child_contexts, output_context);

SetParamIds(plan);

// cleanup
child_contexts->Release();
Expand Down Expand Up @@ -4597,8 +4548,6 @@ CTranslatorDXLToPlStmt::TranslateDXLMaterialize(
CDXLPhysicalMaterialize::Cast(materialize_dxlnode->GetOperator());

materialize->cdb_strict = materialize_dxlop->IsEager();
// ensure that executor actually materializes results
materialize->cdb_shield_child_from_rescans = true;

// translate operator costs
TranslatePlanCosts(materialize_dxlnode, plan);
Expand Down Expand Up @@ -4628,7 +4577,19 @@ CTranslatorDXLToPlStmt::TranslateDXLMaterialize(

plan->lefttree = child_plan;

SetParamIds(plan);
// Shield the child from rescans only if there is a Motion somewhere in
// the subtree: Motions cannot be rescanned, so the Material must then
// keep its tuplestore across rescans and squelching must not propagate
// below it. For a Motion-free subtree rely on normal executor
// semantics instead; in particular, if the subtree refers to exec
// params of an enclosing SubPlan, the materialized result must be
// discarded and rebuilt whenever those params change (chgParam), and
// shielding it would add no benefit while making that dependency
// fragile.
List *child_motions =
gpdb::ExtractNodesPlan(child_plan, T_Motion,
true /* descendIntoSubqueries */);
materialize->cdb_shield_child_from_rescans = (NIL != child_motions);

// cleanup
child_contexts->Release();
Expand Down Expand Up @@ -4688,7 +4649,6 @@ CTranslatorDXLToPlStmt::TranslateDXLCTEProducerToSharedScan(

plan->lefttree = child_plan;
plan->qual = NIL;
SetParamIds(plan);

// cleanup
child_contexts->Release();
Expand Down Expand Up @@ -4781,7 +4741,6 @@ CTranslatorDXLToPlStmt::TranslateDXLCTEConsumerToSharedScan(

plan->qual = nullptr;

SetParamIds(plan);

// DON'T REMOVE, if current consumer need projection, then we can direct add it.
// we still keep the path of projection in consumer
Expand Down Expand Up @@ -4847,7 +4806,6 @@ CTranslatorDXLToPlStmt::TranslateDXLSequence(
nullptr, // base table translation context
child_contexts, output_context);

SetParamIds(plan);

// cleanup
child_contexts->Release();
Expand Down Expand Up @@ -4941,7 +4899,6 @@ CTranslatorDXLToPlStmt::TranslateDXLDynTblScan(
security_query_quals = gpdb::ListConcat(security_query_quals, query_quals);
plan->qual = security_query_quals;

SetParamIds(plan);

return plan;
}
Expand Down Expand Up @@ -5027,7 +4984,6 @@ CTranslatorDXLToPlStmt::TranslateDXLDynIdxOnlyScan(

dyn_idx_only_scan->indexscan.indexqual = index_cond;

SetParamIds(plan);

return (Plan *) dyn_idx_only_scan;
}
Expand Down Expand Up @@ -5108,7 +5064,6 @@ CTranslatorDXLToPlStmt::TranslateDXLDynIdxScan(
dyn_idx_only_scan->indexscan.indexqual = index_cond;
dyn_idx_only_scan->indexscan.indexqualorig = index_orig_cond;

SetParamIds(plan);

return (Plan *) dyn_idx_only_scan;
}
Expand Down Expand Up @@ -5279,7 +5234,6 @@ CTranslatorDXLToPlStmt::TranslateDXLDynForeignScan(
// translate operator costs
TranslatePlanCosts(dyn_foreign_scan_dxlnode, plan);

SetParamIds(plan);

return plan;
}
Expand Down Expand Up @@ -5441,7 +5395,6 @@ CTranslatorDXLToPlStmt::TranslateDXLDml(
result_plan->lefttree = child_plan;

result_plan->targetlist = dml_target_list;
SetParamIds(result_plan);

if (m_cmd_type == CMD_UPDATE && isSplit)
{
Expand All @@ -5454,7 +5407,6 @@ CTranslatorDXLToPlStmt::TranslateDXLDml(
final_result->resconstantqual =
(Node *) gpdb::LAppend(NIL, gpdb::MakeBoolConst(true /*value*/, false /*isnull*/));

SetParamIds(final_result_plan);

result = final_result;
result_plan = final_result_plan;
Expand Down Expand Up @@ -5484,7 +5436,6 @@ CTranslatorDXLToPlStmt::TranslateDXLDml(
plan->targetlist = NIL;
plan->plan_node_id = m_dxl_to_plstmt_context->GetNextPlanId();

SetParamIds(plan);

if (m_is_tgt_tbl_distributed)
{
Expand Down Expand Up @@ -5731,7 +5682,6 @@ CTranslatorDXLToPlStmt::TranslateDXLSplit(
plan->lefttree = child_plan;
plan->plan_node_id = m_dxl_to_plstmt_context->GetNextPlanId();

SetParamIds(plan);

// cleanup
child_contexts->Release();
Expand Down Expand Up @@ -5812,7 +5762,6 @@ CTranslatorDXLToPlStmt::TranslateDXLAssert(

GPOS_ASSERT(gpdb::ListLength(plan->qual) ==
gpdb::ListLength(assert_node->errmessage));
SetParamIds(plan);

// cleanup
child_contexts->Release();
Expand Down Expand Up @@ -6851,7 +6800,6 @@ CTranslatorDXLToPlStmt::TranslateDXLCtas(
child_contexts, output_context);
SetVarTypMod(phy_ctas_dxlop, target_list);

SetParamIds(plan);

// cleanup
child_contexts->Release();
Expand All @@ -6875,7 +6823,6 @@ CTranslatorDXLToPlStmt::TranslateDXLCtas(
result_plan->lefttree = plan;

result_plan->targetlist = target_list;
SetParamIds(result_plan);

plan = (Plan *) result;

Expand Down Expand Up @@ -7109,7 +7056,6 @@ CTranslatorDXLToPlStmt::TranslateDXLBitmapTblScan(
bitmap_tbl_scan->scan.plan.lefttree = TranslateDXLBitmapAccessPath(
bitmap_access_path_dxlnode, output_context, md_rel, table_descr,
&base_table_context, ctxt_translation_prev_siblings, bitmap_tbl_scan);
SetParamIds(plan);

if (is_dynamic)
{
Expand Down Expand Up @@ -7279,7 +7225,6 @@ CTranslatorDXLToPlStmt::TranslateDXLBitmapIndexProbe(
* As of 8.4, the indexstrategy and indexsubtype fields are no longer
* available or needed in IndexScan. Ignore them.
*/
SetParamIds(plan);

return plan;
}
Expand Down
Loading
Loading