Skip to content

Commit

Permalink
Merge pull request #156 from sundy-li/show-queries
Browse files Browse the repository at this point in the history
[plan] add show queries statement support
  • Loading branch information
BohuTANG committed Mar 18, 2021
2 parents 616a5df + 8f00a9d commit b63b43b
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 1 deletion.
10 changes: 10 additions & 0 deletions src/sql/plan_parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,16 @@ impl PlanParser {
DFStatement::Statement(v) => self.sql_statement_to_plan(&v),
DFStatement::Explain(v) => self.sql_explain_to_plan(&v),
DFStatement::Create(v) => self.sql_create_to_plan(&v),

// TODO: support like and other filters in show queries
DFStatement::ShowTables(_) => self.build_from_sql(
format!(
"SELECT name FROM system.tables where database = '{}'",
self.ctx.get_default_db()?
)
.as_str(),
),
DFStatement::ShowSettings(_) => self.build_from_sql("SELECT name FROM system.settings"),
}
}

Expand Down
19 changes: 19 additions & 0 deletions src/sql/sql_parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,11 @@ pub struct FuseCreateTable {
pub table_properties: Vec<SqlOption>,
}

#[derive(Debug, Clone, PartialEq)]
pub struct FuseShowTables;
#[derive(Debug, Clone, PartialEq)]
pub struct FuseShowSettings;

/// DataFusion extension DDL for `EXPLAIN` and `EXPLAIN VERBOSE`
#[derive(Debug, Clone, PartialEq)]
pub struct DFExplainPlan {
Expand All @@ -75,6 +80,8 @@ pub enum DFStatement {
/// Extension: `EXPLAIN <SQL>`
Explain(DFExplainPlan),
Create(FuseCreateTable),
ShowTables(FuseShowTables),
ShowSettings(FuseShowSettings),
}

/// SQL Parser
Expand Down Expand Up @@ -153,6 +160,18 @@ impl<'a> DFParser<'a> {
self.parser.next_token();
self.parse_explain()
}

Keyword::SHOW => {
self.parser.next_token();

if self.consume_token("TABLES") {
Ok(DFStatement::ShowTables(FuseShowTables))
} else if self.consume_token("SETTINGS") {
Ok(DFStatement::ShowSettings(FuseShowSettings))
} else {
self.expected("tables or settings", self.parser.peek_token())
}
}
_ => {
// use the native parser
Ok(DFStatement::Statement(self.parser.parse_statement()?))
Expand Down
11 changes: 10 additions & 1 deletion src/sql/sql_parser_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ mod tests {
use sqlparser::ast::{ColumnDef, DataType, Ident, ObjectName, SqlOption, Value};
use sqlparser::parser::ParserError;

use crate::sql::sql_parser::FuseCreateTable;
use crate::sql::sql_parser::{FuseCreateTable, FuseShowSettings, FuseShowTables};
use crate::sql::{DFParser, DFStatement, EngineType};

fn expect_parse_ok(sql: &str, expected: DFStatement) -> Result<(), ParserError> {
Expand Down Expand Up @@ -98,4 +98,13 @@ mod tests {

Ok(())
}

#[test]
fn show_queries() -> Result<(), ParserError> {
// positive case
expect_parse_ok("SHOW TABLES", DFStatement::ShowTables(FuseShowTables))?;
expect_parse_ok("SHOW SETTINGS", DFStatement::ShowSettings(FuseShowSettings))?;

Ok(())
}
}
1 change: 1 addition & 0 deletions tests/queries/0_stateless/00012_show_queries.reference
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
t
2 changes: 2 additions & 0 deletions tests/queries/0_stateless/00012_show_queries.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
CREATE TABLE t(c1 int) ENGINE = Null;
SHOW TABLES;

0 comments on commit b63b43b

Please sign in to comment.