#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.
*/
* 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
/*
* 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;
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 */