Skip to content

Commit c3c3e70

Browse files
authored
chore: Using an ordered BTreeSet instead of a HashSet as a ColumnSet implementation (#17747)
* update * fix
1 parent 9b6639e commit c3c3e70

File tree

69 files changed

+131
-159
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+131
-159
lines changed

src/query/expression/src/block.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ use crate::types::AnyType;
2626
use crate::types::DataType;
2727
use crate::Column;
2828
use crate::ColumnBuilder;
29+
use crate::ColumnSet;
2930
use crate::DataField;
3031
use crate::DataSchemaRef;
3132
use crate::Domain;
@@ -562,7 +563,7 @@ impl DataBlock {
562563
}
563564

564565
#[inline]
565-
pub fn project(mut self, projections: &HashSet<usize>) -> Self {
566+
pub fn project(mut self, projections: &ColumnSet) -> Self {
566567
let mut columns = Vec::with_capacity(projections.len());
567568
for (index, column) in self.columns.into_iter().enumerate() {
568569
if !projections.contains(&index) {
@@ -575,7 +576,7 @@ impl DataBlock {
575576
}
576577

577578
#[inline]
578-
pub fn project_with_agg_index(self, projections: &HashSet<usize>, num_evals: usize) -> Self {
579+
pub fn project_with_agg_index(self, projections: &ColumnSet, num_evals: usize) -> Self {
579580
let mut columns = Vec::with_capacity(projections.len());
580581
let eval_offset = self.columns.len() - num_evals;
581582
for (index, column) in self.columns.into_iter().enumerate() {

src/query/expression/src/filter/filter_executor.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313
// limitations under the License.
1414

1515
use core::ops::Range;
16-
use std::collections::HashSet;
1716

1817
use databend_common_column::bitmap::MutableBitmap;
1918
use databend_common_exception::Result;
2019

2120
use crate::filter::SelectExpr;
2221
use crate::filter::Selector;
22+
use crate::ColumnSet;
2323
use crate::DataBlock;
2424
use crate::Evaluator;
2525
use crate::Expr;
@@ -35,7 +35,7 @@ pub struct FilterExecutor {
3535
true_selection: Vec<u32>,
3636
false_selection: Vec<u32>,
3737
has_or: bool,
38-
projections: Option<HashSet<usize>>,
38+
projections: Option<ColumnSet>,
3939
max_block_size: usize,
4040
selection_range: Vec<Range<u32>>,
4141
fn_registry: &'static FunctionRegistry,
@@ -47,7 +47,7 @@ impl FilterExecutor {
4747
expr: Expr,
4848
func_ctx: FunctionContext,
4949
max_block_size: usize,
50-
projections: Option<HashSet<usize>>,
50+
projections: Option<ColumnSet>,
5151
fn_registry: &'static FunctionRegistry,
5252
keep_order: bool,
5353
) -> Self {

src/query/expression/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,6 @@ pub mod expr {
9898
pub use super::expression::FunctionCall;
9999
pub use super::expression::LambdaFunctionCall;
100100
}
101+
102+
type IndexType = usize;
103+
type ColumnSet = std::collections::BTreeSet<IndexType>;

src/query/functions/tests/it/aggregates/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ pub fn run_agg_ast(
7878
let used_columns = raw_expr
7979
.column_refs()
8080
.keys()
81-
.cloned()
81+
.copied()
8282
.sorted()
8383
.collect::<Vec<_>>();
8484

src/query/service/src/interpreters/interpreter_explain.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ use databend_common_pipeline_core::ExecutionInfo;
3434
use databend_common_sql::binder::ExplainConfig;
3535
use databend_common_sql::executor::format_partial_tree;
3636
use databend_common_sql::executor::MutationBuildInfo;
37-
use databend_common_sql::optimizer::ir::ColumnSet;
3837
use databend_common_sql::plans::Mutation;
3938
use databend_common_sql::BindContext;
39+
use databend_common_sql::ColumnSet;
4040
use databend_common_sql::FormatOptions;
4141
use databend_common_sql::MetadataRef;
4242
use databend_common_storages_result_cache::gen_result_cache_key;

src/query/service/src/interpreters/interpreter_optimize_compact_block.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
use std::collections::HashSet;
1615
use std::sync::Arc;
1716

1817
use databend_common_base::runtime::GlobalIORuntime;
@@ -23,6 +22,7 @@ use databend_common_pipeline_core::ExecutionInfo;
2322
use databend_common_sql::executor::PhysicalPlanBuilder;
2423
use databend_common_sql::optimizer::ir::SExpr;
2524
use databend_common_sql::plans::OptimizeCompactBlock;
25+
use databend_common_sql::ColumnSet;
2626
use databend_common_sql::MetadataRef;
2727

2828
use crate::interpreters::interpreter_optimize_purge::purge;
@@ -83,7 +83,7 @@ impl Interpreter for OptimizeCompactBlockInterpreter {
8383

8484
let mut build_res = PipelineBuildResult::create();
8585
let mut builder = PhysicalPlanBuilder::new(MetadataRef::default(), self.ctx.clone(), false);
86-
match builder.build(&self.s_expr, HashSet::new()).await {
86+
match builder.build(&self.s_expr, ColumnSet::new()).await {
8787
Ok(physical_plan) => {
8888
build_res =
8989
build_query_pipeline_without_render_result_set(&self.ctx, &physical_plan)

src/query/service/src/pipelines/builders/builder_insert_multi_table.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
// limitations under the License.
1414

1515
use std::collections::HashMap;
16-
use std::collections::HashSet;
1716
use std::sync::Arc;
1817

1918
use databend_common_catalog::catalog::CatalogManager;
@@ -34,6 +33,7 @@ use databend_common_sql::executor::physical_plans::ChunkFilter;
3433
use databend_common_sql::executor::physical_plans::ChunkMerge;
3534
use databend_common_sql::executor::physical_plans::Duplicate;
3635
use databend_common_sql::executor::physical_plans::Shuffle;
36+
use databend_common_sql::ColumnSet;
3737
use databend_common_storages_fuse::operations::CommitMultiTableInsert;
3838
use databend_common_storages_fuse::FuseTable;
3939
use databend_common_storages_fuse::TableContext;
@@ -60,7 +60,7 @@ impl PipelineBuilder {
6060
return Ok(());
6161
}
6262
let mut f: Vec<DynTransformBuilder> = Vec::with_capacity(plan.predicates.len());
63-
let projection: HashSet<_> = (0..plan.input.output_schema()?.fields.len()).collect();
63+
let projection: ColumnSet = (0..plan.input.output_schema()?.fields.len()).collect();
6464
for predicate in plan.predicates.iter() {
6565
if let Some(predicate) = predicate {
6666
f.push(Box::new(self.filter_transform_builder(

src/query/service/src/pipelines/builders/transform_builder.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
use std::collections::HashSet;
1615
use std::sync::Arc;
1716

1817
use databend_common_exception::ErrorCode;
@@ -50,11 +49,12 @@ use crate::pipelines::processors::TransformCastSchema;
5049
use crate::pipelines::processors::TransformResortAddOn;
5150
use crate::pipelines::PipelineBuilder;
5251
use crate::sql::executor::physical_plans::MutationKind;
52+
5353
impl PipelineBuilder {
5454
pub(crate) fn filter_transform_builder(
5555
&self,
5656
predicates: &[RemoteExpr],
57-
projections: HashSet<usize>,
57+
projections: ColumnSet,
5858
) -> Result<impl Fn(Arc<InputPort>, Arc<OutputPort>) -> Result<ProcessorPtr>> {
5959
let predicate = predicates
6060
.iter()

src/query/service/src/pipelines/processors/transforms/hash_join/transform_hash_join_probe.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ use databend_common_exception::ErrorCode;
2121
use databend_common_exception::Result;
2222
use databend_common_expression::DataBlock;
2323
use databend_common_expression::FunctionContext;
24-
use databend_common_sql::optimizer::ir::ColumnSet;
2524
use databend_common_sql::plans::JoinType;
25+
use databend_common_sql::ColumnSet;
2626

2727
use crate::pipelines::processors::transforms::hash_join::transform_hash_join_build::HashTableType;
2828
use crate::pipelines::processors::transforms::hash_join::HashJoinProbeState;

src/query/service/src/pipelines/processors/transforms/transform_filter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use databend_common_expression::FunctionContext;
2525
use databend_common_functions::BUILTIN_FUNCTIONS;
2626
use databend_common_pipeline_transforms::processors::BlockingTransform;
2727
use databend_common_pipeline_transforms::processors::BlockingTransformer;
28-
use databend_common_sql::optimizer::ir::ColumnSet;
28+
use databend_common_sql::ColumnSet;
2929

3030
use crate::pipelines::processors::InputPort;
3131
use crate::pipelines::processors::OutputPort;

0 commit comments

Comments
 (0)