mirror of
https://github.com/postgres/postgres.git
synced 2025-06-04 00:02:37 -04:00
Rework format of comments in headers for nodes
This is similar to 835d476, except that this one is to add node attributes related to query jumbling and avoid long lines in the headers and in the node structures changed by this commit. Reviewed-by: Peter Eisentraut Discussion: https://postgr.es/m/Y5BHOUhX3zTH/ig6@paquier.xyz
This commit is contained in:
parent
8eba3e3f02
commit
5d29d525ff
@ -123,7 +123,8 @@ typedef struct Query
|
|||||||
|
|
||||||
CmdType commandType; /* select|insert|update|delete|merge|utility */
|
CmdType commandType; /* select|insert|update|delete|merge|utility */
|
||||||
|
|
||||||
QuerySource querySource; /* where did I come from? */
|
/* where did I come from? */
|
||||||
|
QuerySource querySource;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* query identifier (can be set by plugins); ignored for equal, as it
|
* query identifier (can be set by plugins); ignored for equal, as it
|
||||||
@ -131,39 +132,58 @@ typedef struct Query
|
|||||||
*/
|
*/
|
||||||
uint64 queryId pg_node_attr(equal_ignore, read_write_ignore, read_as(0));
|
uint64 queryId pg_node_attr(equal_ignore, read_write_ignore, read_as(0));
|
||||||
|
|
||||||
bool canSetTag; /* do I set the command result tag? */
|
/* do I set the command result tag? */
|
||||||
|
bool canSetTag;
|
||||||
|
|
||||||
Node *utilityStmt; /* non-null if commandType == CMD_UTILITY */
|
Node *utilityStmt; /* non-null if commandType == CMD_UTILITY */
|
||||||
|
|
||||||
int resultRelation; /* rtable index of target relation for
|
/*
|
||||||
* INSERT/UPDATE/DELETE/MERGE; 0 for SELECT */
|
* rtable index of target relation for INSERT/UPDATE/DELETE/MERGE; 0 for
|
||||||
|
* SELECT.
|
||||||
|
*/
|
||||||
|
int resultRelation;
|
||||||
|
|
||||||
bool hasAggs; /* has aggregates in tlist or havingQual */
|
/* has aggregates in tlist or havingQual */
|
||||||
bool hasWindowFuncs; /* has window functions in tlist */
|
bool hasAggs;
|
||||||
bool hasTargetSRFs; /* has set-returning functions in tlist */
|
/* has window functions in tlist */
|
||||||
bool hasSubLinks; /* has subquery SubLink */
|
bool hasWindowFuncs;
|
||||||
bool hasDistinctOn; /* distinctClause is from DISTINCT ON */
|
/* has set-returning functions in tlist */
|
||||||
bool hasRecursive; /* WITH RECURSIVE was specified */
|
bool hasTargetSRFs;
|
||||||
bool hasModifyingCTE; /* has INSERT/UPDATE/DELETE in WITH */
|
/* has subquery SubLink */
|
||||||
bool hasForUpdate; /* FOR [KEY] UPDATE/SHARE was specified */
|
bool hasSubLinks;
|
||||||
bool hasRowSecurity; /* rewriter has applied some RLS policy */
|
/* distinctClause is from DISTINCT ON */
|
||||||
|
bool hasDistinctOn;
|
||||||
bool isReturn; /* is a RETURN statement */
|
/* WITH RECURSIVE was specified */
|
||||||
|
bool hasRecursive;
|
||||||
|
/* has INSERT/UPDATE/DELETE in WITH */
|
||||||
|
bool hasModifyingCTE;
|
||||||
|
/* FOR [KEY] UPDATE/SHARE was specified */
|
||||||
|
bool hasForUpdate;
|
||||||
|
/* rewriter has applied some RLS policy */
|
||||||
|
bool hasRowSecurity;
|
||||||
|
/* is a RETURN statement */
|
||||||
|
bool isReturn;
|
||||||
|
|
||||||
List *cteList; /* WITH list (of CommonTableExpr's) */
|
List *cteList; /* WITH list (of CommonTableExpr's) */
|
||||||
|
|
||||||
List *rtable; /* list of range table entries */
|
List *rtable; /* list of range table entries */
|
||||||
List *rteperminfos; /* list of RTEPermissionInfo nodes for the
|
|
||||||
* rtable entries having perminfoindex > 0 */
|
/*
|
||||||
|
* list of RTEPermissionInfo nodes for the rtable entries having
|
||||||
|
* perminfoindex > 0
|
||||||
|
*/
|
||||||
|
List *rteperminfos;
|
||||||
FromExpr *jointree; /* table join tree (FROM and WHERE clauses);
|
FromExpr *jointree; /* table join tree (FROM and WHERE clauses);
|
||||||
* also USING clause for MERGE */
|
* also USING clause for MERGE */
|
||||||
|
|
||||||
List *mergeActionList; /* list of actions for MERGE (only) */
|
List *mergeActionList; /* list of actions for MERGE (only) */
|
||||||
bool mergeUseOuterJoin; /* whether to use outer join */
|
/* whether to use outer join */
|
||||||
|
bool mergeUseOuterJoin;
|
||||||
|
|
||||||
List *targetList; /* target list (of TargetEntry) */
|
List *targetList; /* target list (of TargetEntry) */
|
||||||
|
|
||||||
OverridingKind override; /* OVERRIDING clause */
|
/* OVERRIDING clause */
|
||||||
|
OverridingKind override;
|
||||||
|
|
||||||
OnConflictExpr *onConflict; /* ON CONFLICT DO [NOTHING | UPDATE] */
|
OnConflictExpr *onConflict; /* ON CONFLICT DO [NOTHING | UPDATE] */
|
||||||
|
|
||||||
@ -191,11 +211,14 @@ typedef struct Query
|
|||||||
Node *setOperations; /* set-operation tree if this is top level of
|
Node *setOperations; /* set-operation tree if this is top level of
|
||||||
* a UNION/INTERSECT/EXCEPT query */
|
* a UNION/INTERSECT/EXCEPT query */
|
||||||
|
|
||||||
List *constraintDeps; /* a list of pg_constraint OIDs that the query
|
/*
|
||||||
* depends on to be semantically valid */
|
* A list of pg_constraint OIDs that the query depends on to be
|
||||||
|
* semantically valid
|
||||||
|
*/
|
||||||
|
List *constraintDeps;
|
||||||
|
|
||||||
List *withCheckOptions; /* a list of WithCheckOption's (added
|
/* a list of WithCheckOption's (added during rewrite) */
|
||||||
* during rewrite) */
|
List *withCheckOptions;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The following two fields identify the portion of the source text string
|
* The following two fields identify the portion of the source text string
|
||||||
@ -203,8 +226,10 @@ typedef struct Query
|
|||||||
* Queries, not in sub-queries. When not set, they might both be zero, or
|
* Queries, not in sub-queries. When not set, they might both be zero, or
|
||||||
* both be -1 meaning "unknown".
|
* both be -1 meaning "unknown".
|
||||||
*/
|
*/
|
||||||
int stmt_location; /* start location, or -1 if unknown */
|
/* start location, or -1 if unknown */
|
||||||
int stmt_len; /* length in bytes; 0 means "rest of string" */
|
int stmt_location;
|
||||||
|
/* length in bytes; 0 means "rest of string" */
|
||||||
|
int stmt_len;
|
||||||
} Query;
|
} Query;
|
||||||
|
|
||||||
|
|
||||||
@ -1231,14 +1256,21 @@ typedef struct RangeTblFunction
|
|||||||
NodeTag type;
|
NodeTag type;
|
||||||
|
|
||||||
Node *funcexpr; /* expression tree for func call */
|
Node *funcexpr; /* expression tree for func call */
|
||||||
int funccolcount; /* number of columns it contributes to RTE */
|
/* number of columns it contributes to RTE */
|
||||||
|
int funccolcount;
|
||||||
/* These fields record the contents of a column definition list, if any: */
|
/* These fields record the contents of a column definition list, if any: */
|
||||||
List *funccolnames; /* column names (list of String) */
|
/* column names (list of String) */
|
||||||
List *funccoltypes; /* OID list of column type OIDs */
|
List *funccolnames;
|
||||||
List *funccoltypmods; /* integer list of column typmods */
|
/* OID list of column type OIDs */
|
||||||
List *funccolcollations; /* OID list of column collation OIDs */
|
List *funccoltypes;
|
||||||
|
/* integer list of column typmods */
|
||||||
|
List *funccoltypmods;
|
||||||
|
/* OID list of column collation OIDs */
|
||||||
|
List *funccolcollations;
|
||||||
|
|
||||||
/* This is set during planning for use by the executor: */
|
/* This is set during planning for use by the executor: */
|
||||||
Bitmapset *funcparams; /* PARAM_EXEC Param IDs affecting this func */
|
/* PARAM_EXEC Param IDs affecting this func */
|
||||||
|
Bitmapset *funcparams;
|
||||||
} RangeTblFunction;
|
} RangeTblFunction;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1345,7 +1377,8 @@ typedef struct SortGroupClause
|
|||||||
Oid eqop; /* the equality operator ('=' op) */
|
Oid eqop; /* the equality operator ('=' op) */
|
||||||
Oid sortop; /* the ordering operator ('<' op), or 0 */
|
Oid sortop; /* the ordering operator ('<' op), or 0 */
|
||||||
bool nulls_first; /* do NULLs come before normal values? */
|
bool nulls_first; /* do NULLs come before normal values? */
|
||||||
bool hashable; /* can eqop be implemented by hashing? */
|
/* can eqop be implemented by hashing? */
|
||||||
|
bool hashable;
|
||||||
} SortGroupClause;
|
} SortGroupClause;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1435,21 +1468,31 @@ typedef struct GroupingSet
|
|||||||
typedef struct WindowClause
|
typedef struct WindowClause
|
||||||
{
|
{
|
||||||
NodeTag type;
|
NodeTag type;
|
||||||
char *name; /* window name (NULL in an OVER clause) */
|
/* window name (NULL in an OVER clause) */
|
||||||
char *refname; /* referenced window name, if any */
|
char *name;
|
||||||
|
/* referenced window name, if any */
|
||||||
|
char *refname;
|
||||||
List *partitionClause; /* PARTITION BY list */
|
List *partitionClause; /* PARTITION BY list */
|
||||||
List *orderClause; /* ORDER BY list */
|
/* ORDER BY list */
|
||||||
|
List *orderClause;
|
||||||
int frameOptions; /* frame_clause options, see WindowDef */
|
int frameOptions; /* frame_clause options, see WindowDef */
|
||||||
Node *startOffset; /* expression for starting bound, if any */
|
Node *startOffset; /* expression for starting bound, if any */
|
||||||
Node *endOffset; /* expression for ending bound, if any */
|
Node *endOffset; /* expression for ending bound, if any */
|
||||||
List *runCondition; /* qual to help short-circuit execution */
|
/* qual to help short-circuit execution */
|
||||||
Oid startInRangeFunc; /* in_range function for startOffset */
|
List *runCondition;
|
||||||
Oid endInRangeFunc; /* in_range function for endOffset */
|
/* in_range function for startOffset */
|
||||||
Oid inRangeColl; /* collation for in_range tests */
|
Oid startInRangeFunc;
|
||||||
bool inRangeAsc; /* use ASC sort order for in_range tests? */
|
/* in_range function for endOffset */
|
||||||
bool inRangeNullsFirst; /* nulls sort first for in_range tests? */
|
Oid endInRangeFunc;
|
||||||
|
/* collation for in_range tests */
|
||||||
|
Oid inRangeColl;
|
||||||
|
/* use ASC sort order for in_range tests? */
|
||||||
|
bool inRangeAsc;
|
||||||
|
/* nulls sort first for in_range tests? */
|
||||||
|
bool inRangeNullsFirst;
|
||||||
Index winref; /* ID referenced by window functions */
|
Index winref; /* ID referenced by window functions */
|
||||||
bool copiedOrder; /* did we copy orderClause from refname? */
|
/* did we copy orderClause from refname? */
|
||||||
|
bool copiedOrder;
|
||||||
} WindowClause;
|
} WindowClause;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1568,13 +1611,22 @@ typedef struct CommonTableExpr
|
|||||||
CTECycleClause *cycle_clause;
|
CTECycleClause *cycle_clause;
|
||||||
int location; /* token location, or -1 if unknown */
|
int location; /* token location, or -1 if unknown */
|
||||||
/* These fields are set during parse analysis: */
|
/* These fields are set during parse analysis: */
|
||||||
bool cterecursive; /* is this CTE actually recursive? */
|
/* is this CTE actually recursive? */
|
||||||
int cterefcount; /* number of RTEs referencing this CTE
|
bool cterecursive;
|
||||||
* (excluding internal self-references) */
|
|
||||||
List *ctecolnames; /* list of output column names */
|
/*
|
||||||
List *ctecoltypes; /* OID list of output column type OIDs */
|
* Number of RTEs referencing this CTE (excluding internal
|
||||||
List *ctecoltypmods; /* integer list of output column typmods */
|
* self-references)
|
||||||
List *ctecolcollations; /* OID list of column collation OIDs */
|
*/
|
||||||
|
int cterefcount;
|
||||||
|
/* list of output column names */
|
||||||
|
List *ctecolnames;
|
||||||
|
/* OID list of output column type OIDs */
|
||||||
|
List *ctecoltypes;
|
||||||
|
/* integer list of output column typmods */
|
||||||
|
List *ctecoltypmods;
|
||||||
|
/* OID list of column collation OIDs */
|
||||||
|
List *ctecolcollations;
|
||||||
} CommonTableExpr;
|
} CommonTableExpr;
|
||||||
|
|
||||||
/* Convenience macro to get the output tlist of a CTE's query */
|
/* Convenience macro to get the output tlist of a CTE's query */
|
||||||
@ -1611,10 +1663,12 @@ typedef struct MergeAction
|
|||||||
NodeTag type;
|
NodeTag type;
|
||||||
bool matched; /* true=MATCHED, false=NOT MATCHED */
|
bool matched; /* true=MATCHED, false=NOT MATCHED */
|
||||||
CmdType commandType; /* INSERT/UPDATE/DELETE/DO NOTHING */
|
CmdType commandType; /* INSERT/UPDATE/DELETE/DO NOTHING */
|
||||||
OverridingKind override; /* OVERRIDING clause */
|
/* OVERRIDING clause */
|
||||||
|
OverridingKind override;
|
||||||
Node *qual; /* transformed WHEN conditions */
|
Node *qual; /* transformed WHEN conditions */
|
||||||
List *targetList; /* the target list (of TargetEntry) */
|
List *targetList; /* the target list (of TargetEntry) */
|
||||||
List *updateColnos; /* target attribute numbers of an UPDATE */
|
/* target attribute numbers of an UPDATE */
|
||||||
|
List *updateColnos;
|
||||||
} MergeAction;
|
} MergeAction;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1824,10 +1878,14 @@ typedef struct SetOperationStmt
|
|||||||
/* Eventually add fields for CORRESPONDING spec here */
|
/* Eventually add fields for CORRESPONDING spec here */
|
||||||
|
|
||||||
/* Fields derived during parse analysis: */
|
/* Fields derived during parse analysis: */
|
||||||
List *colTypes; /* OID list of output column type OIDs */
|
/* OID list of output column type OIDs */
|
||||||
List *colTypmods; /* integer list of output column typmods */
|
List *colTypes;
|
||||||
List *colCollations; /* OID list of output column collation OIDs */
|
/* integer list of output column typmods */
|
||||||
List *groupClauses; /* a list of SortGroupClause's */
|
List *colTypmods;
|
||||||
|
/* OID list of output column collation OIDs */
|
||||||
|
List *colCollations;
|
||||||
|
/* a list of SortGroupClause's */
|
||||||
|
List *groupClauses;
|
||||||
/* groupClauses is NIL if UNION ALL, but must be set otherwise */
|
/* groupClauses is NIL if UNION ALL, but must be set otherwise */
|
||||||
} SetOperationStmt;
|
} SetOperationStmt;
|
||||||
|
|
||||||
|
@ -98,19 +98,32 @@ typedef struct RangeVar
|
|||||||
typedef struct TableFunc
|
typedef struct TableFunc
|
||||||
{
|
{
|
||||||
NodeTag type;
|
NodeTag type;
|
||||||
List *ns_uris; /* list of namespace URI expressions */
|
/* list of namespace URI expressions */
|
||||||
List *ns_names; /* list of namespace names or NULL */
|
List *ns_uris;
|
||||||
Node *docexpr; /* input document expression */
|
/* list of namespace names or NULL */
|
||||||
Node *rowexpr; /* row filter expression */
|
List *ns_names;
|
||||||
List *colnames; /* column names (list of String) */
|
/* input document expression */
|
||||||
List *coltypes; /* OID list of column type OIDs */
|
Node *docexpr;
|
||||||
List *coltypmods; /* integer list of column typmods */
|
/* row filter expression */
|
||||||
List *colcollations; /* OID list of column collation OIDs */
|
Node *rowexpr;
|
||||||
List *colexprs; /* list of column filter expressions */
|
/* column names (list of String) */
|
||||||
List *coldefexprs; /* list of column default expressions */
|
List *colnames;
|
||||||
Bitmapset *notnulls; /* nullability flag for each output column */
|
/* OID list of column type OIDs */
|
||||||
int ordinalitycol; /* counts from 0; -1 if none specified */
|
List *coltypes;
|
||||||
int location; /* token location, or -1 if unknown */
|
/* integer list of column typmods */
|
||||||
|
List *coltypmods;
|
||||||
|
/* OID list of column collation OIDs */
|
||||||
|
List *colcollations;
|
||||||
|
/* list of column filter expressions */
|
||||||
|
List *colexprs;
|
||||||
|
/* list of column default expressions */
|
||||||
|
List *coldefexprs;
|
||||||
|
/* nullability flag for each output column */
|
||||||
|
Bitmapset *notnulls;
|
||||||
|
/* counts from 0; -1 if none specified */
|
||||||
|
int ordinalitycol;
|
||||||
|
/* token location, or -1 if unknown */
|
||||||
|
int location;
|
||||||
} TableFunc;
|
} TableFunc;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -256,18 +269,27 @@ typedef struct Const
|
|||||||
pg_node_attr(custom_copy_equal, custom_read_write)
|
pg_node_attr(custom_copy_equal, custom_read_write)
|
||||||
|
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
Oid consttype; /* pg_type OID of the constant's datatype */
|
/* pg_type OID of the constant's datatype */
|
||||||
int32 consttypmod; /* typmod value, if any */
|
Oid consttype;
|
||||||
Oid constcollid; /* OID of collation, or InvalidOid if none */
|
/* typmod value, if any */
|
||||||
int constlen; /* typlen of the constant's datatype */
|
int32 consttypmod;
|
||||||
Datum constvalue; /* the constant's value */
|
/* OID of collation, or InvalidOid if none */
|
||||||
bool constisnull; /* whether the constant is null (if true,
|
Oid constcollid;
|
||||||
* constvalue is undefined) */
|
/* typlen of the constant's datatype */
|
||||||
bool constbyval; /* whether this datatype is passed by value.
|
int constlen;
|
||||||
* If true, then all the information is stored
|
/* the constant's value */
|
||||||
* in the Datum. If false, then the Datum
|
Datum constvalue;
|
||||||
* contains a pointer to the information. */
|
/* whether the constant is null (if true, constvalue is undefined) */
|
||||||
int location; /* token location, or -1 if unknown */
|
bool constisnull;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Whether this datatype is passed by value. If true, then all the
|
||||||
|
* information is stored in the Datum. If false, then the Datum contains
|
||||||
|
* a pointer to the information.
|
||||||
|
*/
|
||||||
|
bool constbyval;
|
||||||
|
/* token location, or -1 if unknown */
|
||||||
|
int location;
|
||||||
} Const;
|
} Const;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -311,9 +333,12 @@ typedef struct Param
|
|||||||
ParamKind paramkind; /* kind of parameter. See above */
|
ParamKind paramkind; /* kind of parameter. See above */
|
||||||
int paramid; /* numeric ID for parameter */
|
int paramid; /* numeric ID for parameter */
|
||||||
Oid paramtype; /* pg_type OID of parameter's datatype */
|
Oid paramtype; /* pg_type OID of parameter's datatype */
|
||||||
int32 paramtypmod; /* typmod value, if known */
|
/* typmod value, if known */
|
||||||
Oid paramcollid; /* OID of collation, or InvalidOid if none */
|
int32 paramtypmod;
|
||||||
int location; /* token location, or -1 if unknown */
|
/* OID of collation, or InvalidOid if none */
|
||||||
|
Oid paramcollid;
|
||||||
|
/* token location, or -1 if unknown */
|
||||||
|
int location;
|
||||||
} Param;
|
} Param;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -486,16 +511,26 @@ typedef struct GroupingFunc
|
|||||||
typedef struct WindowFunc
|
typedef struct WindowFunc
|
||||||
{
|
{
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
Oid winfnoid; /* pg_proc Oid of the function */
|
/* pg_proc Oid of the function */
|
||||||
Oid wintype; /* type Oid of result of the window function */
|
Oid winfnoid;
|
||||||
Oid wincollid; /* OID of collation of result */
|
/* type Oid of result of the window function */
|
||||||
Oid inputcollid; /* OID of collation that function should use */
|
Oid wintype;
|
||||||
List *args; /* arguments to the window function */
|
/* OID of collation of result */
|
||||||
Expr *aggfilter; /* FILTER expression, if any */
|
Oid wincollid;
|
||||||
Index winref; /* index of associated WindowClause */
|
/* OID of collation that function should use */
|
||||||
bool winstar; /* true if argument list was really '*' */
|
Oid inputcollid;
|
||||||
bool winagg; /* is function a simple aggregate? */
|
/* arguments to the window function */
|
||||||
int location; /* token location, or -1 if unknown */
|
List *args;
|
||||||
|
/* FILTER expression, if any */
|
||||||
|
Expr *aggfilter;
|
||||||
|
/* index of associated WindowClause */
|
||||||
|
Index winref;
|
||||||
|
/* true if argument list was really '*' */
|
||||||
|
bool winstar;
|
||||||
|
/* is function a simple aggregate? */
|
||||||
|
bool winagg;
|
||||||
|
/* token location, or -1 if unknown */
|
||||||
|
int location;
|
||||||
} WindowFunc;
|
} WindowFunc;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -539,20 +574,28 @@ typedef struct WindowFunc
|
|||||||
typedef struct SubscriptingRef
|
typedef struct SubscriptingRef
|
||||||
{
|
{
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
Oid refcontainertype; /* type of the container proper */
|
/* type of the container proper */
|
||||||
Oid refelemtype; /* the container type's pg_type.typelem */
|
Oid refcontainertype;
|
||||||
Oid refrestype; /* type of the SubscriptingRef's result */
|
/* the container type's pg_type.typelem */
|
||||||
int32 reftypmod; /* typmod of the result */
|
Oid refelemtype;
|
||||||
Oid refcollid; /* collation of result, or InvalidOid if none */
|
/* type of the SubscriptingRef's result */
|
||||||
List *refupperindexpr; /* expressions that evaluate to upper
|
Oid refrestype;
|
||||||
* container indexes */
|
/* typmod of the result */
|
||||||
List *reflowerindexpr; /* expressions that evaluate to lower
|
int32 reftypmod;
|
||||||
* container indexes, or NIL for single
|
/* collation of result, or InvalidOid if none */
|
||||||
* container element */
|
Oid refcollid;
|
||||||
Expr *refexpr; /* the expression that evaluates to a
|
/* expressions that evaluate to upper container indexes */
|
||||||
* container value */
|
List *refupperindexpr;
|
||||||
Expr *refassgnexpr; /* expression for the source value, or NULL if
|
|
||||||
* fetch */
|
/*
|
||||||
|
* expressions that evaluate to lower container indexes, or NIL for single
|
||||||
|
* container element.
|
||||||
|
*/
|
||||||
|
List *reflowerindexpr;
|
||||||
|
/* the expression that evaluates to a container value */
|
||||||
|
Expr *refexpr;
|
||||||
|
/* expression for the source value, or NULL if fetch */
|
||||||
|
Expr *refassgnexpr;
|
||||||
} SubscriptingRef;
|
} SubscriptingRef;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -595,16 +638,28 @@ typedef enum CoercionForm
|
|||||||
typedef struct FuncExpr
|
typedef struct FuncExpr
|
||||||
{
|
{
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
Oid funcid; /* PG_PROC OID of the function */
|
/* PG_PROC OID of the function */
|
||||||
Oid funcresulttype; /* PG_TYPE OID of result value */
|
Oid funcid;
|
||||||
bool funcretset; /* true if function returns set */
|
/* PG_TYPE OID of result value */
|
||||||
bool funcvariadic; /* true if variadic arguments have been
|
Oid funcresulttype;
|
||||||
* combined into an array last argument */
|
/* true if function returns set */
|
||||||
CoercionForm funcformat; /* how to display this function call */
|
bool funcretset;
|
||||||
Oid funccollid; /* OID of collation of result */
|
|
||||||
Oid inputcollid; /* OID of collation that function should use */
|
/*
|
||||||
List *args; /* arguments to the function */
|
* true if variadic arguments have been combined into an array last
|
||||||
int location; /* token location, or -1 if unknown */
|
* argument
|
||||||
|
*/
|
||||||
|
bool funcvariadic;
|
||||||
|
/* how to display this function call */
|
||||||
|
CoercionForm funcformat;
|
||||||
|
/* OID of collation of result */
|
||||||
|
Oid funccollid;
|
||||||
|
/* OID of collation that function should use */
|
||||||
|
Oid inputcollid;
|
||||||
|
/* arguments to the function */
|
||||||
|
List *args;
|
||||||
|
/* token location, or -1 if unknown */
|
||||||
|
int location;
|
||||||
} FuncExpr;
|
} FuncExpr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -624,10 +679,14 @@ typedef struct FuncExpr
|
|||||||
typedef struct NamedArgExpr
|
typedef struct NamedArgExpr
|
||||||
{
|
{
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
Expr *arg; /* the argument expression */
|
/* the argument expression */
|
||||||
char *name; /* the name */
|
Expr *arg;
|
||||||
int argnumber; /* argument's number in positional notation */
|
/* the name */
|
||||||
int location; /* argument name location, or -1 if unknown */
|
char *name;
|
||||||
|
/* argument's number in positional notation */
|
||||||
|
int argnumber;
|
||||||
|
/* argument name location, or -1 if unknown */
|
||||||
|
int location;
|
||||||
} NamedArgExpr;
|
} NamedArgExpr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -838,8 +897,10 @@ typedef struct SubLink
|
|||||||
SubLinkType subLinkType; /* see above */
|
SubLinkType subLinkType; /* see above */
|
||||||
int subLinkId; /* ID (1..n); 0 if not MULTIEXPR */
|
int subLinkId; /* ID (1..n); 0 if not MULTIEXPR */
|
||||||
Node *testexpr; /* outer-query test for ALL/ANY/ROWCOMPARE */
|
Node *testexpr; /* outer-query test for ALL/ANY/ROWCOMPARE */
|
||||||
List *operName; /* originally specified operator name */
|
/* originally specified operator name */
|
||||||
Node *subselect; /* subselect as Query* or raw parsetree */
|
List *operName;
|
||||||
|
/* subselect as Query* or raw parsetree */
|
||||||
|
Node *subselect;
|
||||||
int location; /* token location, or -1 if unknown */
|
int location; /* token location, or -1 if unknown */
|
||||||
} SubLink;
|
} SubLink;
|
||||||
|
|
||||||
@ -948,10 +1009,12 @@ typedef struct FieldSelect
|
|||||||
Expr xpr;
|
Expr xpr;
|
||||||
Expr *arg; /* input expression */
|
Expr *arg; /* input expression */
|
||||||
AttrNumber fieldnum; /* attribute number of field to extract */
|
AttrNumber fieldnum; /* attribute number of field to extract */
|
||||||
Oid resulttype; /* type of the field (result type of this
|
/* type of the field (result type of this node) */
|
||||||
* node) */
|
Oid resulttype;
|
||||||
int32 resulttypmod; /* output typmod (usually -1) */
|
/* output typmod (usually -1) */
|
||||||
Oid resultcollid; /* OID of collation of the field */
|
int32 resulttypmod;
|
||||||
|
/* OID of collation of the field */
|
||||||
|
Oid resultcollid;
|
||||||
} FieldSelect;
|
} FieldSelect;
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
@ -977,8 +1040,10 @@ typedef struct FieldStore
|
|||||||
Expr xpr;
|
Expr xpr;
|
||||||
Expr *arg; /* input tuple value */
|
Expr *arg; /* input tuple value */
|
||||||
List *newvals; /* new value(s) for field(s) */
|
List *newvals; /* new value(s) for field(s) */
|
||||||
List *fieldnums; /* integer list of field attnums */
|
/* integer list of field attnums */
|
||||||
Oid resulttype; /* type of result (same as type of arg) */
|
List *fieldnums;
|
||||||
|
/* type of result (same as type of arg) */
|
||||||
|
Oid resulttype;
|
||||||
/* Like RowExpr, we deliberately omit a typmod and collation here */
|
/* Like RowExpr, we deliberately omit a typmod and collation here */
|
||||||
} FieldStore;
|
} FieldStore;
|
||||||
|
|
||||||
@ -1000,9 +1065,12 @@ typedef struct RelabelType
|
|||||||
Expr xpr;
|
Expr xpr;
|
||||||
Expr *arg; /* input expression */
|
Expr *arg; /* input expression */
|
||||||
Oid resulttype; /* output type of coercion expression */
|
Oid resulttype; /* output type of coercion expression */
|
||||||
int32 resulttypmod; /* output typmod (usually -1) */
|
/* output typmod (usually -1) */
|
||||||
Oid resultcollid; /* OID of collation, or InvalidOid if none */
|
int32 resulttypmod;
|
||||||
CoercionForm relabelformat; /* how to display this node */
|
/* OID of collation, or InvalidOid if none */
|
||||||
|
Oid resultcollid;
|
||||||
|
/* how to display this node */
|
||||||
|
CoercionForm relabelformat;
|
||||||
int location; /* token location, or -1 if unknown */
|
int location; /* token location, or -1 if unknown */
|
||||||
} RelabelType;
|
} RelabelType;
|
||||||
|
|
||||||
@ -1021,8 +1089,10 @@ typedef struct CoerceViaIO
|
|||||||
Expr *arg; /* input expression */
|
Expr *arg; /* input expression */
|
||||||
Oid resulttype; /* output type of coercion */
|
Oid resulttype; /* output type of coercion */
|
||||||
/* output typmod is not stored, but is presumed -1 */
|
/* output typmod is not stored, but is presumed -1 */
|
||||||
Oid resultcollid; /* OID of collation, or InvalidOid if none */
|
/* OID of collation, or InvalidOid if none */
|
||||||
CoercionForm coerceformat; /* how to display this node */
|
Oid resultcollid;
|
||||||
|
/* how to display this node */
|
||||||
|
CoercionForm coerceformat;
|
||||||
int location; /* token location, or -1 if unknown */
|
int location; /* token location, or -1 if unknown */
|
||||||
} CoerceViaIO;
|
} CoerceViaIO;
|
||||||
|
|
||||||
@ -1045,9 +1115,12 @@ typedef struct ArrayCoerceExpr
|
|||||||
Expr *arg; /* input expression (yields an array) */
|
Expr *arg; /* input expression (yields an array) */
|
||||||
Expr *elemexpr; /* expression representing per-element work */
|
Expr *elemexpr; /* expression representing per-element work */
|
||||||
Oid resulttype; /* output type of coercion (an array type) */
|
Oid resulttype; /* output type of coercion (an array type) */
|
||||||
int32 resulttypmod; /* output typmod (also element typmod) */
|
/* output typmod (also element typmod) */
|
||||||
Oid resultcollid; /* OID of collation, or InvalidOid if none */
|
int32 resulttypmod;
|
||||||
CoercionForm coerceformat; /* how to display this node */
|
/* OID of collation, or InvalidOid if none */
|
||||||
|
Oid resultcollid;
|
||||||
|
/* how to display this node */
|
||||||
|
CoercionForm coerceformat;
|
||||||
int location; /* token location, or -1 if unknown */
|
int location; /* token location, or -1 if unknown */
|
||||||
} ArrayCoerceExpr;
|
} ArrayCoerceExpr;
|
||||||
|
|
||||||
@ -1070,7 +1143,8 @@ typedef struct ConvertRowtypeExpr
|
|||||||
Expr *arg; /* input expression */
|
Expr *arg; /* input expression */
|
||||||
Oid resulttype; /* output type (always a composite type) */
|
Oid resulttype; /* output type (always a composite type) */
|
||||||
/* Like RowExpr, we deliberately omit a typmod and collation here */
|
/* Like RowExpr, we deliberately omit a typmod and collation here */
|
||||||
CoercionForm convertformat; /* how to display this node */
|
/* how to display this node */
|
||||||
|
CoercionForm convertformat;
|
||||||
int location; /* token location, or -1 if unknown */
|
int location; /* token location, or -1 if unknown */
|
||||||
} ConvertRowtypeExpr;
|
} ConvertRowtypeExpr;
|
||||||
|
|
||||||
@ -1114,8 +1188,10 @@ typedef struct CollateExpr
|
|||||||
typedef struct CaseExpr
|
typedef struct CaseExpr
|
||||||
{
|
{
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
Oid casetype; /* type of expression result */
|
/* type of expression result */
|
||||||
Oid casecollid; /* OID of collation, or InvalidOid if none */
|
Oid casetype;
|
||||||
|
/* OID of collation, or InvalidOid if none */
|
||||||
|
Oid casecollid;
|
||||||
Expr *arg; /* implicit equality comparison argument */
|
Expr *arg; /* implicit equality comparison argument */
|
||||||
List *args; /* the arguments (list of WHEN clauses) */
|
List *args; /* the arguments (list of WHEN clauses) */
|
||||||
Expr *defresult; /* the default result (ELSE clause) */
|
Expr *defresult; /* the default result (ELSE clause) */
|
||||||
@ -1157,8 +1233,10 @@ typedef struct CaseTestExpr
|
|||||||
{
|
{
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
Oid typeId; /* type for substituted value */
|
Oid typeId; /* type for substituted value */
|
||||||
int32 typeMod; /* typemod for substituted value */
|
/* typemod for substituted value */
|
||||||
Oid collation; /* collation for the substituted value */
|
int32 typeMod;
|
||||||
|
/* collation for the substituted value */
|
||||||
|
Oid collation;
|
||||||
} CaseTestExpr;
|
} CaseTestExpr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1172,12 +1250,18 @@ typedef struct CaseTestExpr
|
|||||||
typedef struct ArrayExpr
|
typedef struct ArrayExpr
|
||||||
{
|
{
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
Oid array_typeid; /* type of expression result */
|
/* type of expression result */
|
||||||
Oid array_collid; /* OID of collation, or InvalidOid if none */
|
Oid array_typeid;
|
||||||
Oid element_typeid; /* common type of array elements */
|
/* OID of collation, or InvalidOid if none */
|
||||||
List *elements; /* the array elements or sub-arrays */
|
Oid array_collid;
|
||||||
bool multidims; /* true if elements are sub-arrays */
|
/* common type of array elements */
|
||||||
int location; /* token location, or -1 if unknown */
|
Oid element_typeid;
|
||||||
|
/* the array elements or sub-arrays */
|
||||||
|
List *elements;
|
||||||
|
/* true if elements are sub-arrays */
|
||||||
|
bool multidims;
|
||||||
|
/* token location, or -1 if unknown */
|
||||||
|
int location;
|
||||||
} ArrayExpr;
|
} ArrayExpr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1205,7 +1289,9 @@ typedef struct RowExpr
|
|||||||
{
|
{
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
List *args; /* the fields */
|
List *args; /* the fields */
|
||||||
Oid row_typeid; /* RECORDOID or a composite type's ID */
|
|
||||||
|
/* RECORDOID or a composite type's ID */
|
||||||
|
Oid row_typeid;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* row_typeid cannot be a domain over composite, only plain composite. To
|
* row_typeid cannot be a domain over composite, only plain composite. To
|
||||||
@ -1219,8 +1305,13 @@ typedef struct RowExpr
|
|||||||
* We don't need to store a collation either. The result type is
|
* We don't need to store a collation either. The result type is
|
||||||
* necessarily composite, and composite types never have a collation.
|
* necessarily composite, and composite types never have a collation.
|
||||||
*/
|
*/
|
||||||
CoercionForm row_format; /* how to display this node */
|
|
||||||
List *colnames; /* list of String, or NIL */
|
/* how to display this node */
|
||||||
|
CoercionForm row_format;
|
||||||
|
|
||||||
|
/* list of String, or NIL */
|
||||||
|
List *colnames;
|
||||||
|
|
||||||
int location; /* token location, or -1 if unknown */
|
int location; /* token location, or -1 if unknown */
|
||||||
} RowExpr;
|
} RowExpr;
|
||||||
|
|
||||||
@ -1252,12 +1343,19 @@ typedef enum RowCompareType
|
|||||||
typedef struct RowCompareExpr
|
typedef struct RowCompareExpr
|
||||||
{
|
{
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
RowCompareType rctype; /* LT LE GE or GT, never EQ or NE */
|
|
||||||
List *opnos; /* OID list of pairwise comparison ops */
|
/* LT LE GE or GT, never EQ or NE */
|
||||||
List *opfamilies; /* OID list of containing operator families */
|
RowCompareType rctype;
|
||||||
List *inputcollids; /* OID list of collations for comparisons */
|
/* OID list of pairwise comparison ops */
|
||||||
List *largs; /* the left-hand input arguments */
|
List *opnos;
|
||||||
List *rargs; /* the right-hand input arguments */
|
/* OID list of containing operator families */
|
||||||
|
List *opfamilies;
|
||||||
|
/* OID list of collations for comparisons */
|
||||||
|
List *inputcollids;
|
||||||
|
/* the left-hand input arguments */
|
||||||
|
List *largs;
|
||||||
|
/* the right-hand input arguments */
|
||||||
|
List *rargs;
|
||||||
} RowCompareExpr;
|
} RowCompareExpr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1266,10 +1364,14 @@ typedef struct RowCompareExpr
|
|||||||
typedef struct CoalesceExpr
|
typedef struct CoalesceExpr
|
||||||
{
|
{
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
Oid coalescetype; /* type of expression result */
|
/* type of expression result */
|
||||||
Oid coalescecollid; /* OID of collation, or InvalidOid if none */
|
Oid coalescetype;
|
||||||
List *args; /* the arguments */
|
/* OID of collation, or InvalidOid if none */
|
||||||
int location; /* token location, or -1 if unknown */
|
Oid coalescecollid;
|
||||||
|
/* the arguments */
|
||||||
|
List *args;
|
||||||
|
/* token location, or -1 if unknown */
|
||||||
|
int location;
|
||||||
} CoalesceExpr;
|
} CoalesceExpr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1284,12 +1386,18 @@ typedef enum MinMaxOp
|
|||||||
typedef struct MinMaxExpr
|
typedef struct MinMaxExpr
|
||||||
{
|
{
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
Oid minmaxtype; /* common type of arguments and result */
|
/* common type of arguments and result */
|
||||||
Oid minmaxcollid; /* OID of collation of result */
|
Oid minmaxtype;
|
||||||
Oid inputcollid; /* OID of collation that function should use */
|
/* OID of collation of result */
|
||||||
MinMaxOp op; /* function to execute */
|
Oid minmaxcollid;
|
||||||
List *args; /* the arguments */
|
/* OID of collation that function should use */
|
||||||
int location; /* token location, or -1 if unknown */
|
Oid inputcollid;
|
||||||
|
/* function to execute */
|
||||||
|
MinMaxOp op;
|
||||||
|
/* the arguments */
|
||||||
|
List *args;
|
||||||
|
/* token location, or -1 if unknown */
|
||||||
|
int location;
|
||||||
} MinMaxExpr;
|
} MinMaxExpr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1324,15 +1432,23 @@ typedef enum XmlOptionType
|
|||||||
typedef struct XmlExpr
|
typedef struct XmlExpr
|
||||||
{
|
{
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
XmlExprOp op; /* xml function ID */
|
/* xml function ID */
|
||||||
char *name; /* name in xml(NAME foo ...) syntaxes */
|
XmlExprOp op;
|
||||||
List *named_args; /* non-XML expressions for xml_attributes */
|
/* name in xml(NAME foo ...) syntaxes */
|
||||||
List *arg_names; /* parallel list of String values */
|
char *name;
|
||||||
List *args; /* list of expressions */
|
/* non-XML expressions for xml_attributes */
|
||||||
XmlOptionType xmloption; /* DOCUMENT or CONTENT */
|
List *named_args;
|
||||||
Oid type; /* target type/typmod for XMLSERIALIZE */
|
/* parallel list of String values */
|
||||||
|
List *arg_names;
|
||||||
|
/* list of expressions */
|
||||||
|
List *args;
|
||||||
|
/* DOCUMENT or CONTENT */
|
||||||
|
XmlOptionType xmloption;
|
||||||
|
/* target type/typmod for XMLSERIALIZE */
|
||||||
|
Oid type;
|
||||||
int32 typmod;
|
int32 typmod;
|
||||||
int location; /* token location, or -1 if unknown */
|
/* token location, or -1 if unknown */
|
||||||
|
int location;
|
||||||
} XmlExpr;
|
} XmlExpr;
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
@ -1364,7 +1480,8 @@ typedef struct NullTest
|
|||||||
Expr xpr;
|
Expr xpr;
|
||||||
Expr *arg; /* input expression */
|
Expr *arg; /* input expression */
|
||||||
NullTestType nulltesttype; /* IS NULL, IS NOT NULL */
|
NullTestType nulltesttype; /* IS NULL, IS NOT NULL */
|
||||||
bool argisrow; /* T to perform field-by-field null checks */
|
/* T to perform field-by-field null checks */
|
||||||
|
bool argisrow;
|
||||||
int location; /* token location, or -1 if unknown */
|
int location; /* token location, or -1 if unknown */
|
||||||
} NullTest;
|
} NullTest;
|
||||||
|
|
||||||
@ -1404,9 +1521,12 @@ typedef struct CoerceToDomain
|
|||||||
Expr xpr;
|
Expr xpr;
|
||||||
Expr *arg; /* input expression */
|
Expr *arg; /* input expression */
|
||||||
Oid resulttype; /* domain type ID (result type) */
|
Oid resulttype; /* domain type ID (result type) */
|
||||||
int32 resulttypmod; /* output typmod (currently always -1) */
|
/* output typmod (currently always -1) */
|
||||||
Oid resultcollid; /* OID of collation, or InvalidOid if none */
|
int32 resulttypmod;
|
||||||
CoercionForm coercionformat; /* how to display this node */
|
/* OID of collation, or InvalidOid if none */
|
||||||
|
Oid resultcollid;
|
||||||
|
/* how to display this node */
|
||||||
|
CoercionForm coercionformat;
|
||||||
int location; /* token location, or -1 if unknown */
|
int location; /* token location, or -1 if unknown */
|
||||||
} CoerceToDomain;
|
} CoerceToDomain;
|
||||||
|
|
||||||
@ -1422,10 +1542,14 @@ typedef struct CoerceToDomain
|
|||||||
typedef struct CoerceToDomainValue
|
typedef struct CoerceToDomainValue
|
||||||
{
|
{
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
Oid typeId; /* type for substituted value */
|
/* type for substituted value */
|
||||||
int32 typeMod; /* typemod for substituted value */
|
Oid typeId;
|
||||||
Oid collation; /* collation for the substituted value */
|
/* typemod for substituted value */
|
||||||
int location; /* token location, or -1 if unknown */
|
int32 typeMod;
|
||||||
|
/* collation for the substituted value */
|
||||||
|
Oid collation;
|
||||||
|
/* token location, or -1 if unknown */
|
||||||
|
int location;
|
||||||
} CoerceToDomainValue;
|
} CoerceToDomainValue;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1438,10 +1562,14 @@ typedef struct CoerceToDomainValue
|
|||||||
typedef struct SetToDefault
|
typedef struct SetToDefault
|
||||||
{
|
{
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
Oid typeId; /* type for substituted value */
|
/* type for substituted value */
|
||||||
int32 typeMod; /* typemod for substituted value */
|
Oid typeId;
|
||||||
Oid collation; /* collation for the substituted value */
|
/* typemod for substituted value */
|
||||||
int location; /* token location, or -1 if unknown */
|
int32 typeMod;
|
||||||
|
/* collation for the substituted value */
|
||||||
|
Oid collation;
|
||||||
|
/* token location, or -1 if unknown */
|
||||||
|
int location;
|
||||||
} SetToDefault;
|
} SetToDefault;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1552,15 +1680,20 @@ typedef struct InferenceElem
|
|||||||
typedef struct TargetEntry
|
typedef struct TargetEntry
|
||||||
{
|
{
|
||||||
Expr xpr;
|
Expr xpr;
|
||||||
Expr *expr; /* expression to evaluate */
|
/* expression to evaluate */
|
||||||
AttrNumber resno; /* attribute number (see notes above) */
|
Expr *expr;
|
||||||
char *resname; /* name of the column (could be NULL) */
|
/* attribute number (see notes above) */
|
||||||
Index ressortgroupref; /* nonzero if referenced by a sort/group
|
AttrNumber resno;
|
||||||
* clause */
|
/* name of the column (could be NULL) */
|
||||||
Oid resorigtbl; /* OID of column's source table */
|
char *resname;
|
||||||
AttrNumber resorigcol; /* column's number in source table */
|
/* nonzero if referenced by a sort/group clause */
|
||||||
bool resjunk; /* set to true to eliminate the attribute from
|
Index ressortgroupref;
|
||||||
* final target list */
|
/* OID of column's source table */
|
||||||
|
Oid resorigtbl;
|
||||||
|
/* column's number in source table */
|
||||||
|
AttrNumber resorigcol;
|
||||||
|
/* set to true to eliminate the attribute from final target list */
|
||||||
|
bool resjunk;
|
||||||
} TargetEntry;
|
} TargetEntry;
|
||||||
|
|
||||||
|
|
||||||
@ -1642,11 +1775,16 @@ typedef struct JoinExpr
|
|||||||
bool isNatural; /* Natural join? Will need to shape table */
|
bool isNatural; /* Natural join? Will need to shape table */
|
||||||
Node *larg; /* left subtree */
|
Node *larg; /* left subtree */
|
||||||
Node *rarg; /* right subtree */
|
Node *rarg; /* right subtree */
|
||||||
List *usingClause; /* USING clause, if any (list of String) */
|
/* USING clause, if any (list of String) */
|
||||||
Alias *join_using_alias; /* alias attached to USING clause, if any */
|
List *usingClause;
|
||||||
Node *quals; /* qualifiers on join, if any */
|
/* alias attached to USING clause, if any */
|
||||||
Alias *alias; /* user-written alias clause, if any */
|
Alias *join_using_alias;
|
||||||
int rtindex; /* RT index assigned for join, or 0 */
|
/* qualifiers on join, if any */
|
||||||
|
Node *quals;
|
||||||
|
/* user-written alias clause, if any */
|
||||||
|
Alias *alias;
|
||||||
|
/* RT index assigned for join, or 0 */
|
||||||
|
int rtindex;
|
||||||
} JoinExpr;
|
} JoinExpr;
|
||||||
|
|
||||||
/*----------
|
/*----------
|
||||||
|
Loading…
x
Reference in New Issue
Block a user