diff --git a/src/sql/engine/expr/ob_expr_find_in_set.cpp b/src/sql/engine/expr/ob_expr_find_in_set.cpp index 6df485581f..4ac048b6e0 100644 --- a/src/sql/engine/expr/ob_expr_find_in_set.cpp +++ b/src/sql/engine/expr/ob_expr_find_in_set.cpp @@ -77,10 +77,13 @@ int search(const ObString &str, const ObString &str_list, const ObCollationType ObString comma_str = ObCharsetUtils::get_const_str(cs_type, ','); while (str_list_pos < str_list.length()) { - int64_t comma_pos = ObCharset::instrb(cs_type, str_list.ptr() + str_list_pos, str_list.length() - str_list_pos, - comma_str.ptr(), comma_str.length()); + comma_pos = ObCharset::instrb(cs_type, + str_list.ptr() + str_list_pos, + str_list.length() - str_list_pos, + comma_str.ptr(), + comma_str.length()); const char* elem_ptr = str_list.ptr() + str_list_pos; - int64_t elem_length = (comma_pos >=0) ? comma_pos : str_list.length() - str_list_pos; + int64_t elem_length = (comma_pos >= 0) ? comma_pos : (str_list.length() - str_list_pos); if (0 != ObCharset::strcmp(cs_type, elem_ptr, elem_length, str.ptr(), str.length())) { //not match str_list_pos += elem_length + ((comma_pos >= 0) ? comma_str.length() : 0); @@ -90,7 +93,8 @@ int search(const ObString &str, const ObString &str_list, const ObCollationType } } - if (str_list_pos < str_list.length()) { + if (str_list_pos < str_list.length() + || (str_list_pos == str_list.length() && 0 == str.length() && comma_pos > 0)) { res_pos = elem_idx; } else { res_pos = 0; diff --git a/src/sql/engine/expr/ob_expr_func_sleep.cpp b/src/sql/engine/expr/ob_expr_func_sleep.cpp index 56aeb49bd9..d265d969e6 100644 --- a/src/sql/engine/expr/ob_expr_func_sleep.cpp +++ b/src/sql/engine/expr/ob_expr_func_sleep.cpp @@ -110,6 +110,9 @@ int ObExprSleep::eval_sleep(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &res) if (OB_FAIL(expr.eval_param_value(ctx, sec))) { LOG_WARN("eval arg failed", K(ret)); } else if (sec->is_null()) { + ret = OB_INVALID_ARGUMENT; + LOG_USER_ERROR(OB_INVALID_ARGUMENT, "sleep"); + LOG_WARN("invalid arguments to sleep"); } else if (OB_FAIL(get_usec(number::ObNumber(sec->get_number()), usec, calc_alloc))) { ret = OB_SUCCESS; } else { diff --git a/src/sql/resolver/expr/ob_raw_expr_resolver_impl.cpp b/src/sql/resolver/expr/ob_raw_expr_resolver_impl.cpp index e6f9f9cbd8..5c1573cef8 100644 --- a/src/sql/resolver/expr/ob_raw_expr_resolver_impl.cpp +++ b/src/sql/resolver/expr/ob_raw_expr_resolver_impl.cpp @@ -2548,9 +2548,9 @@ int ObRawExprResolverImpl::process_datatype_or_questionmark(const ParseNode &nod ret = OB_NOT_INIT; LOG_WARN("context param list is null", K(ret)); } else if (val.get_unknown() >= ctx_.param_list_->count()) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("question mark index out of param list count", - "index", val.get_unknown(), "param_count", ctx_.param_list_->count()); + ret = OB_ERR_BIND_VARIABLE_NOT_EXIST; + LOG_WARN("bind variable does not exist", + K(ret), K(val.get_unknown()), K(ctx_.param_list_->count())); } else { const ObObjParam ¶m = ctx_.param_list_->at(val.get_unknown()); c_expr->set_is_literal_bool(param.is_boolean());