{
pgpa_clumped_join *clump = palloc(sizeof(pgpa_clumped_join));
- Assert(pgpa_get_join_class(plan) == PGPA_CLUMPED_JOIN);
-
clump->plan = plan;
if (elided_node != NULL)
* be elided, but in that case we expected only a single RTI, in which
* case it's not a join.
*/
- Assert(bms_membership(clump->relids) == BMS_MULTIPLE);
+ Assert(bms_membership(elided_node->relids) == BMS_MULTIPLE);
clump->relids = elided_node->relids;
if (elided_type == T_Append || elided_type == T_MergeAppend)
clump->strategy = JSTRAT_CLUMP_PARTITIONWISE;
}
else
{
+ Assert(pgpa_get_join_class(plan) == PGPA_CLUMPED_JOIN);
+
clump->relids = pgpa_relids(plan);
if (IsA(plan, Result))
foreach_node(ElidedNode, n, context->pstmt->elidedNodes)
{
+ pgpa_clumped_join *cjoin;
+
if (n->plan_node_id != plan->plan_node_id)
continue;
- elog(WARNING, "look at me, i'm elided!");
+ join_unroller = NULL;
+
+ if (bms_membership(n->relids) != BMS_MULTIPLE)
+ continue;
+
+ cjoin = pgpa_build_clumped_join(plan, n);
+ context->clumped_joins = lappend(context->clumped_joins, cjoin);
}
class = pgpa_get_join_class(plan);
{
pgpa_clumped_join *cjoin;
- cjoin = pgpa_build_clumped_join(plan, NULL); /* XXX FIXME */
+ cjoin = pgpa_build_clumped_join(plan, NULL);
context->clumped_joins = lappend(context->clumped_joins, cjoin);
}
}
+
if (join_unroller != NULL)
pgpa_unroll_join(context->pstmt, plan, join_unroller,
&outer_join_unroller, &inner_join_unroller);
- /* XXX I don't know how this is supposed to handle elided nodes. */
-
if (plan->lefttree != NULL)
pgpa_plan_walker(context, plan->lefttree, outer_join_unroller);
if (plan->righttree != NULL)