feat: support ALTER TABLE ... MODIFY COLUMN ... ... (#3796)

* feat: support `ALTER COLUMN xxx TYPE xxx`

* fix: test `test_parse_alter_change_column_type`

* style: code fmt

* style: move to new test: `test_make_alter_column_type_region_request`

* style: simplify the code

* style: remove `v1::region::ChangeColumnType`

* resolve conflicts

* fix: test `test_make_alter_column_type_region_request`

* style: simplify the code

* rebase

* rebase

* rebase

* fix: `ALTER COLUMN ... TYPE` -> `MODIFY COLUMN`

* fix: `parser` -> `self.parser`

* Apply suggestions from code review

---------

Co-authored-by: Ruihang Xia <waynestxia@gmail.com>
Co-authored-by: WenyXu <wenymedia@gmail.com>
This commit is contained in:
Kould
2024-04-30 11:13:33 +08:00
committed by GitHub
parent 371d4cf9f5
commit aba5e41799
10 changed files with 492 additions and 39 deletions

View File

@@ -13,8 +13,9 @@
// limitations under the License.
use std::collections::HashMap;
use std::fmt::{self};
use std::fmt;
use api::helper::ColumnDataTypeWrapper;
use api::v1::add_column_location::LocationType;
use api::v1::region::{
alter_request, region_request, AlterRequest, AlterRequests, CloseRequest, CompactRequest,
@@ -457,13 +458,18 @@ impl TryFrom<alter_request::Kind> for AlterKind {
.collect::<Result<Vec<_>>>()?;
AlterKind::AddColumns { columns }
}
alter_request::Kind::ChangeColumnTypes(x) => {
let columns = x
.change_column_types
.into_iter()
.map(|x| x.into())
.collect::<Vec<_>>();
AlterKind::ChangeColumnTypes { columns }
}
alter_request::Kind::DropColumns(x) => {
let names = x.drop_columns.into_iter().map(|x| x.name).collect();
AlterKind::DropColumns { names }
}
alter_request::Kind::ChangeColumnTypes(_) => {
unimplemented!()
}
};
Ok(alter_kind)
@@ -615,6 +621,21 @@ impl ChangeColumnType {
}
}
impl From<v1::ChangeColumnType> for ChangeColumnType {
fn from(change_column_type: v1::ChangeColumnType) -> Self {
let target_type = ColumnDataTypeWrapper::new(
change_column_type.target_type(),
change_column_type.target_type_extension,
)
.into();
ChangeColumnType {
column_name: change_column_type.column_name,
target_type,
}
}
}
#[derive(Debug, Default)]
pub struct RegionFlushRequest {
pub row_group_size: Option<usize>,