diff --git a/be/src/exec/exec_node.cpp b/be/src/exec/exec_node.cpp index afdccd97af..e4bf0b3b13 100644 --- a/be/src/exec/exec_node.cpp +++ b/be/src/exec/exec_node.cpp @@ -196,7 +196,9 @@ Status ExecNode::init(const TPlanNode& tnode, RuntimeState* state) { RETURN_IF_ERROR(doris::vectorized::VExpr::create_expr_tree(_pool, tnode.vconjunct, _vconjunct_ctx_ptr.get())); } - RETURN_IF_ERROR(Expr::create_expr_trees(_pool, tnode.conjuncts, &_conjunct_ctxs)); + if (typeid(*this) != typeid(doris::vectorized::NewOlapScanNode)) { + RETURN_IF_ERROR(Expr::create_expr_trees(_pool, tnode.conjuncts, &_conjunct_ctxs)); + } // create the projections expr if (tnode.__isset.projections) { diff --git a/be/src/exprs/expr.cpp b/be/src/exprs/expr.cpp index 8605a12371..864bcf748d 100644 --- a/be/src/exprs/expr.cpp +++ b/be/src/exprs/expr.cpp @@ -355,7 +355,10 @@ Status Expr::create_expr(ObjectPool* pool, const TExprNode& texpr_node, Expr** e } case TExprNodeType::COMPUTE_FUNCTION_CALL: case TExprNodeType::FUNCTION_CALL: - DCHECK(texpr_node.__isset.fn); + if (!texpr_node.__isset.fn) { + // return error to prevent crash + return Status::InternalError("function is not set in thrift node"); + } if (texpr_node.fn.name.function_name == "if") { *expr = pool->add(new IfExpr(texpr_node)); } else if (texpr_node.fn.name.function_name == "nullif") { diff --git a/be/src/vec/data_types/data_type_factory.cpp b/be/src/vec/data_types/data_type_factory.cpp index b40c03cb03..1d6f89b467 100644 --- a/be/src/vec/data_types/data_type_factory.cpp +++ b/be/src/vec/data_types/data_type_factory.cpp @@ -20,9 +20,6 @@ #include "vec/data_types/data_type_factory.hpp" -#include "vec/data_types/data_type_hll.h" -#include "vec/data_types/data_type_jsonb.h" - namespace doris::vectorized { DataTypePtr DataTypeFactory::create_data_type(const doris::Field& col_desc) { diff --git a/be/src/vec/data_types/data_type_factory.hpp b/be/src/vec/data_types/data_type_factory.hpp index 8d24f28cc0..b164c432f1 100644 --- a/be/src/vec/data_types/data_type_factory.hpp +++ b/be/src/vec/data_types/data_type_factory.hpp @@ -35,6 +35,7 @@ #include "vec/data_types/data_type_date_time.h" #include "vec/data_types/data_type_decimal.h" #include "vec/data_types/data_type_fixed_length_object.h" +#include "vec/data_types/data_type_hll.h" #include "vec/data_types/data_type_jsonb.h" #include "vec/data_types/data_type_nothing.h" #include "vec/data_types/data_type_nullable.h" @@ -79,6 +80,8 @@ public: {"Decimal128I", std::make_shared>( BeConsts::MAX_DECIMAL128_PRECISION, 0)}, {"Json", std::make_shared()}, + {"BitMap", std::make_shared()}, + {"Hll", std::make_shared()}, }; for (auto const& [key, val] : base_type_map) { instance.register_data_type(key, val); diff --git a/regression-test/suites/correctness_p0/test_case_when.groovy b/regression-test/suites/correctness_p0/test_case_when.groovy index bdade75ead..5491aedcba 100644 --- a/regression-test/suites/correctness_p0/test_case_when.groovy +++ b/regression-test/suites/correctness_p0/test_case_when.groovy @@ -76,4 +76,30 @@ suite("test_case_when") { ORDER BY hour_time; """ + + try_sql """ + select + CAST( + CASE + WHEN source is null THEN null + ELSE null + END AS bitmap + ) as c0 + FROM + dws_scan_qrcode_user_ts; + """ + + sql """ set enable_vectorized_engine = true """ + + try_sql """ + select + CAST( + CASE + WHEN source is null THEN null + ELSE null + END AS bitmap + ) as c0 + FROM + dws_scan_qrcode_user_ts; + """ }