Skip to content

Commit d992309

Browse files
authored
Deprecate scalar_at for execute_scalar (#7457)
1 parent f924a34 commit d992309

239 files changed

Lines changed: 3440 additions & 1349 deletions

File tree

Some content is hidden

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

encodings/alp/benches/alp_compress.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ use vortex_alp::ALPRDFloat;
1212
use vortex_alp::RDEncoder;
1313
use vortex_alp::alp_encode;
1414
use vortex_alp::decompress_into_array;
15+
use vortex_array::Canonical;
16+
use vortex_array::IntoArray;
1517
use vortex_array::LEGACY_SESSION;
1618
use vortex_array::VortexSessionExecute;
1719
use vortex_array::arrays::PrimitiveArray;
@@ -153,6 +155,6 @@ fn decompress_rd<T: ALPRDFloat + NativePType>(bencher: Bencher, args: (usize, f6
153155
let encoded = encoder.encode(primitive.as_view());
154156

155157
bencher
156-
.with_inputs(|| &encoded)
157-
.bench_refs(|encoded| encoded.to_canonical());
158+
.with_inputs(|| (&encoded, LEGACY_SESSION.create_execution_ctx()))
159+
.bench_refs(|(encoded, ctx)| (**encoded).clone().into_array().execute::<Canonical>(ctx));
158160
}

encodings/alp/public-api.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ pub fn vortex_alp::ALP::validate(&self, data: &vortex_alp::ALPData, dtype: &vort
5252

5353
impl vortex_array::array::vtable::operations::OperationsVTable<vortex_alp::ALP> for vortex_alp::ALP
5454

55-
pub fn vortex_alp::ALP::scalar_at(array: vortex_array::array::view::ArrayView<'_, vortex_alp::ALP>, index: usize, _ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
55+
pub fn vortex_alp::ALP::scalar_at(array: vortex_array::array::view::ArrayView<'_, vortex_alp::ALP>, index: usize, ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
5656

5757
impl vortex_array::array::vtable::validity::ValidityChild<vortex_alp::ALP> for vortex_alp::ALP
5858

@@ -188,7 +188,7 @@ pub fn vortex_alp::ALPRD::validate(&self, data: &vortex_alp::ALPRDData, dtype: &
188188

189189
impl vortex_array::array::vtable::operations::OperationsVTable<vortex_alp::ALPRD> for vortex_alp::ALPRD
190190

191-
pub fn vortex_alp::ALPRD::scalar_at(array: vortex_array::array::view::ArrayView<'_, vortex_alp::ALPRD>, index: usize, _ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
191+
pub fn vortex_alp::ALPRD::scalar_at(array: vortex_array::array::view::ArrayView<'_, vortex_alp::ALPRD>, index: usize, ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
192192

193193
impl vortex_array::array::vtable::validity::ValidityChild<vortex_alp::ALPRD> for vortex_alp::ALPRD
194194

encodings/alp/src/alp/ops.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@ impl OperationsVTable<ALP> for ALP {
1818
fn scalar_at(
1919
array: ArrayView<'_, ALP>,
2020
index: usize,
21-
_ctx: &mut ExecutionCtx,
21+
ctx: &mut ExecutionCtx,
2222
) -> VortexResult<Scalar> {
2323
if let Some(patches) = array.patches()
2424
&& let Some(patch) = patches.get_patched(index)?
2525
{
2626
return patch.cast(array.dtype());
2727
}
2828

29-
let encoded_val = array.encoded().scalar_at(index)?;
29+
let encoded_val = array.encoded().execute_scalar(index, ctx)?;
3030

3131
Ok(match_each_alp_float_ptype!(array.dtype().as_ptype(), |T| {
3232
let encoded_val: <T as ALPFloat>::ALPInt =

encodings/alp/src/alp_rd/array.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ use vortex_array::ArrayView;
1919
use vortex_array::ExecutionCtx;
2020
use vortex_array::ExecutionResult;
2121
use vortex_array::IntoArray;
22+
use vortex_array::LEGACY_SESSION;
2223
use vortex_array::Precision;
2324
use vortex_array::TypedArrayRef;
25+
use vortex_array::VortexSessionExecute;
2426
use vortex_array::arrays::Primitive;
2527
use vortex_array::arrays::PrimitiveArray;
2628
use vortex_array::buffer::BufferHandle;
@@ -405,7 +407,10 @@ impl ALPRDData {
405407
) -> VortexResult<Option<Patches>> {
406408
left_parts_patches
407409
.map(|patches| {
408-
if !patches.values().all_valid()? {
410+
if !patches
411+
.values()
412+
.all_valid(&mut LEGACY_SESSION.create_execution_ctx())?
413+
{
409414
vortex_bail!("patches must be all valid: {}", patches.values());
410415
}
411416
// TODO(ngates): assert the DType, don't cast it.
@@ -586,7 +591,9 @@ fn validate_parts(
586591
left_parts.dtype(),
587592
);
588593
vortex_ensure!(
589-
patches.values().all_valid()?,
594+
patches
595+
.values()
596+
.all_valid(&mut LEGACY_SESSION.create_execution_ctx())?,
590597
"patches must be all valid: {}",
591598
patches.values()
592599
);

encodings/alp/src/alp_rd/ops.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ impl OperationsVTable<ALPRD> for ALPRD {
1616
fn scalar_at(
1717
array: ArrayView<'_, ALPRD>,
1818
index: usize,
19-
_ctx: &mut ExecutionCtx,
19+
ctx: &mut ExecutionCtx,
2020
) -> VortexResult<Scalar> {
2121
// The left value can either be a direct value, or an exception.
2222
// The exceptions array represents exception positions with non-null values.
@@ -32,7 +32,7 @@ impl OperationsVTable<ALPRD> for ALPRD {
3232
_ => {
3333
let left_code: u16 = array
3434
.left_parts()
35-
.scalar_at(index)?
35+
.execute_scalar(index, ctx)?
3636
.as_primitive()
3737
.as_::<u16>()
3838
.vortex_expect("left_code must be non-null");
@@ -44,7 +44,7 @@ impl OperationsVTable<ALPRD> for ALPRD {
4444
Ok(if array.dtype().as_ptype() == PType::F32 {
4545
let right: u32 = array
4646
.right_parts()
47-
.scalar_at(index)?
47+
.execute_scalar(index, ctx)?
4848
.as_primitive()
4949
.as_::<u32>()
5050
.vortex_expect("non-null");
@@ -53,7 +53,7 @@ impl OperationsVTable<ALPRD> for ALPRD {
5353
} else {
5454
let right: u64 = array
5555
.right_parts()
56-
.scalar_at(index)?
56+
.execute_scalar(index, ctx)?
5757
.as_primitive()
5858
.as_::<u64>()
5959
.vortex_expect("non-null");

encodings/bytebool/src/array.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,8 @@ impl From<Vec<Option<bool>>> for ByteBoolData {
347347
mod tests {
348348
use vortex_array::ArrayContext;
349349
use vortex_array::IntoArray;
350+
use vortex_array::LEGACY_SESSION;
351+
use vortex_array::VortexSessionExecute;
350352
use vortex_array::assert_arrays_eq;
351353
use vortex_array::serde::SerializeOptions;
352354
use vortex_array::serde::SerializedArray;
@@ -366,15 +368,16 @@ mod tests {
366368
let arr = ByteBool::from_vec(v, Validity::AllValid);
367369
assert_eq!(v_len, arr.len());
368370

371+
let mut ctx = LEGACY_SESSION.create_execution_ctx();
369372
for idx in 0..arr.len() {
370-
assert!(arr.is_valid(idx).unwrap());
373+
assert!(arr.is_valid(idx, &mut ctx).unwrap());
371374
}
372375

373376
let v = vec![Some(true), None, Some(false)];
374377
let arr = ByteBool::from_option_vec(v);
375-
assert!(arr.is_valid(0).unwrap());
376-
assert!(!arr.is_valid(1).unwrap());
377-
assert!(arr.is_valid(2).unwrap());
378+
assert!(arr.is_valid(0, &mut ctx).unwrap());
379+
assert!(!arr.is_valid(1, &mut ctx).unwrap());
380+
assert!(arr.is_valid(2, &mut ctx).unwrap());
378381
assert_eq!(arr.len(), 3);
379382

380383
let v: Vec<Option<bool>> = vec![None, None];
@@ -384,7 +387,7 @@ mod tests {
384387
assert_eq!(v_len, arr.len());
385388

386389
for idx in 0..arr.len() {
387-
assert!(!arr.is_valid(idx).unwrap());
390+
assert!(!arr.is_valid(idx, &mut ctx).unwrap());
388391
}
389392
assert_eq!(arr.len(), 2);
390393
}

encodings/datetime-parts/public-api.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ pub fn vortex_datetime_parts::DateTimeParts::validate(&self, _data: &Self::Array
4848

4949
impl vortex_array::array::vtable::operations::OperationsVTable<vortex_datetime_parts::DateTimeParts> for vortex_datetime_parts::DateTimeParts
5050

51-
pub fn vortex_datetime_parts::DateTimeParts::scalar_at(array: vortex_array::array::view::ArrayView<'_, vortex_datetime_parts::DateTimeParts>, index: usize, _ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
51+
pub fn vortex_datetime_parts::DateTimeParts::scalar_at(array: vortex_array::array::view::ArrayView<'_, vortex_datetime_parts::DateTimeParts>, index: usize, ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
5252

5353
impl vortex_array::array::vtable::validity::ValidityChild<vortex_datetime_parts::DateTimeParts> for vortex_datetime_parts::DateTimeParts
5454

@@ -68,7 +68,7 @@ pub fn vortex_datetime_parts::DateTimeParts::slice(array: vortex_array::array::v
6868

6969
impl vortex_array::scalar_fn::fns::binary::compare::CompareKernel for vortex_datetime_parts::DateTimeParts
7070

71-
pub fn vortex_datetime_parts::DateTimeParts::compare(lhs: vortex_array::array::view::ArrayView<'_, Self>, rhs: &vortex_array::array::erased::ArrayRef, operator: vortex_array::scalar_fn::fns::operators::CompareOperator, _ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<core::option::Option<vortex_array::array::erased::ArrayRef>>
71+
pub fn vortex_datetime_parts::DateTimeParts::compare(lhs: vortex_array::array::view::ArrayView<'_, Self>, rhs: &vortex_array::array::erased::ArrayRef, operator: vortex_array::scalar_fn::fns::operators::CompareOperator, ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<core::option::Option<vortex_array::array::erased::ArrayRef>>
7272

7373
impl vortex_array::scalar_fn::fns::cast::kernel::CastReduce for vortex_datetime_parts::DateTimeParts
7474

encodings/datetime-parts/src/compute/compare.rs

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ impl CompareKernel for DateTimeParts {
2525
lhs: ArrayView<'_, Self>,
2626
rhs: &ArrayRef,
2727
operator: CompareOperator,
28-
_ctx: &mut ExecutionCtx,
28+
ctx: &mut ExecutionCtx,
2929
) -> VortexResult<Option<ArrayRef>> {
3030
let Some(rhs_const) = rhs.as_constant() else {
3131
return Ok(None);
@@ -51,17 +51,17 @@ impl CompareKernel for DateTimeParts {
5151
let ts_parts = timestamp::split(timestamp, options.unit)?;
5252

5353
match operator {
54-
CompareOperator::Eq => compare_eq(lhs, &ts_parts, nullability),
55-
CompareOperator::NotEq => compare_ne(lhs, &ts_parts, nullability),
54+
CompareOperator::Eq => compare_eq(lhs, &ts_parts, nullability, ctx),
55+
CompareOperator::NotEq => compare_ne(lhs, &ts_parts, nullability, ctx),
5656
// lt and lte have identical behavior, as we optimize
5757
// for the case that all days on the lhs are smaller.
5858
// If that special case is not hit, we return `Ok(None)` to
5959
// signal that the comparison wasn't handled within dtp.
60-
CompareOperator::Lt => compare_lt(lhs, &ts_parts, nullability),
61-
CompareOperator::Lte => compare_lt(lhs, &ts_parts, nullability),
60+
CompareOperator::Lt => compare_lt(lhs, &ts_parts, nullability, ctx),
61+
CompareOperator::Lte => compare_lt(lhs, &ts_parts, nullability, ctx),
6262
// (Like for lt, lte)
63-
CompareOperator::Gt => compare_gt(lhs, &ts_parts, nullability),
64-
CompareOperator::Gte => compare_gt(lhs, &ts_parts, nullability),
63+
CompareOperator::Gt => compare_gt(lhs, &ts_parts, nullability, ctx),
64+
CompareOperator::Gte => compare_gt(lhs, &ts_parts, nullability, ctx),
6565
}
6666
}
6767
}
@@ -70,9 +70,10 @@ fn compare_eq(
7070
lhs: ArrayView<DateTimeParts>,
7171
ts_parts: &timestamp::TimestampParts,
7272
nullability: Nullability,
73+
ctx: &mut ExecutionCtx,
7374
) -> VortexResult<Option<ArrayRef>> {
7475
let mut comparison = compare_dtp(lhs.days(), ts_parts.days, CompareOperator::Eq, nullability)?;
75-
if comparison.statistics().compute_max::<bool>() == Some(false) {
76+
if comparison.statistics().compute_max::<bool>(ctx) == Some(false) {
7677
// All values are different.
7778
return Ok(Some(comparison));
7879
}
@@ -85,7 +86,7 @@ fn compare_eq(
8586
)?
8687
.binary(comparison, Operator::And)?;
8788

88-
if comparison.statistics().compute_max::<bool>() == Some(false) {
89+
if comparison.statistics().compute_max::<bool>(ctx) == Some(false) {
8990
// All values are different.
9091
return Ok(Some(comparison));
9192
}
@@ -105,14 +106,15 @@ fn compare_ne(
105106
lhs: ArrayView<DateTimeParts>,
106107
ts_parts: &timestamp::TimestampParts,
107108
nullability: Nullability,
109+
ctx: &mut ExecutionCtx,
108110
) -> VortexResult<Option<ArrayRef>> {
109111
let mut comparison = compare_dtp(
110112
lhs.days(),
111113
ts_parts.days,
112114
CompareOperator::NotEq,
113115
nullability,
114116
)?;
115-
if comparison.statistics().compute_min::<bool>() == Some(true) {
117+
if comparison.statistics().compute_min::<bool>(ctx) == Some(true) {
116118
// All values are different.
117119
return Ok(Some(comparison));
118120
}
@@ -125,7 +127,7 @@ fn compare_ne(
125127
)?
126128
.binary(comparison, Operator::Or)?;
127129

128-
if comparison.statistics().compute_min::<bool>() == Some(true) {
130+
if comparison.statistics().compute_min::<bool>(ctx) == Some(true) {
129131
// All values are different.
130132
return Ok(Some(comparison));
131133
}
@@ -145,9 +147,10 @@ fn compare_lt(
145147
lhs: ArrayView<DateTimeParts>,
146148
ts_parts: &timestamp::TimestampParts,
147149
nullability: Nullability,
150+
ctx: &mut ExecutionCtx,
148151
) -> VortexResult<Option<ArrayRef>> {
149152
let days_lt = compare_dtp(lhs.days(), ts_parts.days, CompareOperator::Lt, nullability)?;
150-
if days_lt.statistics().compute_min::<bool>() == Some(true) {
153+
if days_lt.statistics().compute_min::<bool>(ctx) == Some(true) {
151154
// All values on the lhs are smaller.
152155
return Ok(Some(days_lt));
153156
}
@@ -159,9 +162,10 @@ fn compare_gt(
159162
lhs: ArrayView<DateTimeParts>,
160163
ts_parts: &timestamp::TimestampParts,
161164
nullability: Nullability,
165+
ctx: &mut ExecutionCtx,
162166
) -> VortexResult<Option<ArrayRef>> {
163167
let days_gt = compare_dtp(lhs.days(), ts_parts.days, CompareOperator::Gt, nullability)?;
164-
if days_gt.statistics().compute_min::<bool>() == Some(true) {
168+
if days_gt.statistics().compute_min::<bool>(ctx) == Some(true) {
165169
// All values on the lhs are larger.
166170
return Ok(Some(days_gt));
167171
}

encodings/datetime-parts/src/compute/is_constant.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,6 @@ impl DynAggregateKernel for DateTimePartsIsConstantKernel {
3737
let result = is_constant(array.days(), ctx)?
3838
&& is_constant(array.seconds(), ctx)?
3939
&& is_constant(array.subseconds(), ctx)?;
40-
Ok(Some(IsConstant::make_partial(batch, result)?))
40+
Ok(Some(IsConstant::make_partial(batch, result, ctx)?))
4141
}
4242
}

encodings/datetime-parts/src/ops.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ impl OperationsVTable<DateTimeParts> for DateTimeParts {
2020
fn scalar_at(
2121
array: ArrayView<'_, DateTimeParts>,
2222
index: usize,
23-
_ctx: &mut ExecutionCtx,
23+
ctx: &mut ExecutionCtx,
2424
) -> VortexResult<Scalar> {
2525
let DType::Extension(ext) = array.dtype().clone() else {
2626
vortex_panic!(
@@ -33,25 +33,25 @@ impl OperationsVTable<DateTimeParts> for DateTimeParts {
3333
vortex_panic!(Compute: "must decode TemporalMetadata from extension metadata");
3434
};
3535

36-
if !array.as_ref().is_valid(index)? {
36+
if !array.as_ref().is_valid(index, ctx)? {
3737
return Ok(Scalar::null(DType::Extension(ext)));
3838
}
3939

4040
let days: i64 = array
4141
.days()
42-
.scalar_at(index)?
42+
.execute_scalar(index, ctx)?
4343
.as_primitive()
4444
.as_::<i64>()
4545
.vortex_expect("days fits in i64");
4646
let seconds: i64 = array
4747
.seconds()
48-
.scalar_at(index)?
48+
.execute_scalar(index, ctx)?
4949
.as_primitive()
5050
.as_::<i64>()
5151
.vortex_expect("seconds fits in i64");
5252
let subseconds: i64 = array
5353
.subseconds()
54-
.scalar_at(index)?
54+
.execute_scalar(index, ctx)?
5555
.as_primitive()
5656
.as_::<i64>()
5757
.vortex_expect("subseconds fits in i64");

0 commit comments

Comments
 (0)