Skip to content

Commit 39d8c44

Browse files
authored
refactor: re-generate hint file after alter table operations (#17511)
* refator: re-generate hint file after alter table operations * tweak stateless test
1 parent 8204cff commit 39d8c44

File tree

7 files changed

+66
-33
lines changed

7 files changed

+66
-33
lines changed

src/query/service/src/interpreters/interpreter_table_modify_column.rs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ use databend_storages_common_table_meta::meta::SnapshotId;
5757
use databend_storages_common_table_meta::table::OPT_KEY_BLOOM_INDEX_COLUMNS;
5858

5959
use crate::interpreters::common::check_referenced_computed_columns;
60+
use crate::interpreters::interpreter_table_add_column::commit_table_meta;
6061
use crate::interpreters::Interpreter;
6162
use crate::pipelines::PipelineBuildResult;
6263
use crate::schedulers::build_query_pipeline_without_render_result_set;
@@ -276,18 +277,14 @@ impl ModifyTableColumnInterpreter {
276277

277278
// if don't need rebuild table, only update table meta.
278279
if modified_field_indices.is_empty() {
279-
let table_id = table_info.ident.table_id;
280-
let table_version = table_info.ident.seq;
281-
282-
let req = UpdateTableMetaReq {
283-
table_id,
284-
seq: MatchSeq::Exact(table_version),
285-
new_table_meta: table_info.meta,
286-
};
287-
288-
let _resp = catalog
289-
.update_single_table_meta(req, table.get_table_info())
290-
.await?;
280+
commit_table_meta(
281+
&self.ctx,
282+
table.as_ref(),
283+
&table_info,
284+
table_info.meta.clone(),
285+
catalog,
286+
)
287+
.await?;
291288

292289
return Ok(PipelineBuildResult::create());
293290
}

src/query/service/src/interpreters/interpreter_table_modify_comment.rs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@ use databend_common_catalog::table::TableExt;
1818
use databend_common_exception::ErrorCode;
1919
use databend_common_exception::Result;
2020
use databend_common_meta_app::schema::DatabaseType;
21-
use databend_common_meta_app::schema::UpdateTableMetaReq;
22-
use databend_common_meta_types::MatchSeq;
2321
use databend_common_sql::plans::ModifyTableCommentPlan;
2422
use databend_common_storages_stream::stream_table::STREAM_ENGINE;
2523
use databend_common_storages_view::view_table::VIEW_ENGINE;
2624

25+
use crate::interpreters::interpreter_table_add_column::commit_table_meta;
2726
use crate::interpreters::Interpreter;
2827
use crate::pipelines::PipelineBuildResult;
2928
use crate::sessions::QueryContext;
@@ -83,18 +82,17 @@ impl Interpreter for ModifyTableCommentInterpreter {
8382
}
8483

8584
let catalog = self.ctx.get_catalog(self.plan.catalog.as_str()).await?;
86-
let table_id = table_info.ident.table_id;
87-
let table_version = table_info.ident.seq;
8885
let mut new_table_meta = table_info.meta.clone();
8986
new_table_meta.comment = self.plan.new_comment.clone();
9087

91-
let req = UpdateTableMetaReq {
92-
table_id,
93-
seq: MatchSeq::Exact(table_version),
88+
commit_table_meta(
89+
&self.ctx,
90+
table.as_ref(),
91+
table_info,
9492
new_table_meta,
95-
};
96-
97-
catalog.update_single_table_meta(req, table_info).await?;
93+
catalog,
94+
)
95+
.await?;
9896
};
9997

10098
Ok(PipelineBuildResult::create())

src/query/service/src/interpreters/interpreter_table_rename_column.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,14 @@ use databend_common_exception::ErrorCode;
1919
use databend_common_exception::Result;
2020
use databend_common_expression::DataSchema;
2121
use databend_common_meta_app::schema::DatabaseType;
22-
use databend_common_meta_app::schema::UpdateTableMetaReq;
23-
use databend_common_meta_types::MatchSeq;
2422
use databend_common_sql::plans::RenameTableColumnPlan;
2523
use databend_common_sql::BloomIndexColumns;
2624
use databend_common_storages_stream::stream_table::STREAM_ENGINE;
2725
use databend_common_storages_view::view_table::VIEW_ENGINE;
2826
use databend_storages_common_table_meta::table::OPT_KEY_BLOOM_INDEX_COLUMNS;
2927

3028
use crate::interpreters::common::check_referenced_computed_columns;
29+
use crate::interpreters::interpreter_table_add_column::commit_table_meta;
3130
use crate::interpreters::interpreter_table_create::is_valid_column;
3231
use crate::interpreters::Interpreter;
3332
use crate::pipelines::PipelineBuildResult;
@@ -120,16 +119,14 @@ impl Interpreter for RenameTableColumnInterpreter {
120119
}
121120
}
122121

123-
let table_id = table_info.ident.table_id;
124-
let table_version = table_info.ident.seq;
125-
126-
let req = UpdateTableMetaReq {
127-
table_id,
128-
seq: MatchSeq::Exact(table_version),
122+
commit_table_meta(
123+
&self.ctx,
124+
table.as_ref(),
125+
table_info,
129126
new_table_meta,
130-
};
131-
132-
let _resp = catalog.update_single_table_meta(req, table_info).await?;
127+
catalog,
128+
)
129+
.await?;
133130
};
134131

