diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 0171da5f4b..e90aa731ad 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -731,24 +731,15 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); /* Precedence: lowest to highest */ -%nonassoc SET /* see relation_expr_opt_alias */ -%left UNION EXCEPT -%left INTERSECT -%left OR -%left AND -%right NOT -%nonassoc IS ISNULL NOTNULL /* IS sets precedence for IS NULL, etc */ -%nonassoc '<' '>' '=' LESS_EQUALS GREATER_EQUALS NOT_EQUALS -%nonassoc BETWEEN IN_P LIKE ILIKE SIMILAR NOT_LA -%nonassoc ESCAPE /* ESCAPE must be just above LIKE/ILIKE/SIMILAR */ + /* * To support target_el without AS, we must give IDENT an explicit priority - * greater than Op. We can safely assign the same priority to various + * lower than Op. We can safely assign the same priority to various * unreserved keywords as needed to resolve ambiguities (this can't have any * bad effects since obviously the keywords will still behave the same as if * they weren't keywords). We need to do this: * for PARTITION, RANGE, ROWS, GROUPS to support opt_existing_window_name; - * for GENERATED so that it can follow b_expr; + * for UNBOUNDED, PRECEDING, FOLLOWING to support frame_bound; * * To support CUBE and ROLLUP in GROUP BY without reserving them, we give them * an explicit priority lower than '(', so that a rule with CUBE '(' will shift @@ -765,7 +756,18 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); * blame any funny behavior of UNBOUNDED on the SQL standard, though. */ %nonassoc UNBOUNDED /* ideally should have same precedence as IDENT */ -%nonassoc IDENT GENERATED PARTITION RANGE ROWS GROUPS PRECEDING FOLLOWING CUBE ROLLUP +%nonassoc IDENT PARTITION RANGE ROWS GROUPS PRECEDING FOLLOWING CUBE ROLLUP + +%nonassoc SET /* see relation_expr_opt_alias */ +%left UNION EXCEPT +%left INTERSECT +%left OR +%left AND +%right NOT +%nonassoc IS ISNULL NOTNULL /* IS sets precedence for IS NULL, etc */ +%nonassoc '<' '>' '=' LESS_EQUALS GREATER_EQUALS NOT_EQUALS +%nonassoc BETWEEN IN_P LIKE ILIKE SIMILAR NOT_LA +%nonassoc ESCAPE /* ESCAPE must be just above LIKE/ILIKE/SIMILAR */ %left Op OPERATOR /* multi-character ops and user-defined operators */ %left '+' '-' %left '*' '/' '%' @@ -786,8 +788,6 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); * left-associativity among the JOIN rules themselves. */ %left JOIN CROSS LEFT FULL RIGHT INNER_P NATURAL -/* kluge to keep xml_whitespace_option from causing shift/reduce conflicts */ -%right PRESERVE STRIP_P %%