Skip to content

Commit 1da0789

Browse files
authored
Merge pull request #7711 from Xuanwo/planner-cleanup
refactor: Cleanup planner to make space for saying goodbye
2 parents fa1fba8 + 77e3989 commit 1da0789

File tree

12 files changed

+48
-15
lines changed

12 files changed

+48
-15
lines changed

src/query/catalog/src/catalog.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,4 +171,6 @@ pub trait Catalog: DynClone + Send + Sync {
171171
fn get_table_engines(&self) -> Vec<StorageDescription> {
172172
unimplemented!()
173173
}
174+
175+
fn is_case_insensitive_db(&self, db: &str) -> bool;
174176
}

src/query/catalog/src/cluster_info.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,24 @@ pub struct Cluster {
2020
pub local_id: String,
2121
pub nodes: Vec<Arc<NodeInfo>>,
2222
}
23+
24+
impl Cluster {
25+
/// If this cluster is empty?
26+
///
27+
/// # Note
28+
///
29+
/// Cluster empty means:
30+
///
31+
/// - There is no active node (is this possible?).
32+
/// - There is only one node (myself).
33+
///
34+
/// # TODO
35+
///
36+
/// From @Xuanwo
37+
///
38+
/// Ideally, we should implement a cluster trait to replace `ClusterHelper`
39+
/// defined in `databend-query`.
40+
pub fn is_empty(&self) -> bool {
41+
self.nodes.len() <= 1
42+
}
43+
}

src/query/service/src/catalogs/default/database_catalog.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,6 @@ impl DatabaseCatalog {
9292
);
9393
Ok(res)
9494
}
95-
96-
pub fn is_case_insensitive_db(db: &str) -> bool {
97-
db.to_uppercase() == "INFORMATION_SCHEMA"
98-
}
9995
}
10096

10197
#[async_trait::async_trait]
@@ -104,14 +100,18 @@ impl Catalog for DatabaseCatalog {
104100
self
105101
}
106102

103+
fn is_case_insensitive_db(&self, db: &str) -> bool {
104+
db.to_uppercase() == "INFORMATION_SCHEMA"
105+
}
106+
107107
async fn get_database(&self, tenant: &str, db_name: &str) -> Result<Arc<dyn Database>> {
108108
if tenant.is_empty() {
109109
return Err(ErrorCode::TenantIsEmpty(
110110
"Tenant can not empty(while get database)",
111111
));
112112
}
113113

114-
let db_name = if Self::is_case_insensitive_db(db_name) {
114+
let db_name = if self.is_case_insensitive_db(db_name) {
115115
db_name.to_uppercase()
116116
} else {
117117
db_name.to_string()
@@ -243,7 +243,7 @@ impl Catalog for DatabaseCatalog {
243243
));
244244
}
245245

246-
let (db_name, table_name) = if Self::is_case_insensitive_db(db_name) {
246+
let (db_name, table_name) = if self.is_case_insensitive_db(db_name) {
247247
(db_name.to_uppercase(), table_name.to_uppercase())
248248
} else {
249249
(db_name.to_string(), table_name.to_string())
@@ -274,7 +274,7 @@ impl Catalog for DatabaseCatalog {
274274
));
275275
}
276276

277-
let db_name = if Self::is_case_insensitive_db(db_name) {
277+
let db_name = if self.is_case_insensitive_db(db_name) {
278278
db_name.to_uppercase()
279279
} else {
280280
db_name.to_string()
@@ -304,7 +304,7 @@ impl Catalog for DatabaseCatalog {
304304
));
305305
}
306306

307-
let db_name = if Self::is_case_insensitive_db(db_name) {
307+
let db_name = if self.is_case_insensitive_db(db_name) {
308308
db_name.to_uppercase()
309309
} else {
310310
db_name.to_string()

src/query/service/src/catalogs/default/immutable_catalog.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ impl Catalog for ImmutableCatalog {
8787
self
8888
}
8989

90+
fn is_case_insensitive_db(&self, _: &str) -> bool {
91+
unimplemented!()
92+
}
93+
9094
async fn get_database(&self, _tenant: &str, db_name: &str) -> Result<Arc<dyn Database>> {
9195
match db_name {
9296
"system" => Ok(self.sys_db.clone()),

src/query/service/src/catalogs/default/mutable_catalog.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,10 @@ impl Catalog for MutableCatalog {
148148
self
149149
}
150150

151+
fn is_case_insensitive_db(&self, _: &str) -> bool {
152+
unimplemented!()
153+
}
154+
151155
async fn get_database(&self, tenant: &str, db_name: &str) -> Result<Arc<dyn Database>> {
152156
let db_info = self
153157
.ctx

src/query/service/src/interpreters/interpreter_select.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ use common_exception::Result;
1919
use common_legacy_planners::PlanNode;
2020
use common_legacy_planners::SelectPlan;
2121

22-
use crate::clusters::ClusterHelper;
2322
use crate::interpreters::plan_schedulers;
2423
use crate::interpreters::Interpreter;
2524
use crate::optimizers::Optimizers;

src/query/service/src/interpreters/interpreter_select_v2.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ use common_datavalues::DataSchemaRef;
1818
use common_exception::Result;
1919

2020
use super::plan_schedulers::schedule_query_v2;
21-
use crate::clusters::ClusterHelper;
2221
use crate::interpreters::Interpreter;
2322
use crate::pipelines::PipelineBuildResult;
2423
use crate::sessions::QueryContext;

src/query/service/src/optimizers/optimizer_scatters.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ use common_legacy_planners::StagePlan;
3434
use common_legacy_planners::WindowFuncPlan;
3535
use enum_extract::let_extract;
3636

37-
use crate::clusters::ClusterHelper;
3837
use crate::optimizers::Optimizer;
3938
use crate::sessions::QueryContext;
4039
use crate::sessions::TableContext;

src/query/service/src/sql/planner/binder/ddl/table.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ use common_legacy_planners::*;
3838
use common_meta_app::schema::TableMeta;
3939
use tracing::debug;
4040

41-
use crate::catalogs::DatabaseCatalog;
4241
use crate::sql::binder::scalar::ScalarBinder;
4342
use crate::sql::binder::Binder;
4443
use crate::sql::binder::Visibility;
@@ -141,7 +140,11 @@ impl<'a> Binder {
141140
.map(|ident| normalize_identifier(ident, &self.name_resolution_ctx).name)
142141
.unwrap_or_else(|| self.ctx.get_current_database());
143142

144-
if DatabaseCatalog::is_case_insensitive_db(database.as_str()) {
143+
if self
144+
.ctx
145+
.get_catalog(&self.ctx.get_current_catalog())?
146+
.is_case_insensitive_db(database.as_str())
147+
{
145148
database = database.to_uppercase();
146149
}
147150

src/query/service/src/sql/planner/binder/insert.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ use common_datavalues::DataSchemaRefExt;
2121
use common_exception::Result;
2222
use tracing::debug;
2323

24-
use crate::clusters::ClusterHelper;
2524
use crate::sql::binder::Binder;
2625
use crate::sql::normalize_identifier;
2726
use crate::sql::optimizer::optimize;

0 commit comments

Comments
 (0)