You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by pa...@apache.org on 2022/10/21 05:15:29 UTC

[doris] branch master updated: [Bug](predicate) fix core dump on bool type runtime filter (#13417)

This is an automated email from the ASF dual-hosted git repository.

panxiaolei 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 88ceace855 [Bug](predicate) fix core dump on bool type runtime filter (#13417)
88ceace855 is described below

commit 88ceace85532c56bbaa0ffe1377aff8caa50cec5
Author: Pxl <px...@qq.com>
AuthorDate: Fri Oct 21 13:15:22 2022 +0800

    [Bug](predicate) fix core dump on bool type runtime filter (#13417)
    
    fix core dump on bool type runtime filter
---
 be/src/exprs/runtime_filter.cpp                       |  2 +-
 be/src/olap/in_list_predicate.h                       |  6 +++++-
 be/src/olap/predicate_creator.h                       |  5 -----
 .../java/org/apache/doris/planner/RuntimeFilter.java  |  6 +++---
 .../data/query/operator/test_logical_operators.out    | 19 +++++++++++++++++++
 .../query/operator/test_logical_operators.groovy      |  4 +++-
 6 files changed, 31 insertions(+), 11 deletions(-)

diff --git a/be/src/exprs/runtime_filter.cpp b/be/src/exprs/runtime_filter.cpp
index 24e8e41a84..540e814633 100644
--- a/be/src/exprs/runtime_filter.cpp
+++ b/be/src/exprs/runtime_filter.cpp
@@ -1413,7 +1413,7 @@ void IRuntimeFilter::to_protobuf(PInFilter* filter) {
 
     switch (column_type) {
     case TYPE_BOOLEAN: {
-        batch_copy<int32_t>(filter, it, [](PColumnValue* column, const int32_t* value) {
+        batch_copy<bool>(filter, it, [](PColumnValue* column, const bool* value) {
             column->set_boolval(*value);
         });
         return;
diff --git a/be/src/olap/in_list_predicate.h b/be/src/olap/in_list_predicate.h
index b0b9fc5330..3cd60c8f7e 100644
--- a/be/src/olap/in_list_predicate.h
+++ b/be/src/olap/in_list_predicate.h
@@ -27,6 +27,7 @@
 #include "olap/column_predicate.h"
 #include "olap/rowset/segment_v2/bloom_filter.h"
 #include "olap/wrapper_field.h"
+#include "runtime/define_primitive_type.h"
 #include "runtime/string_value.h"
 #include "runtime/type_limit.h"
 #include "uint24.h"
@@ -267,7 +268,10 @@ public:
 private:
     template <typename LeftT, typename RightT>
     bool _operator(const LeftT& lhs, const RightT& rhs) const {
-        if constexpr (PT == PredicateType::IN_LIST) {
+        if constexpr (Type == TYPE_BOOLEAN) {
+            DCHECK(_values.size() == 2);
+            return PT == PredicateType::IN_LIST;
+        } else if constexpr (PT == PredicateType::IN_LIST) {
             return lhs != rhs;
         }
         return lhs == rhs;
diff --git a/be/src/olap/predicate_creator.h b/be/src/olap/predicate_creator.h
index ad1ed0d69e..0b1e1a4c14 100644
--- a/be/src/olap/predicate_creator.h
+++ b/be/src/olap/predicate_creator.h
@@ -24,7 +24,6 @@
 #include "olap/in_list_predicate.h"
 #include "olap/null_predicate.h"
 #include "olap/tablet_schema.h"
-#include "runtime/type_limit.h"
 #include "util/date_func.h"
 #include "util/string_util.h"
 
@@ -236,10 +235,6 @@ template <PredicateType PT>
 inline ColumnPredicate* create_list_predicate(const TabletColumn& column, int index,
                                               const std::vector<std::string>& conditions,
                                               bool opposite, MemPool* pool) {
-    if (column.type() == OLAP_FIELD_TYPE_BOOL) {
-        LOG(FATAL) << "Failed to create list preacate! input column type is invalid";
-        return nullptr;
-    }
     static_assert(PredicateTypeTraits::is_list(PT));
     return create_predicate<PT, std::vector<std::string>>(column, index, conditions, opposite,
                                                           pool);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilter.java b/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilter.java
index 45a0c60724..c3fec43021 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilter.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/RuntimeFilter.java
@@ -26,8 +26,8 @@ import org.apache.doris.analysis.SlotRef;
 import org.apache.doris.analysis.TupleDescriptor;
 import org.apache.doris.analysis.TupleId;
 import org.apache.doris.analysis.TupleIsNullPredicate;
-import org.apache.doris.catalog.PrimitiveType;
 import org.apache.doris.catalog.ScalarType;
+import org.apache.doris.catalog.Type;
 import org.apache.doris.common.FeConstants;
 import org.apache.doris.common.IdGenerator;
 import org.apache.doris.qe.ConnectContext;
@@ -264,8 +264,8 @@ public final class RuntimeFilter {
                 TupleIsNullPredicate.unwrapExpr(normalizedJoinConjunct.getChild(0).clone());
         Expr srcExpr = normalizedJoinConjunct.getChild(1);
 
-        if (srcExpr.getType().equals(ScalarType.createHllType())
-                || srcExpr.getType().equals(ScalarType.createType(PrimitiveType.BITMAP))) {
+        Type srcType = srcExpr.getType();
+        if (srcType.equals(ScalarType.HLL) || srcType.equals(ScalarType.BITMAP) || srcType.equals(ScalarType.BOOLEAN)) {
             return null;
         }
 
diff --git a/regression-test/data/query/operator/test_logical_operators.out b/regression-test/data/query/operator/test_logical_operators.out
index fe5e12b481..ee73efed04 100644
--- a/regression-test/data/query/operator/test_logical_operators.out
+++ b/regression-test/data/query/operator/test_logical_operators.out
@@ -367,3 +367,22 @@
 -- !logical_op10 --
 false	1	1989	1001	11011902	123.123	true	1989-03-21	1989-03-21T13:00	wangjuoo4	0.1	6.333	string12345	170141183460469231731687303715884105727
 
+-- !logical_op11 --
+false	1	1989	1001	11011902	123.123	true	1989-03-21	1989-03-21T13:00	wangjuoo4	0.1	6.333	string12345	170141183460469231731687303715884105727
+false	2	1986	1001	11011903	1243.5	false	1901-12-31	1989-03-21T13:00	wangynnsf	20.268	789.25	string12345	-170141183460469231731687303715884105727
+false	3	1989	1002	11011905	24453.325	false	2012-03-14	2000-01-01T00:00	yunlj8@nk	78945.0	3654.0	string12345	0
+false	4	1991	3021	-11011907	243243.325	false	3124-10-10	2015-03-13T10:30	yanvjldjlll	2.06	-0.001	string12345	20220101
+false	5	1985	5014	-11011903	243.325	true	2015-01-01	2015-03-13T12:36:38	du3lnvl	-0.0	-365.0	string12345	20220102
+false	6	32767	3021	123456	604587	true	2014-11-11	2015-03-13T12:36:38	yanavnd	0.1	80699.0	string12345	20220104
+false	7	-32767	1002	7210457	3.141	false	1988-03-21	1901-01-01T00:00	jiw3n4	0.0	6058.0	string12345	-20220101
+true	8	255	2147483647	11011920	-0.123	true	1989-03-21	9999-11-11T12:12	wangjuoo5	987456.123	12.14	string12345	-2022
+true	9	1991	-2147483647	11011902	-654.654	true	1991-08-11	1989-03-21T13:11	wangjuoo4	0.0	69.123	string12345	11011903
+true	10	1991	5014	9223372036854775807	-258.369	false	2015-04-02	2013-04-02T15:16:52	wangynnsf	-123456.54	0.235	string12345	-11011903
+true	11	1989	25699	-9223372036854775807	0.666	true	2015-04-02	1989-03-21T13:11	yunlj8@nk	-987.001	4.336	string12345	1701411834604692317316873037158
+true	12	32767	-2147483647	9223372036854775807	243.325	false	1991-08-11	2013-04-02T15:16:52	lifsno	-564.898	3.1415927	string12345	1701604692317316873037158
+true	13	-32767	2147483647	-9223372036854775807	100.001	false	2015-04-02	2015-04-02T00:00	wenlsfnl	123.456	3.1415927	string12345	701411834604692317316873037158
+true	14	255	103	11011902	0	false	2015-04-02	2015-04-02T00:00	 	3.141592654	2.036	string12345	701411834604692317316873
+true	15	1992	3021	11011920	0	true	9999-12-12	2015-04-02T00:00		3.141592653	20.456	string12345	701411834604692317
+
+-- !logical_op12 --
+
diff --git a/regression-test/suites/query/operator/test_logical_operators.groovy b/regression-test/suites/query/operator/test_logical_operators.groovy
index 5164b4f94f..e5dfe498d7 100644
--- a/regression-test/suites/query/operator/test_logical_operators.groovy
+++ b/regression-test/suites/query/operator/test_logical_operators.groovy
@@ -36,5 +36,7 @@ suite("test_logical_operators", "query,p0") {
         }
     }
     qt_logical_op9 "select k8, k9, k8%k9, k9%NULL, NULL%k9 from ${tableName} order by 1, 2"
-    qt_logical_op10 'select * from baseall where (k1 = 1) or (k1 = 1 and k2 = 2)'
+    qt_logical_op10 'select * from baseall where (k1 = 1) or (k1 = 1 and k2 = 2) order by k1, k2, k3, k4'
+    qt_logical_op11 'select * from baseall where k0 in (false,true) order by k1, k2, k3, k4'
+    qt_logical_op12 'select * from baseall where k0 not in (false,true) order by k1, k2, k3, k4'
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org