135132
Ok(PipelineBuildResult::create())

tests/suites/5_ee/04_attach_read_only/02_0004_attach_table.result

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,14 @@ Error: APIError: QueryFailed: [2004]Columns [c_not_exist] do not exist in the ta
6666
#############################
6767
>>>> drop table if exists attach_tbl
6868
>>>> alter table base RENAME COLUMN c2 to c2_new
69+
'ATTACH' after 'ALTER TABLE RENAME COLUMN' should see the new name of column
70+
>>>> drop table if exists attach_tbl2
71+
>>>> desc attach_tbl2
72+
c1 VARCHAR YES NULL
73+
c2_new VARCHAR YES NULL
74+
c3 VARCHAR YES NULL
75+
c4 VARCHAR YES NULL
76+
<<<<
6977
>>>> insert into base values('c1', 'c2_new', 'c3', 'c4')
7078
1
7179
select all should work

tests/suites/5_ee/04_attach_read_only/02_0004_attach_table.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@ stmt "drop table if exists attach_tbl"
9191
echo "attach table attach_tbl (c2, c4) 's3://testbucket/admin/data/$base_storage_prefix' connection=(connection_name ='my_conn')" | $BENDSQL_CLIENT_CONNECT
9292

9393
stmt "alter table base RENAME COLUMN c2 to c2_new"
94+
95+
echo "'ATTACH' after 'ALTER TABLE RENAME COLUMN' should see the new name of column"
96+
stmt "drop table if exists attach_tbl2"
97+
echo "attach table attach_tbl2 's3://testbucket/admin/data/$base_storage_prefix' connection=(connection_name ='my_conn')" | $BENDSQL_CLIENT_CONNECT
98+
query "desc attach_tbl2"
99+
94100
stmt "insert into base values('c1', 'c2_new', 'c3', 'c4')"
95101

96102
echo "select all should work"

tests/suites/5_ee/04_attach_read_only/04_0007_attach_table_entity_comment.result

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,12 @@ tbl comment
55
check column comment
66
c1 c1 comment
77
c2 c2 comment
8+
>>>> alter table comment_base rename column c1 to c1_new
9+
c1_new c1 comment
10+
c2 c2 comment
11+
>>>> alter table comment_base comment = 'new tbl comment'
12+
>>>> select comment from system.tables where name = 'att_comment'
13+
new tbl comment
14+
>>>> ALTER TABLE comment_base MODIFY COLUMN c1_new int comment 'new comment of c1_new'
15+
c1_new new comment of c1_new
16+
c2 c2 comment

tests/suites/5_ee/04_attach_read_only/04_0007_attach_table_entity_comment.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,23 @@ echo "check column comment"
2525
echo "select name, comment from system.columns where table = 'att_comment' order by name" | $BENDSQL_CLIENT_CONNECT
2626

2727

28+
# alter table rename column should generate new hint file
29+
stmt "alter table comment_base rename column c1 to c1_new"
30+
echo "drop table if exists att_comment" | $BENDSQL_CLIENT_CONNECT
31+
echo "attach table att_comment 's3://testbucket/admin/$storage_prefix' connection=(access_key_id ='minioadmin' secret_access_key ='minioadmin' endpoint_url='${STORAGE_S3_ENDPOINT_URL}');" | $BENDSQL_CLIENT_CONNECT
32+
echo "select name, comment from system.columns where table = 'att_comment' order by name" | $BENDSQL_CLIENT_CONNECT
33+
34+
# alter table rename comment should generate new hint file
35+
stmt "alter table comment_base comment = 'new tbl comment'"
36+
echo "drop table if exists att_comment" | $BENDSQL_CLIENT_CONNECT
37+
echo "attach table att_comment 's3://testbucket/admin/$storage_prefix' connection=(access_key_id ='minioadmin' secret_access_key ='minioadmin' endpoint_url='${STORAGE_S3_ENDPOINT_URL}');" | $BENDSQL_CLIENT_CONNECT
38+
stmt "select comment from system.tables where name = 'att_comment'"
39+
40+
# alter table modify column comment should generate new hint file
41+
stmt "ALTER TABLE comment_base MODIFY COLUMN c1_new int comment 'new comment of c1_new'"
42+
echo "drop table if exists att_comment" | $BENDSQL_CLIENT_CONNECT
43+
echo "attach table att_comment 's3://testbucket/admin/$storage_prefix' connection=(access_key_id ='minioadmin' secret_access_key ='minioadmin' endpoint_url='${STORAGE_S3_ENDPOINT_URL}');" | $BENDSQL_CLIENT_CONNECT
44+
echo "select name, comment from system.columns where table = 'att_comment' order by name" | $BENDSQL_CLIENT_CONNECT
45+
2846
echo "drop table if exists comment_base" | $BENDSQL_CLIENT_CONNECT
2947
echo "drop table if exists att_comment" | $BENDSQL_CLIENT_CONNECT

0 commit comments

Comments
 (0)