eldenmoon commented on code in PR #24554:
URL: https://github.com/apache/doris/pull/24554#discussion_r1378920533


##########
be/src/vec/common/schema_util.cpp:
##########
@@ -129,164 +139,254 @@ bool is_conversion_required_between_integers(FieldType 
lhs, FieldType rhs) {
     return true;
 }
 
-Status cast_column(const ColumnWithTypeAndName& arg, const DataTypePtr& type, 
ColumnPtr* result,
-                   RuntimeState* state) {
-    ColumnsWithTypeAndName arguments;
-    if (WhichDataType(type->get_type_id()).is_string()) {
-        // Special handle ColumnString, since the original cast logic use 
ColumnString's first item
-        // as the name of the dest type
-        arguments = {arg, {type->create_column_const(1, type->get_name()), 
type, ""}};
-    } else {
-        arguments = {arg, {type->create_column_const_with_default_value(1), 
type, ""}};
-    }
+Status cast_column(const ColumnWithTypeAndName& arg, const DataTypePtr& type, 
ColumnPtr* result) {
+    ColumnsWithTypeAndName arguments {
+            arg, {type->create_column_const_with_default_value(1), type, 
type->get_name()}};
     auto function = SimpleFunctionFactory::instance().get_function("CAST", 
arguments, type);
+    if (!function) {
+        return Status::InternalError("Not found cast function {} to {}", 
arg.type->get_name(),
+                                     type->get_name());
+    }
     Block tmp_block {arguments};
-    // the 0 position is input argument, the 1 position is to type argument, 
the 2 position is result argument
     vectorized::ColumnNumbers argnum;
     argnum.emplace_back(0);
     argnum.emplace_back(1);
     size_t result_column = tmp_block.columns();
+    auto ctx = FunctionContext::create_context(nullptr, {}, {});
+    // We convert column string to jsonb type just add a string jsonb field to 
dst column instead of parse
+    // each line in original string column.
+    ctx->set_string_as_jsonb_string(true);

Review Comment:
   可能不能作为函数参数, 这个不希望用户带下来。而且cast函数只有两个参数即源column和目标类型。



##########
be/src/vec/common/schema_util.cpp:
##########
@@ -129,164 +139,254 @@ bool is_conversion_required_between_integers(FieldType 
lhs, FieldType rhs) {
     return true;
 }
 
-Status cast_column(const ColumnWithTypeAndName& arg, const DataTypePtr& type, 
ColumnPtr* result,
-                   RuntimeState* state) {
-    ColumnsWithTypeAndName arguments;
-    if (WhichDataType(type->get_type_id()).is_string()) {
-        // Special handle ColumnString, since the original cast logic use 
ColumnString's first item
-        // as the name of the dest type
-        arguments = {arg, {type->create_column_const(1, type->get_name()), 
type, ""}};
-    } else {
-        arguments = {arg, {type->create_column_const_with_default_value(1), 
type, ""}};
-    }
+Status cast_column(const ColumnWithTypeAndName& arg, const DataTypePtr& type, 
ColumnPtr* result) {
+    ColumnsWithTypeAndName arguments {
+            arg, {type->create_column_const_with_default_value(1), type, 
type->get_name()}};
     auto function = SimpleFunctionFactory::instance().get_function("CAST", 
arguments, type);
+    if (!function) {
+        return Status::InternalError("Not found cast function {} to {}", 
arg.type->get_name(),
+                                     type->get_name());
+    }
     Block tmp_block {arguments};
-    // the 0 position is input argument, the 1 position is to type argument, 
the 2 position is result argument
     vectorized::ColumnNumbers argnum;
     argnum.emplace_back(0);
     argnum.emplace_back(1);
     size_t result_column = tmp_block.columns();
+    auto ctx = FunctionContext::create_context(nullptr, {}, {});
+    // We convert column string to jsonb type just add a string jsonb field to 
dst column instead of parse
+    // each line in original string column.
+    ctx->set_string_as_jsonb_string(true);

Review Comment:
   可能不能作为函数参数, 这个不希望用户带下来。而且cast函数只有两个参数即源column和目标类型。



-- 
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