This is an automated email from the ASF dual-hosted git repository.

zclll pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 4ee7ef770f2 [refine](be) Deprecate TYPE_LAMBDA_FUNCTION in 
PrimitiveType enum (#61941)
4ee7ef770f2 is described below

commit 4ee7ef770f25facae27fc99a0da7935f87894b90
Author: Mryange <[email protected]>
AuthorDate: Wed Apr 1 16:10:33 2026 +0800

    [refine](be) Deprecate TYPE_LAMBDA_FUNCTION in PrimitiveType enum (#61941)
    
    `TYPE_LAMBDA_FUNCTION` (enum value 33) is not a real column data type —
    it is a semantic tag for lambda expressions. Lambda execution is
    entirely driven by `TExprNodeType::LAMBDA_FUNCTION_EXPR`, not
    `PrimitiveType`. Having it in the `PrimitiveType` enum pollutes the enum
    semantics and causes a structural inconsistency in
    `VLambdaFunctionExpr._data_type`.
    
    ### Changes
    
    1. **Mark `TYPE_LAMBDA_FUNCTION` as `[[deprecated]]`** in
    `define_primitive_type.h` (enum value 33 is preserved for ABI
    compatibility).
    
    2. **`from_thrift()`**: Map `TPrimitiveType::LAMBDA_FUNCTION` →
    `TYPE_STRING` instead of `TYPE_LAMBDA_FUNCTION`. This is semantically
    equivalent since `DataTypeFactory` always created `DataTypeString` for
    it anyway. Thrift protocol compatibility is maintained (old FE → new BE
    still works).
    
    3. **Remove all BE references** to `TYPE_LAMBDA_FUNCTION`:
    - `to_thrift()` / `type_to_string()` — removed switch cases (all have
    `default:` branches)
    - `data_type_factory.cpp` — removed case (falls through to `default:`)
    - `data_type_decimal.cpp` — removed dead code branch (unreachable since
    `create_data_type(TYPE_LAMBDA_FUNCTION)` returns `DataTypeString` whose
    `get_primitive_type()` is `TYPE_STRING`)
    - `tablet_schema.cpp` — removed case (identical to `default:` behavior)
       - `cast_test.h` — removed case (identical to `default:` behavior)
    
    4. **Fix `VLambdaFunctionExpr._data_type` inconsistency**: In
    `prepare()`, override `_data_type` with `get_child(0)->data_type()` (the
    lambda body's actual return type) instead of keeping the placeholder
    `DataTypeString`.
---
 be/src/core/data_type/data_type_decimal.cpp   |  3 +-
 be/src/core/data_type/data_type_factory.cpp   |  1 -
 be/src/core/data_type/define_primitive_type.h | 42 +++++++++++++--------------
 be/src/core/data_type/primitive_type.cpp      |  9 +++---
 be/src/exprs/vlambda_function_expr.h          |  4 +++
 be/src/storage/tablet/tablet_schema.cpp       |  2 --
 be/test/exprs/function/cast/cast_test.h       |  3 --
 7 files changed, 30 insertions(+), 34 deletions(-)

diff --git a/be/src/core/data_type/data_type_decimal.cpp 
b/be/src/core/data_type/data_type_decimal.cpp
index 16d9c5662dd..1f89161c8aa 100644
--- a/be/src/core/data_type/data_type_decimal.cpp
+++ b/be/src/core/data_type/data_type_decimal.cpp
@@ -70,8 +70,7 @@ DataTypePtr get_data_type_with_default_argument(DataTypePtr 
type) {
             DCHECK_EQ(res->get_scale(), BeConsts::MAX_DECIMALV2_SCALE);
 
             return res;
-        } else if (t->get_primitive_type() == PrimitiveType::TYPE_BINARY ||
-                   t->get_primitive_type() == 
PrimitiveType::TYPE_LAMBDA_FUNCTION) {
+        } else if (t->get_primitive_type() == PrimitiveType::TYPE_BINARY) {
             return DataTypeFactory::instance().create_data_type(TYPE_STRING, 
t->is_nullable());
         } else {
             return t;
diff --git a/be/src/core/data_type/data_type_factory.cpp 
b/be/src/core/data_type/data_type_factory.cpp
index 1022449b0c9..aee6321fb83 100644
--- a/be/src/core/data_type/data_type_factory.cpp
+++ b/be/src/core/data_type/data_type_factory.cpp
@@ -457,7 +457,6 @@ DataTypePtr DataTypeFactory::create_data_type(const 
PrimitiveType primitive_type
         nested = std::make_shared<DataTypeString>(len, primitive_type);
         break;
     case TYPE_BINARY:
-    case TYPE_LAMBDA_FUNCTION:
         nested = std::make_shared<DataTypeString>(len, TYPE_STRING);
         break;
     case TYPE_JSONB:
diff --git a/be/src/core/data_type/define_primitive_type.h 
b/be/src/core/data_type/define_primitive_type.h
index a8b4131c475..b47218afc1b 100644
--- a/be/src/core/data_type/define_primitive_type.h
+++ b/be/src/core/data_type/define_primitive_type.h
@@ -50,27 +50,27 @@ enum PrimitiveType : PrimitiveNative {
 
     TYPE_TIME [[deprecated]], /*TYPE_TIMEV2*/
 
-    TYPE_BITMAP,              /* 22, bitmap */
-    TYPE_STRING,              /* 23 */
-    TYPE_QUANTILE_STATE,      /* 24 */
-    TYPE_DATEV2,              /* 25 */
-    TYPE_DATETIMEV2,          /* 26 */
-    TYPE_TIMEV2,              /* 27 */
-    TYPE_DECIMAL32,           /* 28 */
-    TYPE_DECIMAL64,           /* 29 */
-    TYPE_DECIMAL128I,         /* 30, v3 128bit */
-    TYPE_JSONB,               /* 31 */
-    TYPE_VARIANT,             /* 32 */
-    TYPE_LAMBDA_FUNCTION,     /* 33 */
-    TYPE_AGG_STATE,           /* 34 */
-    TYPE_DECIMAL256,          /* 35 */
-    TYPE_IPV4,                /* 36 */
-    TYPE_IPV6,                /* 37 */
-    TYPE_UINT32,              /* 38, used as offset */
-    TYPE_UINT64,              /* 39, used as offset */
-    TYPE_FIXED_LENGTH_OBJECT, /* 40, represent fixed-length object on BE */
-    TYPE_VARBINARY,           /* 41, varbinary */
-    TYPE_TIMESTAMPTZ          /* 42, timestamptz */
+    TYPE_BITMAP,                         /* 22, bitmap */
+    TYPE_STRING,                         /* 23 */
+    TYPE_QUANTILE_STATE,                 /* 24 */
+    TYPE_DATEV2,                         /* 25 */
+    TYPE_DATETIMEV2,                     /* 26 */
+    TYPE_TIMEV2,                         /* 27 */
+    TYPE_DECIMAL32,                      /* 28 */
+    TYPE_DECIMAL64,                      /* 29 */
+    TYPE_DECIMAL128I,                    /* 30, v3 128bit */
+    TYPE_JSONB,                          /* 31 */
+    TYPE_VARIANT,                        /* 32 */
+    TYPE_LAMBDA_FUNCTION [[deprecated]], /* 33 */
+    TYPE_AGG_STATE,                      /* 34 */
+    TYPE_DECIMAL256,                     /* 35 */
+    TYPE_IPV4,                           /* 36 */
+    TYPE_IPV6,                           /* 37 */
+    TYPE_UINT32,                         /* 38, used as offset */
+    TYPE_UINT64,                         /* 39, used as offset */
+    TYPE_FIXED_LENGTH_OBJECT,            /* 40, represent fixed-length object 
on BE */
+    TYPE_VARBINARY,                      /* 41, varbinary */
+    TYPE_TIMESTAMPTZ                     /* 42, timestamptz */
 };
 
 } // namespace doris
diff --git a/be/src/core/data_type/primitive_type.cpp 
b/be/src/core/data_type/primitive_type.cpp
index 44527e33893..746fc655323 100644
--- a/be/src/core/data_type/primitive_type.cpp
+++ b/be/src/core/data_type/primitive_type.cpp
@@ -127,7 +127,10 @@ PrimitiveType thrift_to_type(TPrimitiveType::type ttype) {
         return TYPE_STRUCT;
 
     case TPrimitiveType::LAMBDA_FUNCTION:
-        return TYPE_LAMBDA_FUNCTION;
+        // TYPE_LAMBDA_FUNCTION is deprecated. Lambda execution is driven by
+        // TExprNodeType::LAMBDA_FUNCTION_EXPR, not PrimitiveType. Map to 
TYPE_STRING
+        // since DataTypeFactory always created DataTypeString for it anyway.
+        return TYPE_STRING;
 
     case TPrimitiveType::AGG_STATE:
         return TYPE_AGG_STATE;
@@ -247,8 +250,6 @@ TPrimitiveType::type to_thrift(PrimitiveType ptype) {
 
     case TYPE_STRUCT:
         return TPrimitiveType::STRUCT;
-    case TYPE_LAMBDA_FUNCTION:
-        return TPrimitiveType::LAMBDA_FUNCTION;
     case TYPE_AGG_STATE:
         return TPrimitiveType::AGG_STATE;
     case TYPE_VARBINARY:
@@ -363,8 +364,6 @@ std::string type_to_string(PrimitiveType t) {
 
     case TYPE_STRUCT:
         return "STRUCT";
-    case TYPE_LAMBDA_FUNCTION:
-        return "LAMBDA_FUNCTION TYPE";
 
     case TYPE_VARIANT:
         return "VARIANT";
diff --git a/be/src/exprs/vlambda_function_expr.h 
b/be/src/exprs/vlambda_function_expr.h
index b2c66c5b2f6..23416298f6f 100644
--- a/be/src/exprs/vlambda_function_expr.h
+++ b/be/src/exprs/vlambda_function_expr.h
@@ -30,6 +30,10 @@ public:
 
     Status prepare(RuntimeState* state, const RowDescriptor& desc, 
VExprContext* context) override {
         RETURN_IF_ERROR_OR_PREPARED(VExpr::prepare(state, desc, context));
+        // Fix _data_type to match the lambda body's actual return type.
+        // The initial _data_type was set to DataTypeString as a placeholder 
during
+        // VExpr(TExprNode) construction; override it with the body's real 
type.
+        data_type() = get_child(0)->data_type();
         _prepare_finished = true;
         return Status::OK();
     }
diff --git a/be/src/storage/tablet/tablet_schema.cpp 
b/be/src/storage/tablet/tablet_schema.cpp
index 9caa121bcc3..c38bdddc87f 100644
--- a/be/src/storage/tablet/tablet_schema.cpp
+++ b/be/src/storage/tablet/tablet_schema.cpp
@@ -128,8 +128,6 @@ FieldType 
TabletColumn::get_field_type_by_type(PrimitiveType primitiveType) {
         return FieldType::OLAP_FIELD_TYPE_IPV4;
     case PrimitiveType::TYPE_IPV6:
         return FieldType::OLAP_FIELD_TYPE_IPV6;
-    case PrimitiveType::TYPE_LAMBDA_FUNCTION:
-        return FieldType::OLAP_FIELD_TYPE_UNKNOWN; // Not implemented
     case PrimitiveType::TYPE_AGG_STATE:
         return FieldType::OLAP_FIELD_TYPE_AGG_STATE;
     default:
diff --git a/be/test/exprs/function/cast/cast_test.h 
b/be/test/exprs/function/cast/cast_test.h
index 472889c692d..f1e046ae086 100644
--- a/be/test/exprs/function/cast/cast_test.h
+++ b/be/test/exprs/function/cast/cast_test.h
@@ -182,9 +182,6 @@ struct FunctionCastTest : public testing::Test {
             return "jsonb";
         case TYPE_VARIANT: /* 32 */
             return "variant";
-        case TYPE_LAMBDA_FUNCTION: /* 33 */
-            __builtin_unreachable();
-            break;
         case TYPE_AGG_STATE: /* 34 */
             __builtin_unreachable();
             break;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to