adonis0147 commented on a change in pull request #8494:
URL: https://github.com/apache/incubator-doris/pull/8494#discussion_r829649391



##########
File path: be/src/vec/exprs/vliteral.cpp
##########
@@ -24,107 +24,104 @@
 #include "vec/data_types/data_type_nullable.h"
 #include "vec/runtime/vdatetime_value.h"
 namespace doris::vectorized {
-VLiteral::VLiteral(const TExprNode& node) : VExpr(node) {
+
+void VLiteral::init(const TExprNode& node) {
     Field field;
     if (node.node_type != TExprNodeType::NULL_LITERAL) {
         switch (_type.type) {
-            case TYPE_BOOLEAN: {
-                DCHECK_EQ(node.node_type, TExprNodeType::BOOL_LITERAL);
-                DCHECK(node.__isset.bool_literal);
-                field = Int8(node.bool_literal.value);
-                break;
-            }
-            case TYPE_TINYINT: {
-                DCHECK_EQ(node.node_type, TExprNodeType::INT_LITERAL);
-                DCHECK(node.__isset.int_literal);
-                field = Int8(node.int_literal.value);
-                break;
-            }
-            case TYPE_SMALLINT: {
-                DCHECK_EQ(node.node_type, TExprNodeType::INT_LITERAL);
-                DCHECK(node.__isset.int_literal);
-                field = Int16(node.int_literal.value);
-                break;
-            }
-            case TYPE_INT: {
-                DCHECK_EQ(node.node_type, TExprNodeType::INT_LITERAL);
-                DCHECK(node.__isset.int_literal);
-                field = Int32(node.int_literal.value);
-                break;
-            }
-            case TYPE_BIGINT: {
-                DCHECK_EQ(node.node_type, TExprNodeType::INT_LITERAL);
-                DCHECK(node.__isset.int_literal);
-                field = Int64(node.int_literal.value);
-                break;
-            }
-            case TYPE_LARGEINT: {
-                StringParser::ParseResult parse_result = 
StringParser::PARSE_SUCCESS;
-                DCHECK_EQ(node.node_type, TExprNodeType::LARGE_INT_LITERAL);
-                __int128_t value = StringParser::string_to_int<__int128>(
-                        node.large_int_literal.value.c_str(), 
node.large_int_literal.value.size(),
-                        &parse_result);
-                if (parse_result != StringParser::PARSE_SUCCESS) {
-                    value = MAX_INT128;
-                }
-                field = Int128(value);
-                break;
-            }
-            case TYPE_FLOAT: {
-                DCHECK_EQ(node.node_type, TExprNodeType::FLOAT_LITERAL);
-                DCHECK(node.__isset.float_literal);
-                field = Float32(node.float_literal.value);
-                break;
-            }
-            case TYPE_TIME:
-            case TYPE_DOUBLE: {
-                DCHECK_EQ(node.node_type, TExprNodeType::FLOAT_LITERAL);
-                DCHECK(node.__isset.float_literal);
-                field = Float64(node.float_literal.value);
-                break;
-            }
-            case TYPE_DATE: {
-                VecDateTimeValue value;
-                value.from_date_str(node.date_literal.value.c_str(), 
node.date_literal.value.size());
-                value.cast_to_date();
-                field = Int64(*reinterpret_cast<__int64_t*>(&value));
-                break;
-            }
-            case TYPE_DATETIME: {
-                VecDateTimeValue value;
-                value.from_date_str(node.date_literal.value.c_str(), 
node.date_literal.value.size());
-                value.to_datetime();
-                field = Int64(*reinterpret_cast<__int64_t*>(&value));
-                break;
-            }
-            case TYPE_STRING:
-            case TYPE_CHAR:
-            case TYPE_VARCHAR: {
-                DCHECK_EQ(node.node_type, TExprNodeType::STRING_LITERAL);
-                DCHECK(node.__isset.string_literal);
-                field = node.string_literal.value;
-                break;
-            }
-            case TYPE_DECIMALV2: {
-                DCHECK_EQ(node.node_type, TExprNodeType::DECIMAL_LITERAL);
-                DCHECK(node.__isset.decimal_literal);
-                DecimalV2Value value(node.decimal_literal.value);
-                field = DecimalField<Decimal128>(value.value(), value.scale());
-                break;
-            }
-            default: {
-                DCHECK(false) << "Invalid type: " << _type.type;
-                break;
+        case TYPE_BOOLEAN: {
+            DCHECK_EQ(node.node_type, TExprNodeType::BOOL_LITERAL);
+            DCHECK(node.__isset.bool_literal);
+            field = Int8(node.bool_literal.value);
+            break;
+        }
+        case TYPE_TINYINT: {
+            DCHECK_EQ(node.node_type, TExprNodeType::INT_LITERAL);
+            DCHECK(node.__isset.int_literal);
+            field = Int8(node.int_literal.value);
+            break;
+        }
+        case TYPE_SMALLINT: {
+            DCHECK_EQ(node.node_type, TExprNodeType::INT_LITERAL);
+            DCHECK(node.__isset.int_literal);
+            field = Int16(node.int_literal.value);
+            break;
+        }
+        case TYPE_INT: {
+            DCHECK_EQ(node.node_type, TExprNodeType::INT_LITERAL);
+            DCHECK(node.__isset.int_literal);
+            field = Int32(node.int_literal.value);
+            break;
+        }
+        case TYPE_BIGINT: {
+            DCHECK_EQ(node.node_type, TExprNodeType::INT_LITERAL);
+            DCHECK(node.__isset.int_literal);
+            field = Int64(node.int_literal.value);
+            break;
+        }
+        case TYPE_LARGEINT: {
+            StringParser::ParseResult parse_result = 
StringParser::PARSE_SUCCESS;
+            DCHECK_EQ(node.node_type, TExprNodeType::LARGE_INT_LITERAL);
+            __int128_t value = StringParser::string_to_int<__int128>(
+                    node.large_int_literal.value.c_str(), 
node.large_int_literal.value.size(),
+                    &parse_result);
+            if (parse_result != StringParser::PARSE_SUCCESS) {
+                value = MAX_INT128;
             }
+            field = Int128(value);
+            break;
+        }
+        case TYPE_FLOAT: {
+            DCHECK_EQ(node.node_type, TExprNodeType::FLOAT_LITERAL);
+            DCHECK(node.__isset.float_literal);
+            field = Float32(node.float_literal.value);
+            break;
+        }
+        case TYPE_TIME:
+        case TYPE_DOUBLE: {
+            DCHECK_EQ(node.node_type, TExprNodeType::FLOAT_LITERAL);
+            DCHECK(node.__isset.float_literal);
+            field = Float64(node.float_literal.value);
+            break;
+        }
+        case TYPE_DATE: {
+            VecDateTimeValue value;
+            value.from_date_str(node.date_literal.value.c_str(), 
node.date_literal.value.size());
+            value.cast_to_date();
+            field = Int64(*reinterpret_cast<__int64_t*>(&value));
+            break;
+        }
+        case TYPE_DATETIME: {
+            VecDateTimeValue value;
+            value.from_date_str(node.date_literal.value.c_str(), 
node.date_literal.value.size());
+            value.to_datetime();
+            field = Int64(*reinterpret_cast<__int64_t*>(&value));
+            break;
+        }
+        case TYPE_STRING:
+        case TYPE_CHAR:
+        case TYPE_VARCHAR: {
+            DCHECK_EQ(node.node_type, TExprNodeType::STRING_LITERAL);
+            DCHECK(node.__isset.string_literal);
+            field = node.string_literal.value;
+            break;
+        }
+        case TYPE_DECIMALV2: {
+            DCHECK_EQ(node.node_type, TExprNodeType::DECIMAL_LITERAL);
+            DCHECK(node.__isset.decimal_literal);
+            DecimalV2Value value(node.decimal_literal.value);
+            field = DecimalField<Decimal128>(value.value(), value.scale());
+            break;
+        }
+        default: {

Review comment:
       `VArrayLiteral` never call init method, because it always passes `false` 
to `should_init`. Please refer to the constructor of class `VArrayLiteral` 




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to