Slide 39
Slide 39 text
39
© 2024 NTT CORPORATION
With proposed patch (pseudocode)
generate_join_implied_equalities()
static List *
generate_join_implied_equalities_normal(…, EquivalenceClass *ec,
Relids join_relids, …)
{
Relids top_parent_join_relids = find_relids_top_parents(root, join_relids);
…
foreach(lc1, ec->ec_members)
{
EquivalenceMember *cur_em = (EquivalenceMember *) lfirst(lc1);
…
if (bms_is_subset(cur_em->em_relids, top_parent_join_relids))
ec->ec_members =
list_concat(ec->ec_members, get_child_members(ec, cur_em,
join_relids));
if (!bms_is_subset(cur_em->em_relids, join_relids))
continue; /* not computable yet, or wrong child */
…
}
}
{1, 6} = {t1, t3_1}
EM
t1.id
(Relids: {1})
EM
t2.id
(Relids: {2})
EM
t3.id
(Relids: {3})
ec_members
{1, 3} = {t1, t3}
{1, 3} = {t1, t3}
EM
t3_1.id
(Relids: {6})
In this example, EquivalenceMember for t3_2 is also child but
non-relevant. To eliminate such members, proposed patch
utilizes Bitmapset-based indexes