Skip to content

Commit 10d4eb3

Browse files
committed
Merge develop
Signed-off-by: Nicholas Gates <[email protected]>
1 parent e0367fe commit 10d4eb3

File tree

5 files changed

+41
-28
lines changed

5 files changed

+41
-28
lines changed

vortex-array/src/arrays/varbinview/vtable/mod.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,7 @@ impl VTable for VarBinViewVTable {
117117
array.validity_mask(),
118118
)
119119
.into()
120-
})
121-
.into(),
120+
}),
122121
DType::Binary(_) => ready(unsafe {
123122
BinaryVector::new_unchecked(
124123
array.views().clone(),

vortex-array/src/expr/expression.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use vortex_dtype::DType;
1414
use vortex_error::VortexExpect;
1515
use vortex_error::VortexResult;
1616
use vortex_error::vortex_ensure;
17+
use vortex_error::vortex_panic;
1718

1819
use crate::ArrayRef;
1920
use crate::expr::Root;
@@ -123,11 +124,12 @@ impl Expression {
123124
}
124125

125126
/// Evaluates the expression in the given scope, returning an array.
126-
pub fn evaluate(&self, scope: &ArrayRef) -> VortexResult<ArrayRef> {
127-
if self.is::<Root>() {
128-
return Ok(scope.clone());
129-
}
130-
self.scalar_fn.evaluate(self, scope)
127+
pub fn evaluate(&self, _scope: &ArrayRef) -> VortexResult<ArrayRef> {
128+
vortex_panic!("DEPRECATED");
129+
// if self.is::<Root>() {
130+
// return Ok(scope.clone());
131+
// }
132+
// self.scalar_fn.evaluate(self, scope)
131133
}
132134

133135
/// An expression over zone-statistics which implies all records in the zone evaluate to false.

vortex-array/src/expr/exprs/like.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ impl VTable for Like {
128128
(true, true) => arrow_string::like::nilike(child.as_ref(), pattern.as_ref()),
129129
}?;
130130

131-
Ok(Datum::Vector(array.into_vector()?.into()).into())
131+
Ok(Datum::Vector(array.into_vector()?.into()))
132132
}
133133

134134
fn is_null_sensitive(&self, _instance: &Self::Options) -> bool {

vortex-layout/src/layouts/zoned/reader.rs

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ pub struct ZonedReader {
4949
layout: ZonedLayout,
5050
name: Arc<str>,
5151
lazy_children: LazyReaderChildren,
52+
session: VortexSession,
5253

5354
/// A cache of expr -> optional pruning result (applying the pruning expr to the zone map)
5455
pruning_result: LazyLock<DashMap<Expression, Option<SharedPruningResult>>>,
@@ -78,13 +79,14 @@ impl ZonedReader {
7879
dtypes,
7980
names,
8081
segment_source.clone(),
81-
session,
82+
session.clone(),
8283
);
8384

8485
Ok(Self {
8586
layout,
8687
name,
8788
lazy_children,
89+
session,
8890
pruning_result: Default::default(),
8991
zone_map: Default::default(),
9092
pruning_predicates: Default::default(),
@@ -159,21 +161,24 @@ impl ZonedReader {
159161
log::debug!("Constructed pruning predicate for expr: {expr}: {predicate:?}");
160162
let zone_map = self.zone_map();
161163
let dynamic_updates = DynamicExprUpdates::new(&expr);
164+
let session = self.session.clone();
162165

163166
Some(
164167
async move {
165168
let zone_map = zone_map.await?;
166-
let initial_mask = zone_map.prune(&predicate).map_err(|err| {
167-
err.with_context(format!(
168-
"While evaluating pruning predicate {} (derived from {})",
169-
predicate, expr
170-
))
171-
})?;
169+
let initial_mask =
170+
zone_map.prune(&predicate, &session).map_err(|err| {
171+
err.with_context(format!(
172+
"While evaluating pruning predicate {} (derived from {})",
173+
predicate, expr
174+
))
175+
})?;
172176
Ok(Arc::new(PruningResult {
173177
zone_map,
174178
predicate,
175179
dynamic_updates,
176180
latest_result: RwLock::new((0, initial_mask)),
181+
session,
177182
}))
178183
}
179184
.boxed()
@@ -326,6 +331,7 @@ struct PruningResult {
326331
predicate: Expression,
327332
dynamic_updates: Option<DynamicExprUpdates>,
328333
latest_result: RwLock<(u64, Mask)>,
334+
session: VortexSession,
329335
}
330336

331337
impl PruningResult {
@@ -364,12 +370,15 @@ impl PruningResult {
364370
self.predicate
365371
);
366372

367-
let next_mask = self.zone_map.prune(&self.predicate).map_err(|err| {
368-
err.with_context(format!(
369-
"While evaluating pruning predicate {}",
370-
self.predicate
371-
))
372-
})?;
373+
let next_mask = self
374+
.zone_map
375+
.prune(&self.predicate, &self.session)
376+
.map_err(|err| {
377+
err.with_context(format!(
378+
"While evaluating pruning predicate {}",
379+
self.predicate
380+
))
381+
})?;
373382
*guard = (version, next_mask.clone());
374383

375384
Ok(next_mask)

vortex-layout/src/layouts/zoned/zone_map.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use vortex_array::expr::Expression;
1212
use vortex_array::expr::stats::Precision;
1313
use vortex_array::expr::stats::Stat;
1414
use vortex_array::expr::stats::StatsProvider;
15+
use vortex_array::session::ArraySessionExt;
1516
use vortex_array::stats::StatsSet;
1617
use vortex_array::validity::Validity;
1718
use vortex_dtype::DType;
@@ -22,6 +23,7 @@ use vortex_error::VortexExpect;
2223
use vortex_error::VortexResult;
2324
use vortex_error::vortex_bail;
2425
use vortex_mask::Mask;
26+
use vortex_session::VortexSession;
2527

2628
use crate::layouts::zoned::builder::MAX_IS_TRUNCATED;
2729
use crate::layouts::zoned::builder::MIN_IS_TRUNCATED;
@@ -147,10 +149,10 @@ impl ZoneMap {
147149
/// expression that can be evaluated on a zone map.
148150
///
149151
/// All zones where the predicate evaluates to `true` can be skipped entirely.
150-
pub fn prune(&self, predicate: &Expression) -> VortexResult<Mask> {
151-
predicate
152-
.evaluate(&self.array.to_array())?
153-
.try_to_mask_fill_null_false()
152+
pub fn prune(&self, predicate: &Expression, session: &VortexSession) -> VortexResult<Mask> {
153+
let array = self.array.to_array().apply(predicate)?;
154+
let array = session.arrays().optimizer().optimize_array(array)?;
155+
array.execute_mask(session)
154156
}
155157
}
156158

@@ -284,6 +286,7 @@ mod tests {
284286
use crate::layouts::zoned::MIN_IS_TRUNCATED;
285287
use crate::layouts::zoned::zone_map::StatsAccumulator;
286288
use crate::layouts::zoned::zone_map::ZoneMap;
289+
use crate::test::SESSION;
287290

288291
#[rstest]
289292
#[case(DType::Utf8(Nullability::NonNullable))]
@@ -393,7 +396,7 @@ mod tests {
393396
// => A.max < 6
394397
let expr = gt_eq(root(), lit(6i32));
395398
let (pruning_expr, _) = checked_pruning_expr(&expr, &stats).unwrap();
396-
let mask = zone_map.prune(&pruning_expr).unwrap();
399+
let mask = zone_map.prune(&pruning_expr, &SESSION).unwrap();
397400
assert_eq!(
398401
mask.to_bit_buffer().into_iter().collect_vec(),
399402
vec![true, false, false]
@@ -403,7 +406,7 @@ mod tests {
403406
// => A.max <= 5
404407
let expr = gt(root(), lit(5i32));
405408
let (pruning_expr, _) = checked_pruning_expr(&expr, &stats).unwrap();
406-
let mask = zone_map.prune(&pruning_expr).unwrap();
409+
let mask = zone_map.prune(&pruning_expr, &SESSION).unwrap();
407410
assert_eq!(
408411
mask.to_bit_buffer().into_iter().collect_vec(),
409412
vec![true, false, false]
@@ -413,7 +416,7 @@ mod tests {
413416
// => A.min >= 2
414417
let expr = lt(root(), lit(2i32));
415418
let (pruning_expr, _) = checked_pruning_expr(&expr, &stats).unwrap();
416-
let mask = zone_map.prune(&pruning_expr).unwrap();
419+
let mask = zone_map.prune(&pruning_expr, &SESSION).unwrap();
417420
assert_eq!(
418421
mask.to_bit_buffer().into_iter().collect_vec(),
419422
vec![false, true, true]

0 commit comments

Comments
 (0)