Skip to content

Commit f01852d

Browse files
authored
fix(query): fix child_has_window (#16301)
* fix(query): fix child_has_window * fix(query): fix * fix(query): add new function in nullable column * fix(query): add new function in nullable column * fix(query): add new function in nullable column * fix(query): add new function in nullable column * fix(query): fix * fix(query): fix * fix(query): fix
1 parent 5f6730a commit f01852d

File tree

34 files changed

+470
-485
lines changed

34 files changed

+470
-485
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,6 @@ For more information, see the [LICENSE](LICENSE) file and [Licensing FAQs](https
298298

299299
- **Inspiration**: Databend's design draws inspiration from industry leaders [ClickHouse](https://github.com/clickhouse/clickhouse) and [Snowflake](https://docs.snowflake.com/en/user-guide/intro-key-concepts.html#snowflake-architecture).
300300

301-
- **Computing Model**: Our computing foundation is built upon [Arrow2](https://github.com/jorgecarleitao/arrow2), a faster and more secure rendition of the Apache Arrow Columnar Format.
301+
- **Computing Model**: Our computing foundation is built upon apache arrow.
302302

303303
- **Documentation Hosting**: The [Databend documentation website](https://docs.databend.com) proudly runs on [Vercel](https://vercel.com/?utm_source=databend&utm_campaign=oss).

src/query/codegen/src/writes/arithmetics_type.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,9 @@ fn arithmetic_coercion(a: NumberDataType, b: NumberDataType, op: OP) -> NumberDa
248248
}
249249

250250
fn neg_coercion(a: NumberDataType) -> NumberDataType {
251+
if a.is_float32() || a.is_float64() {
252+
return a;
253+
}
251254
let bit_width = next_bit_width(a.bit_width());
252255

253256
NumberDataType::new(bit_width, true, a.is_float())

src/query/codegen/src/writes/register.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,7 @@ pub fn codegen_register() {
606606
.iter()
607607
.map(|n| format!("arg{}.validity", n + 1))
608608
.reduce(|acc, item| {
609-
format!("common_arrow::arrow::bitmap::and(&{acc}, &{item})")
609+
format!("databend_common_arrow::arrow::bitmap::and(&{acc}, &{item})")
610610
})
611611
.unwrap();
612612
let func_arg = (0..n_args)
@@ -625,7 +625,7 @@ pub fn codegen_register() {
625625
let validity = ctx.validity.as_ref().map(|valid| valid & (&and_validity)).unwrap_or(and_validity);
626626
ctx.validity = Some(validity.clone());
627627
let column = func({func_arg} ctx).into_column().unwrap();
628-
Value::Column(NullableColumn {{ column, validity }})
628+
Value::Column(NullableColumn::new(column, validity))
629629
}}"
630630
)
631631
})
@@ -714,7 +714,7 @@ pub fn codegen_register() {
714714
.iter()
715715
.map(|n| format!("arg{}.validity", n + 1))
716716
.reduce(|acc, item| {
717-
format!("common_arrow::arrow::bitmap::and(&{acc}, &{item})")
717+
format!("databend_common_arrow::arrow::bitmap::and(&{acc}, &{item})")
718718
})
719719
.unwrap();
720720
let func_arg = (0..n_args)
@@ -734,7 +734,7 @@ pub fn codegen_register() {
734734
ctx.validity = Some(validity.clone());
735735
let nullable_column = func({func_arg} ctx).into_column().unwrap();
736736
let combine_validity = databend_common_arrow::arrow::bitmap::and(&validity, &nullable_column.validity);
737-
Value::Column(NullableColumn {{ column: nullable_column.column, validity: combine_validity }})
737+
Value::Column(NullableColumn::new(nullable_column.column, combine_validity))
738738
}}"
739739
)
740740
})

src/query/expression/src/aggregate/payload_flush.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -260,10 +260,7 @@ impl Payload {
260260
let b = self.flush_type_column::<BooleanType>(validity_offset, state);
261261
let validity = b.into_boolean().unwrap();
262262

263-
Column::Nullable(Box::new(NullableColumn {
264-
column: col,
265-
validity,
266-
}))
263+
NullableColumn::new_column(col, validity)
267264
} else {
268265
col
269266
}

