From 8308c30def474aa01b9a1af10fb60ef471ca5495 Mon Sep 17 00:00:00 2001 From: qijiax Date: Wed, 6 Nov 2024 06:44:11 +0000 Subject: [PATCH] fix rb_iterate unstable test cases --- .../src/lib/roaringbitmap/ob_roaringbitmap.cpp | 3 +++ src/sql/engine/basic/ob_json_table_op.cpp | 14 +++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/deps/oblib/src/lib/roaringbitmap/ob_roaringbitmap.cpp b/deps/oblib/src/lib/roaringbitmap/ob_roaringbitmap.cpp index 10cb54c71..2a1ba79cb 100644 --- a/deps/oblib/src/lib/roaringbitmap/ob_roaringbitmap.cpp +++ b/deps/oblib/src/lib/roaringbitmap/ob_roaringbitmap.cpp @@ -567,6 +567,9 @@ int ObRoaringBitmap::deserialize(const ObString &rb_bin, bool need_validate) break; } } // end switch + if (OB_FAIL(ret)) { + set_empty(); + } } return ret; } diff --git a/src/sql/engine/basic/ob_json_table_op.cpp b/src/sql/engine/basic/ob_json_table_op.cpp index da8895343..9af61d57c 100644 --- a/src/sql/engine/basic/ob_json_table_op.cpp +++ b/src/sql/engine/basic/ob_json_table_op.cpp @@ -28,7 +28,7 @@ #include "lib/xml/ob_binary_aggregate.h" #include "lib/xml/ob_xpath.h" #include "sql/engine/expr/ob_expr_rb_func_helper.h" - +#include "lib/roaringbitmap/ob_rb_utils.h" namespace oceanbase { @@ -995,7 +995,11 @@ int RbIterateTableFunc::eval_input(ObJsonTableOp &jt, JtScanCtx &ctx, ObEvalCtx } else if (OB_FAIL(ObRbExprHelper::get_input_roaringbitmap(eval_ctx, ctx.row_alloc_, value_expr, rb, is_null))) { LOG_WARN("fail to get roaringbitmap from expr", K(ret), K(i)); } - if (OB_SUCC(ret)) { + if (OB_FAIL(ret)) { + for (int64_t j = 0; j < i; ++j) { + ObRbUtils::rb_destroy(rbs[j]); + } + } else { rbs[i] = rb; is_all_null &= is_null; } @@ -1055,7 +1059,11 @@ int RbIterateTableFunc::reset_path_iter(ObRegCol &scan_node, void* in, JtScanCtx is_null_value = false; } } - if (OB_SUCC(ret)) { + if (OB_FAIL(ret)) { + for (int64_t i = 0; i < col_num; ++i) { + ObRbUtils::rb_destroy(rbs[i]); + } + } else { scan_node.iter_ = rb_iters; } return ret;