yiguolei commented on code in PR #60253:
URL: https://github.com/apache/doris/pull/60253#discussion_r2752311496


##########
be/src/olap/predicate_creator.h:
##########
@@ -172,134 +172,107 @@ std::shared_ptr<ColumnPredicate> 
create_in_list_predicate(const uint32_t cid,
 }
 
 template <PredicateType PT>
-std::shared_ptr<ColumnPredicate> create_comparison_predicate0(
+std::shared_ptr<ColumnPredicate> create_comparison_predicate(
         const uint32_t cid, const std::string col_name, const 
vectorized::DataTypePtr& data_type,
-        StringRef& value, bool opposite, vectorized::Arena& arena) {
+        const vectorized::Field& value, bool opposite, vectorized::Arena& 
arena) {
     switch (data_type->get_primitive_type()) {
     case TYPE_TINYINT: {
-        return ComparisonPredicateBase<TYPE_TINYINT, PT>::create_shared(
-                cid, col_name, *(typename 
PrimitiveTypeTraits<TYPE_TINYINT>::CppType*)value.data,
-                opposite);
+        return ComparisonPredicateBase<TYPE_TINYINT, PT>::create_shared(cid, 
col_name, value,
+                                                                        
opposite);
     }
     case TYPE_SMALLINT: {
-        return ComparisonPredicateBase<TYPE_SMALLINT, PT>::create_shared(
-                cid, col_name, *(typename 
PrimitiveTypeTraits<TYPE_SMALLINT>::CppType*)value.data,
-                opposite);
+        return ComparisonPredicateBase<TYPE_SMALLINT, PT>::create_shared(cid, 
col_name, value,
+                                                                         
opposite);
     }
     case TYPE_INT: {
-        return ComparisonPredicateBase<TYPE_INT, PT>::create_shared(
-                cid, col_name, *(typename 
PrimitiveTypeTraits<TYPE_INT>::CppType*)value.data,
-                opposite);
+        return ComparisonPredicateBase<TYPE_INT, PT>::create_shared(cid, 
col_name, value, opposite);
     }
     case TYPE_BIGINT: {
-        return ComparisonPredicateBase<TYPE_BIGINT, PT>::create_shared(
-                cid, col_name, *(typename 
PrimitiveTypeTraits<TYPE_BIGINT>::CppType*)value.data,
-                opposite);
+        return ComparisonPredicateBase<TYPE_BIGINT, PT>::create_shared(cid, 
col_name, value,
+                                                                       
opposite);
     }
     case TYPE_LARGEINT: {
-        return ComparisonPredicateBase<TYPE_LARGEINT, PT>::create_shared(
-                cid, col_name, *(typename 
PrimitiveTypeTraits<TYPE_LARGEINT>::CppType*)value.data,
-                opposite);
+        return ComparisonPredicateBase<TYPE_LARGEINT, PT>::create_shared(cid, 
col_name, value,
+                                                                         
opposite);
     }
     case TYPE_FLOAT: {
-        return ComparisonPredicateBase<TYPE_FLOAT, PT>::create_shared(
-                cid, col_name, *(typename 
PrimitiveTypeTraits<TYPE_FLOAT>::CppType*)value.data,
-                opposite);
+        return ComparisonPredicateBase<TYPE_FLOAT, PT>::create_shared(cid, 
col_name, value,
+                                                                      
opposite);
     }
     case TYPE_DOUBLE: {
-        return ComparisonPredicateBase<TYPE_DOUBLE, PT>::create_shared(
-                cid, col_name, *(typename 
PrimitiveTypeTraits<TYPE_DOUBLE>::CppType*)value.data,
-                opposite);
+        return ComparisonPredicateBase<TYPE_DOUBLE, PT>::create_shared(cid, 
col_name, value,
+                                                                       
opposite);
     }
     case TYPE_DECIMALV2: {
-        return ComparisonPredicateBase<TYPE_DECIMALV2, PT>::create_shared(
-                cid, col_name, *(typename 
PrimitiveTypeTraits<TYPE_DECIMALV2>::CppType*)value.data,
-                opposite);
+        return ComparisonPredicateBase<TYPE_DECIMALV2, PT>::create_shared(cid, 
col_name, value,
+                                                                          
opposite);
     }
     case TYPE_DECIMAL32: {
-        return ComparisonPredicateBase<TYPE_DECIMAL32, PT>::create_shared(
-                cid, col_name, *(typename 
PrimitiveTypeTraits<TYPE_DECIMAL32>::CppType*)value.data,
-                opposite);
+        return ComparisonPredicateBase<TYPE_DECIMAL32, PT>::create_shared(cid, 
col_name, value,
+                                                                          
opposite);
     }
     case TYPE_DECIMAL64: {
-        return ComparisonPredicateBase<TYPE_DECIMAL64, PT>::create_shared(
-                cid, col_name, *(typename 
PrimitiveTypeTraits<TYPE_DECIMAL64>::CppType*)value.data,
-                opposite);
+        return ComparisonPredicateBase<TYPE_DECIMAL64, PT>::create_shared(cid, 
col_name, value,
+                                                                          
opposite);
     }
     case TYPE_DECIMAL128I: {
-        return ComparisonPredicateBase<TYPE_DECIMAL128I, PT>::create_shared(
-                cid, col_name,
-                *(typename 
PrimitiveTypeTraits<TYPE_DECIMAL128I>::CppType*)value.data, opposite);
+        return ComparisonPredicateBase<TYPE_DECIMAL128I, 
PT>::create_shared(cid, col_name, value,
+                                                                            
opposite);
     }
     case TYPE_DECIMAL256: {
-        return ComparisonPredicateBase<TYPE_DECIMAL256, PT>::create_shared(
-                cid, col_name, *(typename 
PrimitiveTypeTraits<TYPE_DECIMAL256>::CppType*)value.data,
-                opposite);
+        return ComparisonPredicateBase<TYPE_DECIMAL256, 
PT>::create_shared(cid, col_name, value,
+                                                                           
opposite);
     }
     case TYPE_CHAR: {
-        // TODO(gabriel): Use std::string instead of StringRef
         auto target =
                 std::max(cast_set<size_t>(assert_cast<const 
vectorized::DataTypeString*>(
                                                   
vectorized::remove_nullable(data_type).get())
                                                   ->len()),
-                         value.size);
+                         value.template get<TYPE_CHAR>().size());
         char* buffer = arena.alloc(target);
         memset(buffer, 0, target);
-        memcpy(buffer, value.data, value.size);
-        StringRef v = {buffer, target};
-        return ComparisonPredicateBase<TYPE_CHAR, PT>::create_shared(cid, 
col_name, v, opposite);
-    }
-    case TYPE_VARCHAR: {
-        char* buffer = arena.alloc(value.size);
-        memcpy(buffer, value.data, value.size);
-        StringRef v = {buffer, value.size};
-        return ComparisonPredicateBase<TYPE_VARCHAR, PT>::create_shared(cid, 
col_name, v, opposite);
+        memcpy(buffer, value.template get<TYPE_CHAR>().data(),

Review Comment:
   这里感觉不需要用arena 来管理。238 行,直接传递string 了,所以我们直接在这里创建一个string,然后把chars copy 
进去,然后再设置一下string 的长度,比如resize 一下,是不是就跟arena 分配,再memset 是等价的?
   如果这样的话,感觉arena 这个参数就没用了。



##########
be/src/runtime/type_limit.h:
##########
@@ -36,6 +36,12 @@ struct type_limit<StringRef> {
     static StringRef max() { return StringRef::max_string_val(); }
 };
 
+template <>
+struct type_limit<std::string> {

Review Comment:
   这个是用来做什么的?



-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to