This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-1.2-lts in repository https://gitbox.apache.org/repos/asf/doris.git
commit c3bb2141583131901d992a92bd9009c23f5298b5 Author: xueweizhang <[email protected]> AuthorDate: Thu Mar 2 14:05:44 2023 +0800 [fix](delete) fix 'is null' or 'is not null' delete predicate will get wrong result (#17190) fix 'is null' or 'is not null' delete predicate will get wrong result Signed-off-by: nextdreamblue <[email protected]> --- be/src/olap/null_predicate.h | 7 +- .../data/delete_p0/test_zone_map_delete.out | 104 +++++++++++++++++++++ .../suites/delete_p0/test_zone_map_delete.groovy | 23 +++++ 3 files changed, 132 insertions(+), 2 deletions(-) diff --git a/be/src/olap/null_predicate.h b/be/src/olap/null_predicate.h index 3910151f68..5df3fb890a 100644 --- a/be/src/olap/null_predicate.h +++ b/be/src/olap/null_predicate.h @@ -60,10 +60,13 @@ public: } bool evaluate_del(const std::pair<WrapperField*, WrapperField*>& statistic) const override { + // evaluate_del only use for delete condition to filter page, need use delete condition origin value, + // when opposite==true, origin value 'is null'->'is not null' and 'is not null'->'is null', + // so when _is_null==true, need check 'is not null' and _is_null==false, need check 'is null' if (_is_null) { - return statistic.first->is_null() && statistic.second->is_null(); - } else { return !statistic.first->is_null() && !statistic.second->is_null(); + } else { + return statistic.first->is_null() && statistic.second->is_null(); } } diff --git a/regression-test/data/delete_p0/test_zone_map_delete.out b/regression-test/data/delete_p0/test_zone_map_delete.out index ba300220f4..d4867dc17e 100644 --- a/regression-test/data/delete_p0/test_zone_map_delete.out +++ b/regression-test/data/delete_p0/test_zone_map_delete.out @@ -343,3 +343,107 @@ -- !sql -- 1 11 +-- !sql -- +1 11 +1 22 +1 33 +1 44 +1 55 +1 66 +1 77 +1 88 +1 99 +1 100 +1 101 +1 102 +1 111 +1 122 +1 133 +1 144 +1 155 +1 166 +1 177 +1 188 +1 199 +1 200 +1 201 +1 202 + +-- !sql -- +1 11 +1 22 +1 33 +1 44 +1 55 +1 66 +1 77 +1 88 +1 99 +1 100 +1 101 +1 102 +1 111 +1 122 +1 133 +1 144 +1 155 +1 166 +1 177 +1 188 +1 199 +1 200 +1 201 +1 202 + +-- !sql -- +\N 11 +\N 22 +\N 33 +\N 44 +\N 55 +\N 66 +\N 77 +\N 88 +\N 99 +\N 100 +\N 101 +\N 102 +\N 111 +\N 122 +\N 133 +\N 144 +\N 155 +\N 166 +\N 177 +\N 188 +\N 199 +\N 200 +\N 201 +\N 202 + +-- !sql -- +\N 11 +\N 22 +\N 33 +\N 44 +\N 55 +\N 66 +\N 77 +\N 88 +\N 99 +\N 100 +\N 101 +\N 102 +\N 111 +\N 122 +\N 133 +\N 144 +\N 155 +\N 166 +\N 177 +\N 188 +\N 199 +\N 200 +\N 201 +\N 202 + diff --git a/regression-test/suites/delete_p0/test_zone_map_delete.groovy b/regression-test/suites/delete_p0/test_zone_map_delete.groovy index f79830c815..0aaf868ee3 100644 --- a/regression-test/suites/delete_p0/test_zone_map_delete.groovy +++ b/regression-test/suites/delete_p0/test_zone_map_delete.groovy @@ -149,6 +149,29 @@ suite("test_zone_map_delete") { qt_sql """select k2,k3 from ${tableName} where k3 = 11 ORDER BY k3;""" + + sql """truncate table ${tableName};""" + + sql """insert into ${tableName} values(0,1,11),(0,1,22),(0,1,33),(0,1,44),(0,1,55),(0,1,66),(0,1,77),(0,1,88),(0,1,99),(0,1,100),(0,1,101),(0,1,102),(0,1,111),(0,1,122),(0,1,133),(0,1,144),(0,1,155),(0,1,166),(0,1,177),(0,1,188),(0,1,199),(0,1,200),(0,1,201),(0,1,202);""" + + sql """delete from ${tableName} where k2 is null;""" + + qt_sql """select k2,k3 from ${tableName} ORDER BY k3;""" + + qt_sql """select k2,k3 from ${tableName} where k2 is not null ORDER BY k3;""" + + + sql """truncate table ${tableName};""" + + sql """insert into ${tableName} values(0,null,11),(0,null,22),(0,null,33),(0,null,44),(0,null,55),(0,null,66),(0,null,77),(0,null,88),(0,null,99),(0,null,100),(0,null,101),(0,null,102),(0,null,111),(0,null,122),(0,null,133),(0,null,144),(0,null,155),(0,null,166),(0,null,177),(0,null,188),(0,null,199),(0,null,200),(0,null,201),(0,null,202);""" + + sql """delete from ${tableName} where k2 is not null;""" + + qt_sql """select k2,k3 from ${tableName} ORDER BY k3;""" + + qt_sql """select k2,k3 from ${tableName} where k2 is null ORDER BY k3;""" + + sql """ DROP TABLE IF EXISTS ${tableName} """ } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
