Skip to content

Commit

Permalink
feat(cubesql): Execute SHOW DATABASES from AST
Browse files Browse the repository at this point in the history
  • Loading branch information
ovr committed Nov 2, 2021
1 parent da96a22 commit cd2b4ac
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 29 deletions.
32 changes: 31 additions & 1 deletion rust/cubesql/src/compile/mod.rs
Expand Up @@ -10,7 +10,7 @@ use datafusion::{logical_plan::LogicalPlan, prelude::*};
use log::{debug, trace};
use serde::Serialize;
use serde_json::json;
use sqlparser::ast;
use sqlparser::ast::{self, Ident, ObjectName};
use sqlparser::parser::Parser;

use cubeclient::models::{
Expand Down Expand Up @@ -1009,6 +1009,9 @@ impl QueryPlanner {
vec![],
))));
}
ast::Statement::ShowVariable { variable } => {
return self.show_variable_to_plan(&variable);
}
// Proxy some queries to DF
ast::Statement::ShowColumns { .. } | ast::Statement::ShowVariable { .. } => {
return self.create_df_logical_plan(stmt.clone());
Expand Down Expand Up @@ -1124,6 +1127,33 @@ impl QueryPlanner {
}
}

fn show_variable_to_plan(&self, variable: &Vec<Ident>) -> CompilationResult<QueryPlan> {
let name = ObjectName(variable.to_vec()).to_string();
if name.eq_ignore_ascii_case("databases") || name.eq_ignore_ascii_case("schemas") {
return Ok(QueryPlan::Meta(Arc::new(dataframe::DataFrame::new(
vec![dataframe::Column::new(
"Database".to_string(),
ColumnType::MYSQL_TYPE_STRING,
)],
vec![
dataframe::Row::new(vec![dataframe::TableValue::String("db".to_string())]),
dataframe::Row::new(vec![dataframe::TableValue::String(
"information_schema".to_string(),
)]),
dataframe::Row::new(vec![dataframe::TableValue::String("mysql".to_string())]),
dataframe::Row::new(vec![dataframe::TableValue::String(
"performance_schema".to_string(),
)]),
dataframe::Row::new(vec![dataframe::TableValue::String("sys".to_string())]),
],
))));
} else {
return self.create_df_logical_plan(ast::Statement::ShowVariable {
variable: variable.clone(),
});
}
}

fn create_df_logical_plan(&self, stmt: ast::Statement) -> CompilationResult<QueryPlan> {
let mut ctx = ExecutionContext::new();

Expand Down
28 changes: 0 additions & 28 deletions rust/cubesql/src/mysql/mod.rs
Expand Up @@ -183,34 +183,6 @@ impl Backend {
)
),
)
} else if query_lower.eq("show schemas") || query_lower.eq("show databases") {
return Ok(
Arc::new(
dataframe::DataFrame::new(
vec![dataframe::Column::new(
"Database".to_string(),
ColumnType::MYSQL_TYPE_STRING,
)],
vec![
dataframe::Row::new(vec![
dataframe::TableValue::String("db".to_string())
]),
dataframe::Row::new(vec![
dataframe::TableValue::String("information_schema".to_string())
]),
dataframe::Row::new(vec![
dataframe::TableValue::String("mysql".to_string())
]),
dataframe::Row::new(vec![
dataframe::TableValue::String("performance_schema".to_string())
]),
dataframe::Row::new(vec![
dataframe::TableValue::String("sys".to_string())
])
]
)
),
)
} else if query_lower.eq("select connection_id()") {
return Ok(
Arc::new(
Expand Down

0 comments on commit cd2b4ac

Please sign in to comment.