From 5830c5ec1127975ee32dd6470eb946d8393667b7 Mon Sep 17 00:00:00 2001 From: Matthias van de Meent Date: Thu, 8 Feb 2024 17:15:22 +0100 Subject: [PATCH v3 3/7] gen_node_support.pl: Mark location fields as type alias Location Instead of the rather ugly type=int + name ~= location$, we now have a special type for offset pointers or sizes that are only relevant when a query text is included, which decreases the complexity required in gen_node_support.pl for handling these values. --- src/backend/nodes/gen_node_support.pl | 6 +- src/include/nodes/parsenodes.h | 92 +++++++++++++-------------- src/include/nodes/primnodes.h | 72 +++++++++++---------- 3 files changed, 86 insertions(+), 84 deletions(-) diff --git a/src/backend/nodes/gen_node_support.pl b/src/backend/nodes/gen_node_support.pl index 487f6f7728..ec850c3484 100644 --- a/src/backend/nodes/gen_node_support.pl +++ b/src/backend/nodes/gen_node_support.pl @@ -777,7 +777,7 @@ _equal${n}(const $n *a, const $n *b) print $eff "\tCOMPARE_BITMAPSET_FIELD($f);\n" unless $equal_ignore; } - elsif ($t eq 'int' && $f =~ 'location$') + elsif ($t eq 'Location') { print $cff "\tCOPY_LOCATION_FIELD($f);\n" unless $copy_ignore; print $eff "\tCOMPARE_LOCATION_FIELD($f);\n" unless $equal_ignore; @@ -1010,7 +1010,7 @@ _read${n}(void) print $off "\tWRITE_BOOL_FIELD($f);\n"; print $rff "\tREAD_BOOL_FIELD($f);\n" unless $no_read; } - elsif ($t eq 'int' && $f =~ 'location$') + elsif ($t eq 'Location') { print $off "\tWRITE_LOCATION_FIELD($f);\n"; print $rff "\tREAD_LOCATION_FIELD($f);\n" unless $no_read; @@ -1303,7 +1303,7 @@ _jumble${n}(JumbleState *jstate, Node *node) print $jff "\tJUMBLE_NODE($f);\n" unless $query_jumble_ignore; } - elsif ($t eq 'int' && $f =~ 'location$') + elsif ($t eq 'Location') { # Track the node's location only if directly requested. if ($query_jumble_location) diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 476d55dd24..dd8aa30aaf 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -225,9 +225,9 @@ typedef struct Query * both be -1 meaning "unknown". */ /* start location, or -1 if unknown */ - int stmt_location; + Location stmt_location; /* length in bytes; 0 means "rest of string" */ - int stmt_len pg_node_attr(query_jumble_ignore); + Location stmt_len pg_node_attr(query_jumble_ignore); } Query; @@ -262,7 +262,7 @@ typedef struct TypeName List *typmods; /* type modifier expression(s) */ int32 typemod; /* prespecified type modifier */ List *arrayBounds; /* array bounds */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } TypeName; /* @@ -282,7 +282,7 @@ typedef struct ColumnRef { NodeTag type; List *fields; /* field names (String nodes) or A_Star */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } ColumnRef; /* @@ -292,7 +292,7 @@ typedef struct ParamRef { NodeTag type; int number; /* the number of the parameter */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } ParamRef; /* @@ -325,7 +325,7 @@ typedef struct A_Expr List *name; /* possibly-qualified name of operator */ Node *lexpr; /* left argument, or NULL if none */ Node *rexpr; /* right argument, or NULL if none */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } A_Expr; /* @@ -351,7 +351,7 @@ typedef struct A_Const NodeTag type; union ValUnion val; bool isnull; /* SQL NULL constant */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } A_Const; /* @@ -362,7 +362,7 @@ typedef struct TypeCast NodeTag type; Node *arg; /* the expression being casted */ TypeName *typeName; /* the target type */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } TypeCast; /* @@ -373,7 +373,7 @@ typedef struct CollateClause NodeTag type; Node *arg; /* input expression */ List *collname; /* possibly-qualified collation name */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } CollateClause; /* @@ -393,7 +393,7 @@ typedef struct RoleSpec NodeTag type; RoleSpecType roletype; /* Type of this rolespec */ char *rolename; /* filled only for ROLESPEC_CSTRING */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } RoleSpec; /* @@ -423,7 +423,7 @@ typedef struct FuncCall bool agg_distinct; /* arguments were labeled DISTINCT */ bool func_variadic; /* last argument was labeled VARIADIC */ CoercionForm funcformat; /* how to display this node */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } FuncCall; /* @@ -480,7 +480,7 @@ typedef struct A_ArrayExpr { NodeTag type; List *elements; /* array element expressions */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } A_ArrayExpr; /* @@ -507,7 +507,7 @@ typedef struct ResTarget char *name; /* column name or NULL */ List *indirection; /* subscripts, field names, and '*', or NIL */ Node *val; /* the value expression to compute or assign */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } ResTarget; /* @@ -537,7 +537,7 @@ typedef struct SortBy SortByDir sortby_dir; /* ASC/DESC/USING/default */ SortByNulls sortby_nulls; /* NULLS FIRST/LAST */ List *useOp; /* name of op to use, if SORTBY_USING */ - int location; /* operator location, or -1 if none/unknown */ + Location location; /* operator location, or -1 if none/unknown */ } SortBy; /* @@ -558,7 +558,7 @@ typedef struct WindowDef int frameOptions; /* frame_clause options, see below */ Node *startOffset; /* expression for starting bound, if any */ Node *endOffset; /* expression for ending bound, if any */ - int location; /* parse location, or -1 if none/unknown */ + Location location; /* parse location, or -1 if none/unknown */ } WindowDef; /* @@ -648,7 +648,7 @@ typedef struct RangeTableFunc List *namespaces; /* list of namespaces as ResTarget */ List *columns; /* list of RangeTableFuncCol */ Alias *alias; /* table alias & optional column aliases */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } RangeTableFunc; /* @@ -666,7 +666,7 @@ typedef struct RangeTableFuncCol bool is_not_null; /* does it have NOT NULL? */ Node *colexpr; /* column filter expression */ Node *coldefexpr; /* column default value expression */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } RangeTableFuncCol; /* @@ -686,7 +686,7 @@ typedef struct RangeTableSample List *method; /* sampling method name (possibly qualified) */ List *args; /* argument(s) for sampling method */ Node *repeatable; /* REPEATABLE expression, or NULL if none */ - int location; /* method name location, or -1 if unknown */ + Location location; /* method name location, or -1 if unknown */ } RangeTableSample; /* @@ -729,7 +729,7 @@ typedef struct ColumnDef Oid collOid; /* collation OID (InvalidOid if not set) */ List *constraints; /* other constraints on column */ List *fdwoptions; /* per-column FDW options */ - int location; /* parse location, or -1 if none/unknown */ + Location location; /* parse location, or -1 if none/unknown */ } ColumnDef; /* @@ -803,7 +803,7 @@ typedef struct DefElem Node *arg; /* typically Integer, Float, String, or * TypeName */ DefElemAction defaction; /* unspecified action, or SET/ADD/DROP */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } DefElem; /* @@ -833,7 +833,7 @@ typedef struct XmlSerialize Node *expr; TypeName *typeName; bool indent; /* [NO] INDENT */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } XmlSerialize; /* Partitioning related definitions */ @@ -851,7 +851,7 @@ typedef struct PartitionElem Node *expr; /* expression to partition on, or NULL */ List *collation; /* name of collation; NIL = default */ List *opclass; /* name of desired opclass; NIL = default */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } PartitionElem; typedef enum PartitionStrategy @@ -871,7 +871,7 @@ typedef struct PartitionSpec NodeTag type; PartitionStrategy strategy; List *partParams; /* List of PartitionElems */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } PartitionSpec; /* @@ -898,7 +898,7 @@ struct PartitionBoundSpec List *lowerdatums; /* List of PartitionRangeDatums */ List *upperdatums; /* List of PartitionRangeDatums */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ }; /* @@ -921,7 +921,7 @@ typedef struct PartitionRangeDatum Node *value; /* Const (or A_Const in raw tree), if kind is * PARTITION_RANGE_DATUM_VALUE, else NULL */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } PartitionRangeDatum; /* @@ -1454,7 +1454,7 @@ typedef struct GroupingSet NodeTag type; GroupingSetKind kind pg_node_attr(query_jumble_ignore); List *content; - int location; + Location location; } GroupingSet; /* @@ -1542,7 +1542,7 @@ typedef struct WithClause NodeTag type; List *ctes; /* list of CommonTableExprs */ bool recursive; /* true = WITH RECURSIVE */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } WithClause; /* @@ -1557,7 +1557,7 @@ typedef struct InferClause List *indexElems; /* IndexElems to infer unique index */ Node *whereClause; /* qualification (partial-index predicate) */ char *conname; /* Constraint name, or NULL if unnamed */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } InferClause; /* @@ -1573,7 +1573,7 @@ typedef struct OnConflictClause InferClause *infer; /* Optional index inference clause */ List *targetList; /* the target list (of ResTarget) */ Node *whereClause; /* qualifications */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } OnConflictClause; /* @@ -1594,7 +1594,7 @@ typedef struct CTESearchClause List *search_col_list; bool search_breadth_first; char *search_seq_column; - int location; + Location location; } CTESearchClause; typedef struct CTECycleClause @@ -1605,7 +1605,7 @@ typedef struct CTECycleClause Node *cycle_mark_value; Node *cycle_mark_default; char *cycle_path_column; - int location; + Location location; /* These fields are set during parse analysis: */ Oid cycle_mark_type; /* common type of _value and _default */ int cycle_mark_typmod; @@ -1629,7 +1629,7 @@ typedef struct CommonTableExpr Node *ctequery; /* the CTE's subquery */ CTESearchClause *search_clause pg_node_attr(query_jumble_ignore); CTECycleClause *cycle_clause pg_node_attr(query_jumble_ignore); - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ /* These fields are set during parse analysis: */ /* is this CTE actually recursive? */ bool cterecursive pg_node_attr(query_jumble_ignore); @@ -1725,7 +1725,7 @@ typedef struct JsonParseExpr JsonValueExpr *expr; /* string expression */ JsonOutput *output; /* RETURNING clause, if specified */ bool unique_keys; /* WITH UNIQUE KEYS? */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } JsonParseExpr; /* @@ -1737,7 +1737,7 @@ typedef struct JsonScalarExpr NodeTag type; Expr *expr; /* scalar expression */ JsonOutput *output; /* RETURNING clause, if specified */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } JsonScalarExpr; /* @@ -1749,7 +1749,7 @@ typedef struct JsonSerializeExpr NodeTag type; JsonValueExpr *expr; /* json value expression */ JsonOutput *output; /* RETURNING clause, if specified */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } JsonSerializeExpr; /* @@ -1763,7 +1763,7 @@ typedef struct JsonObjectConstructor JsonOutput *output; /* RETURNING clause, if specified */ bool absent_on_null; /* skip NULL values? */ bool unique; /* check key uniqueness? */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } JsonObjectConstructor; /* @@ -1776,7 +1776,7 @@ typedef struct JsonArrayConstructor List *exprs; /* list of JsonValueExpr elements */ JsonOutput *output; /* RETURNING clause, if specified */ bool absent_on_null; /* skip NULL elements? */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } JsonArrayConstructor; /* @@ -1790,7 +1790,7 @@ typedef struct JsonArrayQueryConstructor JsonOutput *output; /* RETURNING clause, if specified */ JsonFormat *format; /* FORMAT clause for subquery, if specified */ bool absent_on_null; /* skip NULL elements? */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } JsonArrayQueryConstructor; /* @@ -1805,7 +1805,7 @@ typedef struct JsonAggConstructor Node *agg_filter; /* FILTER clause, if any */ List *agg_order; /* ORDER BY clause, if any */ struct WindowDef *over; /* OVER clause, if any */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } JsonAggConstructor; /* @@ -1859,8 +1859,8 @@ typedef struct RawStmt NodeTag type; Node *stmt; /* raw parse tree */ - int stmt_location; /* start location, or -1 if unknown */ - int stmt_len; /* length in bytes; 0 means "rest of string" */ + Location stmt_location; /* start location, or -1 if unknown */ + Location stmt_len; /* length in bytes; 0 means "rest of string" */ } RawStmt; /***************************************************************************** @@ -2067,7 +2067,7 @@ typedef struct PLAssignStmt List *indirection; /* subscripts and field names, if any */ int nnames; /* number of names to use in ColumnRef */ SelectStmt *val; /* the PL/pgSQL expression to assign */ - int location; /* name's token location, or -1 if unknown */ + Location location; /* name's token location, or -1 if unknown */ } PLAssignStmt; @@ -2575,7 +2575,7 @@ typedef struct Constraint char *conname; /* Constraint name, or NULL if unnamed */ bool deferrable; /* DEFERRABLE? */ bool initdeferred; /* INITIALLY DEFERRED? */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ /* Fields used for constraints with expressions (CHECK and DEFAULT): */ bool is_no_inherit; /* is constraint non-inheritable? */ @@ -3528,7 +3528,7 @@ typedef struct TransactionStmt char *gid pg_node_attr(query_jumble_ignore); bool chain; /* AND CHAIN option */ /* token location, or -1 if unknown */ - int location pg_node_attr(query_jumble_location); + Location location pg_node_attr(query_jumble_location); } TransactionStmt; /* ---------------------- @@ -3914,7 +3914,7 @@ typedef struct DeallocateStmt /* true if DEALLOCATE ALL */ bool isall; /* token location, or -1 if unknown */ - int location pg_node_attr(query_jumble_location); + Location location pg_node_attr(query_jumble_location); } DeallocateStmt; /* @@ -4002,7 +4002,7 @@ typedef struct PublicationObjSpec PublicationObjSpecType pubobjtype; /* type of this publication object */ char *name; PublicationTable *pubtable; - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } PublicationObjSpec; typedef struct CreatePublicationStmt diff --git a/src/include/nodes/primnodes.h b/src/include/nodes/primnodes.h index 4a154606d2..557be05657 100644 --- a/src/include/nodes/primnodes.h +++ b/src/include/nodes/primnodes.h @@ -30,6 +30,8 @@ typedef enum OverridingKind } OverridingKind; +#define Location int + /* ---------------------------------------------------------------- * node definitions * ---------------------------------------------------------------- @@ -91,7 +93,7 @@ typedef struct RangeVar Alias *alias; /* token location, or -1 if unknown */ - int location; + Location location; } RangeVar; /* @@ -128,7 +130,7 @@ typedef struct TableFunc /* counts from 0; -1 if none specified */ int ordinalitycol pg_node_attr(query_jumble_ignore); /* token location, or -1 if unknown */ - int location; + Location location; } TableFunc; /* @@ -276,7 +278,7 @@ typedef struct Var AttrNumber varattnosyn pg_node_attr(equal_ignore, query_jumble_ignore); /* token location, or -1 if unknown */ - int location; + Location location; } Var; /* @@ -318,7 +320,7 @@ typedef struct Const * token location, or -1 if unknown. All constants are tracked as * locations in query jumbling, to be marked as parameters. */ - int location pg_node_attr(query_jumble_location); + Location location pg_node_attr(query_jumble_location); } Const; /* @@ -367,7 +369,7 @@ typedef struct Param /* OID of collation, or InvalidOid if none */ Oid paramcollid pg_node_attr(query_jumble_ignore); /* token location, or -1 if unknown */ - int location; + Location location; } Param; /* @@ -490,7 +492,7 @@ typedef struct Aggref int aggtransno pg_node_attr(query_jumble_ignore); /* token location, or -1 if unknown */ - int location; + Location location; } Aggref; /* @@ -537,7 +539,7 @@ typedef struct GroupingFunc Index agglevelsup; /* token location */ - int location; + Location location; } GroupingFunc; /* @@ -568,7 +570,7 @@ typedef struct WindowFunc /* is function a simple aggregate? */ bool winagg pg_node_attr(query_jumble_ignore); /* token location, or -1 if unknown */ - int location; + Location location; } WindowFunc; /* @@ -702,7 +704,7 @@ typedef struct FuncExpr /* arguments to the function */ List *args; /* token location, or -1 if unknown */ - int location; + Location location; } FuncExpr; /* @@ -729,7 +731,7 @@ typedef struct NamedArgExpr /* argument's number in positional notation */ int argnumber; /* argument name location, or -1 if unknown */ - int location; + Location location; } NamedArgExpr; /* @@ -771,7 +773,7 @@ typedef struct OpExpr List *args; /* token location, or -1 if unknown */ - int location; + Location location; } OpExpr; /* @@ -851,7 +853,7 @@ typedef struct ScalarArrayOpExpr List *args; /* token location, or -1 if unknown */ - int location; + Location location; } ScalarArrayOpExpr; /* @@ -873,7 +875,7 @@ typedef struct BoolExpr Expr xpr; BoolExprType boolop; List *args; /* arguments to this expression */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } BoolExpr; /* @@ -950,7 +952,7 @@ typedef struct SubLink List *operName pg_node_attr(query_jumble_ignore); /* subselect as Query* or raw parsetree */ Node *subselect; - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } SubLink; /* @@ -1124,7 +1126,7 @@ typedef struct RelabelType Oid resultcollid pg_node_attr(query_jumble_ignore); /* how to display this node */ CoercionForm relabelformat pg_node_attr(query_jumble_ignore); - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } RelabelType; /* ---------------- @@ -1146,7 +1148,7 @@ typedef struct CoerceViaIO Oid resultcollid pg_node_attr(query_jumble_ignore); /* how to display this node */ CoercionForm coerceformat pg_node_attr(query_jumble_ignore); - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } CoerceViaIO; /* ---------------- @@ -1174,7 +1176,7 @@ typedef struct ArrayCoerceExpr Oid resultcollid pg_node_attr(query_jumble_ignore); /* how to display this node */ CoercionForm coerceformat pg_node_attr(query_jumble_ignore); - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } ArrayCoerceExpr; /* ---------------- @@ -1198,7 +1200,7 @@ typedef struct ConvertRowtypeExpr /* Like RowExpr, we deliberately omit a typmod and collation here */ /* how to display this node */ CoercionForm convertformat pg_node_attr(query_jumble_ignore); - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } ConvertRowtypeExpr; /*---------- @@ -1213,7 +1215,7 @@ typedef struct CollateExpr Expr xpr; Expr *arg; /* input expression */ Oid collOid; /* collation's OID */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } CollateExpr; /*---------- @@ -1248,7 +1250,7 @@ typedef struct CaseExpr Expr *arg; /* implicit equality comparison argument */ List *args; /* the arguments (list of WHEN clauses) */ Expr *defresult; /* the default result (ELSE clause) */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } CaseExpr; /* @@ -1259,7 +1261,7 @@ typedef struct CaseWhen Expr xpr; Expr *expr; /* condition expression */ Expr *result; /* substitution result */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } CaseWhen; /* @@ -1316,7 +1318,7 @@ typedef struct ArrayExpr /* true if elements are sub-arrays */ bool multidims pg_node_attr(query_jumble_ignore); /* token location, or -1 if unknown */ - int location; + Location location; } ArrayExpr; /* @@ -1367,7 +1369,7 @@ typedef struct RowExpr /* list of String, or NIL */ List *colnames pg_node_attr(query_jumble_ignore); - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } RowExpr; /* @@ -1426,7 +1428,7 @@ typedef struct CoalesceExpr /* the arguments */ List *args; /* token location, or -1 if unknown */ - int location; + Location location; } CoalesceExpr; /* @@ -1452,7 +1454,7 @@ typedef struct MinMaxExpr /* the arguments */ List *args; /* token location, or -1 if unknown */ - int location; + Location location; } MinMaxExpr; /* @@ -1496,7 +1498,7 @@ typedef struct SQLValueFunction */ Oid type pg_node_attr(query_jumble_ignore); int32 typmod; - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } SQLValueFunction; /* @@ -1549,7 +1551,7 @@ typedef struct XmlExpr Oid type pg_node_attr(query_jumble_ignore); int32 typmod pg_node_attr(query_jumble_ignore); /* token location, or -1 if unknown */ - int location; + Location location; } XmlExpr; /* @@ -1585,7 +1587,7 @@ typedef struct JsonFormat NodeTag type; JsonFormatType format_type; /* format type */ JsonEncoding encoding; /* JSON encoding */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } JsonFormat; /* @@ -1641,7 +1643,7 @@ typedef struct JsonConstructorExpr JsonReturning *returning; /* RETURNING clause */ bool absent_on_null; /* ABSENT ON NULL? */ bool unique; /* WITH UNIQUE KEYS? (JSON_OBJECT[AGG] only) */ - int location; + Location location; } JsonConstructorExpr; /* @@ -1667,7 +1669,7 @@ typedef struct JsonIsPredicate JsonFormat *format; /* FORMAT clause, if specified */ JsonValueType item_type; /* JSON item type */ bool unique_keys; /* check key uniqueness? */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } JsonIsPredicate; /* ---------------- @@ -1701,7 +1703,7 @@ typedef struct NullTest NullTestType nulltesttype; /* IS NULL, IS NOT NULL */ /* T to perform field-by-field null checks */ bool argisrow pg_node_attr(query_jumble_ignore); - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } NullTest; /* @@ -1723,7 +1725,7 @@ typedef struct BooleanTest Expr xpr; Expr *arg; /* input expression */ BoolTestType booltesttype; /* test type */ - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } BooleanTest; @@ -1765,7 +1767,7 @@ typedef struct CoerceToDomain Oid resultcollid pg_node_attr(query_jumble_ignore); /* how to display this node */ CoercionForm coercionformat pg_node_attr(query_jumble_ignore); - int location; /* token location, or -1 if unknown */ + Location location; /* token location, or -1 if unknown */ } CoerceToDomain; /* @@ -1787,7 +1789,7 @@ typedef struct CoerceToDomainValue /* collation for the substituted value */ Oid collation pg_node_attr(query_jumble_ignore); /* token location, or -1 if unknown */ - int location; + Location location; } CoerceToDomainValue; /* @@ -1807,7 +1809,7 @@ typedef struct SetToDefault /* collation for the substituted value */ Oid collation pg_node_attr(query_jumble_ignore); /* token location, or -1 if unknown */ - int location; + Location location; } SetToDefault; /* -- 2.40.1