feat: upgrade desc table output (#2256)

This commit is contained in:
JeremyHi
2023-08-25 14:52:22 +08:00
committed by GitHub
parent 9d87c8b6de
commit de1daec680
11 changed files with 278 additions and 262 deletions

View File

@@ -37,6 +37,6 @@ pub const INFORMATION_SCHEMA_COLUMNS_TABLE_ID: u32 = 4;
pub const MITO_ENGINE: &str = "mito";
pub const IMMUTABLE_FILE_ENGINE: &str = "file";
pub const SEMANTIC_TYPE_PRIMARY_KEY: &str = "PRIMARY KEY";
pub const SEMANTIC_TYPE_PRIMARY_KEY: &str = "TAG";
pub const SEMANTIC_TYPE_FIELD: &str = "FIELD";
pub const SEMANTIC_TYPE_TIME_INDEX: &str = "TIME INDEX";
pub const SEMANTIC_TYPE_TIME_INDEX: &str = "TIMESTAMP";

View File

@@ -49,12 +49,14 @@ const SCHEMAS_COLUMN: &str = "Schemas";
const TABLES_COLUMN: &str = "Tables";
const COLUMN_NAME_COLUMN: &str = "Field";
const COLUMN_TYPE_COLUMN: &str = "Type";
const COLUMN_KEY_COLUMN: &str = "Key";
const COLUMN_NULLABLE_COLUMN: &str = "Null";
const COLUMN_DEFAULT_COLUMN: &str = "Default";
const COLUMN_SEMANTIC_TYPE_COLUMN: &str = "Semantic Type";
const NULLABLE_YES: &str = "YES";
const NULLABLE_NO: &str = "NO";
const PRI_KEY: &str = "PRI";
static DESCRIBE_TABLE_OUTPUT_SCHEMA: Lazy<Arc<Schema>> = Lazy::new(|| {
Arc::new(Schema::new(vec![
@@ -68,6 +70,7 @@ static DESCRIBE_TABLE_OUTPUT_SCHEMA: Lazy<Arc<Schema>> = Lazy::new(|| {
ConcreteDataType::string_datatype(),
false,
),
ColumnSchema::new(COLUMN_KEY_COLUMN, ConcreteDataType::string_datatype(), true),
ColumnSchema::new(
COLUMN_NULLABLE_COLUMN,
ConcreteDataType::string_datatype(),
@@ -204,6 +207,7 @@ pub fn describe_table(table: TableRef) -> Result<Output> {
let columns = vec![
describe_column_names(columns_schemas),
describe_column_types(columns_schemas),
describe_column_keys(columns_schemas, &table_info.meta.primary_key_indices),
describe_column_nullables(columns_schemas),
describe_column_defaults(columns_schemas),
describe_column_semantic_types(columns_schemas, &table_info.meta.primary_key_indices),
@@ -225,6 +229,21 @@ fn describe_column_types(columns_schemas: &[ColumnSchema]) -> VectorRef {
))
}
fn describe_column_keys(
columns_schemas: &[ColumnSchema],
primary_key_indices: &[usize],
) -> VectorRef {
Arc::new(StringVector::from_iterator(
columns_schemas.iter().enumerate().map(|(i, cs)| {
if cs.is_time_index() || primary_key_indices.contains(&i) {
PRI_KEY
} else {
""
}
}),
))
}
fn describe_column_nullables(columns_schemas: &[ColumnSchema]) -> VectorRef {
Arc::new(StringVector::from_iterator(columns_schemas.iter().map(
|cs| {
@@ -253,20 +272,16 @@ fn describe_column_semantic_types(
columns_schemas: &[ColumnSchema],
primary_key_indices: &[usize],
) -> VectorRef {
Arc::new(StringVector::from(
columns_schemas
.iter()
.enumerate()
.map(|(i, cs)| {
if primary_key_indices.contains(&i) {
String::from(SEMANTIC_TYPE_PRIMARY_KEY)
} else if cs.is_time_index() {
String::from(SEMANTIC_TYPE_TIME_INDEX)
} else {
String::from(SEMANTIC_TYPE_FIELD)
}
})
.collect::<Vec<String>>(),
Arc::new(StringVector::from_iterator(
columns_schemas.iter().enumerate().map(|(i, cs)| {
if primary_key_indices.contains(&i) {
SEMANTIC_TYPE_PRIMARY_KEY
} else if cs.is_time_index() {
SEMANTIC_TYPE_TIME_INDEX
} else {
SEMANTIC_TYPE_FIELD
}
}),
))
}
@@ -403,6 +418,7 @@ mod test {
let expected_columns = vec![
Arc::new(StringVector::from(vec!["t1", "t2"])) as _,
Arc::new(StringVector::from(vec!["UInt32", "TimestampMillisecond"])) as _,
Arc::new(StringVector::from(vec!["", "PRI"])) as _,
Arc::new(StringVector::from(vec![NULLABLE_YES, NULLABLE_NO])) as _,
Arc::new(StringVector::from(vec!["", "current_timestamp()"])) as _,
Arc::new(StringVector::from(vec![