aboutsummaryrefslogtreecommitdiff
path: root/src/include/common/compression.h
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2023-02-23 11:05:58 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2023-02-23 11:05:58 -0500
commit739f1d6218f5ce1e0243127ab23f431a7d07977c (patch)
tree6d18b2d4fe765e81300b770962cfd6a7fca3cedd /src/include/common/compression.h
parent03d02f54a64089284582cc60d94a8af09ff4e081 (diff)
downloadpostgresql-739f1d6218f5ce1e0243127ab23f431a7d07977c.tar.gz
postgresql-739f1d6218f5ce1e0243127ab23f431a7d07977c.zip
Fix mis-handling of outer join quals generated by EquivalenceClasses.
It's possible, in admittedly-rather-contrived cases, for an eclass to generate a derived "join" qual that constrains the post-outer-join value(s) of some RHS variable(s) without mentioning the LHS at all. While the mechanisms were set up to work for this, we fell foul of the "get_common_eclass_indexes" filter installed by commit 3373c7155: it could decide that such an eclass wasn't relevant to the join, so that the required qual clause wouldn't get emitted there or anywhere else. To fix, apply get_common_eclass_indexes only at inner joins, where its rule is still valid. At an outer join, fall back to examining all eclasses that mention either input (or the OJ relid, though it should be impossible for an eclass to mention that without mentioning either input). Perhaps we can improve on that later, but the cost/benefit of adding more complexity to skip some irrelevant eclasses is dubious. To allow cheaply distinguishing outer from inner joins, pass the ojrelid to generate_join_implied_equalities as a separate argument. This also allows cleaning up some sloppiness that had crept into the definition of its join_relids argument, and it allows accurate calculation of nominal_join_relids for a child outer join. (The latter oversight seems not to have been a live bug, but it certainly could have caused problems in future.) Also fix what might be a live bug in check_index_predicates: it was being sloppy about what it passed to generate_join_implied_equalities. Per report from Richard Guo. Discussion: https://postgr.es/m/CAMbWs4-DsTBfOvXuw64GdFss2=M5cwtEhY=0DCS7t2gT7P6hSA@mail.gmail.com
Diffstat (limited to 'src/include/common/compression.h')
0 files changed, 0 insertions, 0 deletions