aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/optimizer/plan/analyzejoins.c14
-rw-r--r--src/include/nodes/pathnodes.h29
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 */