mirror of
https://github.com/rustfs/rustfs.git
synced 2026-05-20 09:40:43 +08:00
47 lines
1.2 KiB
Rust
47 lines
1.2 KiB
Rust
use std::sync::Arc;
|
|
|
|
use api::{
|
|
query::{
|
|
execution::{QueryExecutionFactory, QueryExecutionRef, QueryStateMachineRef},
|
|
logical_planner::Plan,
|
|
optimizer::Optimizer,
|
|
scheduler::SchedulerRef,
|
|
},
|
|
QueryError,
|
|
};
|
|
use async_trait::async_trait;
|
|
|
|
use super::query::SqlQueryExecution;
|
|
|
|
pub type QueryExecutionFactoryRef = Arc<dyn QueryExecutionFactory + Send + Sync>;
|
|
|
|
pub struct SqlQueryExecutionFactory {
|
|
optimizer: Arc<dyn Optimizer + Send + Sync>,
|
|
scheduler: SchedulerRef,
|
|
}
|
|
|
|
impl SqlQueryExecutionFactory {
|
|
#[inline(always)]
|
|
pub fn new(optimizer: Arc<dyn Optimizer + Send + Sync>, scheduler: SchedulerRef) -> Self {
|
|
Self { optimizer, scheduler }
|
|
}
|
|
}
|
|
|
|
#[async_trait]
|
|
impl QueryExecutionFactory for SqlQueryExecutionFactory {
|
|
async fn create_query_execution(
|
|
&self,
|
|
plan: Plan,
|
|
state_machine: QueryStateMachineRef,
|
|
) -> Result<QueryExecutionRef, QueryError> {
|
|
match plan {
|
|
Plan::Query(query_plan) => Ok(Arc::new(SqlQueryExecution::new(
|
|
state_machine,
|
|
query_plan,
|
|
self.optimizer.clone(),
|
|
self.scheduler.clone(),
|
|
))),
|
|
}
|
|
}
|
|
}
|