chaoyli commented on a change in pull request #532: Make reader can be compiled
URL: https://github.com/apache/incubator-doris/pull/532#discussion_r247800834
 
 

 ##########
 File path: be/src/olap/reader.cpp
 ##########
 @@ -503,43 +485,93 @@ OLAPStatus Reader::_capture_rs_readers(const 
ReaderParams& read_params) {
         is_using_cache = false;
     }
 
-    for (auto i_data: *rs_readers) {
-        // skip empty version
-        if (i_data->empty() || i_data->zero_num_rows()) {
-            continue;
-        }
-        i_data->set_delete_handler(_delete_handler);
-        i_data->set_read_params(_return_columns,
-                                _load_bf_columns,
-                                _conditions,
-                                _col_predicates,
-                                _keys_param.start_keys,
-                                _keys_param.end_keys,
-                                is_using_cache,
-                                read_params.runtime_state);
-        if (i_data->delta_pruning_filter()) {
-            VLOG(3) << "filter delta in query in condition:"
-                    << i_data->version().first << ", " << 
i_data->version().second;
-            _stats.rows_stats_filtered += i_data->num_rows();
-            continue;
+    bool eof = false;
+    RowCursor* start_key = nullptr;
+    RowCursor* end_key = nullptr;
+    bool is_lower_key_included = false;
+    bool is_upper_key_included = false;
+    for (int i = 0; i < _keys_param.start_keys.size(); ++i) {
+        start_key = _keys_param.start_keys[i];
+        end_key = _keys_param.end_keys[i];
+        if (_keys_param.end_range.compare("lt") == 0) {
+            is_upper_key_included = false;
+        } else if (_keys_param.end_range.compare("le")) {
+            is_upper_key_included = true;
+        } else {
+            LOG(WARNING) << "reader params end_range is error. "
+                         << "range=" << _keys_param.to_string();
+            return OLAP_ERR_READER_GET_ITERATOR_ERROR;
         }
-        int ret = i_data->delete_pruning_filter();
-        if (ret == DEL_SATISFIED) {
-            VLOG(3) << "filter delta in delete predicate:"
-                    << i_data->version().first << ", " << 
i_data->version().second;
-            _stats.rows_del_filtered += i_data->num_rows();
-            continue;
-        } else if (ret == DEL_PARTIAL_SATISFIED) {
-            VLOG(3) << "filter delta partially in delete predicate:"
-                    << i_data->version().first << ", " << 
i_data->version().second;
-            i_data->set_delete_status(DEL_PARTIAL_SATISFIED);
+
+        if (_keys_param.range.compare("gt") == 0) {
+            if (end_key != nullptr && start_key->cmp(*end_key) >= 0) {
+                VLOG(3) << "return EOF when range=" << _keys_param.range
+                        << ", start_key=" << start_key->to_string()
+                        << ", end_key=" << end_key->to_string();
+                eof = true;
+                break;
+            }
+            is_lower_key_included = true;
+        } else if (_keys_param.range.compare("ge") == 0) {
+            if (end_key != nullptr && start_key->cmp(*end_key) > 0) {
+                VLOG(3) << "return EOF when range=" << _keys_param.range
+                        << ", start_key=" << start_key->to_string()
+                        << ", end_key=" << end_key->to_string();
+                eof = true;
+                break;
+            }
+            is_lower_key_included = false;
+        } else if (0 == _keys_param.range.compare("eq")) {
+            is_lower_key_included = false;
+            is_upper_key_included = true;
         } else {
-            VLOG(3) << "not filter delta in delete predicate:"
-                    << i_data->version().first << ", " << 
i_data->version().second;
-            i_data->set_delete_status(DEL_NOT_SATISFIED);
+            LOG(WARNING) << "reader params range is error. "
+                         << "range=" << _keys_param.to_string();
+            return OLAP_ERR_READER_GET_ITERATOR_ERROR;
+        }
+        _is_lower_keys_included.push_back(is_lower_key_included);
+        _is_upper_keys_included.push_back(is_upper_key_included);
+    }
+
+    if (eof) { return OLAP_SUCCESS; }
+
+    RowsetReaderContextBuilder context_builder;
+    context_builder.set_tablet_schema(&_tablet->tablet_schema())
+                   .set_return_columns(&_return_columns)
+                   .set_load_bf_columns(&_load_bf_columns)
+                   .set_conditions(&_conditions)
+                   .set_predicates(&_col_predicates)
+                   .set_lower_bound_keys(&_keys_param.start_keys)
+                   .set_is_lower_keys_included(&_is_lower_keys_included)
+                   .set_upper_bound_keys(&_keys_param.end_keys)
+                   .set_is_upper_keys_included(&_is_upper_keys_included)
+                   .set_delete_handler(&_delete_handler)
+                   .set_stats(&_stats)
+                   .set_is_using_cache(is_using_cache)
+                   .set_runtime_state(read_params.runtime_state);
+    ReaderContext context = context_builder.build();
+    for (auto& rs_reader : *rs_readers) {
+        rs_reader->init(&context);
+        _rs_readers.push_back(rs_reader);
+    }
+
+    for (auto& rs_reader : _rs_readers) {
+        RowBlock* block = nullptr;
+        auto res = rs_reader->next_block(&block);
+        if (res == OLAP_SUCCESS) {
+            res = _collect_iter->add_child(rs_reader, block);
+            if (res != OLAP_SUCCESS && res != OLAP_ERR_DATA_EOF) {
+                LOG(WARNING) << "failed to add child to iterator";
+                return res;
+            } else if (res == OLAP_ERR_DATA_EOF) {
+                continue;
+            } else {
+                LOG(WARNING) << "prepare block failed, res=" << res;
 
 Review comment:
   OK, I will fixed it.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

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

Reply via email to