diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c index 2e14268e18..ccf07b2077 100644 --- a/src/backend/optimizer/plan/analyzejoins.c +++ b/src/backend/optimizer/plan/analyzejoins.c @@ -34,20 +34,6 @@ #include "optimizer/tlist.h" #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. */ diff --git a/src/include/nodes/pathnodes.h b/src/include/nodes/pathnodes.h index 86596f367b..ed85dc7414 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 */