Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug](predicate) fix core dump on bool type runtime filter #13417

Merged
merged 3 commits into from
Oct 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion be/src/exprs/runtime_filter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
6 changes: 5 additions & 1 deletion be/src/olap/in_list_predicate.h
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -267,7 +268,10 @@ class InListPredicateBase : public ColumnPredicate {
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;
Expand Down
5 changes: 0 additions & 5 deletions be/src/olap/predicate_creator.h
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
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;
Expand Down Expand Up @@ -264,8 +264,8 @@ public static RuntimeFilter create(IdGenerator<RuntimeFilterId> idGen, Analyzer
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;
}

Expand Down
19 changes: 19 additions & 0 deletions regression-test/data/query/operator/test_logical_operators.out
Original file line number Diff line number Diff line change
Expand Up @@ -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 --

Original file line number Diff line number Diff line change
Expand Up @@ -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'
}