diff options
author | Alexander Korotkov <akorotkov@postgresql.org> | 2023-10-27 05:29:48 +0300 |
---|---|---|
committer | Alexander Korotkov <akorotkov@postgresql.org> | 2023-10-27 05:45:16 +0300 |
commit | 2b26a6945545366ef0ed57b6d47ffaa337d5d56b (patch) | |
tree | fb3c8a0bd87f256a472e44f8ed28b41bbbd0bb0c /src | |
parent | 74604a37f2f9eb6e626a4ff3cedd02aef5a2ad59 (diff) | |
download | postgresql-2b26a6945545366ef0ed57b6d47ffaa337d5d56b.tar.gz postgresql-2b26a6945545366ef0ed57b6d47ffaa337d5d56b.zip |
Make UniqueRelInfo a node
d3d55ce571 changed RelOptInfo.unique_for_rels from the list of Relid sets to
the list of UniqueRelInfo's. But it didn't make UniqueRelInfo a node.
This commit makes UniqueRelInfo a node. Also this commit revises some
comments related to RelOptInfo.unique_for_rels.
Reported-by: Tom Lane
Discussion: https://postgr.es/m/flat/1189851.1698340331%40sss.pgh.pa.us
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/optimizer/plan/analyzejoins.c | 14 | ||||
-rw-r--r-- | src/include/nodes/pathnodes.h | 29 |
2 files changed, 27 insertions, 16 deletions
diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c index 2e14268e188..ccf07b2077c 100644 --- a/src/backend/optimizer/plan/analyzejoins.c +++ b/src/backend/optimizer/plan/analyzejoins.c @@ -35,20 +35,6 @@ #include "utils/lsyscache.h" /* - * UniqueRelInfo caches a fact that a relation is unique when being joined - * to other relation(s) specified by outerrelids. - * 'extra_clauses' contains additional clauses from a baserestrictinfo list that - * were used to prove uniqueness. We cache it for the SJ checking procedure: SJ - * can be removed if the outer relation contains strictly the same set of - * clauses. - */ -typedef struct UniqueRelInfo -{ - Relids outerrelids; - List *extra_clauses; -} UniqueRelInfo; - -/* * The context for replace_varno_walker() containing source and target relids. */ typedef struct diff --git a/src/include/nodes/pathnodes.h b/src/include/nodes/pathnodes.h index 86596f367b9..ed85dc7414b 100644 --- a/src/include/nodes/pathnodes.h +++ b/src/include/nodes/pathnodes.h @@ -719,7 +719,7 @@ typedef struct PartitionSchemeData *PartitionScheme; * populate these fields, for base rels; but someday they might be used for * join rels too: * - * unique_for_rels - list of Relid sets, each one being a set of other + * unique_for_rels - list of UniqueRelInfo, each one being a set of other * rels for which this one has been proven unique * non_unique_for_rels - list of Relid sets, each one being a set of * other rels for which we have tried and failed to prove @@ -952,7 +952,7 @@ typedef struct RelOptInfo /* * cache space for remembering if we have proven this relation unique */ - /* known unique for these other relid set(s) */ + /* known unique for these other relid set(s) given in UniqueRelInfo(s) */ List *unique_for_rels; /* known not unique for these set(s) */ List *non_unique_for_rels; @@ -3391,4 +3391,29 @@ typedef struct AggTransInfo bool initValueIsNull; } AggTransInfo; +/* + * UniqueRelInfo caches a fact that a relation is unique when being joined + * to other relation(s). + */ +typedef struct UniqueRelInfo +{ + pg_node_attr(no_copy_equal, no_read, no_query_jumble) + + NodeTag type; + + /* + * The relation in consideration is unique when being joined with this set + * of other relation(s). + */ + Relids outerrelids; + + /* + * Additional clauses from a baserestrictinfo list that were used to prove + * the uniqueness. We cache it for the self-join checking procedure: a + * self-join can be removed if the outer relation contains strictly the + * same set of clauses. + */ + List *extra_clauses; +} UniqueRelInfo; + #endif /* PATHNODES_H */ |