mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2025-12-25 15:40:02 +00:00
chore: rename change to modify (#5000)
* chore: rename change to modify * chore: proto rev
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -4595,7 +4595,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "greptime-proto"
|
name = "greptime-proto"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/GreptimeTeam/greptime-proto.git?rev=e1070ad3e7ad3d89f8dd1e20756b0c0cc26f3365#e1070ad3e7ad3d89f8dd1e20756b0c0cc26f3365"
|
source = "git+https://github.com/GreptimeTeam/greptime-proto.git?rev=fb4e2146b1ea8816148304f1f258e7a73736a905#fb4e2146b1ea8816148304f1f258e7a73736a905"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"prost 0.12.6",
|
"prost 0.12.6",
|
||||||
"serde",
|
"serde",
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ etcd-client = "0.13"
|
|||||||
fst = "0.4.7"
|
fst = "0.4.7"
|
||||||
futures = "0.3"
|
futures = "0.3"
|
||||||
futures-util = "0.3"
|
futures-util = "0.3"
|
||||||
greptime-proto = { git = "https://github.com/GreptimeTeam/greptime-proto.git", rev = "e1070ad3e7ad3d89f8dd1e20756b0c0cc26f3365" }
|
greptime-proto = { git = "https://github.com/GreptimeTeam/greptime-proto.git", rev = "fb4e2146b1ea8816148304f1f258e7a73736a905" }
|
||||||
hex = "0.4"
|
hex = "0.4"
|
||||||
humantime = "2.1"
|
humantime = "2.1"
|
||||||
humantime-serde = "1.1"
|
humantime-serde = "1.1"
|
||||||
|
|||||||
@@ -17,15 +17,15 @@ use api::v1::add_column_location::LocationType;
|
|||||||
use api::v1::alter_expr::Kind;
|
use api::v1::alter_expr::Kind;
|
||||||
use api::v1::column_def::as_fulltext_option;
|
use api::v1::column_def::as_fulltext_option;
|
||||||
use api::v1::{
|
use api::v1::{
|
||||||
column_def, AddColumnLocation as Location, AlterExpr, Analyzer, ChangeColumnTypes,
|
column_def, AddColumnLocation as Location, AlterExpr, Analyzer, CreateTableExpr, DropColumns,
|
||||||
CreateTableExpr, DropColumns, RenameTable, SemanticType,
|
ModifyColumnTypes, RenameTable, SemanticType,
|
||||||
};
|
};
|
||||||
use common_query::AddColumnLocation;
|
use common_query::AddColumnLocation;
|
||||||
use datatypes::schema::{ColumnSchema, FulltextOptions, RawSchema};
|
use datatypes::schema::{ColumnSchema, FulltextOptions, RawSchema};
|
||||||
use snafu::{ensure, OptionExt, ResultExt};
|
use snafu::{ensure, OptionExt, ResultExt};
|
||||||
use store_api::region_request::ChangeOption;
|
use store_api::region_request::ChangeOption;
|
||||||
use table::metadata::TableId;
|
use table::metadata::TableId;
|
||||||
use table::requests::{AddColumnRequest, AlterKind, AlterTableRequest, ChangeColumnTypeRequest};
|
use table::requests::{AddColumnRequest, AlterKind, AlterTableRequest, ModifyColumnTypeRequest};
|
||||||
|
|
||||||
use crate::error::{
|
use crate::error::{
|
||||||
InvalidChangeFulltextOptionRequestSnafu, InvalidChangeTableOptionRequestSnafu,
|
InvalidChangeFulltextOptionRequestSnafu, InvalidChangeTableOptionRequestSnafu,
|
||||||
@@ -68,25 +68,25 @@ pub fn alter_expr_to_request(table_id: TableId, expr: AlterExpr) -> Result<Alter
|
|||||||
columns: add_column_requests,
|
columns: add_column_requests,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Kind::ChangeColumnTypes(ChangeColumnTypes {
|
Kind::ModifyColumnTypes(ModifyColumnTypes {
|
||||||
change_column_types,
|
modify_column_types,
|
||||||
}) => {
|
}) => {
|
||||||
let change_column_type_requests = change_column_types
|
let modify_column_type_requests = modify_column_types
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|cct| {
|
.map(|cct| {
|
||||||
let target_type =
|
let target_type =
|
||||||
ColumnDataTypeWrapper::new(cct.target_type(), cct.target_type_extension)
|
ColumnDataTypeWrapper::new(cct.target_type(), cct.target_type_extension)
|
||||||
.into();
|
.into();
|
||||||
|
|
||||||
Ok(ChangeColumnTypeRequest {
|
Ok(ModifyColumnTypeRequest {
|
||||||
column_name: cct.column_name,
|
column_name: cct.column_name,
|
||||||
target_type,
|
target_type,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.collect::<Result<Vec<_>>>()?;
|
.collect::<Result<Vec<_>>>()?;
|
||||||
|
|
||||||
AlterKind::ChangeColumnTypes {
|
AlterKind::ModifyColumnTypes {
|
||||||
columns: change_column_type_requests,
|
columns: modify_column_type_requests,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Kind::DropColumns(DropColumns { drop_columns }) => AlterKind::DropColumns {
|
Kind::DropColumns(DropColumns { drop_columns }) => AlterKind::DropColumns {
|
||||||
@@ -183,7 +183,7 @@ fn parse_location(location: Option<Location>) -> Result<Option<AddColumnLocation
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use api::v1::{
|
use api::v1::{
|
||||||
AddColumn, AddColumns, ChangeColumnType, ColumnDataType, ColumnDef, DropColumn,
|
AddColumn, AddColumns, ColumnDataType, ColumnDef, DropColumn, ModifyColumnType,
|
||||||
SemanticType,
|
SemanticType,
|
||||||
};
|
};
|
||||||
use datatypes::prelude::ConcreteDataType;
|
use datatypes::prelude::ConcreteDataType;
|
||||||
@@ -309,14 +309,14 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_change_column_type_expr() {
|
fn test_modify_column_type_expr() {
|
||||||
let expr = AlterExpr {
|
let expr = AlterExpr {
|
||||||
catalog_name: "test_catalog".to_string(),
|
catalog_name: "test_catalog".to_string(),
|
||||||
schema_name: "test_schema".to_string(),
|
schema_name: "test_schema".to_string(),
|
||||||
table_name: "monitor".to_string(),
|
table_name: "monitor".to_string(),
|
||||||
|
|
||||||
kind: Some(Kind::ChangeColumnTypes(ChangeColumnTypes {
|
kind: Some(Kind::ModifyColumnTypes(ModifyColumnTypes {
|
||||||
change_column_types: vec![ChangeColumnType {
|
modify_column_types: vec![ModifyColumnType {
|
||||||
column_name: "mem_usage".to_string(),
|
column_name: "mem_usage".to_string(),
|
||||||
target_type: ColumnDataType::String as i32,
|
target_type: ColumnDataType::String as i32,
|
||||||
target_type_extension: None,
|
target_type_extension: None,
|
||||||
@@ -329,16 +329,16 @@ mod tests {
|
|||||||
assert_eq!(alter_request.schema_name, "test_schema");
|
assert_eq!(alter_request.schema_name, "test_schema");
|
||||||
assert_eq!("monitor".to_string(), alter_request.table_name);
|
assert_eq!("monitor".to_string(), alter_request.table_name);
|
||||||
|
|
||||||
let mut change_column_types = match alter_request.alter_kind {
|
let mut modify_column_types = match alter_request.alter_kind {
|
||||||
AlterKind::ChangeColumnTypes { columns } => columns,
|
AlterKind::ModifyColumnTypes { columns } => columns,
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let change_column_type = change_column_types.pop().unwrap();
|
let modify_column_type = modify_column_types.pop().unwrap();
|
||||||
assert_eq!("mem_usage", change_column_type.column_name);
|
assert_eq!("mem_usage", modify_column_type.column_name);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
ConcreteDataType::string_datatype(),
|
ConcreteDataType::string_datatype(),
|
||||||
change_column_type.target_type
|
modify_column_type.target_type
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ fn create_proto_alter_kind(
|
|||||||
add_columns,
|
add_columns,
|
||||||
})))
|
})))
|
||||||
}
|
}
|
||||||
Kind::ChangeColumnTypes(x) => Ok(Some(alter_request::Kind::ChangeColumnTypes(x.clone()))),
|
Kind::ModifyColumnTypes(x) => Ok(Some(alter_request::Kind::ModifyColumnTypes(x.clone()))),
|
||||||
Kind::DropColumns(x) => {
|
Kind::DropColumns(x) => {
|
||||||
let drop_columns = x
|
let drop_columns = x
|
||||||
.drop_columns
|
.drop_columns
|
||||||
@@ -123,8 +123,8 @@ mod tests {
|
|||||||
use api::v1::region::region_request::Body;
|
use api::v1::region::region_request::Body;
|
||||||
use api::v1::region::RegionColumnDef;
|
use api::v1::region::RegionColumnDef;
|
||||||
use api::v1::{
|
use api::v1::{
|
||||||
region, AddColumn, AddColumnLocation, AddColumns, AlterExpr, ChangeColumnType,
|
region, AddColumn, AddColumnLocation, AddColumns, AlterExpr, ColumnDataType,
|
||||||
ChangeColumnTypes, ColumnDataType, ColumnDef as PbColumnDef, SemanticType,
|
ColumnDef as PbColumnDef, ModifyColumnType, ModifyColumnTypes, SemanticType,
|
||||||
};
|
};
|
||||||
use common_catalog::consts::{DEFAULT_CATALOG_NAME, DEFAULT_SCHEMA_NAME};
|
use common_catalog::consts::{DEFAULT_CATALOG_NAME, DEFAULT_SCHEMA_NAME};
|
||||||
use store_api::storage::{RegionId, TableId};
|
use store_api::storage::{RegionId, TableId};
|
||||||
@@ -284,8 +284,8 @@ mod tests {
|
|||||||
catalog_name: DEFAULT_CATALOG_NAME.to_string(),
|
catalog_name: DEFAULT_CATALOG_NAME.to_string(),
|
||||||
schema_name: DEFAULT_SCHEMA_NAME.to_string(),
|
schema_name: DEFAULT_SCHEMA_NAME.to_string(),
|
||||||
table_name,
|
table_name,
|
||||||
kind: Some(Kind::ChangeColumnTypes(ChangeColumnTypes {
|
kind: Some(Kind::ModifyColumnTypes(ModifyColumnTypes {
|
||||||
change_column_types: vec![ChangeColumnType {
|
modify_column_types: vec![ModifyColumnType {
|
||||||
column_name: "cpu".to_string(),
|
column_name: "cpu".to_string(),
|
||||||
target_type: ColumnDataType::String as i32,
|
target_type: ColumnDataType::String as i32,
|
||||||
target_type_extension: None,
|
target_type_extension: None,
|
||||||
@@ -306,9 +306,9 @@ mod tests {
|
|||||||
assert_eq!(alter_region_request.schema_version, 1);
|
assert_eq!(alter_region_request.schema_version, 1);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
alter_region_request.kind,
|
alter_region_request.kind,
|
||||||
Some(region::alter_request::Kind::ChangeColumnTypes(
|
Some(region::alter_request::Kind::ModifyColumnTypes(
|
||||||
ChangeColumnTypes {
|
ModifyColumnTypes {
|
||||||
change_column_types: vec![ChangeColumnType {
|
modify_column_types: vec![ModifyColumnType {
|
||||||
column_name: "cpu".to_string(),
|
column_name: "cpu".to_string(),
|
||||||
target_type: ColumnDataType::String as i32,
|
target_type: ColumnDataType::String as i32,
|
||||||
target_type_extension: None,
|
target_type_extension: None,
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ impl AlterTableProcedure {
|
|||||||
new_info.name = new_table_name.to_string();
|
new_info.name = new_table_name.to_string();
|
||||||
}
|
}
|
||||||
AlterKind::DropColumns { .. }
|
AlterKind::DropColumns { .. }
|
||||||
| AlterKind::ChangeColumnTypes { .. }
|
| AlterKind::ModifyColumnTypes { .. }
|
||||||
| AlterKind::ChangeTableOptions { .. }
|
| AlterKind::ChangeTableOptions { .. }
|
||||||
| AlterKind::ChangeColumnFulltext { .. } => {}
|
| AlterKind::ChangeColumnFulltext { .. } => {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ use api::helper::ColumnDataTypeWrapper;
|
|||||||
use api::v1::alter_expr::Kind;
|
use api::v1::alter_expr::Kind;
|
||||||
use api::v1::column_def::options_from_column_schema;
|
use api::v1::column_def::options_from_column_schema;
|
||||||
use api::v1::{
|
use api::v1::{
|
||||||
AddColumn, AddColumns, AlterExpr, Analyzer, ChangeColumnFulltext, ChangeColumnType,
|
AddColumn, AddColumns, AlterExpr, Analyzer, ChangeColumnFulltext, ChangeTableOptions,
|
||||||
ChangeColumnTypes, ChangeTableOptions, ColumnDataType, ColumnDataTypeExtension, CreateFlowExpr,
|
ColumnDataType, ColumnDataTypeExtension, CreateFlowExpr, CreateTableExpr, CreateViewExpr,
|
||||||
CreateTableExpr, CreateViewExpr, DropColumn, DropColumns, ExpireAfter, RenameTable,
|
DropColumn, DropColumns, ExpireAfter, ModifyColumnType, ModifyColumnTypes, RenameTable,
|
||||||
SemanticType, TableName,
|
SemanticType, TableName,
|
||||||
};
|
};
|
||||||
use common_error::ext::BoxedError;
|
use common_error::ext::BoxedError;
|
||||||
@@ -501,7 +501,7 @@ pub(crate) fn to_alter_expr(
|
|||||||
location: location.as_ref().map(From::from),
|
location: location.as_ref().map(From::from),
|
||||||
}],
|
}],
|
||||||
}),
|
}),
|
||||||
AlterTableOperation::ChangeColumnType {
|
AlterTableOperation::ModifyColumnType {
|
||||||
column_name,
|
column_name,
|
||||||
target_type,
|
target_type,
|
||||||
} => {
|
} => {
|
||||||
@@ -510,8 +510,8 @@ pub(crate) fn to_alter_expr(
|
|||||||
let (target_type, target_type_extension) = ColumnDataTypeWrapper::try_from(target_type)
|
let (target_type, target_type_extension) = ColumnDataTypeWrapper::try_from(target_type)
|
||||||
.map(|w| w.to_parts())
|
.map(|w| w.to_parts())
|
||||||
.context(ColumnDataTypeSnafu)?;
|
.context(ColumnDataTypeSnafu)?;
|
||||||
Kind::ChangeColumnTypes(ChangeColumnTypes {
|
Kind::ModifyColumnTypes(ModifyColumnTypes {
|
||||||
change_column_types: vec![ChangeColumnType {
|
modify_column_types: vec![ModifyColumnType {
|
||||||
column_name: column_name.value,
|
column_name: column_name.value,
|
||||||
target_type: target_type as i32,
|
target_type: target_type as i32,
|
||||||
target_type_extension,
|
target_type_extension,
|
||||||
@@ -803,7 +803,7 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_to_alter_change_column_type_expr() {
|
fn test_to_alter_modify_column_type_expr() {
|
||||||
let sql = "ALTER TABLE monitor MODIFY COLUMN mem_usage STRING;";
|
let sql = "ALTER TABLE monitor MODIFY COLUMN mem_usage STRING;";
|
||||||
let stmt =
|
let stmt =
|
||||||
ParserContext::create_with_dialect(sql, &GreptimeDbDialect {}, ParseOptions::default())
|
ParserContext::create_with_dialect(sql, &GreptimeDbDialect {}, ParseOptions::default())
|
||||||
@@ -819,22 +819,22 @@ mod tests {
|
|||||||
let expr = to_alter_expr(alter_table.clone(), &QueryContext::arc()).unwrap();
|
let expr = to_alter_expr(alter_table.clone(), &QueryContext::arc()).unwrap();
|
||||||
let kind = expr.kind.unwrap();
|
let kind = expr.kind.unwrap();
|
||||||
|
|
||||||
let Kind::ChangeColumnTypes(ChangeColumnTypes {
|
let Kind::ModifyColumnTypes(ModifyColumnTypes {
|
||||||
change_column_types,
|
modify_column_types,
|
||||||
}) = kind
|
}) = kind
|
||||||
else {
|
else {
|
||||||
unreachable!()
|
unreachable!()
|
||||||
};
|
};
|
||||||
|
|
||||||
assert_eq!(1, change_column_types.len());
|
assert_eq!(1, modify_column_types.len());
|
||||||
let change_column_type = &change_column_types[0];
|
let modify_column_type = &modify_column_types[0];
|
||||||
|
|
||||||
assert_eq!("mem_usage", change_column_type.column_name);
|
assert_eq!("mem_usage", modify_column_type.column_name);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
ColumnDataType::String as i32,
|
ColumnDataType::String as i32,
|
||||||
change_column_type.target_type
|
modify_column_type.target_type
|
||||||
);
|
);
|
||||||
assert!(change_column_type.target_type_extension.is_none());
|
assert!(modify_column_type.target_type_extension.is_none());
|
||||||
}
|
}
|
||||||
|
|
||||||
fn new_test_table_names() -> Vec<TableName> {
|
fn new_test_table_names() -> Vec<TableName> {
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ impl ParserContext<'_> {
|
|||||||
self.parse_alter_column_fulltext(column_name)
|
self.parse_alter_column_fulltext(column_name)
|
||||||
} else {
|
} else {
|
||||||
let data_type = self.parser.parse_data_type().context(error::SyntaxSnafu)?;
|
let data_type = self.parser.parse_data_type().context(error::SyntaxSnafu)?;
|
||||||
Ok(AlterTableOperation::ChangeColumnType {
|
Ok(AlterTableOperation::ModifyColumnType {
|
||||||
column_name,
|
column_name,
|
||||||
target_type: data_type,
|
target_type: data_type,
|
||||||
})
|
})
|
||||||
@@ -399,7 +399,7 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_parse_alter_change_column_type() {
|
fn test_parse_alter_modify_column_type() {
|
||||||
let sql_1 = "ALTER TABLE my_metric_1 MODIFY COLUMN a STRING";
|
let sql_1 = "ALTER TABLE my_metric_1 MODIFY COLUMN a STRING";
|
||||||
let result_1 = ParserContext::create_with_dialect(
|
let result_1 = ParserContext::create_with_dialect(
|
||||||
sql_1,
|
sql_1,
|
||||||
@@ -427,10 +427,10 @@ mod tests {
|
|||||||
let alter_operation = alter_table.alter_operation();
|
let alter_operation = alter_table.alter_operation();
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
alter_operation,
|
alter_operation,
|
||||||
AlterTableOperation::ChangeColumnType { .. }
|
AlterTableOperation::ModifyColumnType { .. }
|
||||||
);
|
);
|
||||||
match alter_operation {
|
match alter_operation {
|
||||||
AlterTableOperation::ChangeColumnType {
|
AlterTableOperation::ModifyColumnType {
|
||||||
column_name,
|
column_name,
|
||||||
target_type,
|
target_type,
|
||||||
} => {
|
} => {
|
||||||
@@ -461,10 +461,10 @@ mod tests {
|
|||||||
let alter_operation = alter_table.alter_operation();
|
let alter_operation = alter_table.alter_operation();
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
alter_operation,
|
alter_operation,
|
||||||
AlterTableOperation::ChangeColumnType { .. }
|
AlterTableOperation::ModifyColumnType { .. }
|
||||||
);
|
);
|
||||||
match alter_operation {
|
match alter_operation {
|
||||||
AlterTableOperation::ChangeColumnType {
|
AlterTableOperation::ModifyColumnType {
|
||||||
column_name,
|
column_name,
|
||||||
target_type,
|
target_type,
|
||||||
} => {
|
} => {
|
||||||
@@ -492,10 +492,10 @@ mod tests {
|
|||||||
let alter_operation = alter_table.alter_operation();
|
let alter_operation = alter_table.alter_operation();
|
||||||
assert_matches!(
|
assert_matches!(
|
||||||
alter_operation,
|
alter_operation,
|
||||||
AlterTableOperation::ChangeColumnType { .. }
|
AlterTableOperation::ModifyColumnType { .. }
|
||||||
);
|
);
|
||||||
match alter_operation {
|
match alter_operation {
|
||||||
AlterTableOperation::ChangeColumnType {
|
AlterTableOperation::ModifyColumnType {
|
||||||
column_name,
|
column_name,
|
||||||
target_type,
|
target_type,
|
||||||
} => {
|
} => {
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ pub enum AlterTableOperation {
|
|||||||
location: Option<AddColumnLocation>,
|
location: Option<AddColumnLocation>,
|
||||||
},
|
},
|
||||||
/// `MODIFY <column_name> [target_type]`
|
/// `MODIFY <column_name> [target_type]`
|
||||||
ChangeColumnType {
|
ModifyColumnType {
|
||||||
column_name: Ident,
|
column_name: Ident,
|
||||||
target_type: DataType,
|
target_type: DataType,
|
||||||
},
|
},
|
||||||
@@ -101,7 +101,7 @@ impl Display for AlterTableOperation {
|
|||||||
AlterTableOperation::RenameTable { new_table_name } => {
|
AlterTableOperation::RenameTable { new_table_name } => {
|
||||||
write!(f, r#"RENAME {new_table_name}"#)
|
write!(f, r#"RENAME {new_table_name}"#)
|
||||||
}
|
}
|
||||||
AlterTableOperation::ChangeColumnType {
|
AlterTableOperation::ModifyColumnType {
|
||||||
column_name,
|
column_name,
|
||||||
target_type,
|
target_type,
|
||||||
} => {
|
} => {
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ impl TransformRule for TypeAliasTransformRule {
|
|||||||
.for_each(|column| replace_type_alias(column.mut_data_type()));
|
.for_each(|column| replace_type_alias(column.mut_data_type()));
|
||||||
}
|
}
|
||||||
Statement::Alter(alter_table) => {
|
Statement::Alter(alter_table) => {
|
||||||
if let AlterTableOperation::ChangeColumnType { target_type, .. } =
|
if let AlterTableOperation::ModifyColumnType { target_type, .. } =
|
||||||
alter_table.alter_operation_mut()
|
alter_table.alter_operation_mut()
|
||||||
{
|
{
|
||||||
replace_type_alias(target_type)
|
replace_type_alias(target_type)
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ use serde::de::Error;
|
|||||||
use serde::{Deserialize, Deserializer, Serialize};
|
use serde::{Deserialize, Deserializer, Serialize};
|
||||||
use snafu::{ensure, Location, OptionExt, ResultExt, Snafu};
|
use snafu::{ensure, Location, OptionExt, ResultExt, Snafu};
|
||||||
|
|
||||||
use crate::region_request::{AddColumn, AddColumnLocation, AlterKind, ChangeColumnType};
|
use crate::region_request::{AddColumn, AddColumnLocation, AlterKind, ModifyColumnType};
|
||||||
use crate::storage::consts::is_internal_column;
|
use crate::storage::consts::is_internal_column;
|
||||||
use crate::storage::{ColumnId, RegionId};
|
use crate::storage::{ColumnId, RegionId};
|
||||||
|
|
||||||
@@ -552,7 +552,7 @@ impl RegionMetadataBuilder {
|
|||||||
match kind {
|
match kind {
|
||||||
AlterKind::AddColumns { columns } => self.add_columns(columns)?,
|
AlterKind::AddColumns { columns } => self.add_columns(columns)?,
|
||||||
AlterKind::DropColumns { names } => self.drop_columns(&names),
|
AlterKind::DropColumns { names } => self.drop_columns(&names),
|
||||||
AlterKind::ChangeColumnTypes { columns } => self.change_column_types(columns),
|
AlterKind::ModifyColumnTypes { columns } => self.modify_column_types(columns),
|
||||||
AlterKind::ChangeColumnFulltext {
|
AlterKind::ChangeColumnFulltext {
|
||||||
column_name,
|
column_name,
|
||||||
options,
|
options,
|
||||||
@@ -642,11 +642,11 @@ impl RegionMetadataBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Changes columns type to the metadata if exist.
|
/// Changes columns type to the metadata if exist.
|
||||||
fn change_column_types(&mut self, columns: Vec<ChangeColumnType>) {
|
fn modify_column_types(&mut self, columns: Vec<ModifyColumnType>) {
|
||||||
let mut change_type_map: HashMap<_, _> = columns
|
let mut change_type_map: HashMap<_, _> = columns
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(
|
.map(
|
||||||
|ChangeColumnType {
|
|ModifyColumnType {
|
||||||
column_name,
|
column_name,
|
||||||
target_type,
|
target_type,
|
||||||
}| (column_name, target_type),
|
}| (column_name, target_type),
|
||||||
@@ -1265,8 +1265,8 @@ mod test {
|
|||||||
|
|
||||||
let mut builder = RegionMetadataBuilder::from_existing(metadata);
|
let mut builder = RegionMetadataBuilder::from_existing(metadata);
|
||||||
builder
|
builder
|
||||||
.alter(AlterKind::ChangeColumnTypes {
|
.alter(AlterKind::ModifyColumnTypes {
|
||||||
columns: vec![ChangeColumnType {
|
columns: vec![ModifyColumnType {
|
||||||
column_name: "b".to_string(),
|
column_name: "b".to_string(),
|
||||||
target_type: ConcreteDataType::string_datatype(),
|
target_type: ConcreteDataType::string_datatype(),
|
||||||
}],
|
}],
|
||||||
|
|||||||
@@ -408,9 +408,9 @@ pub enum AlterKind {
|
|||||||
names: Vec<String>,
|
names: Vec<String>,
|
||||||
},
|
},
|
||||||
/// Change columns datatype form the region, only fields are allowed to change.
|
/// Change columns datatype form the region, only fields are allowed to change.
|
||||||
ChangeColumnTypes {
|
ModifyColumnTypes {
|
||||||
/// Columns to change.
|
/// Columns to change.
|
||||||
columns: Vec<ChangeColumnType>,
|
columns: Vec<ModifyColumnType>,
|
||||||
},
|
},
|
||||||
/// Change region options.
|
/// Change region options.
|
||||||
ChangeRegionOptions { options: Vec<ChangeOption> },
|
ChangeRegionOptions { options: Vec<ChangeOption> },
|
||||||
@@ -437,7 +437,7 @@ impl AlterKind {
|
|||||||
Self::validate_column_to_drop(name, metadata)?;
|
Self::validate_column_to_drop(name, metadata)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AlterKind::ChangeColumnTypes { columns } => {
|
AlterKind::ModifyColumnTypes { columns } => {
|
||||||
for col_to_change in columns {
|
for col_to_change in columns {
|
||||||
col_to_change.validate(metadata)?;
|
col_to_change.validate(metadata)?;
|
||||||
}
|
}
|
||||||
@@ -460,7 +460,7 @@ impl AlterKind {
|
|||||||
AlterKind::DropColumns { names } => names
|
AlterKind::DropColumns { names } => names
|
||||||
.iter()
|
.iter()
|
||||||
.any(|name| metadata.column_by_name(name).is_some()),
|
.any(|name| metadata.column_by_name(name).is_some()),
|
||||||
AlterKind::ChangeColumnTypes { columns } => columns
|
AlterKind::ModifyColumnTypes { columns } => columns
|
||||||
.iter()
|
.iter()
|
||||||
.any(|col_to_change| col_to_change.need_alter(metadata)),
|
.any(|col_to_change| col_to_change.need_alter(metadata)),
|
||||||
AlterKind::ChangeRegionOptions { .. } => {
|
AlterKind::ChangeRegionOptions { .. } => {
|
||||||
@@ -529,13 +529,13 @@ impl TryFrom<alter_request::Kind> for AlterKind {
|
|||||||
.collect::<Result<Vec<_>>>()?;
|
.collect::<Result<Vec<_>>>()?;
|
||||||
AlterKind::AddColumns { columns }
|
AlterKind::AddColumns { columns }
|
||||||
}
|
}
|
||||||
alter_request::Kind::ChangeColumnTypes(x) => {
|
alter_request::Kind::ModifyColumnTypes(x) => {
|
||||||
let columns = x
|
let columns = x
|
||||||
.change_column_types
|
.modify_column_types
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|x| x.into())
|
.map(|x| x.into())
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
AlterKind::ChangeColumnTypes { columns }
|
AlterKind::ModifyColumnTypes { columns }
|
||||||
}
|
}
|
||||||
alter_request::Kind::DropColumns(x) => {
|
alter_request::Kind::DropColumns(x) => {
|
||||||
let names = x.drop_columns.into_iter().map(|x| x.name).collect();
|
let names = x.drop_columns.into_iter().map(|x| x.name).collect();
|
||||||
@@ -663,14 +663,14 @@ impl TryFrom<v1::AddColumnLocation> for AddColumnLocation {
|
|||||||
|
|
||||||
/// Change a column's datatype.
|
/// Change a column's datatype.
|
||||||
#[derive(Debug, PartialEq, Eq, Clone)]
|
#[derive(Debug, PartialEq, Eq, Clone)]
|
||||||
pub struct ChangeColumnType {
|
pub struct ModifyColumnType {
|
||||||
/// Schema of the column to modify.
|
/// Schema of the column to modify.
|
||||||
pub column_name: String,
|
pub column_name: String,
|
||||||
/// Column will be changed to this type.
|
/// Column will be changed to this type.
|
||||||
pub target_type: ConcreteDataType,
|
pub target_type: ConcreteDataType,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ChangeColumnType {
|
impl ModifyColumnType {
|
||||||
/// Returns an error if the column's datatype to change is invalid.
|
/// Returns an error if the column's datatype to change is invalid.
|
||||||
pub fn validate(&self, metadata: &RegionMetadata) -> Result<()> {
|
pub fn validate(&self, metadata: &RegionMetadata) -> Result<()> {
|
||||||
let column_meta = metadata
|
let column_meta = metadata
|
||||||
@@ -711,16 +711,16 @@ impl ChangeColumnType {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<v1::ChangeColumnType> for ChangeColumnType {
|
impl From<v1::ModifyColumnType> for ModifyColumnType {
|
||||||
fn from(change_column_type: v1::ChangeColumnType) -> Self {
|
fn from(modify_column_type: v1::ModifyColumnType) -> Self {
|
||||||
let target_type = ColumnDataTypeWrapper::new(
|
let target_type = ColumnDataTypeWrapper::new(
|
||||||
change_column_type.target_type(),
|
modify_column_type.target_type(),
|
||||||
change_column_type.target_type_extension,
|
modify_column_type.target_type_extension,
|
||||||
)
|
)
|
||||||
.into();
|
.into();
|
||||||
|
|
||||||
ChangeColumnType {
|
ModifyColumnType {
|
||||||
column_name: change_column_type.column_name,
|
column_name: modify_column_type.column_name,
|
||||||
target_type,
|
target_type,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1072,10 +1072,10 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_validate_change_column_type() {
|
fn test_validate_modify_column_type() {
|
||||||
let metadata = new_metadata();
|
let metadata = new_metadata();
|
||||||
AlterKind::ChangeColumnTypes {
|
AlterKind::ModifyColumnTypes {
|
||||||
columns: vec![ChangeColumnType {
|
columns: vec![ModifyColumnType {
|
||||||
column_name: "xxxx".to_string(),
|
column_name: "xxxx".to_string(),
|
||||||
target_type: ConcreteDataType::string_datatype(),
|
target_type: ConcreteDataType::string_datatype(),
|
||||||
}],
|
}],
|
||||||
@@ -1083,8 +1083,8 @@ mod tests {
|
|||||||
.validate(&metadata)
|
.validate(&metadata)
|
||||||
.unwrap_err();
|
.unwrap_err();
|
||||||
|
|
||||||
AlterKind::ChangeColumnTypes {
|
AlterKind::ModifyColumnTypes {
|
||||||
columns: vec![ChangeColumnType {
|
columns: vec![ModifyColumnType {
|
||||||
column_name: "field_1".to_string(),
|
column_name: "field_1".to_string(),
|
||||||
target_type: ConcreteDataType::date_datatype(),
|
target_type: ConcreteDataType::date_datatype(),
|
||||||
}],
|
}],
|
||||||
@@ -1092,8 +1092,8 @@ mod tests {
|
|||||||
.validate(&metadata)
|
.validate(&metadata)
|
||||||
.unwrap_err();
|
.unwrap_err();
|
||||||
|
|
||||||
AlterKind::ChangeColumnTypes {
|
AlterKind::ModifyColumnTypes {
|
||||||
columns: vec![ChangeColumnType {
|
columns: vec![ModifyColumnType {
|
||||||
column_name: "ts".to_string(),
|
column_name: "ts".to_string(),
|
||||||
target_type: ConcreteDataType::date_datatype(),
|
target_type: ConcreteDataType::date_datatype(),
|
||||||
}],
|
}],
|
||||||
@@ -1101,8 +1101,8 @@ mod tests {
|
|||||||
.validate(&metadata)
|
.validate(&metadata)
|
||||||
.unwrap_err();
|
.unwrap_err();
|
||||||
|
|
||||||
AlterKind::ChangeColumnTypes {
|
AlterKind::ModifyColumnTypes {
|
||||||
columns: vec![ChangeColumnType {
|
columns: vec![ModifyColumnType {
|
||||||
column_name: "tag_0".to_string(),
|
column_name: "tag_0".to_string(),
|
||||||
target_type: ConcreteDataType::date_datatype(),
|
target_type: ConcreteDataType::date_datatype(),
|
||||||
}],
|
}],
|
||||||
@@ -1110,8 +1110,8 @@ mod tests {
|
|||||||
.validate(&metadata)
|
.validate(&metadata)
|
||||||
.unwrap_err();
|
.unwrap_err();
|
||||||
|
|
||||||
let kind = AlterKind::ChangeColumnTypes {
|
let kind = AlterKind::ModifyColumnTypes {
|
||||||
columns: vec![ChangeColumnType {
|
columns: vec![ModifyColumnType {
|
||||||
column_name: "field_0".to_string(),
|
column_name: "field_0".to_string(),
|
||||||
target_type: ConcreteDataType::int32_datatype(),
|
target_type: ConcreteDataType::int32_datatype(),
|
||||||
}],
|
}],
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ use store_api::region_request::ChangeOption;
|
|||||||
use store_api::storage::{ColumnDescriptor, ColumnDescriptorBuilder, ColumnId, RegionId};
|
use store_api::storage::{ColumnDescriptor, ColumnDescriptorBuilder, ColumnId, RegionId};
|
||||||
|
|
||||||
use crate::error::{self, Result};
|
use crate::error::{self, Result};
|
||||||
use crate::requests::{AddColumnRequest, AlterKind, ChangeColumnTypeRequest, TableOptions};
|
use crate::requests::{AddColumnRequest, AlterKind, ModifyColumnTypeRequest, TableOptions};
|
||||||
|
|
||||||
pub type TableId = u32;
|
pub type TableId = u32;
|
||||||
pub type TableVersion = u64;
|
pub type TableVersion = u64;
|
||||||
@@ -201,8 +201,8 @@ impl TableMeta {
|
|||||||
self.add_columns(table_name, columns, add_if_not_exists)
|
self.add_columns(table_name, columns, add_if_not_exists)
|
||||||
}
|
}
|
||||||
AlterKind::DropColumns { names } => self.remove_columns(table_name, names),
|
AlterKind::DropColumns { names } => self.remove_columns(table_name, names),
|
||||||
AlterKind::ChangeColumnTypes { columns } => {
|
AlterKind::ModifyColumnTypes { columns } => {
|
||||||
self.change_column_types(table_name, columns)
|
self.modify_column_types(table_name, columns)
|
||||||
}
|
}
|
||||||
// No need to rebuild table meta when renaming tables.
|
// No need to rebuild table meta when renaming tables.
|
||||||
AlterKind::RenameTable { .. } => Ok(self.new_meta_builder()),
|
AlterKind::RenameTable { .. } => Ok(self.new_meta_builder()),
|
||||||
@@ -579,15 +579,15 @@ impl TableMeta {
|
|||||||
Ok(meta_builder)
|
Ok(meta_builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn change_column_types(
|
fn modify_column_types(
|
||||||
&self,
|
&self,
|
||||||
table_name: &str,
|
table_name: &str,
|
||||||
requests: &[ChangeColumnTypeRequest],
|
requests: &[ModifyColumnTypeRequest],
|
||||||
) -> Result<TableMetaBuilder> {
|
) -> Result<TableMetaBuilder> {
|
||||||
let table_schema = &self.schema;
|
let table_schema = &self.schema;
|
||||||
let mut meta_builder = self.new_meta_builder();
|
let mut meta_builder = self.new_meta_builder();
|
||||||
|
|
||||||
let mut change_column_types = HashMap::with_capacity(requests.len());
|
let mut modify_column_types = HashMap::with_capacity(requests.len());
|
||||||
let timestamp_index = table_schema.timestamp_index();
|
let timestamp_index = table_schema.timestamp_index();
|
||||||
|
|
||||||
for col_to_change in requests {
|
for col_to_change in requests {
|
||||||
@@ -628,7 +628,7 @@ impl TableMeta {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ensure!(
|
ensure!(
|
||||||
change_column_types
|
modify_column_types
|
||||||
.insert(&col_to_change.column_name, col_to_change)
|
.insert(&col_to_change.column_name, col_to_change)
|
||||||
.is_none(),
|
.is_none(),
|
||||||
error::InvalidAlterRequestSnafu {
|
error::InvalidAlterRequestSnafu {
|
||||||
@@ -670,7 +670,7 @@ impl TableMeta {
|
|||||||
.iter()
|
.iter()
|
||||||
.cloned()
|
.cloned()
|
||||||
.map(|mut column| {
|
.map(|mut column| {
|
||||||
if let Some(change_column) = change_column_types.get(&column.name) {
|
if let Some(change_column) = modify_column_types.get(&column.name) {
|
||||||
column.data_type = change_column.target_type.clone();
|
column.data_type = change_column.target_type.clone();
|
||||||
}
|
}
|
||||||
column
|
column
|
||||||
@@ -1298,8 +1298,8 @@ mod tests {
|
|||||||
.build()
|
.build()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let alter_kind = AlterKind::ChangeColumnTypes {
|
let alter_kind = AlterKind::ModifyColumnTypes {
|
||||||
columns: vec![ChangeColumnTypeRequest {
|
columns: vec![ModifyColumnTypeRequest {
|
||||||
column_name: "unknown".to_string(),
|
column_name: "unknown".to_string(),
|
||||||
target_type: ConcreteDataType::string_datatype(),
|
target_type: ConcreteDataType::string_datatype(),
|
||||||
}],
|
}],
|
||||||
@@ -1358,8 +1358,8 @@ mod tests {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
// Remove column in primary key.
|
// Remove column in primary key.
|
||||||
let alter_kind = AlterKind::ChangeColumnTypes {
|
let alter_kind = AlterKind::ModifyColumnTypes {
|
||||||
columns: vec![ChangeColumnTypeRequest {
|
columns: vec![ModifyColumnTypeRequest {
|
||||||
column_name: "col1".to_string(),
|
column_name: "col1".to_string(),
|
||||||
target_type: ConcreteDataType::string_datatype(),
|
target_type: ConcreteDataType::string_datatype(),
|
||||||
}],
|
}],
|
||||||
@@ -1372,8 +1372,8 @@ mod tests {
|
|||||||
assert_eq!(StatusCode::InvalidArguments, err.status_code());
|
assert_eq!(StatusCode::InvalidArguments, err.status_code());
|
||||||
|
|
||||||
// Remove timestamp column.
|
// Remove timestamp column.
|
||||||
let alter_kind = AlterKind::ChangeColumnTypes {
|
let alter_kind = AlterKind::ModifyColumnTypes {
|
||||||
columns: vec![ChangeColumnTypeRequest {
|
columns: vec![ModifyColumnTypeRequest {
|
||||||
column_name: "ts".to_string(),
|
column_name: "ts".to_string(),
|
||||||
target_type: ConcreteDataType::string_datatype(),
|
target_type: ConcreteDataType::string_datatype(),
|
||||||
}],
|
}],
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ pub struct AddColumnRequest {
|
|||||||
|
|
||||||
/// Change column datatype request
|
/// Change column datatype request
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
pub struct ChangeColumnTypeRequest {
|
pub struct ModifyColumnTypeRequest {
|
||||||
pub column_name: String,
|
pub column_name: String,
|
||||||
pub target_type: ConcreteDataType,
|
pub target_type: ConcreteDataType,
|
||||||
}
|
}
|
||||||
@@ -207,8 +207,8 @@ pub enum AlterKind {
|
|||||||
DropColumns {
|
DropColumns {
|
||||||
names: Vec<String>,
|
names: Vec<String>,
|
||||||
},
|
},
|
||||||
ChangeColumnTypes {
|
ModifyColumnTypes {
|
||||||
columns: Vec<ChangeColumnTypeRequest>,
|
columns: Vec<ModifyColumnTypeRequest>,
|
||||||
},
|
},
|
||||||
RenameTable {
|
RenameTable {
|
||||||
new_table_name: String,
|
new_table_name: String,
|
||||||
|
|||||||
Reference in New Issue
Block a user