Skip to content

Commit fa6931a

Browse files
authored
scalar_at take execution_ctx (#7166)
## Summary This updates the `OperationsVTable` to inject an execution context for `scalar_at`. This will allow the PatchedArray to execute a range of its indices child for linear search instead of issuing a `scalar_at` and cast in a loop. --------- Signed-off-by: Andrew Duffy <andrew@a10y.dev>
1 parent 8b83d7b commit fa6931a

54 files changed

Lines changed: 279 additions & 123 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/public-api.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ pub fn vortex_alp::ALP::with_children(array: &mut Self::Array, children: alloc::
102102

103103
impl vortex_array::vtable::operations::OperationsVTable<vortex_alp::ALP> for vortex_alp::ALP
104104

105-
pub fn vortex_alp::ALP::scalar_at(array: &vortex_alp::ALPArray, index: usize) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
105+
pub fn vortex_alp::ALP::scalar_at(array: &vortex_alp::ALPArray, index: usize, _ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
106106

107107
impl vortex_array::vtable::validity::ValidityChild<vortex_alp::ALP> for vortex_alp::ALP
108108

@@ -264,7 +264,7 @@ pub fn vortex_alp::ALPRD::with_children(array: &mut Self::Array, children: alloc
264264

265265
impl vortex_array::vtable::operations::OperationsVTable<vortex_alp::ALPRD> for vortex_alp::ALPRD
266266

267-
pub fn vortex_alp::ALPRD::scalar_at(array: &vortex_alp::ALPRDArray, index: usize) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
267+
pub fn vortex_alp::ALPRD::scalar_at(array: &vortex_alp::ALPRDArray, index: usize, _ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
268268

269269
impl vortex_array::vtable::validity::ValidityChild<vortex_alp::ALPRD> for vortex_alp::ALPRD
270270

encodings/alp/src/alp/ops.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// SPDX-License-Identifier: Apache-2.0
22
// SPDX-FileCopyrightText: Copyright the Vortex contributors
33

4+
use vortex_array::ExecutionCtx;
45
use vortex_array::scalar::Scalar;
56
use vortex_array::vtable::OperationsVTable;
67
use vortex_error::VortexExpect;
@@ -12,7 +13,7 @@ use crate::ALPFloat;
1213
use crate::match_each_alp_float_ptype;
1314

1415
impl OperationsVTable<ALP> for ALP {
15-
fn scalar_at(array: &ALPArray, index: usize) -> VortexResult<Scalar> {
16+
fn scalar_at(array: &ALPArray, index: usize, _ctx: &mut ExecutionCtx) -> VortexResult<Scalar> {
1617
if let Some(patches) = array.patches()
1718
&& let Some(patch) = patches.get_patched(index)?
1819
{

encodings/alp/src/alp_rd/ops.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// SPDX-FileCopyrightText: Copyright the Vortex contributors
33

44
use vortex_array::DynArray;
5+
use vortex_array::ExecutionCtx;
56
use vortex_array::scalar::Scalar;
67
use vortex_array::vtable::OperationsVTable;
78
use vortex_error::VortexExpect;
@@ -11,7 +12,11 @@ use crate::ALPRD;
1112
use crate::ALPRDArray;
1213

1314
impl OperationsVTable<ALPRD> for ALPRD {
14-
fn scalar_at(array: &ALPRDArray, index: usize) -> VortexResult<Scalar> {
15+
fn scalar_at(
16+
array: &ALPRDArray,
17+
index: usize,
18+
_ctx: &mut ExecutionCtx,
19+
) -> VortexResult<Scalar> {
1520
// The left value can either be a direct value, or an exception.
1621
// The exceptions array represents exception positions with non-null values.
1722
let maybe_patched_value = match array.left_parts_patches() {

encodings/bytebool/public-api.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ pub fn vortex_bytebool::ByteBool::with_children(array: &mut Self::Array, childre
8484

8585
impl vortex_array::vtable::operations::OperationsVTable<vortex_bytebool::ByteBool> for vortex_bytebool::ByteBool
8686

87-
pub fn vortex_bytebool::ByteBool::scalar_at(array: &vortex_bytebool::ByteBoolArray, index: usize) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
87+
pub fn vortex_bytebool::ByteBool::scalar_at(array: &vortex_bytebool::ByteBoolArray, index: usize, _ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
8888

8989
pub struct vortex_bytebool::ByteBoolArray
9090

encodings/bytebool/src/array.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,11 @@ impl ValidityHelper for ByteBoolArray {
266266
}
267267

268268
impl OperationsVTable<ByteBool> for ByteBool {
269-
fn scalar_at(array: &ByteBoolArray, index: usize) -> VortexResult<Scalar> {
269+
fn scalar_at(
270+
array: &ByteBoolArray,
271+
index: usize,
272+
_ctx: &mut ExecutionCtx,
273+
) -> VortexResult<Scalar> {
270274
Ok(Scalar::bool(
271275
array.buffer.as_host()[index] == 1,
272276
array.dtype().nullability(),

encodings/datetime-parts/public-api.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ pub fn vortex_datetime_parts::DateTimeParts::with_children(array: &mut Self::Arr
9292

9393
impl vortex_array::vtable::operations::OperationsVTable<vortex_datetime_parts::DateTimeParts> for vortex_datetime_parts::DateTimeParts
9494

95-
pub fn vortex_datetime_parts::DateTimeParts::scalar_at(array: &vortex_datetime_parts::DateTimePartsArray, index: usize) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
95+
pub fn vortex_datetime_parts::DateTimeParts::scalar_at(array: &vortex_datetime_parts::DateTimePartsArray, index: usize, _ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
9696

9797
impl vortex_array::vtable::validity::ValidityChild<vortex_datetime_parts::DateTimeParts> for vortex_datetime_parts::DateTimeParts
9898

encodings/datetime-parts/src/ops.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// SPDX-FileCopyrightText: Copyright the Vortex contributors
33

44
use vortex_array::DynArray;
5+
use vortex_array::ExecutionCtx;
56
use vortex_array::dtype::DType;
67
use vortex_array::extension::datetime::Timestamp;
78
use vortex_array::scalar::Scalar;
@@ -16,7 +17,11 @@ use crate::timestamp;
1617
use crate::timestamp::TimestampParts;
1718

1819
impl OperationsVTable<DateTimeParts> for DateTimeParts {
19-
fn scalar_at(array: &DateTimePartsArray, index: usize) -> VortexResult<Scalar> {
20+
fn scalar_at(
21+
array: &DateTimePartsArray,
22+
index: usize,
23+
_ctx: &mut ExecutionCtx,
24+
) -> VortexResult<Scalar> {
2025
let DType::Extension(ext) = array.dtype().clone() else {
2126
vortex_panic!(
2227
"DateTimePartsArray must have extension dtype, found {}",

encodings/decimal-byte-parts/public-api.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ pub fn vortex_decimal_byte_parts::DecimalByteParts::with_children(array: &mut Se
9292

9393
impl vortex_array::vtable::operations::OperationsVTable<vortex_decimal_byte_parts::DecimalByteParts> for vortex_decimal_byte_parts::DecimalByteParts
9494

95-
pub fn vortex_decimal_byte_parts::DecimalByteParts::scalar_at(array: &vortex_decimal_byte_parts::DecimalBytePartsArray, index: usize) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
95+
pub fn vortex_decimal_byte_parts::DecimalByteParts::scalar_at(array: &vortex_decimal_byte_parts::DecimalBytePartsArray, index: usize, _ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
9696

9797
impl vortex_array::vtable::validity::ValidityChild<vortex_decimal_byte_parts::DecimalByteParts> for vortex_decimal_byte_parts::DecimalByteParts
9898

encodings/decimal-byte-parts/src/decimal_byte_parts/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,11 @@ fn to_canonical_decimal(
307307
}
308308

309309
impl OperationsVTable<DecimalByteParts> for DecimalByteParts {
310-
fn scalar_at(array: &DecimalBytePartsArray, index: usize) -> VortexResult<Scalar> {
310+
fn scalar_at(
311+
array: &DecimalBytePartsArray,
312+
index: usize,
313+
_ctx: &mut ExecutionCtx,
314+
) -> VortexResult<Scalar> {
311315
// TODO(joe): support parts len != 1
312316
let scalar = array.msp.scalar_at(index)?;
313317

encodings/fastlanes/public-api.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ pub fn vortex_fastlanes::BitPacked::with_children(array: &mut Self::Array, child
202202

203203
impl vortex_array::vtable::operations::OperationsVTable<vortex_fastlanes::BitPacked> for vortex_fastlanes::BitPacked
204204

205-
pub fn vortex_fastlanes::BitPacked::scalar_at(array: &vortex_fastlanes::BitPackedArray, index: usize) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
205+
pub fn vortex_fastlanes::BitPacked::scalar_at(array: &vortex_fastlanes::BitPackedArray, index: usize, _ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
206206

207207
pub struct vortex_fastlanes::BitPackedArray
208208

@@ -354,7 +354,7 @@ pub fn vortex_fastlanes::Delta::with_children(array: &mut Self::Array, children:
354354

355355
impl vortex_array::vtable::operations::OperationsVTable<vortex_fastlanes::Delta> for vortex_fastlanes::Delta
356356

357-
pub fn vortex_fastlanes::Delta::scalar_at(array: &vortex_fastlanes::DeltaArray, index: usize) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
357+
pub fn vortex_fastlanes::Delta::scalar_at(array: &vortex_fastlanes::DeltaArray, index: usize, _ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
358358

359359
impl vortex_array::vtable::validity::ValidityVTable<vortex_fastlanes::Delta> for vortex_fastlanes::Delta
360360

@@ -498,7 +498,7 @@ pub fn vortex_fastlanes::FoR::with_children(array: &mut Self::Array, children: a
498498

499499
impl vortex_array::vtable::operations::OperationsVTable<vortex_fastlanes::FoR> for vortex_fastlanes::FoR
500500

501-
pub fn vortex_fastlanes::FoR::scalar_at(array: &vortex_fastlanes::FoRArray, index: usize) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
501+
pub fn vortex_fastlanes::FoR::scalar_at(array: &vortex_fastlanes::FoRArray, index: usize, _ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
502502

503503
impl vortex_array::vtable::validity::ValidityChild<vortex_fastlanes::FoR> for vortex_fastlanes::FoR
504504

@@ -626,7 +626,7 @@ pub fn vortex_fastlanes::RLE::with_children(array: &mut Self::Array, children: a
626626

627627
impl vortex_array::vtable::operations::OperationsVTable<vortex_fastlanes::RLE> for vortex_fastlanes::RLE
628628

629-
pub fn vortex_fastlanes::RLE::scalar_at(array: &vortex_fastlanes::RLEArray, index: usize) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
629+
pub fn vortex_fastlanes::RLE::scalar_at(array: &vortex_fastlanes::RLEArray, index: usize, _ctx: &mut vortex_array::executor::ExecutionCtx) -> vortex_error::VortexResult<vortex_array::scalar::Scalar>
630630

631631
impl vortex_array::vtable::validity::ValidityChild<vortex_fastlanes::RLE> for vortex_fastlanes::RLE
632632

0 commit comments

Comments
 (0)