This is an automated email from the ASF dual-hosted git repository.
lihaopeng pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push:
new 90d6985f91c [Fix](bug) Is null predicate get error query result
(#41704)
90d6985f91c is described below
commit 90d6985f91ce1cf40524c7b91c16d60ba9926173
Author: HappenLee <[email protected]>
AuthorDate: Sat Oct 12 13:18:14 2024 +0800
[Fix](bug) Is null predicate get error query result (#41704)
cherry-pick #41668
---
be/src/exec/olap_common.h | 28 +++++++++++++---------
.../data/query_p0/scan_range/test_scan_range.out | 5 ++++
.../query_p0/scan_range/test_scan_range.groovy | 5 ++++
3 files changed, 27 insertions(+), 11 deletions(-)
diff --git a/be/src/exec/olap_common.h b/be/src/exec/olap_common.h
index 67f13773c1b..7001eae0c83 100644
--- a/be/src/exec/olap_common.h
+++ b/be/src/exec/olap_common.h
@@ -617,6 +617,18 @@ bool
ColumnValueRange<primitive_type>::convert_to_avg_range_value(
std::vector<OlapTuple>& begin_scan_keys, std::vector<OlapTuple>&
end_scan_keys,
bool& begin_include, bool& end_include, int32_t max_scan_key_num) {
if constexpr (!_is_reject_split_type) {
+ CppType min_value = get_range_min_value();
+ CppType max_value = get_range_max_value();
+ if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
+ min_value.set_type(TimeType::TIME_DATE);
+ max_value.set_type(TimeType::TIME_DATE);
+ }
+ auto empty_range_only_null = min_value > max_value;
+ if (empty_range_only_null) {
+ // Not contain null will be disposed in `convert_to_close_range`,
return eos.
+ DCHECK(contain_null());
+ }
+
auto no_split = [&]() -> bool {
begin_scan_keys.emplace_back();
begin_scan_keys.back().add_value(
@@ -624,18 +636,11 @@ bool
ColumnValueRange<primitive_type>::convert_to_avg_range_value(
contain_null());
end_scan_keys.emplace_back();
end_scan_keys.back().add_value(
- cast_to_string<primitive_type,
CppType>(get_range_max_value(), scale()));
+ cast_to_string<primitive_type,
CppType>(get_range_max_value(), scale()),
+ empty_range_only_null ? true : false);
return true;
};
-
- CppType min_value = get_range_min_value();
- CppType max_value = get_range_max_value();
- if constexpr (primitive_type == PrimitiveType::TYPE_DATE) {
- min_value.set_type(TimeType::TIME_DATE);
- max_value.set_type(TimeType::TIME_DATE);
- }
-
- if (min_value > max_value || max_scan_key_num == 1) {
+ if (empty_range_only_null || max_scan_key_num == 1) {
return no_split();
}
@@ -1018,7 +1023,8 @@ Status
OlapScanKeys::extend_scan_key(ColumnValueRange<primitive_type>& range,
*eos |= range.convert_to_close_range(_begin_scan_keys,
_end_scan_keys, _begin_include,
_end_include);
- if (range.convert_to_avg_range_value(_begin_scan_keys,
_end_scan_keys, _begin_include,
+ if (!(*eos) &&
+ range.convert_to_avg_range_value(_begin_scan_keys,
_end_scan_keys, _begin_include,
_end_include,
max_scan_key_num)) {
_has_range_value = true;
}
diff --git a/regression-test/data/query_p0/scan_range/test_scan_range.out
b/regression-test/data/query_p0/scan_range/test_scan_range.out
index e4df16ef06c..9d42dd67dc9 100644
--- a/regression-test/data/query_p0/scan_range/test_scan_range.out
+++ b/regression-test/data/query_p0/scan_range/test_scan_range.out
@@ -4,7 +4,12 @@
-- !sql_2 --
1
+-2147483648
-- !sql_3 --
-- !sql_4 --
+
+-- !sql_5 --
+\N
+
diff --git a/regression-test/suites/query_p0/scan_range/test_scan_range.groovy
b/regression-test/suites/query_p0/scan_range/test_scan_range.groovy
index e011a5095a5..c0ec6daeef0 100644
--- a/regression-test/suites/query_p0/scan_range/test_scan_range.groovy
+++ b/regression-test/suites/query_p0/scan_range/test_scan_range.groovy
@@ -34,6 +34,8 @@ suite("test_scan_range", "query,p0") {
"""
sql "insert into ${tableName} values(1,1)"
+ sql "insert into ${tableName} values(-2147483648, -2147483648)"
+ sql "insert into ${tableName} values(null, null)"
qt_sql_1 "select k1 from ${tableName} where k1 > -2147483648"
@@ -42,4 +44,7 @@ suite("test_scan_range", "query,p0") {
qt_sql_3 "select k1 from ${tableName} where k1 < -2147483648"
qt_sql_4 "select k1 from ${tableName} where k1 > 2147483647"
+
+ qt_sql_5 "select k1 from ${tableName} where k1 is null"
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]