src/query/expression/src/converts/arrow2/from.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -806,7 +806,7 @@ impl Column {
806806
.validity()
807807
.cloned()
808808
.unwrap_or_else(|| Bitmap::new_constant(true, arrow_col.len()));
809-
Column::Nullable(Box::new(NullableColumn { column, validity }))
809+
NullableColumn::new_column(column, validity)
810810
}
811811
(ty, arrow_ty) => {
812812
return Err(ErrorCode::Unimplemented(format!(

src/query/expression/src/evaluator.rs

Lines changed: 20 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -365,10 +365,7 @@ impl<'a> Evaluator<'a> {
365365
)?
366366
.into_column()
367367
.unwrap();
368-
Ok(Value::Column(Column::Nullable(Box::new(NullableColumn {
369-
column,
370-
validity,
371-
}))))
368+
Ok(Value::Column(NullableColumn::new_column(column, validity)))
372369
}
373370
other => unreachable!("source: {}", other),
374371
},
@@ -438,10 +435,9 @@ impl<'a> Evaluator<'a> {
438435
)?
439436
.into_column()
440437
.unwrap();
441-
Ok(Value::Column(Column::Nullable(Box::new(NullableColumn {
442-
validity: Bitmap::new_constant(true, column.len()),
443-
column,
444-
}))))
438+
439+
let validity = Bitmap::new_constant(true, column.len());
440+
Ok(Value::Column(NullableColumn::new_column(column, validity)))
445441
}
446442
},
447443

@@ -671,20 +667,19 @@ impl<'a> Evaluator<'a> {
671667
.unwrap()
672668
.into_nullable()
673669
.unwrap();
674-
Ok(Value::Column(Column::Nullable(Box::new(NullableColumn {
675-
column: new_col.column,
676-
validity: bitmap::and(&col.validity, &new_col.validity),
677-
}))))
670+
let validity = bitmap::and(&col.validity, &new_col.validity);
671+
Ok(Value::Column(NullableColumn::new_column(
672+
new_col.column,
673+
validity,
674+
)))
678675
}
679676
other => unreachable!("source: {}", other),
680677
},
681678
(src_ty, inner_dest_ty) if src_ty == inner_dest_ty => match value {
682679
Value::Scalar(_) => Ok(value),
683680
Value::Column(column) => {
684-
Ok(Value::Column(Column::Nullable(Box::new(NullableColumn {
685-
validity: Bitmap::new_constant(true, column.len()),
686-
column,
687-
}))))
681+
let validity = Bitmap::new_constant(true, column.len());
682+
Ok(Value::Column(NullableColumn::new_column(column, validity)))
688683
}
689684
},
690685

@@ -719,10 +714,9 @@ impl<'a> Evaluator<'a> {
719714
values: new_values,
720715
offsets: col.offsets,
721716
}));
722-
Ok(Value::Column(Column::Nullable(Box::new(NullableColumn {
723-
validity: Bitmap::new_constant(true, new_col.len()),
724-
column: new_col,
725-
}))))
717+
let validity = Bitmap::new_constant(true, new_col.len());
718+
719+
Ok(Value::Column(NullableColumn::new_column(new_col, validity)))
726720
}
727721
_ => unreachable!(),
728722
},
@@ -757,10 +751,9 @@ impl<'a> Evaluator<'a> {
757751
values: new_values,
758752
offsets: col.offsets,
759753
}));
760-
Ok(Value::Column(Column::Nullable(Box::new(NullableColumn {
761-
validity: Bitmap::new_constant(true, new_col.len()),
762-
column: new_col,
763-
}))))
754+
let validity = Bitmap::new_constant(true, new_col.len());
755+
756+
Ok(Value::Column(NullableColumn::new_column(new_col, validity)))
764757
}
765758
_ => unreachable!(),
766759
},
@@ -795,10 +788,8 @@ impl<'a> Evaluator<'a> {
795788
})
796789
.collect::<Result<_>>()?;
797790
let new_col = Column::Tuple(new_fields);
798-
Ok(Value::Column(Column::Nullable(Box::new(NullableColumn {
799-
validity: Bitmap::new_constant(true, new_col.len()),
800-
column: new_col,
801-
}))))
791+
let validity = Bitmap::new_constant(true, new_col.len());
792+
Ok(Value::Column(NullableColumn::new_column(new_col, validity)))
802793
}
803794
other => unreachable!("source: {}", other),
804795
}
@@ -1185,10 +1176,7 @@ impl<'a> Evaluator<'a> {
11851176
}))
11861177
};
11871178
let col = match validity {
1188-
Some(validity) => Value::Column(Column::Nullable(Box::new(NullableColumn {
1189-
column: array_col,
1190-
validity,
1191-
}))),
1179+
Some(validity) => Value::Column(NullableColumn::new_column(array_col, validity)),
11921180
None => Value::Column(array_col),
11931181
};
11941182
return Ok(col);

