From 4ea38b713b6d9b012e99401c6a3e06683d38bba2 Mon Sep 17 00:00:00 2001 From: Andrew Dunstan Date: Thu, 16 Mar 2023 20:23:44 -0400 Subject: [PATCH 5/9] remove more non-terminal grammar symbols --- src/backend/parser/gram.y | 124 +++++++++----------------------------- 1 file changed, 29 insertions(+), 95 deletions(-) diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 601db83769..5b32eed2cd 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -655,7 +655,6 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); json_representation json_value_expr json_api_common_syntax - json_context_item json_argument json_returning_clause_opt json_output_clause_opt @@ -663,7 +662,6 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); json_object_args json_name_and_value json_aggregate_func - json_path_specification %type json_name_and_value_list json_value_expr_list @@ -671,8 +669,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); json_arguments json_passing_clause_opt -%type json_table_path_name - json_as_path_name_clause_opt +%type json_as_path_name_clause_opt %type json_encoding_clause_opt json_predicate_type_constraint_opt @@ -680,15 +677,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); json_wrapper_behavior json_conditional_or_unconditional_opt -%type json_behavior_error - json_behavior_null - json_behavior_true - json_behavior_false - json_behavior_unknown - json_behavior_empty_array - json_behavior_empty_object - json_behavior_default - json_value_behavior +%type json_value_behavior json_query_behavior json_exists_error_behavior json_exists_error_clause_opt @@ -696,8 +685,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query); %type json_value_on_behavior_clause_opt json_query_on_behavior_clause_opt -%type json_quotes_behavior - json_quotes_clause_opt +%type json_quotes_clause_opt %type json_key_uniqueness_constraint_opt json_object_constructor_null_clause_opt @@ -16510,7 +16498,7 @@ opt_asymmetric: ASYMMETRIC /* SQL/JSON support */ json_api_common_syntax: - json_context_item ',' json_path_specification + json_value_expr ',' a_expr /* i.e. a json_path */ json_as_path_name_clause_opt json_passing_clause_opt { @@ -16525,23 +16513,11 @@ json_api_common_syntax: } ; -json_context_item: - json_value_expr { $$ = $1; } - ; - -json_path_specification: - a_expr { $$ = $1; } - ; - json_as_path_name_clause_opt: - AS json_table_path_name { $$ = $2; } + AS name { $$ = $2; } | /* EMPTY */ { $$ = NULL; } ; -json_table_path_name: - name { $$ = $1; } - ; - json_passing_clause_opt: PASSING json_arguments { $$ = $2; } | /* EMPTY */ { $$ = NIL; } @@ -16569,10 +16545,10 @@ json_exists_error_clause_opt: ; json_exists_error_behavior: - json_behavior_error - | json_behavior_true - | json_behavior_false - | json_behavior_unknown + ERROR_P { $$ = makeJsonBehavior(JSON_BEHAVIOR_ERROR, NULL); } + | TRUE_P { $$ = makeJsonBehavior(JSON_BEHAVIOR_TRUE, NULL); } + | FALSE_P { $$ = makeJsonBehavior(JSON_BEHAVIOR_FALSE, NULL); } + | UNKNOWN { $$ = makeJsonBehavior(JSON_BEHAVIOR_UNKNOWN, NULL); } ; json_value_expr: @@ -16607,45 +16583,10 @@ json_encoding_clause_opt: | /* EMPTY */ { $$ = JS_ENC_DEFAULT; } ; -json_behavior_error: - ERROR_P { $$ = makeJsonBehavior(JSON_BEHAVIOR_ERROR, NULL); } - ; - -json_behavior_null: - NULL_P { $$ = makeJsonBehavior(JSON_BEHAVIOR_NULL, NULL); } - ; - -json_behavior_true: - TRUE_P { $$ = makeJsonBehavior(JSON_BEHAVIOR_TRUE, NULL); } - ; - -json_behavior_false: - FALSE_P { $$ = makeJsonBehavior(JSON_BEHAVIOR_FALSE, NULL); } - ; - -json_behavior_unknown: - UNKNOWN { $$ = makeJsonBehavior(JSON_BEHAVIOR_UNKNOWN, NULL); } - ; - -json_behavior_empty_array: - EMPTY_P ARRAY { $$ = makeJsonBehavior(JSON_BEHAVIOR_EMPTY_ARRAY, NULL); } - /* non-standard, for Oracle compatibility only */ - | EMPTY_P { $$ = makeJsonBehavior(JSON_BEHAVIOR_EMPTY_ARRAY, NULL); } - ; - -json_behavior_empty_object: - EMPTY_P OBJECT_P { $$ = makeJsonBehavior(JSON_BEHAVIOR_EMPTY_OBJECT, NULL); } - ; - -json_behavior_default: - DEFAULT a_expr { $$ = makeJsonBehavior(JSON_BEHAVIOR_DEFAULT, $2); } - ; - - json_value_behavior: - json_behavior_null - | json_behavior_error - | json_behavior_default + NULL_P { $$ = makeJsonBehavior(JSON_BEHAVIOR_NULL, NULL); } + | ERROR_P { $$ = makeJsonBehavior(JSON_BEHAVIOR_ERROR, NULL); } + | DEFAULT a_expr { $$ = makeJsonBehavior(JSON_BEHAVIOR_DEFAULT, $2); } ; json_value_on_behavior_clause_opt: @@ -16666,14 +16607,12 @@ json_wrapper_clause_opt: | /* EMPTY */ { $$ = 0; } ; +/* ARRAY is a noise word */ json_wrapper_behavior: - WITHOUT array_opt { $$ = JSW_NONE; } - | WITH json_conditional_or_unconditional_opt array_opt { $$ = $2; } - ; - -array_opt: - ARRAY { } - | /* EMPTY */ { } + WITHOUT ARRAY { $$ = JSW_NONE; } + | WITHOUT { $$ = JSW_NONE; } + | WITH json_conditional_or_unconditional_opt ARRAY { $$ = $2; } + | WITH json_conditional_or_unconditional_opt { $$ = $2; } ; json_conditional_or_unconditional_opt: @@ -16683,26 +16622,21 @@ json_conditional_or_unconditional_opt: ; json_quotes_clause_opt: - json_quotes_behavior QUOTES json_on_scalar_string_opt { $$ = $1; } - | /* EMPTY */ { $$ = JS_QUOTES_UNSPEC; } - ; - -json_quotes_behavior: - KEEP { $$ = JS_QUOTES_KEEP; } - | OMIT { $$ = JS_QUOTES_OMIT; } - ; - -json_on_scalar_string_opt: - ON SCALAR STRING_P { } - | /* EMPTY */ { } + KEEP QUOTES ON SCALAR STRING_P { $$ = JS_QUOTES_KEEP; } + | KEEP QUOTES { $$ = JS_QUOTES_KEEP; } + | OMIT QUOTES ON SCALAR STRING_P { $$ = JS_QUOTES_OMIT; } + | OMIT QUOTES { $$ = JS_QUOTES_OMIT; } + | /* EMPTY */ { $$ = JS_QUOTES_UNSPEC; } ; json_query_behavior: - json_behavior_error - | json_behavior_null - | json_behavior_empty_array - | json_behavior_empty_object - | json_behavior_default + ERROR_P { $$ = makeJsonBehavior(JSON_BEHAVIOR_ERROR, NULL); } + | NULL_P { $$ = makeJsonBehavior(JSON_BEHAVIOR_NULL, NULL); } + | EMPTY_P ARRAY { $$ = makeJsonBehavior(JSON_BEHAVIOR_EMPTY_ARRAY, NULL); } + /* non-standard, for Oracle compatibility only */ + | EMPTY_P { $$ = makeJsonBehavior(JSON_BEHAVIOR_EMPTY_ARRAY, NULL); } + | EMPTY_P OBJECT_P { $$ = makeJsonBehavior(JSON_BEHAVIOR_EMPTY_OBJECT, NULL); } + | DEFAULT a_expr { $$ = makeJsonBehavior(JSON_BEHAVIOR_DEFAULT, $2); } ; json_query_on_behavior_clause_opt: -- 2.34.1