Skip to content

Commit 5d05445

Browse files
committed
fix: use predicate without region
Signed-off-by: discord9 <[email protected]>
1 parent 779dc9e commit 5d05445

File tree

6 files changed

+46
-42
lines changed

6 files changed

+46
-42
lines changed

src/mito2/src/read/scan_region.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,9 +1106,8 @@ impl ScanInput {
11061106
rows
11071107
}
11081108

1109-
/// Returns table predicate of all exprs.
1110-
pub(crate) fn predicate(&self) -> Option<&Predicate> {
1111-
self.predicate.predicate()
1109+
pub(crate) fn predicate_group(&self) -> &PredicateGroup {
1110+
&self.predicate
11121111
}
11131112

11141113
/// Returns number of memtables to scan.

src/mito2/src/read/seq_scan.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -632,8 +632,12 @@ impl RegionScanner for SeqScan {
632632
Ok(())
633633
}
634634

635-
fn has_predicate(&self) -> bool {
636-
let predicate = self.stream_ctx.input.predicate();
635+
fn has_predicate_without_region(&self) -> bool {
636+
let predicate = self
637+
.stream_ctx
638+
.input
639+
.predicate_group()
640+
.predicate_without_region();
637641
predicate.map(|p| !p.exprs().is_empty()).unwrap_or(false)
638642
}
639643

src/mito2/src/read/series_scan.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,8 +314,12 @@ impl RegionScanner for SeriesScan {
314314
Ok(())
315315
}
316316

317-
fn has_predicate(&self) -> bool {
318-
let predicate = self.stream_ctx.input.predicate();
317+
fn has_predicate_without_region(&self) -> bool {
318+
let predicate = self
319+
.stream_ctx
320+
.input
321+
.predicate_group()
322+
.predicate_without_region();
319323
predicate.map(|p| !p.exprs().is_empty()).unwrap_or(false)
320324
}
321325

src/mito2/src/read/unordered_scan.rs

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -427,19 +427,15 @@ impl RegionScanner for UnorderedScan {
427427
.map_err(BoxedError::new)
428428
}
429429

430-
fn has_predicate(&self) -> bool {
431-
let predicate = self.stream_ctx.input.predicate();
432-
predicate
433-
.map(|p| {
434-
if self.metadata().partition_expr.is_some() {
435-
// If there's partition expression, there must be at least one more expression to be a real predicate. As partition expr is always included in predicate.
436-
// TODO(discord9): better way to check for partition expr?
437-
p.exprs().len() > 1
438-
} else {
439-
!p.exprs().is_empty()
440-
}
441-
})
442-
.unwrap_or(false)
430+
/// If this scanner have predicate other than region partition exprs
431+
fn has_predicate_without_region(&self) -> bool {
432+
let predicate = self
433+
.stream_ctx
434+
.input
435+
.predicate_group()
436+
.predicate_without_region();
437+
438+
predicate.map(|p| !p.exprs().is_empty()).unwrap_or(false)
443439
}
444440

445441
fn set_logical_region(&mut self, logical_region: bool) {

src/store-api/src/region_engine.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -444,8 +444,8 @@ pub trait RegionScanner: Debug + DisplayAs + Send {
444444
partition: usize,
445445
) -> Result<SendableRecordBatchStream, BoxedError>;
446446

447-
/// Check if there is any predicate that may be executed in this scanner.
448-
fn has_predicate(&self) -> bool;
447+
/// Check if there is any predicate exclude region partition exprs that may be executed in this scanner.
448+
fn has_predicate_without_region(&self) -> bool;
449449

450450
/// Sets whether the scanner is reading a logical region.
451451
fn set_logical_region(&mut self, logical_region: bool);
@@ -857,7 +857,7 @@ impl RegionScanner for SinglePartitionScanner {
857857
Ok(result.unwrap())
858858
}
859859

860-
fn has_predicate(&self) -> bool {
860+
fn has_predicate_without_region(&self) -> bool {
861861
false
862862
}
863863

src/table/src/table/scan.rs

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -335,25 +335,26 @@ impl ExecutionPlan for RegionScanExec {
335335
return Ok(Statistics::new_unknown(self.schema().as_ref()));
336336
}
337337

338-
let statistics = if self.append_mode && !self.scanner.lock().unwrap().has_predicate() {
339-
let column_statistics = self
340-
.arrow_schema
341-
.fields
342-
.iter()
343-
.map(|_| ColumnStatistics {
344-
distinct_count: Precision::Exact(self.total_rows),
345-
null_count: Precision::Exact(0), // all null rows are counted for append-only table
346-
..Default::default()
347-
})
348-
.collect();
349-
Statistics {
350-
num_rows: Precision::Exact(self.total_rows),
351-
total_byte_size: Default::default(),
352-
column_statistics,
353-
}
354-
} else {
355-
Statistics::new_unknown(&self.arrow_schema)
356-
};
338+
let statistics =
339+
if self.append_mode && !self.scanner.lock().unwrap().has_predicate_without_region() {
340+
let column_statistics = self
341+
.arrow_schema
342+
.fields
343+
.iter()
344+
.map(|_| ColumnStatistics {
345+
distinct_count: Precision::Exact(self.total_rows),
346+
null_count: Precision::Exact(0), // all null rows are counted for append-only table
347+
..Default::default()
348+
})
349+
.collect();
350+
Statistics {
351+
num_rows: Precision::Exact(self.total_rows),
352+
total_byte_size: Default::default(),
353+
column_statistics,
354+
}
355+
} else {
356+
Statistics::new_unknown(&self.arrow_schema)
357+
};
357358
Ok(statistics)
358359
}
359360

0 commit comments

Comments
 (0)