From 8a6182a8bffe6ca0341b87645008286f96f5bf26 Mon Sep 17 00:00:00 2001 From: nextdreamblue Date: Mon, 27 Feb 2023 16:53:16 +0800 Subject: [PATCH 1/2] [fix](delete) fix 'is null' or 'is not null' delete predicate will get wrong result Signed-off-by: nextdreamblue --- be/src/olap/null_predicate.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/be/src/olap/null_predicate.h b/be/src/olap/null_predicate.h index 73d6bb32bf56fe..7424548054c604 100644 --- a/be/src/olap/null_predicate.h +++ b/be/src/olap/null_predicate.h @@ -54,10 +54,13 @@ class NullPredicate : public ColumnPredicate { } bool evaluate_del(const std::pair& 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(); } } From af212ded29c538ab3d4ac944db918583ed926b9e Mon Sep 17 00:00:00 2001 From: nextdreamblue Date: Tue, 28 Feb 2023 10:46:49 +0800 Subject: [PATCH 2/2] add regression-test Signed-off-by: nextdreamblue --- .../data/delete_p0/test_zone_map_delete.out | 104 ++++++++++++++++++ .../delete_p0/test_zone_map_delete.groovy | 23 ++++ 2 files changed, 127 insertions(+) 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 ba300220f487ac..d4867dc17e71ca 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 f79830c8158c7b..0aaf868ee3775c 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} """ }