Skip to content

Commit 8dbd8bd

Browse files
committed
Add common planner
Signed-off-by: Xuanwo <github@xuanwo.io>
1 parent 89b1367 commit 8dbd8bd

28 files changed

+81
-22
lines changed

Cargo.lock

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ members = [
3030
"src/query/functions-v2",
3131
"src/query/legacy-parser",
3232
"src/query/management",
33+
"src/query/planner",
3334
"src/query/pipeline/core",
3435
"src/query/pipeline/sinks",
3536
"src/query/pipeline/sources",

src/query/planner/Cargo.toml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "common-planner"
3+
version = "0.1.0"
4+
authors = ["Databend Authors <opensource@datafuselabs.com>"]
5+
license = "Apache-2.0"
6+
publish = false
7+
edition = "2021"
8+
9+
[dependencies]

src/query/planner/src/lib.rs

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright 2022 Datafuse Labs.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
//! Databend Planner is the core part of Databend Query, it will:
16+
//!
17+
//! - Use `Parser` (provided by `common-ast`) to parse query into AST.
18+
//! - Use `Binder` to bind query into `LogicalPlan`
19+
//! - Use `Optimizer` to optimize `LogicalPlan` into `PhysicalPlan`
20+
//!
21+
//! After all the planners work, `Interpreter` will use `PhysicalPlan` to
22+
//! build pipelines, then our processes will produce result data blocks.
23+
24+
mod metadata;
25+
pub use metadata::IndexType;

src/query/planner/src/metadata.rs

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Copyright 2022 Datafuse Labs.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
/// Planner use [`usize`] as it's index type.
16+
///
17+
/// This type will be used across the whole planner.
18+
pub type IndexType = usize;

src/query/service/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ common-pipeline-core = { path = "../pipeline/core" }
6161
common-pipeline-sinks = { path = "../pipeline/sinks" }
6262
common-pipeline-sources = { path = "../pipeline/sources" }
6363
common-pipeline-transforms = { path = "../pipeline/transforms" }
64+
common-planner = { path = "../planner" }
6465
common-settings = { path = "../settings" }
6566
common-storage = { path = "../../common/storage" }
6667
common-storages-fuse = { path = "../storages/fuse" }

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ use common_datavalues::DataSchemaRefExt;
2525
use common_datavalues::DataTypeImpl;
2626
use common_exception::ErrorCode;
2727
use common_exception::Result;
28+
use common_planner::IndexType;
2829
use parking_lot::RwLock;
2930

3031
use super::AggregateInfo;
3132
use crate::sql::normalize_identifier;
3233
use crate::sql::optimizer::SExpr;
33-
use crate::sql::planner::IndexType;
3434
use crate::sql::plans::Scalar;
3535
use crate::sql::NameResolutionContext;
3636

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@
1515
use std::collections::HashMap;
1616

1717
use common_exception::Result;
18+
use common_planner::IndexType;
1819

1920
use crate::sql::binder::Binder;
2021
use crate::sql::binder::ColumnBinding;
2122
use crate::sql::optimizer::SExpr;
2223
use crate::sql::planner::semantic::GroupingChecker;
23-
use crate::sql::planner::IndexType;
2424
use crate::sql::plans::Aggregate;
2525
use crate::sql::plans::AggregateMode;
2626
use crate::sql::plans::BoundColumnRef;

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use common_ast::ast::Indirection;
1818
use common_ast::ast::SelectTarget;
1919
use common_exception::ErrorCode;
2020
use common_exception::Result;
21+
use common_planner::IndexType;
2122

2223
use super::bind_context::NameResolutionResult;
2324
use crate::sql::binder::select::SelectItem;
@@ -31,7 +32,6 @@ use crate::sql::planner::binder::Binder;
3132
use crate::sql::planner::binder::ColumnBinding;
3233
use crate::sql::planner::semantic::normalize_identifier;
3334
use crate::sql::planner::semantic::GroupingChecker;
34-
use crate::sql::planner::IndexType;
3535
use crate::sql::plans::BoundColumnRef;
3636
use crate::sql::plans::EvalScalar;
3737
use crate::sql::plans::Project;

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ use common_ast::ast::OrderByExpr;
2121
use common_ast::DisplayError;
2222
use common_exception::ErrorCode;
2323
use common_exception::Result;
24+
use common_planner::IndexType;
2425

2526
use super::bind_context::NameResolutionResult;
2627
use crate::sql::binder::scalar::ScalarBinder;
@@ -30,7 +31,6 @@ use crate::sql::binder::ColumnBinding;
3031
use crate::sql::normalize_identifier;
3132
use crate::sql::optimizer::SExpr;
3233
use crate::sql::planner::semantic::GroupingChecker;
33-
use crate::sql::planner::IndexType;
3434
use crate::sql::plans::AggregateFunction;
3535
use crate::sql::plans::AndExpr;
3636
use crate::sql::plans::BoundColumnRef;

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ use common_datavalues::prelude::*;
3131
use common_exception::ErrorCode;
3232
use common_exception::Result;
3333
use common_legacy_planners::Expression;
34+
use common_planner::IndexType;
3435

3536
use crate::sql::binder::scalar::ScalarBinder;
3637
use crate::sql::binder::Binder;
@@ -40,7 +41,6 @@ use crate::sql::binder::Visibility;
4041
use crate::sql::optimizer::SExpr;
4142
use crate::sql::planner::semantic::normalize_identifier;
4243
use crate::sql::planner::semantic::TypeChecker;
43-
use crate::sql::planner::IndexType;
4444
use crate::sql::plans::ConstantExpr;
4545
use crate::sql::plans::LogicalGet;
4646
use crate::sql::plans::Scalar;

src/query/service/src/sql/planner/metadata.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ use std::sync::Arc;
1919
use common_ast::ast::Expr;
2020
use common_ast::ast::Literal;
2121
use common_datavalues::prelude::*;
22+
use common_planner::IndexType;
2223
use parking_lot::RwLock;
2324

2425
use crate::sql::optimizer::ColumnSet;
25-
use crate::sql::planner::IndexType;
2626
use crate::storages::Table;
2727

2828
pub static DUMMY_TABLE_INDEX: IndexType = IndexType::MAX;

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use std::sync::Arc;
2222
use common_catalog::table_context::TableContext;
2323
use common_exception::ErrorCode;
2424
use common_exception::Result;
25+
use common_planner::IndexType;
2526

2627
use super::cost::Cost;
2728
use super::cost::CostContext;
@@ -35,7 +36,6 @@ use crate::sql::optimizer::memo::Memo;
3536
use crate::sql::optimizer::rule::RuleSet;
3637
use crate::sql::optimizer::rule::TransformState;
3738
use crate::sql::optimizer::SExpr;
38-
use crate::sql::planner::IndexType;
3939
use crate::sql::plans::Operator;
4040

4141
/// A cascades-style search engine to enumerate possible alternations of a relational expression and

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ mod cost_model;
1717
use std::ops::Add;
1818

1919
use common_exception::Result;
20+
use common_planner::IndexType;
2021
pub use cost_model::DefaultCostModel;
2122

2223
use super::MExpr;
2324
use super::Memo;
24-
use crate::sql::planner::IndexType;
2525

2626
#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)]
2727
pub struct Cost(pub f64);

src/query/service/src/sql/planner/optimizer/group.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
// limitations under the License.
1414

1515
use common_exception::Result;
16+
use common_planner::IndexType;
1617

1718
use crate::sql::optimizer::m_expr::MExpr;
1819
use crate::sql::optimizer::property::RelationalProperty;
19-
use crate::sql::planner::IndexType;
2020

2121
/// `Group` is a set of logically equivalent relational expressions represented with `MExpr`.
2222
#[derive(Clone)]

src/query/service/src/sql/planner/optimizer/heuristic/decorrelate.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ use common_datavalues::DataTypeImpl;
2020
use common_datavalues::NullableType;
2121
use common_exception::ErrorCode;
2222
use common_exception::Result;
23+
use common_planner::IndexType;
2324

2425
use crate::sql::binder::wrap_cast;
2526
use crate::sql::binder::JoinPredicate;
@@ -30,7 +31,6 @@ use crate::sql::optimizer::heuristic::subquery_rewriter::UnnestResult;
3031
use crate::sql::optimizer::ColumnSet;
3132
use crate::sql::optimizer::RelExpr;
3233
use crate::sql::optimizer::SExpr;
33-
use crate::sql::planner::IndexType;
3434
use crate::sql::plans::Aggregate;
3535
use crate::sql::plans::AggregateFunction;
3636
use crate::sql::plans::AggregateMode;

src/query/service/src/sql/planner/optimizer/heuristic/subquery_rewriter.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ use common_datavalues::UInt64Type;
2222
use common_exception::ErrorCode;
2323
use common_exception::Result;
2424
use common_functions::aggregates::AggregateFunctionFactory;
25+
use common_planner::IndexType;
2526

2627
use crate::sql::binder::ColumnBinding;
2728
use crate::sql::binder::Visibility;
2829
use crate::sql::optimizer::ColumnSet;
2930
use crate::sql::optimizer::RelExpr;
3031
use crate::sql::optimizer::SExpr;
31-
use crate::sql::planner::IndexType;
3232
use crate::sql::plans::Aggregate;
3333
use crate::sql::plans::AggregateFunction;
3434
use crate::sql::plans::AggregateMode;

src/query/service/src/sql/planner/optimizer/m_expr.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414

1515
use common_exception::ErrorCode;
1616
use common_exception::Result;
17+
use common_planner::IndexType;
1718

1819
use super::group::Group;
1920
use crate::sql::optimizer::memo::Memo;
2021
use crate::sql::optimizer::pattern_extractor::PatternExtractor;
2122
use crate::sql::optimizer::rule::RulePtr;
2223
use crate::sql::optimizer::rule::TransformState;
2324
use crate::sql::optimizer::SExpr;
24-
use crate::sql::planner::IndexType;
2525
use crate::sql::plans::Operator;
2626
use crate::sql::plans::RelOperator;
2727

src/query/service/src/sql/planner/optimizer/memo.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ use std::collections::HashSet;
1616

1717
use common_exception::ErrorCode;
1818
use common_exception::Result;
19+
use common_planner::IndexType;
1920

2021
use super::RelExpr;
2122
use super::RelationalProperty;
2223
use crate::sql::optimizer::group::Group;
2324
use crate::sql::optimizer::m_expr::MExpr;
2425
use crate::sql::optimizer::s_expr::SExpr;
25-
use crate::sql::planner::IndexType;
2626
use crate::sql::plans::RelOperator;
2727

2828
/// `Memo` is a search space which memoize possible plans of a query.

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ mod stat;
1919
use std::collections::HashSet;
2020

2121
pub use builder::RelExpr;
22+
use common_planner::IndexType;
2223
pub use enforcer::require_property;
2324

24-
use crate::sql::planner::IndexType;
2525
use crate::sql::plans::Scalar;
2626

2727
pub type ColumnSet = HashSet<IndexType>;

src/query/service/src/sql/planner/optimizer/s_expr.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414

1515
use common_exception::ErrorCode;
1616
use common_exception::Result;
17+
use common_planner::IndexType;
1718

1819
use super::RelationalProperty;
1920
use crate::sql::optimizer::rule::AppliedRules;
2021
use crate::sql::optimizer::rule::RuleID;
21-
use crate::sql::planner::IndexType;
2222
use crate::sql::plans::Operator;
2323
use crate::sql::plans::PatternPlan;
2424
use crate::sql::plans::RelOp;

src/query/service/src/sql/planner/plans/eval_scalar.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313
// limitations under the License.#[derive(Clone, Debug)]
1414

1515
use common_exception::Result;
16+
use common_planner::IndexType;
1617

1718
use crate::sql::optimizer::ColumnSet;
1819
use crate::sql::optimizer::PhysicalProperty;
1920
use crate::sql::optimizer::RelExpr;
2021
use crate::sql::optimizer::RelationalProperty;
2122
use crate::sql::optimizer::RequiredProperty;
22-
use crate::sql::planner::IndexType;
2323
use crate::sql::plans::LogicalOperator;
2424
use crate::sql::plans::Operator;
2525
use crate::sql::plans::PhysicalOperator;

src/query/service/src/sql/planner/plans/hash_join.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313
// limitations under the License.
1414

1515
use common_exception::Result;
16+
use common_planner::IndexType;
1617

1718
use super::JoinType;
1819
use crate::sql::optimizer::Distribution;
1920
use crate::sql::optimizer::PhysicalProperty;
2021
use crate::sql::optimizer::RelExpr;
2122
use crate::sql::optimizer::RequiredProperty;
22-
use crate::sql::planner::IndexType;
2323
use crate::sql::plans::LogicalOperator;
2424
use crate::sql::plans::Operator;
2525
use crate::sql::plans::PhysicalOperator;

src/query/service/src/sql/planner/plans/logical_get.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414

1515
use common_catalog::table::TableStatistics;
1616
use common_exception::Result;
17+
use common_planner::IndexType;
1718
use itertools::Itertools;
1819

1920
use crate::sql::optimizer::ColumnSet;
2021
use crate::sql::optimizer::RelExpr;
2122
use crate::sql::optimizer::RelationalProperty;
22-
use crate::sql::planner::IndexType;
2323
use crate::sql::plans::LogicalOperator;
2424
use crate::sql::plans::Operator;
2525
use crate::sql::plans::PhysicalOperator;

src/query/service/src/sql/planner/plans/logical_join.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ use std::fmt::Display;
1616
use std::fmt::Formatter;
1717

1818
use common_exception::Result;
19+
use common_planner::IndexType;
1920

2021
use super::ScalarExpr;
2122
use crate::sql::optimizer::RelExpr;
2223
use crate::sql::optimizer::RelationalProperty;
23-
use crate::sql::planner::IndexType;
2424
use crate::sql::plans::LogicalOperator;
2525
use crate::sql::plans::Operator;
2626
use crate::sql::plans::PhysicalOperator;

src/query/service/src/sql/planner/plans/physical_scan.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use std::hash::Hash;
1616

1717
use common_exception::Result;
18+
use common_planner::IndexType;
1819
use itertools::Itertools;
1920

2021
use super::logical_get::Prewhere;
@@ -23,7 +24,6 @@ use crate::sql::optimizer::Distribution;
2324
use crate::sql::optimizer::PhysicalProperty;
2425
use crate::sql::optimizer::RelExpr;
2526
use crate::sql::optimizer::RequiredProperty;
26-
use crate::sql::planner::IndexType;
2727
use crate::sql::plans::LogicalOperator;
2828
use crate::sql::plans::Operator;
2929
use crate::sql::plans::PhysicalOperator;

src/query/service/src/sql/planner/plans/scalar.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ use common_datavalues::DataValue;
2121
use common_exception::ErrorCode;
2222
use common_exception::Result;
2323
use common_functions::scalars::FunctionFactory;
24+
use common_planner::IndexType;
2425

2526
use crate::sql::binder::ColumnBinding;
2627
use crate::sql::optimizer::ColumnSet;
2728
use crate::sql::optimizer::SExpr;
28-
use crate::sql::planner::IndexType;
2929

3030
pub trait ScalarExpr {
3131
/// Get return type and nullability

0 commit comments

Comments
 (0)