From e28639c2a9a547b84e9896692094e02d196fd76b Mon Sep 17 00:00:00 2001 From: chenxiaobin19 <1025221611@qq.com> Date: Sat, 16 Sep 2023 16:38:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0alter=20table=20rename=20new?= =?UTF-8?q?=5Ftbl=E8=AF=AD=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contrib/dolphin/expected/test_alter_table.out | 7 +++ contrib/dolphin/plugin_parser/gram.y | 46 ++++++++++++++++++- contrib/dolphin/sql/test_alter_table.sql | 7 +++ 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/contrib/dolphin/expected/test_alter_table.out b/contrib/dolphin/expected/test_alter_table.out index 105c24c91..3676e962f 100644 --- a/contrib/dolphin/expected/test_alter_table.out +++ b/contrib/dolphin/expected/test_alter_table.out @@ -22,6 +22,13 @@ alter table alter_table_tbl1 force; -- rename index/key old_index_name to new_index_name create index alter_table_tbl_b_ind on alter_table_tbl1(b); alter table alter_table_tbl1 rename index alter_table_tbl_b_ind to new_alter_table_tbl_b_ind; +-- rename [ TO | AS ] new_table_name +alter table alter_table_tbl1 rename to new_alter_table_tbl1; +alter table new_alter_table_tbl1 rename as new_new_alter_table_tbl1; +alter table new_new_alter_table_tbl1 rename new_new_new_alter_table_tbl1; +alter table if exists new_new_new_alter_table_tbl1 rename alter_table_tbl1; +alter table if exists not_exists_tbl rename new_not_exists_tbl; +NOTICE: relation "not_exists_tbl" does not exist, skipping -- test multi-cmd alter table alter_table_tbl1 add column key int, rename index new_alter_table_tbl_b_ind to alter_table_tbl_b_ind; alter table alter_table_tbl1 drop column key, drop key alter_table_tbl_b_ind; diff --git a/contrib/dolphin/plugin_parser/gram.y b/contrib/dolphin/plugin_parser/gram.y index f48ae9399..a34d7b508 100644 --- a/contrib/dolphin/plugin_parser/gram.y +++ b/contrib/dolphin/plugin_parser/gram.y @@ -22840,6 +22840,16 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name n->missing_ok = true; $$ = (Node *)n; } + | ALTER TABLE relation_expr RENAME DolphinColId + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_TABLE; + n->relation = $3; + n->subname = NULL; + n->newname = GetDolphinObjName($5->str, $5->is_quoted); + n->missing_ok = false; + $$ = (Node *)n; + } | ALTER TABLE relation_expr RENAME to_or_as DolphinColId { RenameStmt *n = makeNode(RenameStmt); @@ -22850,6 +22860,16 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name n->missing_ok = false; $$ = (Node *)n; } + | ALTER TABLE IF_P EXISTS relation_expr RENAME DolphinColId + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_TABLE; + n->relation = $5; + n->subname = NULL; + n->newname = GetDolphinObjName($7->str, $7->is_quoted); + n->missing_ok = true; + $$ = (Node *)n; + } | ALTER TABLE IF_P EXISTS relation_expr RENAME to_or_as DolphinColId { RenameStmt *n = makeNode(RenameStmt); @@ -23109,7 +23129,18 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name n->missing_ok = true; $$ = (Node *)n; } - | ALTER TABLE relation_expr RENAME opt_column name TO name + | ALTER TABLE relation_expr RENAME name TO name + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_COLUMN; + n->relationType = OBJECT_TABLE; + n->relation = $3; + n->subname = $5; + n->newname = $7; + n->missing_ok = false; + $$ = (Node *)n; + } + | ALTER TABLE relation_expr RENAME COLUMN name TO name { RenameStmt *n = makeNode(RenameStmt); n->renameType = OBJECT_COLUMN; @@ -23120,7 +23151,18 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name n->missing_ok = false; $$ = (Node *)n; } - | ALTER TABLE IF_P EXISTS relation_expr RENAME opt_column name TO name + | ALTER TABLE IF_P EXISTS relation_expr RENAME name TO name + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_COLUMN; + n->relationType = OBJECT_TABLE; + n->relation = $5; + n->subname = $7; + n->newname = $9; + n->missing_ok = true; + $$ = (Node *)n; + } + | ALTER TABLE IF_P EXISTS relation_expr RENAME COLUMN name TO name { RenameStmt *n = makeNode(RenameStmt); n->renameType = OBJECT_COLUMN; diff --git a/contrib/dolphin/sql/test_alter_table.sql b/contrib/dolphin/sql/test_alter_table.sql index b989c584e..6e9321e70 100644 --- a/contrib/dolphin/sql/test_alter_table.sql +++ b/contrib/dolphin/sql/test_alter_table.sql @@ -30,6 +30,13 @@ alter table alter_table_tbl1 force; create index alter_table_tbl_b_ind on alter_table_tbl1(b); alter table alter_table_tbl1 rename index alter_table_tbl_b_ind to new_alter_table_tbl_b_ind; +-- rename [ TO | AS ] new_table_name +alter table alter_table_tbl1 rename to new_alter_table_tbl1; +alter table new_alter_table_tbl1 rename as new_new_alter_table_tbl1; +alter table new_new_alter_table_tbl1 rename new_new_new_alter_table_tbl1; +alter table if exists new_new_new_alter_table_tbl1 rename alter_table_tbl1; +alter table if exists not_exists_tbl rename new_not_exists_tbl; + -- test multi-cmd alter table alter_table_tbl1 add column key int, rename index new_alter_table_tbl_b_ind to alter_table_tbl_b_ind; alter table alter_table_tbl1 drop column key, drop key alter_table_tbl_b_ind; -- Gitee