From 23e086d49d62248e74bcc051e7ee9b7ec4b5d62b Mon Sep 17 00:00:00 2001 From: obdev Date: Tue, 1 Aug 2023 14:18:29 +0000 Subject: [PATCH] Fix bug: the result of interval function is wrong. --- src/sql/engine/expr/ob_expr_interval.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/sql/engine/expr/ob_expr_interval.cpp b/src/sql/engine/expr/ob_expr_interval.cpp index 328997188e..7e680f030e 100644 --- a/src/sql/engine/expr/ob_expr_interval.cpp +++ b/src/sql/engine/expr/ob_expr_interval.cpp @@ -122,23 +122,21 @@ int ObExprInterval::calc_interval_expr(const ObExpr &expr, ObEvalCtx &ctx, } else { int64_t high = expr.arg_cnt_ - 1; int64_t low = 1; - int64_t mid = 0; while (low <= high && OB_SUCC(ret)) { + int64_t mid = (low + high) / 2; const ObDatum &arg_i = expr.locate_param_datum(ctx, static_cast(mid)); - mid = (low + high + 1) / 2; if (OB_FAIL(cmp_func(arg_i, *arg0, cmp_ret))) { LOG_WARN("faile to compare", K(ret)); - } else if (cmp_ret > 0) { - high = mid - 1; - mid -= 1; + } else if (cmp_ret <= 0) { + low = mid + 1; } else if (low == high) { break; } else { - low = mid; + high = mid - 1; } } // while if (OB_SUCC(ret)) { - res.set_int(mid); + res.set_int(low - 1); } } }