Skip to content

Commit 1d0b42a

Browse files
authored
Merge pull request #7600 from Xuanwo/make-planner-depends-on-table-context
refactor: Make planner depends on TableContext trait
2 parents 0607283 + a763cac commit 1d0b42a

File tree

27 files changed

+53
-55
lines changed

27 files changed

+53
-55
lines changed

src/query/catalog/src/table_context.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,5 +111,7 @@ pub trait TableContext: Send + Sync {
111111
// Get user manager api.
112112
fn get_user_manager(&self) -> Arc<UserApiProvider>;
113113
fn get_cluster(&self) -> Arc<Cluster>;
114+
async fn get_table(&self, catalog: &str, database: &str, table: &str)
115+
-> Result<Arc<dyn Table>>;
114116
async fn get_processes_info(&self) -> Vec<ProcessInfo>;
115117
}

src/query/service/src/api/http/v1/logs.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ use tokio_stream::StreamExt;
2525
use crate::sessions::QueryContext;
2626
use crate::sessions::SessionManager;
2727
use crate::sessions::SessionType;
28+
use crate::sessions::TableContext;
2829
use crate::storages::TableStreamReadWrap;
2930
use crate::storages::ToReadDataSourcePlan;
3031

src/query/service/src/interpreters/interpreter_table_describe.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ use common_streams::SendableDataBlockStream;
2424

2525
use crate::interpreters::Interpreter;
2626
use crate::sessions::QueryContext;
27+
use crate::sessions::TableContext;
2728
use crate::sql::executor::PhysicalScalar;
2829
use crate::sql::PlanParser;
2930
use crate::storages::view::view_table::QUERY;

src/query/service/src/interpreters/interpreter_table_exists.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ use common_streams::SendableDataBlockStream;
2424

2525
use crate::interpreters::Interpreter;
2626
use crate::sessions::QueryContext;
27+
use crate::sessions::TableContext;
2728

2829
pub struct ExistsTableInterpreter {
2930
ctx: Arc<QueryContext>,

src/query/service/src/interpreters/interpreter_table_truncate.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ use common_streams::SendableDataBlockStream;
2323

2424
use crate::interpreters::Interpreter;
2525
use crate::sessions::QueryContext;
26+
use crate::sessions::TableContext;
2627

2728
pub struct TruncateTableInterpreter {
2829
ctx: Arc<QueryContext>,

src/query/service/src/optimizers/optimizer_statistics_exact.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ use common_legacy_planners::PlanRewriter;
2727

2828
use crate::optimizers::Optimizer;
2929
use crate::sessions::QueryContext;
30+
use crate::sessions::TableContext;
3031
use crate::storages::ToReadDataSourcePlan;
3132

3233
struct StatisticsExactImpl<'a> {

src/query/service/src/sessions/query_ctx.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -125,22 +125,6 @@ impl QueryContext {
125125
StageTable::try_create(table_info.clone())
126126
}
127127

128-
/// Fetch a Table by db and table name.
129-
///
130-
/// It guaranteed to return a consistent result for multiple calls, in a same query.
131-
/// E.g.:
132-
/// ```sql
133-
/// SELECT * FROM (SELECT * FROM db.table_name) as subquery_1, (SELECT * FROM db.table_name) AS subquery_2
134-
/// ```
135-
pub async fn get_table(
136-
&self,
137-
catalog: &str,
138-
database: &str,
139-
table: &str,
140-
) -> Result<Arc<dyn Table>> {
141-
self.shared.get_table(catalog, database, table).await
142-
}
143-
144128
pub async fn set_current_database(&self, new_database_name: String) -> Result<()> {
145129
let tenant_id = self.get_tenant();
146130
let catalog = self.get_catalog(self.get_current_catalog().as_str())?;
@@ -418,6 +402,22 @@ impl TableContext for QueryContext {
418402
self.shared.get_cluster()
419403
}
420404

405+
/// Fetch a Table by db and table name.
406+
///
407+
/// It guaranteed to return a consistent result for multiple calls, in a same query.
408+
/// E.g.:
409+
/// ```sql
410+
/// SELECT * FROM (SELECT * FROM db.table_name) as subquery_1, (SELECT * FROM db.table_name) AS subquery_2
411+
/// ```
412+
async fn get_table(
413+
&self,
414+
catalog: &str,
415+
database: &str,
416+
table: &str,
417+
) -> Result<Arc<dyn Table>> {
418+
self.shared.get_table(catalog, database, table).await
419+
}
420+
421421
// Get all the processes list info.
422422
async fn get_processes_info(&self) -> Vec<ProcessInfo> {
423423
SessionManager::instance().processes_info().await

src/query/service/src/sql/optimizer/heuristic/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use once_cell::sync::Lazy;
2626

2727
use super::rule::RuleID;
2828
use super::ColumnSet;
29-
use crate::sessions::QueryContext;
29+
use crate::sessions::TableContext;
3030
use crate::sql::optimizer::heuristic::decorrelate::decorrelate_subquery;
3131
use crate::sql::optimizer::heuristic::implement::HeuristicImplementor;
3232
pub use crate::sql::optimizer::heuristic::rule_list::RuleList;
@@ -65,14 +65,14 @@ pub struct HeuristicOptimizer {
6565
rules: RuleList,
6666
implementor: HeuristicImplementor,
6767

68-
_ctx: Arc<QueryContext>,
68+
_ctx: Arc<dyn TableContext>,
6969
bind_context: Box<BindContext>,
7070
metadata: MetadataRef,
7171
}
7272

7373
impl HeuristicOptimizer {
7474
pub fn new(
75-
ctx: Arc<QueryContext>,
75+
ctx: Arc<dyn TableContext>,
7676
bind_context: Box<BindContext>,
7777
metadata: MetadataRef,
7878
rules: RuleList,

src/query/service/src/sql/optimizer/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ use self::util::contains_local_table_scan;
5050
use self::util::validate_distributed_query;
5151
use super::plans::Plan;
5252
use super::BindContext;
53-
use crate::sessions::QueryContext;
53+
use crate::sessions::TableContext;
5454
pub use crate::sql::optimizer::heuristic::RuleList;
5555
pub use crate::sql::optimizer::rule::RuleID;
5656
use crate::sql::optimizer::rule::RuleSet;
@@ -74,7 +74,7 @@ impl OptimizerContext {
7474
}
7575

7676
pub fn optimize(
77-
ctx: Arc<QueryContext>,
77+
ctx: Arc<dyn TableContext>,
7878
opt_ctx: Arc<OptimizerContext>,
7979
plan: Plan,
8080
) -> Result<Plan> {
@@ -130,7 +130,7 @@ pub fn optimize(
130130
}
131131

132132
pub fn optimize_query(
133-
ctx: Arc<QueryContext>,
133+
ctx: Arc<dyn TableContext>,
134134
opt_ctx: Arc<OptimizerContext>,
135135
metadata: MetadataRef,
136136
bind_context: Box<BindContext>,

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ use common_meta_types::UserStageInfo;
3131
use common_storage::parse_uri_location;
3232
use common_storage::UriLocation;
3333

34-
use crate::sessions::TableContext;
3534
use crate::sql::binder::Binder;
3635
use crate::sql::normalize_identifier;
3736
use crate::sql::plans::CopyPlanV2;

0 commit comments

Comments
 (0)