Skip to content

Commit 400ab21

Browse files
authored
[fix](variant) fix insert when least type is DataTypeNothing (#60035)
1 parent 8ae511e commit 400ab21

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

be/src/vec/columns/column_variant.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,8 @@ void ColumnVariant::Subcolumn::insert(Field field, FieldInfo info) {
217217
auto least_common_type_id = least_common_type.get_base_type_id();
218218
auto least_common_type_dim = least_common_type.get_dimensions();
219219
bool type_changed = info.need_convert;
220-
if (data.empty()) {
220+
// Special case: when data is not empty but contains a column of DataTypeNothing, least type is DataTypeNothing
221+
if (data.empty() || least_common_type_id == PrimitiveType::INVALID_TYPE) {
221222
if (from_dim > 1) {
222223
add_new_column_part(create_array_of_type(PrimitiveType::TYPE_JSONB, 0, is_nullable));
223224
type_changed = true;

be/test/vec/columns/column_variant_test.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include <cstdint>
3030

3131
#include "common/cast_set.h"
32+
#include "runtime/define_primitive_type.h"
3233
#include "runtime/jsonb_value.h"
3334
#include "testutil/test_util.h"
3435
#include "testutil/variant_util.h"
@@ -3591,4 +3592,35 @@ TEST_F(ColumnVariantTest, test_variant_deserialize_from_sparse_column) {
35913592
}
35923593
}
35933594

3595+
TEST_F(ColumnVariantTest, subcolumn_finalize_and_insert) {
3596+
ColumnVariant::Subcolumn subcolumn(0, true, true);
3597+
subcolumn.insert_many_defaults(20);
3598+
subcolumn.finalize();
3599+
vectorized::UInt64 v = 20231205;
3600+
typename PrimitiveTypeTraits<TYPE_DATEV2>::CppType tmp;
3601+
tmp.from_date_int64(v);
3602+
auto f = vectorized::Field::create_field<TYPE_DATEV2>(tmp);
3603+
3604+
FieldWithDataType field;
3605+
field.base_scalar_type_id = TYPE_DATEV2;
3606+
field.field = f;
3607+
subcolumn.insert(field);
3608+
subcolumn.finalize();
3609+
3610+
ColumnVariant::Subcolumn array_subcolumn(0, true, true);
3611+
array_subcolumn.insert_many_defaults(20);
3612+
array_subcolumn.finalize();
3613+
3614+
Array array;
3615+
array.push_back(f);
3616+
auto array_f = vectorized::Field::create_field<TYPE_ARRAY>(array);
3617+
3618+
FieldWithDataType field2;
3619+
field2.base_scalar_type_id = TYPE_DATEV2;
3620+
field2.field = array_f;
3621+
field2.num_dimensions = 1;
3622+
array_subcolumn.insert(field2);
3623+
array_subcolumn.finalize();
3624+
}
3625+
35943626
} // namespace doris::vectorized

0 commit comments

Comments
 (0)