v44-0005-Skip-ALTER-TABLE-subcommands-generated-for-Table.patch

text/x-patch

Filename: v44-0005-Skip-ALTER-TABLE-subcommands-generated-for-Table.patch
Type: text/x-patch
Part: 3
Message: Re: Support logical replication of DDLs

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: format-patch
Series: patch v44-0005
Subject: Skip ALTER TABLE subcommands generated for TableLikeClause in the DDL deparser to avoid duplicated subcommands.
File+
src/backend/commands/ddl_deparse.c 10 0
src/backend/parser/parse_utilcmd.c 1 0
src/include/nodes/parsenodes.h 1 0
From d68d5bca39a2a18e9c2cf5c5eb93889af872e086 Mon Sep 17 00:00:00 2001
From: "Zheng (Zane) Li" <zhelli@amazon.com>
Date: Fri, 2 Dec 2022 02:15:08 +0000
Subject: [PATCH v44 5/6] Skip ALTER TABLE subcommands generated for
 TableLikeClause in the DDL deparser to avoid duplicated subcommands.

---
 src/backend/commands/ddl_deparse.c | 10 ++++++++++
 src/backend/parser/parse_utilcmd.c |  1 +
 src/include/nodes/parsenodes.h     |  1 +
 3 files changed, 12 insertions(+)

diff --git a/src/backend/commands/ddl_deparse.c b/src/backend/commands/ddl_deparse.c
index 74630a4518..0c6c7d90d9 100755
--- a/src/backend/commands/ddl_deparse.c
+++ b/src/backend/commands/ddl_deparse.c
@@ -3387,8 +3387,18 @@ deparse_AlterRelation(CollectedCommand *cmd)
 	bool		istable = false;
 	List	   *exprs = NIL;
 	Oid			relId = cmd->d.alterTable.objectId;
+	AlterTableStmt *stmt = NULL;
 
 	Assert(cmd->type == SCT_AlterTable);
+	stmt = (AlterTableStmt *) cmd->parsetree;
+	Assert(IsA(stmt, AlterTableStmt));
+
+	/*
+	 * ALTER TABLE subcommands generated for TableLikeClause is processed in
+	 * the top level CREATE TABLE command; return empty here.
+	 */
+	if (stmt->table_like)
+		return NULL;
 
 	rel = relation_open(relId, AccessShareLock);
 	dpcontext = deparse_context_for(RelationGetRelationName(rel),
diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c
index 342a179133..ec54cb5bad 100644
--- a/src/backend/parser/parse_utilcmd.c
+++ b/src/backend/parser/parse_utilcmd.c
@@ -1397,6 +1397,7 @@ expandTableLikeClause(RangeVar *heapRel, TableLikeClause *table_like_clause)
 		atcmd->cmds = atsubcmds;
 		atcmd->objtype = OBJECT_TABLE;
 		atcmd->missing_ok = false;
+		atcmd->table_like = true;
 		result = lcons(atcmd, result);
 	}
 
diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h
index 6a6d3293e4..87609a15e5 100644
--- a/src/include/nodes/parsenodes.h
+++ b/src/include/nodes/parsenodes.h
@@ -1974,6 +1974,7 @@ typedef struct AlterTableStmt
 	List	   *cmds;			/* list of subcommands */
 	ObjectType	objtype;		/* type of object */
 	bool		missing_ok;		/* skip error if table missing */
+	bool        table_like;		/* internally generated for TableLikeClause */
 } AlterTableStmt;
 
 typedef enum AlterTableType
-- 
2.34.1