aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/nodes/gen_node_support.pl4
-rw-r--r--src/include/nodes/nodes.h8
-rw-r--r--src/include/nodes/parsenodes.h5
-rw-r--r--src/include/nodes/pathnodes.h54
-rw-r--r--src/include/nodes/plannodes.h16
-rw-r--r--src/include/nodes/primnodes.h4
-rw-r--r--src/include/utils/rel.h2
7 files changed, 54 insertions, 39 deletions
diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl
index 19ed29657c1..ecbcadb8bf5 100644
--- a/src/backend/nodes/gen_node_support.pl
+++ b/src/backend/nodes/gen_node_support.pl
@@ -121,7 +121,7 @@ my %node_type_info;
my @no_copy;
# node types we don't want equal support for
my @no_equal;
-# node types we don't want jumble support for
+# node types we don't want query jumble support for
my @no_query_jumble;
# node types we don't want read support for
my @no_read;
@@ -422,6 +422,8 @@ foreach my $infile (@ARGV)
if elem $supertype, @no_equal;
push @no_read, $in_struct
if elem $supertype, @no_read;
+ push @no_query_jumble, $in_struct
+ if elem $supertype, @no_query_jumble;
}
}
diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h
index 75dfe1919d7..bdfef0f461d 100644
--- a/src/include/nodes/nodes.h
+++ b/src/include/nodes/nodes.h
@@ -77,10 +77,10 @@ typedef enum NodeTag
*
* Node types can be supertypes of other types whether or not they are marked
* abstract: if a node struct appears as the first field of another struct
- * type, then it is the supertype of that type. The no_copy, no_equal, and
- * no_read node attributes are automatically inherited from the supertype.
- * (Notice that nodetag_only does not inherit, so it's not quite equivalent
- * to a combination of other attributes.)
+ * type, then it is the supertype of that type. The no_copy, no_equal,
+ * no_query_jumble and no_read node attributes are automatically inherited
+ * from the supertype. (Notice that nodetag_only does not inherit, so it's
+ * not quite equivalent to a combination of other attributes.)
*
* Valid node field attributes:
*
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h
index eafdb083ea4..f7d7f10f7dc 100644
--- a/src/include/nodes/parsenodes.h
+++ b/src/include/nodes/parsenodes.h
@@ -1728,9 +1728,14 @@ typedef struct TriggerTransition
*
* stmt_location/stmt_len identify the portion of the source text string
* containing this raw statement (useful for multi-statement strings).
+ *
+ * This is irrelevant for query jumbling, as this is not used in parsed
+ * queries.
*/
typedef struct RawStmt
{
+ pg_node_attr(no_query_jumble)
+
NodeTag type;
Node *stmt; /* raw parse tree */
int stmt_location; /* start location, or -1 if unknown */
diff --git a/src/include/nodes/pathnodes.h b/src/include/nodes/pathnodes.h
index 0d4b1ec4e42..be4d791212c 100644
--- a/src/include/nodes/pathnodes.h
+++ b/src/include/nodes/pathnodes.h
@@ -94,7 +94,7 @@ typedef enum UpperRelationKind
*/
typedef struct PlannerGlobal
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -194,7 +194,7 @@ typedef struct PlannerInfo PlannerInfo;
struct PlannerInfo
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -853,7 +853,7 @@ typedef enum RelOptKind
typedef struct RelOptInfo
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -1098,7 +1098,7 @@ typedef struct IndexOptInfo IndexOptInfo;
struct IndexOptInfo
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -1208,7 +1208,7 @@ struct IndexOptInfo
*/
typedef struct ForeignKeyOptInfo
{
- pg_node_attr(custom_read_write, no_copy_equal, no_read)
+ pg_node_attr(custom_read_write, no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -1258,7 +1258,7 @@ typedef struct ForeignKeyOptInfo
*/
typedef struct StatisticExtInfo
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -1309,7 +1309,7 @@ typedef struct StatisticExtInfo
*/
typedef struct JoinDomain
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -1371,7 +1371,7 @@ typedef struct JoinDomain
*/
typedef struct EquivalenceClass
{
- pg_node_attr(custom_read_write, no_copy_equal, no_read)
+ pg_node_attr(custom_read_write, no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -1422,7 +1422,7 @@ typedef struct EquivalenceClass
*/
typedef struct EquivalenceMember
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -1455,7 +1455,7 @@ typedef struct EquivalenceMember
*/
typedef struct PathKey
{
- pg_node_attr(no_read)
+ pg_node_attr(no_read, no_query_jumble)
NodeTag type;
@@ -1503,7 +1503,7 @@ typedef enum VolatileFunctionStatus
*/
typedef struct PathTarget
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -1550,7 +1550,7 @@ typedef struct PathTarget
*/
typedef struct ParamPathInfo
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -1596,7 +1596,7 @@ typedef struct ParamPathInfo
*/
typedef struct Path
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -1730,7 +1730,7 @@ typedef struct IndexPath
*/
typedef struct IndexClause
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
struct RestrictInfo *rinfo; /* original restriction or join clause */
@@ -2231,7 +2231,7 @@ typedef struct AggPath
typedef struct GroupingSetData
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
List *set; /* grouping set as list of sortgrouprefs */
@@ -2240,7 +2240,7 @@ typedef struct GroupingSetData
typedef struct RollupData
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
List *groupClause; /* applicable subset of parse->groupClause */
@@ -2509,7 +2509,7 @@ typedef struct LimitPath
typedef struct RestrictInfo
{
- pg_node_attr(no_read)
+ pg_node_attr(no_read, no_query_jumble)
NodeTag type;
@@ -2724,6 +2724,8 @@ typedef struct MergeScanSelCache
typedef struct PlaceHolderVar
{
+ pg_node_attr(no_query_jumble)
+
Expr xpr;
/* the represented expression */
@@ -2825,7 +2827,7 @@ typedef struct SpecialJoinInfo SpecialJoinInfo;
struct SpecialJoinInfo
{
- pg_node_attr(no_read)
+ pg_node_attr(no_read, no_query_jumble)
NodeTag type;
Relids min_lefthand; /* base+OJ relids in minimum LHS for join */
@@ -2853,7 +2855,7 @@ struct SpecialJoinInfo
*/
typedef struct OuterJoinClauseInfo
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
RestrictInfo *rinfo; /* a mergejoinable outer-join clause */
@@ -2892,6 +2894,8 @@ typedef struct OuterJoinClauseInfo
typedef struct AppendRelInfo
{
+ pg_node_attr(no_query_jumble)
+
NodeTag type;
/*
@@ -2967,7 +2971,7 @@ typedef struct AppendRelInfo
*/
typedef struct RowIdentityVarInfo
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -3005,7 +3009,7 @@ typedef struct RowIdentityVarInfo
typedef struct PlaceHolderInfo
{
- pg_node_attr(no_read)
+ pg_node_attr(no_read, no_query_jumble)
NodeTag type;
@@ -3038,7 +3042,7 @@ typedef struct PlaceHolderInfo
*/
typedef struct MinMaxAggInfo
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -3116,7 +3120,7 @@ typedef struct MinMaxAggInfo
*/
typedef struct PlannerParamItem
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -3296,7 +3300,7 @@ typedef struct JoinCostWorkspace
*/
typedef struct AggInfo
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
@@ -3330,7 +3334,7 @@ typedef struct AggInfo
*/
typedef struct AggTransInfo
{
- pg_node_attr(no_copy_equal, no_read)
+ pg_node_attr(no_copy_equal, no_read, no_query_jumble)
NodeTag type;
diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h
index 4781a9c6325..659bd05c0c1 100644
--- a/src/include/nodes/plannodes.h
+++ b/src/include/nodes/plannodes.h
@@ -46,7 +46,7 @@
*/
typedef struct PlannedStmt
{
- pg_node_attr(no_equal)
+ pg_node_attr(no_equal, no_query_jumble)
NodeTag type;
@@ -122,7 +122,7 @@ typedef struct PlannedStmt
*/
typedef struct Plan
{
- pg_node_attr(abstract, no_equal)
+ pg_node_attr(abstract, no_equal, no_query_jumble)
NodeTag type;
@@ -813,7 +813,7 @@ typedef struct NestLoop
typedef struct NestLoopParam
{
- pg_node_attr(no_equal)
+ pg_node_attr(no_equal, no_query_jumble)
NodeTag type;
int paramno; /* number of the PARAM_EXEC Param to set */
@@ -1377,7 +1377,7 @@ typedef enum RowMarkType
*/
typedef struct PlanRowMark
{
- pg_node_attr(no_equal)
+ pg_node_attr(no_equal, no_query_jumble)
NodeTag type;
Index rti; /* range table index of markable relation */
@@ -1425,7 +1425,7 @@ typedef struct PlanRowMark
*/
typedef struct PartitionPruneInfo
{
- pg_node_attr(no_equal)
+ pg_node_attr(no_equal, no_query_jumble)
NodeTag type;
Bitmapset *root_parent_relids;
@@ -1452,7 +1452,7 @@ typedef struct PartitionPruneInfo
*/
typedef struct PartitionedRelPruneInfo
{
- pg_node_attr(no_equal)
+ pg_node_attr(no_equal, no_query_jumble)
NodeTag type;
@@ -1495,7 +1495,7 @@ typedef struct PartitionedRelPruneInfo
*/
typedef struct PartitionPruneStep
{
- pg_node_attr(abstract, no_equal)
+ pg_node_attr(abstract, no_equal, no_query_jumble)
NodeTag type;
int step_id;
@@ -1570,7 +1570,7 @@ typedef struct PartitionPruneStepCombine
*/
typedef struct PlanInvalItem
{
- pg_node_attr(no_equal)
+ pg_node_attr(no_equal, no_query_jumble)
NodeTag type;
int cacheId; /* a syscache ID, see utils/syscache.h */
diff --git a/src/include/nodes/primnodes.h b/src/include/nodes/primnodes.h
index 6d740be5c0a..1be1642d927 100644
--- a/src/include/nodes/primnodes.h
+++ b/src/include/nodes/primnodes.h
@@ -982,6 +982,8 @@ typedef struct SubLink
*/
typedef struct SubPlan
{
+ pg_node_attr(no_query_jumble)
+
Expr xpr;
/* Fields copied from original SubLink: */
SubLinkType subLinkType; /* see above */
@@ -1029,6 +1031,8 @@ typedef struct SubPlan
*/
typedef struct AlternativeSubPlan
{
+ pg_node_attr(no_query_jumble)
+
Expr xpr;
List *subplans; /* SubPlan(s) with equivalent results */
} AlternativeSubPlan;
diff --git a/src/include/utils/rel.h b/src/include/utils/rel.h
index af9785038d3..67f994cb3e2 100644
--- a/src/include/utils/rel.h
+++ b/src/include/utils/rel.h
@@ -268,7 +268,7 @@ typedef struct RelationData
*/
typedef struct ForeignKeyCacheInfo
{
- pg_node_attr(no_equal, no_read)
+ pg_node_attr(no_equal, no_read, no_query_jumble)
NodeTag type;
/* oid of the constraint itself */