diff --git a/src/sql/engine/expr/ob_expr_rb_build_varbinary.cpp b/src/sql/engine/expr/ob_expr_rb_build_varbinary.cpp index c5e9eacd03..ee27aee414 100644 --- a/src/sql/engine/expr/ob_expr_rb_build_varbinary.cpp +++ b/src/sql/engine/expr/ob_expr_rb_build_varbinary.cpp @@ -72,7 +72,7 @@ int ObExprRbBuildVarbinary::eval_rb_build_varbinary(const ObExpr &expr, ObString rb_bin = nullptr; ObString res_rb_bin = nullptr; - if (OB_FAIL(ObRbExprHelper::get_input_roaringbitmap_bin(ctx, rb_arg, rb_bin, is_rb_null))) { + if (OB_FAIL(ObRbExprHelper::get_input_roaringbitmap_bin(ctx, tmp_allocator, rb_arg, rb_bin, is_rb_null))) { LOG_WARN("fail to get input roaringbitmap", K(ret)); } else if (is_rb_null || rb_bin == nullptr) { is_null_result = true; diff --git a/src/sql/engine/expr/ob_expr_rb_calc.cpp b/src/sql/engine/expr/ob_expr_rb_calc.cpp index 71f2495eaa..b9469be889 100644 --- a/src/sql/engine/expr/ob_expr_rb_calc.cpp +++ b/src/sql/engine/expr/ob_expr_rb_calc.cpp @@ -72,7 +72,7 @@ int ObExprRbCalc::eval_rb_calc(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &res, ObRoaringBitmap *rb1 = nullptr; ObRoaringBitmap *rb2 = nullptr; ObString rb_res; - if (OB_FAIL(ObRbExprHelper::get_input_roaringbitmap(ctx, rb1_arg, rb1, is_rb1_null))) { + if (OB_FAIL(ObRbExprHelper::get_input_roaringbitmap(ctx, tmp_allocator, rb1_arg, rb1, is_rb1_null))) { LOG_WARN("failed to get left input roaringbitmap", K(ret)); } else if (is_rb1_null && !is_null2empty) { is_res_null = true; @@ -80,7 +80,7 @@ int ObExprRbCalc::eval_rb_calc(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &res, && OB_ISNULL(rb1 = OB_NEWx(ObRoaringBitmap, &tmp_allocator, (&tmp_allocator)))) { ret = OB_ALLOCATE_MEMORY_FAILED; LOG_WARN("failed to create alloc memory to roaringbitmap", K(ret)); - } else if (OB_FAIL(ObRbExprHelper::get_input_roaringbitmap(ctx, rb2_arg, rb2, is_rb2_null))) { + } else if (OB_FAIL(ObRbExprHelper::get_input_roaringbitmap(ctx, tmp_allocator, rb2_arg, rb2, is_rb2_null))) { LOG_WARN("failed to get right input roaringbitmap", K(ret)); } else if (is_rb2_null && !is_null2empty) { is_res_null = true; diff --git a/src/sql/engine/expr/ob_expr_rb_calc_cardinality.cpp b/src/sql/engine/expr/ob_expr_rb_calc_cardinality.cpp index dfb1734f3e..ebdb0cb259 100644 --- a/src/sql/engine/expr/ob_expr_rb_calc_cardinality.cpp +++ b/src/sql/engine/expr/ob_expr_rb_calc_cardinality.cpp @@ -73,7 +73,7 @@ int ObExprRbCalcCardinality::eval_rb_calc_cardinality(const ObExpr &expr, ObEval ObRoaringBitmap *rb1 = nullptr; ObRoaringBitmap *rb2 = nullptr; uint64_t cardinality = 0; - if (OB_FAIL(ObRbExprHelper::get_input_roaringbitmap(ctx, rb1_arg, rb1, is_rb1_null))) { + if (OB_FAIL(ObRbExprHelper::get_input_roaringbitmap(ctx, tmp_allocator, rb1_arg, rb1, is_rb1_null))) { LOG_WARN("failed to get left input roaringbitmap", K(ret)); } else if (is_rb1_null && !is_null2empty) { is_res_null = true; @@ -81,7 +81,7 @@ int ObExprRbCalcCardinality::eval_rb_calc_cardinality(const ObExpr &expr, ObEval && OB_ISNULL(rb1 = OB_NEWx(ObRoaringBitmap, &tmp_allocator, (&tmp_allocator)))) { ret = OB_ALLOCATE_MEMORY_FAILED; LOG_WARN("failed to create alloc memory to roaringbitmap", K(ret)); - } else if (OB_FAIL(ObRbExprHelper::get_input_roaringbitmap(ctx, rb2_arg, rb2, is_rb2_null))) { + } else if (OB_FAIL(ObRbExprHelper::get_input_roaringbitmap(ctx, tmp_allocator, rb2_arg, rb2, is_rb2_null))) { LOG_WARN("failed to get right input roaringbitmap", K(ret)); } else if (is_rb2_null && !is_null2empty) { is_res_null = true; diff --git a/src/sql/engine/expr/ob_expr_rb_cardinality.cpp b/src/sql/engine/expr/ob_expr_rb_cardinality.cpp index ae8f8c75f8..6f5730a504 100644 --- a/src/sql/engine/expr/ob_expr_rb_cardinality.cpp +++ b/src/sql/engine/expr/ob_expr_rb_cardinality.cpp @@ -65,7 +65,7 @@ int ObExprRbCardinality::eval_rb_cardinality(const ObExpr &expr, ObEvalCtx &ctx, ObString rb_bin; ObRbBinType bin_type; uint64_t cardinality = 0; - if (OB_FAIL(ObRbExprHelper::get_input_roaringbitmap_bin(ctx, rb_arg, rb_bin, is_rb_null))) { + if (OB_FAIL(ObRbExprHelper::get_input_roaringbitmap_bin(ctx, tmp_allocator, rb_arg, rb_bin, is_rb_null))) { LOG_WARN("fail to get input roaringbitmap", K(ret)); } else if (is_rb_null || rb_bin == nullptr) { res.set_null(); diff --git a/src/sql/engine/expr/ob_expr_rb_func_helper.cpp b/src/sql/engine/expr/ob_expr_rb_func_helper.cpp index 0178f90608..bdfc38c8fa 100644 --- a/src/sql/engine/expr/ob_expr_rb_func_helper.cpp +++ b/src/sql/engine/expr/ob_expr_rb_func_helper.cpp @@ -30,12 +30,10 @@ namespace oceanbase namespace sql { -int ObRbExprHelper::get_input_roaringbitmap_bin(ObEvalCtx &ctx, ObExpr *rb_arg, ObString &rb_bin, bool &is_rb_null) +int ObRbExprHelper::get_input_roaringbitmap_bin(ObEvalCtx &ctx, ObIAllocator &allocator, ObExpr *rb_arg, ObString &rb_bin, bool &is_rb_null) { INIT_SUCC(ret); ObDatum *rb_datum; - ObEvalCtx::TempAllocGuard ctx_alloc_g(ctx); - common::ObArenaAllocator &allocator = ctx_alloc_g.get_allocator(); if (OB_FAIL(rb_arg->eval(ctx, rb_datum))) { LOG_WARN("eval roaringbitmap args failed", K(ret)); } else if (rb_datum->is_null()) { @@ -55,13 +53,11 @@ int ObRbExprHelper::get_input_roaringbitmap_bin(ObEvalCtx &ctx, ObExpr *rb_arg, return ret; } -int ObRbExprHelper::get_input_roaringbitmap(ObEvalCtx &ctx, ObExpr *rb_arg, ObRoaringBitmap *&rb, bool &is_rb_null) +int ObRbExprHelper::get_input_roaringbitmap(ObEvalCtx &ctx, ObIAllocator &allocator, ObExpr *rb_arg, ObRoaringBitmap *&rb, bool &is_rb_null) { INIT_SUCC(ret); ObString rb_bin = nullptr; - ObEvalCtx::TempAllocGuard ctx_alloc_g(ctx); - common::ObArenaAllocator &allocator = ctx_alloc_g.get_allocator(); - if (OB_FAIL(get_input_roaringbitmap_bin(ctx, rb_arg, rb_bin, is_rb_null))) { + if (OB_FAIL(get_input_roaringbitmap_bin(ctx, allocator, rb_arg, rb_bin, is_rb_null))) { LOG_WARN("failed to get input roaringbitmap binary", K(ret)); } else if (!is_rb_null && OB_FAIL(ObRbUtils::rb_deserialize(allocator, rb_bin, rb))) { LOG_WARN("failed to deserialize roaringbitmap", K(ret)); diff --git a/src/sql/engine/expr/ob_expr_rb_func_helper.h b/src/sql/engine/expr/ob_expr_rb_func_helper.h index 4b8727e192..cc6b207bf0 100644 --- a/src/sql/engine/expr/ob_expr_rb_func_helper.h +++ b/src/sql/engine/expr/ob_expr_rb_func_helper.h @@ -33,8 +33,8 @@ class ObRbExprHelper final { public: - static int get_input_roaringbitmap_bin(ObEvalCtx &ctx, ObExpr *rb_arg, ObString &rb_bin, bool &is_rb_null); - static int get_input_roaringbitmap(ObEvalCtx &ctx, ObExpr *rb_arg, ObRoaringBitmap *&rb, bool &is_rb_null); + static int get_input_roaringbitmap_bin(ObEvalCtx &ctx, ObIAllocator &allocator, ObExpr *rb_arg, ObString &rb_bin, bool &is_rb_null); + static int get_input_roaringbitmap(ObEvalCtx &ctx, ObIAllocator &allocator, ObExpr *rb_arg, ObRoaringBitmap *&rb, bool &is_rb_null); static int pack_rb_res(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &res, const ObString &str); static uint64_t get_tenant_id(ObSQLSessionInfo *session); diff --git a/src/sql/engine/expr/ob_expr_rb_is_empty.cpp b/src/sql/engine/expr/ob_expr_rb_is_empty.cpp index ff5f0daf30..4cf01f1492 100644 --- a/src/sql/engine/expr/ob_expr_rb_is_empty.cpp +++ b/src/sql/engine/expr/ob_expr_rb_is_empty.cpp @@ -63,7 +63,7 @@ int ObExprRbIsEmpty::eval_rb_is_empty(const ObExpr &expr, ObEvalCtx &ctx, ObDatu bool is_rb_null = false; ObRoaringBitmap *rb = nullptr; ObDatum *rb_datum = nullptr; - if (OB_FAIL(ObRbExprHelper::get_input_roaringbitmap(ctx, rb_arg, rb, is_rb_null))) { + if (OB_FAIL(ObRbExprHelper::get_input_roaringbitmap(ctx, tmp_allocator, rb_arg, rb, is_rb_null))) { LOG_WARN("fail to get input roaringbitmap", K(ret)); } else if (is_rb_null) { res.set_null();