From 00d7fd67f77d036d28f68dabc0ae00384d84569c Mon Sep 17 00:00:00 2001 From: adolph liu Date: Sun, 26 May 2024 22:44:13 -0700 Subject: [PATCH 1/3] show status returning empty contents --- src/frontend/src/instance.rs | 1 + src/operator/src/statement.rs | 1 + src/operator/src/statement/show.rs | 7 +++++++ src/query/src/sql.rs | 4 ++++ src/sql/src/parsers/show_parser.rs | 5 ++++- src/sql/src/statements/show.rs | 10 ++++++++++ src/sql/src/statements/statement.rs | 6 +++++- 7 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/instance.rs b/src/frontend/src/instance.rs index c0ae6b64c2f..033e1f8582d 100644 --- a/src/frontend/src/instance.rs +++ b/src/frontend/src/instance.rs @@ -554,6 +554,7 @@ pub fn check_permission( Statement::ShowIndex(stmt) => { validate_db_permission!(stmt, query_ctx); } + Statement::ShowStatus(stmt) => {} Statement::DescribeTable(stmt) => { validate_param(stmt.name(), query_ctx)?; } diff --git a/src/operator/src/statement.rs b/src/operator/src/statement.rs index 38b3236fa21..e9b6f4b282c 100644 --- a/src/operator/src/statement.rs +++ b/src/operator/src/statement.rs @@ -263,6 +263,7 @@ impl StatementExecutor { self.show_columns(show_columns, query_ctx).await } Statement::ShowIndex(show_index) => self.show_index(show_index, query_ctx).await, + Statement::ShowStatus(_) => self.show_status(query_ctx).await, } } diff --git a/src/operator/src/statement/show.rs b/src/operator/src/statement/show.rs index 7ba8bc999f8..ca1a500c2a3 100644 --- a/src/operator/src/statement/show.rs +++ b/src/operator/src/statement/show.rs @@ -117,6 +117,13 @@ impl StatementExecutor { .await .context(error::ExecuteStatementSnafu) } + + #[tracing::instrument(skip_all)] + pub async fn show_status(&self, query_ctx: QueryContextRef) -> Result { + query::sql::show_status(query_ctx) + .await + .context(error::ExecuteStatementSnafu) + } } pub(crate) fn create_partitions_stmt(partitions: Vec) -> Result> { diff --git a/src/query/src/sql.rs b/src/query/src/sql.rs index 2fe7aa9e554..47969abff9a 100644 --- a/src/query/src/sql.rs +++ b/src/query/src/sql.rs @@ -564,6 +564,10 @@ pub fn show_variable(stmt: ShowVariables, query_ctx: QueryContextRef) -> Result< Ok(Output::new_with_record_batches(records)) } +pub async fn show_status(query_ctx: QueryContextRef) -> Result { + Ok(Output::new_with_affected_rows(0)) +} + pub fn show_create_table( table: TableRef, partitions: Option, diff --git a/src/sql/src/parsers/show_parser.rs b/src/sql/src/parsers/show_parser.rs index 993a1c12df2..2ca96b9bc4d 100644 --- a/src/sql/src/parsers/show_parser.rs +++ b/src/sql/src/parsers/show_parser.rs @@ -19,7 +19,8 @@ use sqlparser::tokenizer::Token; use crate::error::{self, InvalidDatabaseNameSnafu, InvalidTableNameSnafu, Result}; use crate::parser::ParserContext; use crate::statements::show::{ - ShowColumns, ShowCreateTable, ShowDatabases, ShowIndex, ShowKind, ShowTables, ShowVariables, + ShowColumns, ShowCreateTable, ShowDatabases, ShowIndex, ShowKind, ShowStatus, ShowTables, + ShowVariables, }; use crate::statements::statement::Statement; @@ -82,6 +83,8 @@ impl<'a> ParserContext<'a> { actual: self.peek_token_as_string(), })?; Ok(Statement::ShowVariables(ShowVariables { variable })) + } else if self.consume_token("STATUS") { + Ok(Statement::ShowStatus(ShowStatus {})) } else { self.unsupported(self.peek_token_as_string()) } diff --git a/src/sql/src/statements/show.rs b/src/sql/src/statements/show.rs index f20a6a59191..2e4a76c145e 100644 --- a/src/sql/src/statements/show.rs +++ b/src/sql/src/statements/show.rs @@ -145,6 +145,16 @@ impl Display for ShowVariables { } } +/// SQL structure for "SHOW STATUS" +#[derive(Debug, Clone, PartialEq, Eq, Visit, VisitMut)] +pub struct ShowStatus {} + +impl Display for ShowStatus { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "SHOW STATUS") + } +} + #[cfg(test)] mod tests { use std::assert_matches::assert_matches; diff --git a/src/sql/src/statements/statement.rs b/src/sql/src/statements/statement.rs index aad9575afb8..a014ecb125e 100644 --- a/src/sql/src/statements/statement.rs +++ b/src/sql/src/statements/statement.rs @@ -31,7 +31,8 @@ use crate::statements::insert::Insert; use crate::statements::query::Query; use crate::statements::set_variables::SetVariables; use crate::statements::show::{ - ShowColumns, ShowCreateTable, ShowDatabases, ShowIndex, ShowKind, ShowTables, ShowVariables, + ShowColumns, ShowCreateTable, ShowDatabases, ShowIndex, ShowKind, ShowStatus, ShowTables, + ShowVariables, }; use crate::statements::tql::Tql; use crate::statements::truncate::TruncateTable; @@ -80,6 +81,8 @@ pub enum Statement { ShowIndex(ShowIndex), // SHOW CREATE TABLE ShowCreateTable(ShowCreateTable), + // SHOW STATUS + ShowStatus(ShowStatus), // DESCRIBE TABLE DescribeTable(DescribeTable), // EXPLAIN QUERY @@ -115,6 +118,7 @@ impl Display for Statement { Statement::ShowColumns(s) => s.fmt(f), Statement::ShowIndex(s) => s.fmt(f), Statement::ShowCreateTable(s) => s.fmt(f), + Statement::ShowStatus(s) => s.fmt(f), Statement::DescribeTable(s) => s.fmt(f), Statement::Explain(s) => s.fmt(f), Statement::Copy(s) => s.fmt(f), From 85b94d14b765b6bb336b91ffc6e811e92bc81a5b Mon Sep 17 00:00:00 2001 From: adolph liu Date: Mon, 27 May 2024 09:56:32 -0700 Subject: [PATCH 2/3] return an empty set instead of affected rows --- src/frontend/src/instance.rs | 2 +- src/query/src/sql.rs | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/frontend/src/instance.rs b/src/frontend/src/instance.rs index 033e1f8582d..a1cc8934270 100644 --- a/src/frontend/src/instance.rs +++ b/src/frontend/src/instance.rs @@ -554,7 +554,7 @@ pub fn check_permission( Statement::ShowIndex(stmt) => { validate_db_permission!(stmt, query_ctx); } - Statement::ShowStatus(stmt) => {} + Statement::ShowStatus(_stmt) => {} Statement::DescribeTable(stmt) => { validate_param(stmt.name(), query_ctx)?; } diff --git a/src/query/src/sql.rs b/src/query/src/sql.rs index 47969abff9a..2e69abbbbfd 100644 --- a/src/query/src/sql.rs +++ b/src/query/src/sql.rs @@ -564,8 +564,20 @@ pub fn show_variable(stmt: ShowVariables, query_ctx: QueryContextRef) -> Result< Ok(Output::new_with_record_batches(records)) } -pub async fn show_status(query_ctx: QueryContextRef) -> Result { - Ok(Output::new_with_affected_rows(0)) +pub async fn show_status(_query_ctx: QueryContextRef) -> Result { + let schema = Arc::new(Schema::new(vec![ + ColumnSchema::new("Variable_name", ConcreteDataType::string_datatype(), false), + ColumnSchema::new("Value", ConcreteDataType::string_datatype(), true), + ])); + let records = RecordBatches::try_from_columns( + schema, + vec![ + Arc::new(StringVector::from(Vec::<&str>::with_capacity(0))) as _, + Arc::new(StringVector::from(Vec::<&str>::with_capacity(0))) as _, + ], + ) + .context(error::CreateRecordBatchSnafu)?; + Ok(Output::new_with_record_batches(records)) } pub fn show_create_table( From a622d61048a2d4198c2b67702dae123211b73d1f Mon Sep 17 00:00:00 2001 From: Yingwen Date: Wed, 29 May 2024 11:04:03 +0800 Subject: [PATCH 3/3] chore: Update src/query/src/sql.rs --- src/query/src/sql.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/query/src/sql.rs b/src/query/src/sql.rs index 2e69abbbbfd..bae83acf4c6 100644 --- a/src/query/src/sql.rs +++ b/src/query/src/sql.rs @@ -572,8 +572,8 @@ pub async fn show_status(_query_ctx: QueryContextRef) -> Result { let records = RecordBatches::try_from_columns( schema, vec![ - Arc::new(StringVector::from(Vec::<&str>::with_capacity(0))) as _, - Arc::new(StringVector::from(Vec::<&str>::with_capacity(0))) as _, + Arc::new(StringVector::from(Vec::<&str>::new())) as _, + Arc::new(StringVector::from(Vec::<&str>::new())) as _, ], ) .context(error::CreateRecordBatchSnafu)?;