[feature-wip](array-type) add function array_union/array_except/array_intersect (#10781)
Add array_union/array_except/array_intersect function.
This commit is contained in:
@ -17,8 +17,6 @@
|
||||
|
||||
#include "vec/functions/array/function_array_utils.h"
|
||||
|
||||
#include "vec/columns/column_nullable.h"
|
||||
|
||||
namespace doris::vectorized {
|
||||
|
||||
bool extract_column_array_info(const IColumn& src, ColumnArrayExecutionData& data) {
|
||||
@ -48,4 +46,26 @@ bool extract_column_array_info(const IColumn& src, ColumnArrayExecutionData& dat
|
||||
return true;
|
||||
}
|
||||
|
||||
ColumnArrayMutableData create_mutable_data(const IColumn* nested_col, bool is_nullable) {
|
||||
ColumnArrayMutableData dst;
|
||||
if (is_nullable) {
|
||||
dst.array_nested_col =
|
||||
ColumnNullable::create(nested_col->clone_empty(), ColumnUInt8::create());
|
||||
auto* nullable_col = reinterpret_cast<ColumnNullable*>(dst.array_nested_col.get());
|
||||
dst.nested_nullmap_data = &nullable_col->get_null_map_data();
|
||||
dst.nested_col = nullable_col->get_nested_column_ptr().get();
|
||||
} else {
|
||||
dst.array_nested_col = nested_col->clone_empty();
|
||||
dst.nested_col = dst.array_nested_col.get();
|
||||
}
|
||||
dst.offsets_col = ColumnArray::ColumnOffsets::create();
|
||||
dst.offsets_ptr =
|
||||
&reinterpret_cast<ColumnArray::ColumnOffsets*>(dst.offsets_col.get())->get_data();
|
||||
return dst;
|
||||
}
|
||||
|
||||
MutableColumnPtr assemble_column_array(ColumnArrayMutableData& data) {
|
||||
return ColumnArray::create(std::move(data.array_nested_col), std::move(data.offsets_col));
|
||||
}
|
||||
|
||||
} // namespace doris::vectorized
|
||||
|
||||
Reference in New Issue
Block a user