branch-2.1: [fix](inverted index) fix wrong read data for primary key #47841 (#48207)

Cherry-picked from #47841

Co-authored-by: airborne12 <jiangkai@selectdb.com>
This commit is contained in:
github-actions[bot]
2025-02-25 21:15:03 +08:00
committed by GitHub
parent d6f4db4170
commit 4f8ff321ea
2 changed files with 21 additions and 6 deletions

View File

@ -2475,7 +2475,19 @@ bool SegmentIterator::_no_need_read_key_data(ColumnId cid, vectorized::MutableCo
return false;
}
if (!_check_all_conditions_passed_inverted_index_for_column(cid)) {
// seek_schema is set when get_row_ranges_by_keys, it is null when there is no primary key range
// in this case, we need to read data
if (!_seek_schema) {
return false;
}
// check if the column is in the seek_schema
if (std::none_of(_seek_schema->columns().begin(), _seek_schema->columns().end(),
[&](const Field* col) {
return (col && _opts.tablet_schema->field_index(col->unique_id()) == cid);
})) {
return false;
}
if (!_check_all_conditions_passed_inverted_index_for_column(cid, true)) {
return false;
}

View File

@ -14,7 +14,7 @@
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
suite("test_pk_no_need_read_data", "p0"){
suite("test_pk_no_need_read_data", "nonConcurrent"){
def table1 = "test_pk_no_need_read_data"
sql "drop table if exists ${table1}"
@ -56,12 +56,15 @@ suite("test_pk_no_need_read_data", "p0"){
sql "set enable_count_on_index_pushdown = true"
sql """ set enable_common_expr_pushdown = true """
qt_select_0 "SELECT COUNT() FROM ${table1} WHERE date='2017-10-01'"
try {
GetDebugPoint().enableDebugPointForAllBEs("segment_iterator._read_columns_by_index")
qt_select_0 "SELECT COUNT() FROM ${table1} WHERE date='2017-10-01'"
} finally {
GetDebugPoint().disableDebugPointForAllBEs("segment_iterator._read_columns_by_index")
}
qt_select_1 "SELECT COUNT() FROM ${table1} WHERE year(date)='2017'"
// case1: disable count on index
// case2: disable count on index
sql "set enable_count_on_index_pushdown = false"
qt_select_2 "SELECT COUNT() FROM ${table1} WHERE date='2017-10-01'"
qt_select_3 "SELECT COUNT() FROM ${table1} WHERE year(date)='2017'"
}