wangbo commented on a change in pull request #8627:
URL: https://github.com/apache/incubator-doris/pull/8627#discussion_r834945195



##########
File path: be/src/olap/rowset/segment_v2/segment_iterator.cpp
##########
@@ -830,23 +831,17 @@ void 
SegmentIterator::_evaluate_short_circuit_predicate(uint16_t* vec_sel_rowid_
         return;
     }
 
-    for (auto column_predicate : _short_cir_eval_predicate) {
-        auto column_id = column_predicate->column_id();
+    for (auto predicate : _short_cir_eval_predicate) {
+        auto column_id = predicate->column_id();
         auto& short_cir_column = _current_return_columns[column_id];
         auto* col_ptr = short_cir_column.get();
-        // todo(zeno) define convert_dict_codes_if_dictionary interface in 
IColumn
-        if (short_cir_column->is_nullable()) {
-            auto nullable_col =
-                    
reinterpret_cast<vectorized::ColumnNullable*>(short_cir_column.get());
-            col_ptr = nullable_col->get_nested_column_ptr().get();
+        // range comparison predicate needs to sort the dict and convert the 
encoding
+        if (predicate->type() == PredicateType::LT || predicate->type() == 
PredicateType::LE ||
+            predicate->type() == PredicateType::GT || predicate->type() == 
PredicateType::GE) {
+            col_ptr->convert_dict_codes_if_necessary();
         }
-
-        if (col_ptr->is_column_dictionary() && 
column_predicate->is_range_comparison_predicate()) {
-            auto& dict_col =
-                    
reinterpret_cast<vectorized::ColumnDictionary<vectorized::Int32>&>(*col_ptr);
-            dict_col.convert_dict_codes();
-        }
-        column_predicate->evaluate(*short_cir_column, vec_sel_rowid_idx, 
selected_size_ptr);
+        col_ptr->set_predicate_dict_code_if_necessary(predicate);

Review comment:
       First, It seems that you do ```set_predicate_dict_code_if_necessary``` 
after read one block.
   Maybe we can do ```set_predicate_dict_code_if_necessary``` in SegmentIter's 
init method.
   Because I think dict is immutable after segment is loaded, and the same to 
Predicate.




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