This is an automated email from the ASF dual-hosted git repository. kxiao pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new de7d6c6ea4a [Fix](inverted index) Fix wrong need read data opt when enable_common_expr_pushdown is disabled (#40689) de7d6c6ea4a is described below commit de7d6c6ea4a9dabb470194780de9de7cb41b88ba Author: airborne12 <airborn...@gmail.com> AuthorDate: Thu Sep 12 09:36:28 2024 +0800 [Fix](inverted index) Fix wrong need read data opt when enable_common_expr_pushdown is disabled (#40689) If common_expr_pushdown is disabled, we cannot guarantee that all conditions are processed by the inverted index after refactor of #38908 Consider a scenario where there is a column predicate and an expression involving the same column in the SQL query, such as 'a < 0' and 'abs(a) > 1'. This could potentially lead to errors. --- be/src/olap/rowset/segment_v2/segment_iterator.cpp | 6 ++++++ .../data/inverted_index_p0/test_need_read_data.out | 6 ++++++ .../inverted_index_p0/test_need_read_data.groovy | 25 ++++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/be/src/olap/rowset/segment_v2/segment_iterator.cpp b/be/src/olap/rowset/segment_v2/segment_iterator.cpp index 1014f65b7ae..91c6fe3a704 100644 --- a/be/src/olap/rowset/segment_v2/segment_iterator.cpp +++ b/be/src/olap/rowset/segment_v2/segment_iterator.cpp @@ -969,6 +969,12 @@ Status SegmentIterator::_apply_inverted_index() { */ bool SegmentIterator::_check_all_conditions_passed_inverted_index_for_column(ColumnId cid, bool default_return) { + // If common_expr_pushdown is disabled, we cannot guarantee that all conditions are processed by the inverted index. + // Consider a scenario where there is a column predicate and an expression involving the same column in the SQL query, + // such as 'a < 0' and 'abs(a) > 1'. This could potentially lead to errors. + if (_opts.runtime_state && !_opts.runtime_state->query_options().enable_common_expr_pushdown) { + return false; + } auto pred_it = _column_predicate_inverted_index_status.find(cid); if (pred_it != _column_predicate_inverted_index_status.end()) { const auto& pred_map = pred_it->second; diff --git a/regression-test/data/inverted_index_p0/test_need_read_data.out b/regression-test/data/inverted_index_p0/test_need_read_data.out index 7298254f838..782d5e5ab0b 100644 --- a/regression-test/data/inverted_index_p0/test_need_read_data.out +++ b/regression-test/data/inverted_index_p0/test_need_read_data.out @@ -25,3 +25,9 @@ -- !sql4 -- 2024-06-17T15:16:49 tengxun2 +-- !sql -- +1 + +-- !sql -- +1 + diff --git a/regression-test/suites/inverted_index_p0/test_need_read_data.groovy b/regression-test/suites/inverted_index_p0/test_need_read_data.groovy index f66b92ae66c..e1251d207f8 100644 --- a/regression-test/suites/inverted_index_p0/test_need_read_data.groovy +++ b/regression-test/suites/inverted_index_p0/test_need_read_data.groovy @@ -113,4 +113,29 @@ suite("test_need_read_data", "p0"){ qt_sql2 """ select * from ${indexTbName2} WHERE a >= '2024-06-15 00:00:00' AND b = 'tengxun2' and `b` match 'tengxun2' ; """ qt_sql3 """ select COUNT(1) from ${indexTbName2} WHERE a >= '2024-06-15 00:00:00' AND b like '%tengxun%' and `b` match 'tengxun2' ; """ qt_sql4 """ select * from ${indexTbName2} WHERE a >= '2024-06-15 00:00:00' AND b like '%tengxun%' and `b` match 'tengxun2' ; """ + + def indexTblName3 = "test_need_read_data_3" + + sql "DROP TABLE IF EXISTS ${indexTblName3}" + // create 1 replica table + sql """ + CREATE TABLE IF NOT EXISTS ${indexTblName3}( + `id` int(11) NOT NULL, + `value` int(11) NULL, + INDEX c_value_idx(`value`) USING INVERTED COMMENT '' + ) ENGINE=OLAP + DUPLICATE KEY(`id`) + COMMENT 'OLAP' + DISTRIBUTED BY HASH(`id`) BUCKETS 1 + PROPERTIES( + "replication_allocation" = "tag.location.default: 1" + ); + """ + + def var_result = sql "show variables" + logger.info("show variales result: " + var_result ) + + sql "INSERT INTO ${indexTblName3} VALUES (1, 1),(1, -2),(1, -1);" + qt_sql "SELECT /*+SET_VAR(enable_common_expr_pushdown=false) */ id FROM ${indexTblName3} WHERE value<0 and abs(value)>1;" + qt_sql "SELECT /*+SET_VAR(enable_common_expr_pushdown=true) */ id FROM ${indexTblName3} WHERE value<0 and abs(value)>1;" } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org