[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:
xy720
2022-07-22 13:50:13 +08:00
committed by GitHub
parent 9d21b2154d
commit 3744321f01
18 changed files with 1160 additions and 2 deletions

View File

@ -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