Skip to content

Commit 7d5a882

Browse files
authored
Merge pull request #9129 from sundy-li/improve-concat
chore(query): improve concat kernel in new expression
2 parents 9bcc2ee + 2c6e0af commit 7d5a882

File tree

17 files changed

+61
-68
lines changed

17 files changed

+61
-68
lines changed

src/query/expression/src/kernels/concat.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,10 +182,9 @@ impl Column {
182182
.iter()
183183
.map(|c| T::try_downcast_column(c).unwrap())
184184
.collect();
185+
185186
for col in columns {
186-
for item in T::iter_column(&col) {
187-
T::push_item(&mut builder, item)
188-
}
187+
T::append_column(&mut builder, &col);
189188
}
190189
T::upcast_column(T::build_column(builder))
191190
}

src/query/expression/src/types.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ pub trait ValueType: Debug + Clone + PartialEq + Sized + 'static {
230230
fn builder_len(builder: &Self::ColumnBuilder) -> usize;
231231
fn push_item(builder: &mut Self::ColumnBuilder, item: Self::ScalarRef<'_>);
232232
fn push_default(builder: &mut Self::ColumnBuilder);
233-
fn append_builder(builder: &mut Self::ColumnBuilder, other_builder: &Self::ColumnBuilder);
233+
fn append_column(builder: &mut Self::ColumnBuilder, other: &Self::Column);
234234
fn build_column(builder: Self::ColumnBuilder) -> Self::Column;
235235
fn build_scalar(builder: Self::ColumnBuilder) -> Self::Scalar;
236236

src/query/expression/src/types/any.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,8 @@ impl ValueType for AnyType {
116116
builder.push_default();
117117
}
118118

119-
fn append_builder(builder: &mut Self::ColumnBuilder, other: &Self::ColumnBuilder) {
120-
builder.append(other);
119+
fn append_column(builder: &mut Self::ColumnBuilder, other: &Self::Column) {
120+
builder.append_column(other);
121121
}
122122

123123
fn build_column(builder: Self::ColumnBuilder) -> Self::Column {

src/query/expression/src/types/array.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,8 @@ impl<T: ValueType> ValueType for ArrayType<T> {
129129
builder.push_default();
130130
}
131131

132-
fn append_builder(builder: &mut Self::ColumnBuilder, other_builder: &Self::ColumnBuilder) {
133-
builder.append(other_builder);
132+
fn append_column(builder: &mut Self::ColumnBuilder, other_builder: &Self::Column) {
133+
builder.append_column(other_builder);
134134
}
135135

136136
fn build_column(builder: Self::ColumnBuilder) -> Self::Column {
@@ -268,10 +268,9 @@ impl<T: ValueType> ArrayColumnBuilder<T> {
268268

269269
pub fn repeat(array: &T::Column, n: usize) -> Self {
270270
let mut builder = T::column_to_builder(array.clone());
271-
let builder_clone = builder.clone();
272271
let len = T::builder_len(&builder);
273272
for _ in 1..n {
274-
T::append_builder(&mut builder, &builder_clone)
273+
T::append_column(&mut builder, array)
275274
}
276275
let offsets = once(0)
277276
.chain((0..n).map(|i| (len * (i + 1)) as u64))
@@ -296,8 +295,7 @@ impl<T: ValueType> ArrayColumnBuilder<T> {
296295
}
297296

298297
pub fn push(&mut self, item: T::Column) {
299-
let other_col = T::column_to_builder(item);
300-
T::append_builder(&mut self.builder, &other_col);
298+
T::append_column(&mut self.builder, &item);
301299
let len = T::builder_len(&self.builder);
302300
self.offsets.push(len as u64);
303301
}
@@ -307,8 +305,8 @@ impl<T: ValueType> ArrayColumnBuilder<T> {
307305
self.offsets.push(len as u64);
308306
}
309307

310-
pub fn append(&mut self, other: &Self) {
311-
T::append_builder(&mut self.builder, &other.builder);
308+
pub fn append_column(&mut self, other: &ArrayColumn<T>) {
309+
T::append_column(&mut self.builder, &other.values);
312310
let end = self.offsets.last().cloned().unwrap();
313311
self.offsets
314312
.extend(other.offsets.iter().skip(1).map(|offset| offset + end));

src/query/expression/src/types/boolean.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,8 @@ impl ValueType for BooleanType {
130130
builder.push(false);
131131
}
132132

133-
fn append_builder(builder: &mut Self::ColumnBuilder, other_builder: &Self::ColumnBuilder) {
134-
builder.extend_from_slice(other_builder.as_slice(), 0, other_builder.len());
133+
fn append_column(builder: &mut Self::ColumnBuilder, bitmap: &Self::Column) {
134+
builder.extend_from_bitmap(bitmap)
135135
}
136136

137137
fn build_column(builder: Self::ColumnBuilder) -> Self::Column {

src/query/expression/src/types/date.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ impl ValueType for DateType {
157157
builder.push(Self::Scalar::default());
158158
}
159159

160-
fn append_builder(builder: &mut Self::ColumnBuilder, other: &Self::ColumnBuilder) {
160+
fn append_column(builder: &mut Self::ColumnBuilder, other: &Self::Column) {
161161
builder.extend_from_slice(other);
162162
}
163163

src/query/expression/src/types/empty_array.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ impl ValueType for EmptyArrayType {
127127
*len += 1
128128
}
129129

130-
fn append_builder(len: &mut Self::ColumnBuilder, other_len: &Self::ColumnBuilder) {
130+
fn append_column(len: &mut Self::ColumnBuilder, other_len: &Self::Column) {
131131
*len += other_len
132132
}
133133

src/query/expression/src/types/generic.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,8 @@ impl<const INDEX: usize> ValueType for GenericType<INDEX> {
119119
builder.push_default();
120120
}
121121

122-
fn append_builder(builder: &mut Self::ColumnBuilder, other: &Self::ColumnBuilder) {
123-
builder.append(other);
122+
fn append_column(builder: &mut Self::ColumnBuilder, other: &Self::Column) {
123+
builder.append_column(other);
124124
}
125125

126126
fn build_column(builder: Self::ColumnBuilder) -> Self::Column {

src/query/expression/src/types/map.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ impl<K: ValueType, V: ValueType> ValueType for KvPair<K, V> {
141141
builder.push_default();
142142
}
143143

144-
fn append_builder(builder: &mut Self::ColumnBuilder, other_builder: &Self::ColumnBuilder) {
145-
builder.append(other_builder);
144+
fn append_column(builder: &mut Self::ColumnBuilder, other_builder: &Self::Column) {
145+
builder.append_column(other_builder);
146146
}
147147

148148
fn build_column(builder: Self::ColumnBuilder) -> Self::Column {
@@ -249,9 +249,9 @@ impl<K: ValueType, V: ValueType> KvColumnBuilder<K, V> {
249249
V::push_default(&mut self.values);
250250
}
251251

252-
pub fn append(&mut self, other: &Self) {
253-
K::append_builder(&mut self.keys, &other.keys);
254-
V::append_builder(&mut self.values, &other.values);
252+
pub fn append_column(&mut self, other: &KvColumn<K, V>) {
253+
K::append_column(&mut self.keys, &other.keys);
254+
V::append_column(&mut self.values, &other.values);
255255
}
256256

257257
pub fn build(self) -> KvColumn<K, V> {
@@ -392,8 +392,8 @@ impl<T: ValueType> ValueType for MapType<T> {
392392
<MapInternal<T> as ValueType>::push_default(builder)
393393
}
394394

395-
fn append_builder(builder: &mut Self::ColumnBuilder, other_builder: &Self::ColumnBuilder) {
396-
<MapInternal<T> as ValueType>::append_builder(builder, other_builder)
395+
fn append_column(builder: &mut Self::ColumnBuilder, other: &Self::Column) {
396+
<MapInternal<T> as ValueType>::append_column(builder, other)
397397
}
398398

399399
fn build_column(builder: Self::ColumnBuilder) -> Self::Column {

src/query/expression/src/types/null.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ impl ValueType for NullType {
134134
*len += 1
135135
}
136136

137-
fn append_builder(len: &mut Self::ColumnBuilder, other_len: &Self::ColumnBuilder) {
137+
fn append_column(len: &mut Self::ColumnBuilder, other_len: &Self::Column) {
138138
*len += other_len
139139
}
140140

0 commit comments

Comments
 (0)