v1-0001-simplify-gram.y-atop-of-your-patch_patch
application/octet-stream
Filename: v1-0001-simplify-gram.y-atop-of-your-patch_patch
Type: application/octet-stream
Part: 0
From 6359f65af7b7c294acf3ac4798d877670722d880 Mon Sep 17 00:00:00 2001
From: Zhijie Hou <houzj.fnst@fujitsu.com>
Date: Mon, 30 Mar 2026 12:55:55 +0800
Subject: [PATCH v1] simplify gram.y
---
src/backend/parser/gram.y | 55 +++------------------------------------
1 file changed, 4 insertions(+), 51 deletions(-)
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 8ee83d62334..173702a7fd4 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -209,8 +209,6 @@ static void preprocess_pub_all_objtype_list(List *all_objects_list,
core_yyscan_t yyscanner);
static void preprocess_pubobj_list(List *pubobjspec_list,
core_yyscan_t yyscanner);
-static void preprocess_except_pubobj_list(List *pubexceptobjspec_list,
- core_yyscan_t yyscanner);
static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
%}
@@ -11401,7 +11399,7 @@ pub_obj_list: PublicationObjSpec
;
opt_pub_except_clause:
- EXCEPT '(' pub_except_obj_list ')' { $$ = $3; }
+ EXCEPT '(' TABLE pub_except_obj_list ')' { $$ = $4; }
| /*EMPTY*/ { $$ = NIL; }
;
@@ -11410,7 +11408,6 @@ PublicationAllObjSpec:
{
$$ = makeNode(PublicationAllObjSpec);
$$->pubobjtype = PUBLICATION_ALL_TABLES;
- preprocess_except_pubobj_list($3, yyscanner);
$$->except_tables = $3;
$$->location = @1;
}
@@ -11429,21 +11426,12 @@ pub_all_obj_type_list: PublicationAllObjSpec
;
PublicationExceptObjSpec:
- TABLE relation_expr
+ relation_expr
{
$$ = makeNode(PublicationObjSpec);
$$->pubobjtype = PUBLICATIONOBJ_EXCEPT_TABLE;
$$->pubtable = makeNode(PublicationTable);
$$->pubtable->except = true;
- $$->pubtable->relation = $2;
- $$->location = @2;
- }
- | relation_expr
- {
- $$ = makeNode(PublicationObjSpec);
- $$->pubobjtype = PUBLICATIONOBJ_CONTINUATION;
- $$->pubtable = makeNode(PublicationTable);
- $$->pubtable->except = true;
$$->pubtable->relation = $1;
$$->location = @1;
}
@@ -11451,6 +11439,8 @@ PublicationExceptObjSpec:
pub_except_obj_list: PublicationExceptObjSpec
{ $$ = list_make1($1); }
+ | pub_except_obj_list ',' TABLE PublicationExceptObjSpec
+ { $$ = lappend($1, $4); }
| pub_except_obj_list ',' PublicationExceptObjSpec
{ $$ = lappend($1, $3); }
;
@@ -20776,43 +20766,6 @@ preprocess_pubobj_list(List *pubobjspec_list, core_yyscan_t yyscanner)
}
}
-/*
- * Similar to preprocess_pubobj_list(), but used for the EXCEPT clause.
- */
-static void
-preprocess_except_pubobj_list(List *pubexceptobjspec_list,
- core_yyscan_t yyscanner)
-{
- ListCell *cell;
- PublicationObjSpec *pubobj;
- PublicationObjSpecType prevobjtype = PUBLICATIONOBJ_CONTINUATION;
-
- if (!pubexceptobjspec_list)
- return;
-
- pubobj = (PublicationObjSpec *) linitial(pubexceptobjspec_list);
-
- Assert(pubobj->pubobjtype == PUBLICATIONOBJ_EXCEPT_TABLE ||
- pubobj->pubobjtype == PUBLICATIONOBJ_CONTINUATION);
-
- if (pubobj->pubobjtype == PUBLICATIONOBJ_CONTINUATION)
- ereport(ERROR,
- errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("invalid publication object list"),
- errdetail("TABLE must be specified before a standalone table."),
- parser_errposition(pubobj->location));
-
- foreach(cell, pubexceptobjspec_list)
- {
- pubobj = (PublicationObjSpec *) lfirst(cell);
-
- if (pubobj->pubobjtype == PUBLICATIONOBJ_CONTINUATION)
- pubobj->pubobjtype = prevobjtype;
-
- prevobjtype = pubobj->pubobjtype;
- }
-}
-
/*----------
* Recursive view transformation
*
--
2.53.0.windows.2