From ef01f576fe79df631365cf2d3251cee407e864f0 Mon Sep 17 00:00:00 2001 From: lukeman Date: Fri, 16 Aug 2024 10:54:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86issue=EF=BC=9A=E3=80=90pg?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=80=A7=E3=80=91=E7=BB=99=E8=A1=A8=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E8=A7=86=E5=9B=BE=EF=BC=8C=E5=B9=B6=E7=BB=99=E8=A1=A8?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=80=E5=88=97=EF=BC=8C=E5=AF=B9=E8=A1=A8?= =?UTF-8?q?=E5=A4=87=E4=BB=BD=E5=90=8E=E7=94=A8gs=5Frestore=E6=81=A2?= =?UTF-8?q?=E5=A4=8D=E6=97=B6=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/optimizer/commands/tablecmds.cpp | 15 +++++++++++++++ src/test/regress/expected/alter_table_modify.out | 12 ++++++------ .../expected/alter_table_modify_ustore.out | 12 ++++++------ 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/gausskernel/optimizer/commands/tablecmds.cpp b/src/gausskernel/optimizer/commands/tablecmds.cpp index e6a6e524f..80d654d11 100755 --- a/src/gausskernel/optimizer/commands/tablecmds.cpp +++ b/src/gausskernel/optimizer/commands/tablecmds.cpp @@ -13280,6 +13280,8 @@ static ObjectAddress ATExecAddColumn(List** wqueue, AlteredTableInfo* tab, Relat query_str = CheckPgRewriteFirstAfter(rel); tab->rewrite |= AT_REWRITE_ALTER_PERSISTENCE; tab->is_first_after = true; + } else if (rel->rd_rel->relkind == RELKIND_RELATION) { + query_str = CheckPgRewriteFirstAfter(rel); } InsertPgAttributeTuple(attrdesc, &attribute, NULL); @@ -13322,6 +13324,19 @@ static ObjectAddress ATExecAddColumn(List** wqueue, AlteredTableInfo* tab, Relat /* create or replace view */ ReplaceViewQueryFirstAfter(query_str); + } else if (rel->rd_rel->relkind == RELKIND_RELATION && query_str != NIL) { + ListCell* viewinfo = NULL; + bool isViewValid = true; + foreach (viewinfo, query_str) { + ViewInfoForAdd *info = (ViewInfoForAdd *)lfirst(viewinfo); + isViewValid &= GetPgObjectValid(info->ev_class, OBJECT_TYPE_VIEW); + if (!isViewValid) { + break; + } + } + if (isViewValid) { + ReplaceViewQueryFirstAfter(query_str); + } } /* diff --git a/src/test/regress/expected/alter_table_modify.out b/src/test/regress/expected/alter_table_modify.out index 14c207430..c44c02b91 100644 --- a/src/test/regress/expected/alter_table_modify.out +++ b/src/test/regress/expected/alter_table_modify.out @@ -3183,9 +3183,9 @@ ALTER TABLE test_at_modify_view_column MODIFY column f1 varchar(20), ADD COLUMN ERROR: cannot change data type of view column "f1" from integer to character varying(20) ALTER TABLE test_at_modify_view_column MODIFY column f1 int, ADD COLUMN f0 int; SELECT pg_get_viewdef('test_modify_view_star'::regclass); - pg_get_viewdef --------------------------------------------- - SELECT * FROM test_at_modify_view_column; + pg_get_viewdef +-------------------------------------------------------------------------------------------------------------------------------------------------------------------- + SELECT test_at_modify_view_column.f4, test_at_modify_view_column.f3, test_at_modify_view_column.f2, test_at_modify_view_column.f1 FROM test_at_modify_view_column; (1 row) SELECT * FROM test_modify_view_star; @@ -3388,9 +3388,9 @@ ALTER TABLE test_at_modify_view_column CHANGE column f1 c1 varchar(20), ADD COL ERROR: cannot change data type of view column "f1" from integer to character varying(20) ALTER TABLE test_at_modify_view_column CHANGE column f1 c1 int, ADD COLUMN f0 int; SELECT pg_get_viewdef('test_modify_view_star'::regclass); - pg_get_viewdef --------------------------------------------- - SELECT * FROM test_at_modify_view_column; + pg_get_viewdef +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + SELECT test_at_modify_view_column.f4, test_at_modify_view_column.f3, test_at_modify_view_column.f2, test_at_modify_view_column.c1 AS f1 FROM test_at_modify_view_column; (1 row) SELECT * FROM test_modify_view_star; diff --git a/src/test/regress/expected/alter_table_modify_ustore.out b/src/test/regress/expected/alter_table_modify_ustore.out index 77f21f37a..a228d781b 100644 --- a/src/test/regress/expected/alter_table_modify_ustore.out +++ b/src/test/regress/expected/alter_table_modify_ustore.out @@ -2787,9 +2787,9 @@ ALTER TABLE test_at_modify_view_column MODIFY column f1 varchar(20), ADD COLUMN ERROR: cannot change data type of view column "f1" from integer to character varying(20) ALTER TABLE test_at_modify_view_column MODIFY column f1 int, ADD COLUMN f0 int; SELECT pg_get_viewdef('test_modify_view_star'::regclass); - pg_get_viewdef --------------------------------------------- - SELECT * FROM test_at_modify_view_column; + pg_get_viewdef +-------------------------------------------------------------------------------------------------------------------------------------------------------------------- + SELECT test_at_modify_view_column.f4, test_at_modify_view_column.f3, test_at_modify_view_column.f2, test_at_modify_view_column.f1 FROM test_at_modify_view_column; (1 row) SELECT * FROM test_modify_view_star; @@ -2992,9 +2992,9 @@ ALTER TABLE test_at_modify_view_column CHANGE column f1 c1 varchar(20), ADD COL ERROR: cannot change data type of view column "f1" from integer to character varying(20) ALTER TABLE test_at_modify_view_column CHANGE column f1 c1 int, ADD COLUMN f0 int; SELECT pg_get_viewdef('test_modify_view_star'::regclass); - pg_get_viewdef --------------------------------------------- - SELECT * FROM test_at_modify_view_column; + pg_get_viewdef +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + SELECT test_at_modify_view_column.f4, test_at_modify_view_column.f3, test_at_modify_view_column.f2, test_at_modify_view_column.c1 AS f1 FROM test_at_modify_view_column; (1 row) SELECT * FROM test_modify_view_star;