This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.0 by this push:
new 77c09cdabc8 branch-4.0: [fix](variant) fix insert when least type is
DataTypeNothing #60035 (#60065)
77c09cdabc8 is described below
commit 77c09cdabc8aec6ad8a6b21288e2b3d9a4872d52
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Jan 20 23:52:24 2026 +0800
branch-4.0: [fix](variant) fix insert when least type is DataTypeNothing
#60035 (#60065)
Cherry-picked from #60035
Co-authored-by: Sun Chenyang <[email protected]>
---
be/src/vec/columns/column_variant.cpp | 3 ++-
be/test/vec/columns/column_variant_test.cpp | 32 +++++++++++++++++++++++++++++
2 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/be/src/vec/columns/column_variant.cpp
b/be/src/vec/columns/column_variant.cpp
index da60ce66471..ffc7bd7afce 100644
--- a/be/src/vec/columns/column_variant.cpp
+++ b/be/src/vec/columns/column_variant.cpp
@@ -217,7 +217,8 @@ void ColumnVariant::Subcolumn::insert(Field field,
FieldInfo info) {
auto least_common_type_id = least_common_type.get_base_type_id();
auto least_common_type_dim = least_common_type.get_dimensions();
bool type_changed = info.need_convert;
- if (data.empty()) {
+ // Special case: when data is not empty but contains a column of
DataTypeNothing, least type is DataTypeNothing
+ if (data.empty() || least_common_type_id == PrimitiveType::INVALID_TYPE) {
if (from_dim > 1) {
add_new_column_part(create_array_of_type(PrimitiveType::TYPE_JSONB, 0,
is_nullable));
type_changed = true;
diff --git a/be/test/vec/columns/column_variant_test.cpp
b/be/test/vec/columns/column_variant_test.cpp
index 1b68257749d..867cd122f44 100644
--- a/be/test/vec/columns/column_variant_test.cpp
+++ b/be/test/vec/columns/column_variant_test.cpp
@@ -29,6 +29,7 @@
#include <cstdint>
#include "common/cast_set.h"
+#include "runtime/define_primitive_type.h"
#include "runtime/jsonb_value.h"
#include "testutil/test_util.h"
#include "testutil/variant_util.h"
@@ -3804,4 +3805,35 @@ TEST_F(ColumnVariantTest,
test_variant_deserialize_from_sparse_column) {
}
}
+TEST_F(ColumnVariantTest, subcolumn_finalize_and_insert) {
+ ColumnVariant::Subcolumn subcolumn(0, true, true);
+ subcolumn.insert_many_defaults(20);
+ subcolumn.finalize();
+ vectorized::UInt64 v = 20231205;
+ typename PrimitiveTypeTraits<TYPE_DATEV2>::CppType tmp;
+ tmp.from_date_int64(v);
+ auto f = vectorized::Field::create_field<TYPE_DATEV2>(tmp);
+
+ FieldWithDataType field;
+ field.base_scalar_type_id = TYPE_DATEV2;
+ field.field = f;
+ subcolumn.insert(field);
+ subcolumn.finalize();
+
+ ColumnVariant::Subcolumn array_subcolumn(0, true, true);
+ array_subcolumn.insert_many_defaults(20);
+ array_subcolumn.finalize();
+
+ Array array;
+ array.push_back(f);
+ auto array_f = vectorized::Field::create_field<TYPE_ARRAY>(array);
+
+ FieldWithDataType field2;
+ field2.base_scalar_type_id = TYPE_DATEV2;
+ field2.field = array_f;
+ field2.num_dimensions = 1;
+ array_subcolumn.insert(field2);
+ array_subcolumn.finalize();
+}
+
} // namespace doris::vectorized
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]