Skip to content

Commit

Permalink
impl show create part
Browse files Browse the repository at this point in the history
Signed-off-by: Ruihang Xia <[email protected]>
  • Loading branch information
waynexia committed Dec 13, 2024
1 parent 3bed0db commit 173b9a8
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 22 deletions.
12 changes: 11 additions & 1 deletion src/api/src/v1/column_def.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use std::collections::HashMap;

use datatypes::schema::{
ColumnDefaultConstraint, ColumnSchema, FulltextAnalyzer, FulltextOptions, COMMENT_KEY,
FULLTEXT_KEY, INVERTED_INDEX_KEY,
FULLTEXT_KEY, INVERTED_INDEX_KEY, SKIP_KEY,
};
use greptime_proto::v1::Analyzer;
use snafu::ResultExt;
Expand All @@ -29,6 +29,8 @@ use crate::v1::{ColumnDef, ColumnOptions, SemanticType};
const FULLTEXT_GRPC_KEY: &str = "fulltext";
/// Key used to store inverted index options in gRPC column options.
const INVERTED_INDEX_GRPC_KEY: &str = "inverted_index";
/// Key used to store skip index options in gRPC column options.
const SKIP_INDEX_GRPC_KEY: &str = "skip_index";

/// Tries to construct a `ColumnSchema` from the given `ColumnDef`.
pub fn try_as_column_schema(column_def: &ColumnDef) -> Result<ColumnSchema> {
Expand Down Expand Up @@ -60,6 +62,9 @@ pub fn try_as_column_schema(column_def: &ColumnDef) -> Result<ColumnSchema> {
if let Some(inverted_index) = options.options.get(INVERTED_INDEX_GRPC_KEY) {
metadata.insert(INVERTED_INDEX_KEY.to_string(), inverted_index.clone());
}
if let Some(skip_index) = options.options.get(SKIP_INDEX_GRPC_KEY) {
metadata.insert(SKIP_KEY.to_string(), skip_index.clone());
}
}

ColumnSchema::new(&column_def.name, data_type.into(), column_def.is_nullable)
Expand All @@ -84,6 +89,11 @@ pub fn options_from_column_schema(column_schema: &ColumnSchema) -> Option<Column
.options
.insert(INVERTED_INDEX_GRPC_KEY.to_string(), inverted_index.clone());
}
if let Some(skip_index) = column_schema.metadata().get(SKIP_KEY) {
options
.options
.insert(SKIP_INDEX_GRPC_KEY.to_string(), skip_index.clone());
}

(!options.options.is_empty()).then_some(options)
}
Expand Down
3 changes: 2 additions & 1 deletion src/datatypes/src/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ pub use crate::schema::column_schema::{
ColumnSchema, FulltextAnalyzer, FulltextOptions, Metadata, SkipIndexOptions,
COLUMN_FULLTEXT_CHANGE_OPT_KEY_ENABLE, COLUMN_FULLTEXT_OPT_KEY_ANALYZER,
COLUMN_FULLTEXT_OPT_KEY_CASE_SENSITIVE, COLUMN_SKIP_INDEX_OPT_KEY_GRANULARITY,
COLUMN_SKIP_INDEX_OPT_KEY_TYPE, COMMENT_KEY, FULLTEXT_KEY, INVERTED_INDEX_KEY, TIME_INDEX_KEY,
COLUMN_SKIP_INDEX_OPT_KEY_TYPE, COMMENT_KEY, FULLTEXT_KEY, INVERTED_INDEX_KEY, SKIP_KEY,
TIME_INDEX_KEY,
};
pub use crate::schema::constraint::ColumnDefaultConstraint;
pub use crate::schema::raw::RawSchema;
Expand Down
3 changes: 2 additions & 1 deletion src/operator/src/statement/ddl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,8 @@ impl StatementExecutor {

table_info.ident.table_id = table_id;

let table_info = Arc::new(table_info.try_into().context(CreateTableInfoSnafu)?);
let table_info: Arc<TableInfo> =
Arc::new(table_info.try_into().context(CreateTableInfoSnafu)?);
create_table.table_id = Some(api::v1::TableId { id: table_id });

let table = DistTable::table(table_info);
Expand Down
11 changes: 10 additions & 1 deletion src/query/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,13 @@ pub enum Error {
#[snafu(implicit)]
location: Location,
},

#[snafu(display("Failed to get skip inde options"))]
GetSkipIndexOptions {
source: datatypes::error::Error,
#[snafu(implicit)]
location: Location,
},
}

impl ErrorExt for Error {
Expand Down Expand Up @@ -366,7 +373,9 @@ impl ErrorExt for Error {
MissingTableMutationHandler { .. } => StatusCode::Unexpected,
GetRegionMetadata { .. } => StatusCode::RegionNotReady,
TableReadOnly { .. } => StatusCode::Unsupported,
GetFulltextOptions { source, .. } => source.status_code(),
GetFulltextOptions { source, .. } | GetSkipIndexOptions { source, .. } => {
source.status_code()
}
}
}

