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]

Reply via email to