src/query/expression/src/function.rs

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -288,21 +288,16 @@ impl Function {
288288
match output {
289289
Value::Scalar(_) => Value::Scalar(Scalar::Null),
290290
Value::Column(column) => {
291-
Value::Column(Column::Nullable(Box::new(NullableColumn {
292-
column,
293-
validity: validity.into(),
294-
})))
291+
Value::Column(NullableColumn::new_column(column, validity.into()))
295292
}
296293
}
297294
} else {
298295
match output {
299296
Value::Scalar(scalar) => Value::Scalar(scalar),
300-
Value::Column(column) => {
301-
Value::Column(Column::Nullable(Box::new(NullableColumn {
302-
column,
303-
validity: Bitmap::new_constant(true, num_rows),
304-
})))
305-
}
297+
Value::Column(column) => Value::Column(NullableColumn::new_column(
298+
column,
299+
Bitmap::new_constant(true, num_rows),
300+
)),
306301
}
307302
}
308303
});
@@ -711,15 +706,10 @@ where F: Fn(&[ValueRef<AnyType>], &mut EvalContext) -> Value<AnyType> {
711706
&nullable_column.validity,
712707
&validity,
713708
);
714-
Column::Nullable(Box::new(NullableColumn {
715-
column: nullable_column.column,
716-
validity,
717-
}))
709+
710+
NullableColumn::new_column(nullable_column.column, validity)
718711
}
719-
_ => Column::Nullable(Box::new(NullableColumn {
720-
column,
721-
validity: bitmap.into(),
722-
})),
712+
_ => NullableColumn::new_column(column, bitmap.into()),
723713
};
724714
Value::Column(result)
725715
}
@@ -737,18 +727,17 @@ pub fn error_to_null<I1: ArgType, O: ArgType>(
737727
if let Some((validity, _)) = ctx.errors.take() {
738728
match output {
739729
Value::Scalar(_) => Value::Scalar(None),
740-
Value::Column(column) => Value::Column(NullableColumn {
741-
column,
742-
validity: validity.into(),
743-
}),
730+
Value::Column(column) => {
731+
Value::Column(NullableColumn::new(column, validity.into()))
732+
}
744733
}
745734
} else {
746735
match output {
747736
Value::Scalar(scalar) => Value::Scalar(Some(scalar)),
748-
Value::Column(column) => Value::Column(NullableColumn {
737+
Value::Column(column) => Value::Column(NullableColumn::new(
749738
column,
750-
validity: Bitmap::new_constant(true, ctx.num_rows),
751-
}),
739+
Bitmap::new_constant(true, ctx.num_rows),
740+
)),
752741
}
753742
}
754743
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ impl Column {
336336
capacity,
337337
));
338338
let validity = BooleanType::try_downcast_column(&validity).unwrap();
339-
Column::Nullable(Box::new(NullableColumn { column, validity }))
339+
NullableColumn::new_column(column, validity)
340340
}
341341
Column::Tuple(fields) => {
342342
let fields = (0..fields.len())

src/query/expression/src/kernels/filter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ impl Column {
173173
Column::Nullable(c) => {
174174
let column = Self::filter(&c.column, filter);
175175
let validity = Self::filter_boolean_types(&c.validity, filter);
176-
Column::Nullable(Box::new(NullableColumn { column, validity }))
176+
NullableColumn::new_column(column, validity)
177177
}
178178
Column::Tuple(fields) => {
179179
let fields = fields.iter().map(|c| c.filter(filter)).collect();

src/query/expression/src/kernels/group_by_hash/method_fixed_keys.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -203,10 +203,7 @@ where T: Clone
203203
let bitmap = col.not();
204204
column.push_fix_len_binaries(&reader[offsize..], step, rows)?;
205205
let inner = column.build();
206-
Column::Nullable(Box::new(NullableColumn {
207-
column: inner,
208-
validity: bitmap,
209-
}))
206+
NullableColumn::new_column(inner, bitmap)
210207
}
211208
};
212209

0 commit comments

Comments
 (0)