Expand Down
34 changes: 29 additions & 5 deletions src/query/src/sql/show_create_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ use std::collections::HashMap;
use common_meta::SchemaOptions;
use datatypes::schema::{
ColumnDefaultConstraint, ColumnSchema, SchemaRef, COLUMN_FULLTEXT_OPT_KEY_ANALYZER,
COLUMN_FULLTEXT_OPT_KEY_CASE_SENSITIVE, COMMENT_KEY,
COLUMN_FULLTEXT_OPT_KEY_CASE_SENSITIVE, COLUMN_SKIP_INDEX_OPT_KEY_GRANULARITY,
COLUMN_SKIP_INDEX_OPT_KEY_TYPE, COMMENT_KEY,
};
use snafu::ResultExt;
use sql::ast::{ColumnDef, ColumnOption, ColumnOptionDef, Expr, Ident, ObjectName};
Expand All @@ -32,7 +33,8 @@ use table::metadata::{TableInfoRef, TableMeta};
use table::requests::{FILE_TABLE_META_KEY, TTL_KEY, WRITE_BUFFER_SIZE_KEY};

use crate::error::{
ConvertSqlTypeSnafu, ConvertSqlValueSnafu, GetFulltextOptionsSnafu, Result, SqlSnafu,
ConvertSqlTypeSnafu, ConvertSqlValueSnafu, GetFulltextOptionsSnafu, GetSkipIndexOptionsSnafu,
Result, SqlSnafu,
};

/// Generates CREATE TABLE options from given table metadata and schema-level options.
Expand Down Expand Up @@ -115,6 +117,23 @@ fn create_column(column_schema: &ColumnSchema, quote_style: char) -> Result<Colu
extensions.fulltext_options = Some(map.into());
}

if let Some(opt) = column_schema
.skip_options()
.context(GetSkipIndexOptionsSnafu)?
{
let map = HashMap::from([
(
COLUMN_SKIP_INDEX_OPT_KEY_GRANULARITY.to_string(),
opt.granularity.to_string(),
),
(
COLUMN_SKIP_INDEX_OPT_KEY_TYPE.to_string(),
opt.index_type.to_string(),
),
]);
extensions.skip_index_options = Some(map.into());
}

Ok(Column {
column_def: ColumnDef {
name: Ident::with_quote(quote_style, name),
Expand Down Expand Up @@ -219,7 +238,7 @@ mod tests {

use common_time::timestamp::TimeUnit;
use datatypes::prelude::ConcreteDataType;
use datatypes::schema::{FulltextOptions, Schema, SchemaRef};
use datatypes::schema::{FulltextOptions, Schema, SchemaRef, SkipIndexOptions};
use table::metadata::*;
use table::requests::{
TableOptions, FILE_TABLE_FORMAT_KEY, FILE_TABLE_LOCATION_KEY, FILE_TABLE_META_KEY,
Expand All @@ -230,7 +249,12 @@ mod tests {
#[test]
fn test_show_create_table_sql() {
let schema = vec![
ColumnSchema::new("id", ConcreteDataType::uint32_datatype(), true),
ColumnSchema::new("id", ConcreteDataType::uint32_datatype(), true)
.with_skip_options(SkipIndexOptions {
granularity: 4096,
..Default::default()
})
.unwrap(),
ColumnSchema::new("host", ConcreteDataType::string_datatype(), true)
.set_inverted_index(true),
ColumnSchema::new("cpu", ConcreteDataType::float64_datatype(), true),
Expand Down Expand Up @@ -300,7 +324,7 @@ mod tests {
assert_eq!(
r#"
CREATE TABLE IF NOT EXISTS "system_metrics" (
"id" INT UNSIGNED NULL,
"id" INT UNSIGNED NULL SKIP WITH(granularity = '4096', type = 'BLOOM'),
"host" STRING NULL,
"cpu" DOUBLE NULL,
"disk" FLOAT NULL,
Expand Down
26 changes: 13 additions & 13 deletions tests/cases/standalone/common/create/create_with_skip_index.result
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,19 @@ show
create table
skipping_table;

+----------------+-----------------------------------------------+
| Table | Create Table |
+----------------+-----------------------------------------------+
| skipping_table | CREATE TABLE IF NOT EXISTS "skipping_table" ( |
| | "ts" TIMESTAMP(3) NOT NULL, |
| | "id" STRING NULL, |
| | "name" STRING NULL, |
| | TIME INDEX ("ts") |
| | ) |
| | |
| | ENGINE=mito |
| | |
+----------------+-----------------------------------------------+
+----------------+-----------------------------------------------------------------------+
| Table | Create Table |
+----------------+-----------------------------------------------------------------------+
| skipping_table | CREATE TABLE IF NOT EXISTS "skipping_table" ( |
| | "ts" TIMESTAMP(3) NOT NULL, |
| | "id" STRING NULL SKIP WITH(granularity = '10240', type = 'BLOOM'), |
| | "name" STRING NULL SKIP WITH(granularity = '8192', type = 'BLOOM'), |
| | TIME INDEX ("ts") |
| | ) |
| | |
| | ENGINE=mito |
| | |
+----------------+-----------------------------------------------------------------------+

drop table skipping_table;

Expand Down

0 comments on commit 173b9a8

Please sign in to comment.