Skip to content

Commit fdd7eaa

Browse files
committed
update
Signed-off-by: Joe Isaacs <[email protected]>
1 parent f95caac commit fdd7eaa

File tree

1 file changed

+31
-4
lines changed
  • vortex-array/src/arrays/constant/vtable

1 file changed

+31
-4
lines changed

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

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
// SPDX-License-Identifier: Apache-2.0
22
// SPDX-FileCopyrightText: Copyright the Vortex contributors
33

4+
use std::fmt::Debug;
5+
46
use vortex_buffer::BufferHandle;
57
use vortex_dtype::DType;
68
use vortex_error::VortexResult;
79
use vortex_error::vortex_bail;
10+
use vortex_error::vortex_ensure;
11+
use vortex_mask::Mask;
812
use vortex_scalar::Scalar;
913
use vortex_scalar::ScalarValue;
1014
use vortex_vector::ScalarOps;
15+
use vortex_vector::Vector;
1116
use vortex_vector::VectorMutOps;
1217

1318
use crate::EmptyMetadata;
1419
use crate::arrays::ConstantArray;
1520
use crate::kernel::BindCtx;
21+
use crate::kernel::Kernel;
1622
use crate::kernel::KernelRef;
17-
use crate::kernel::kernel;
23+
use crate::kernel::PushDownResult;
1824
use crate::serde::ArrayChildren;
1925
use crate::vtable;
2026
use crate::vtable::ArrayId;
@@ -87,8 +93,29 @@ impl VTable for ConstantVTable {
8793
}
8894

8995
fn bind_kernel(array: &Self::Array, _ctx: &mut BindCtx) -> VortexResult<KernelRef> {
90-
let scalar = array.scalar().to_vector_scalar();
91-
let len = array.len();
92-
Ok(kernel(move || Ok(scalar.clone().repeat(len).freeze())))
96+
Ok(Box::new(ConstantKernel {
97+
value: array.scalar.to_vector_scalar(),
98+
len: array.len,
99+
}))
100+
}
101+
}
102+
103+
#[derive(Debug)]
104+
struct ConstantKernel {
105+
value: vortex_vector::Scalar,
106+
len: usize,
107+
}
108+
109+
impl Kernel for ConstantKernel {
110+
fn execute(self: Box<Self>) -> VortexResult<Vector> {
111+
Ok(self.value.repeat(self.len).freeze())
112+
}
113+
114+
fn push_down_filter(self: Box<Self>, selection: &Mask) -> VortexResult<PushDownResult> {
115+
vortex_ensure!(self.len == selection.len());
116+
Ok(PushDownResult::Pushed(Box::new(ConstantKernel {
117+
value: self.value,
118+
len: selection.true_count(),
119+
})))
93120
}
94121
}

0 commit comments

Comments
 (0)