[FEAT MERGE] Solidify session vars for functional index

This commit is contained in:
obdev
2024-02-07 16:44:49 +00:00
committed by ob-robot
parent aceabf03d5
commit c699ceea48
189 changed files with 3671 additions and 1554 deletions

View File

@ -130,7 +130,7 @@ int ObExprNullif::se_deduce_type(ObExprResType &type,
int ObExprNullif::set_extra_info(ObExprCGCtx &expr_cg_ctx, const ObObjType cmp_type,
const ObCollationType cmp_cs_type,
ObExpr &rt_expr) const
ObSQLMode sql_mode, ObExpr &rt_expr) const
{
int ret = OB_SUCCESS;
ObCastMode cm = CM_NONE;
@ -143,10 +143,11 @@ int ObExprNullif::set_extra_info(ObExprCGCtx &expr_cg_ctx, const ObObjType cmp_t
} else if (OB_ISNULL(expr_cg_ctx.session_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("ctx.session is null", K(ret));
} else if (OB_FAIL(ObSQLUtils::get_default_cast_mode(is_explicit_cast, result_flag,
expr_cg_ctx.session_, cm))) {
LOG_WARN("get default cast mode failed", K(ret));
} else {
ObSQLUtils::get_default_cast_mode(is_explicit_cast, result_flag,
expr_cg_ctx.session_->get_stmt_type(),
expr_cg_ctx.session_->is_ignore_stmt(),
sql_mode, cm);
info->cmp_meta_.type_ = cmp_type;
info->cmp_meta_.cs_type_ = cmp_cs_type;
info->cmp_meta_.scale_ = result_type_.get_calc_accuracy().get_scale();
@ -166,9 +167,14 @@ int ObExprNullif::cg_expr(ObExprCGCtx &expr_cg_ctx, const ObRawExpr &raw_expr,
const uint32_t param_num = rt_expr.arg_cnt_;
const ObObjMeta &cmp_meta = result_type_.get_calc_meta();
const ObAccuracy &calc_acc = result_type_.get_calc_accuracy();
ObSQLMode sql_mode = expr_cg_ctx.session_->get_sql_mode();
if (ObNullType == rt_expr.args_[0]->datum_meta_.type_) {
OX(rt_expr.eval_func_ = eval_nullif);
} else if (OB_FAIL(ObSQLUtils::merge_solidified_var_into_sql_mode(&raw_expr.get_local_session_var(),
sql_mode))) {
LOG_WARN("try get local sql mode failed", K(ret));
} else if (OB_FAIL(set_extra_info(expr_cg_ctx, cmp_meta.get_type(), cmp_meta.get_collation_type(),
sql_mode,
rt_expr))) {
LOG_WARN("set extra info failed", K(ret));
} else if (ob_is_enumset_inner_tc(rt_expr.args_[0]->datum_meta_.type_)) {
@ -411,5 +417,15 @@ int ObExprNullif::eval_nullif_enumset(const ObExpr &expr, ObEvalCtx &ctx, ObDatu
return ret;
}
DEF_SET_LOCAL_SESSION_VARS(ObExprNullif, raw_expr) {
int ret = OB_SUCCESS;
if (is_mysql_mode()) {
SET_LOCAL_SYSVAR_CAPACITY(2);
EXPR_ADD_LOCAL_SYSVAR(SYS_VAR_SQL_MODE);
EXPR_ADD_LOCAL_SYSVAR(SYS_VAR_COLLATION_CONNECTION);
}
return ret;
}
} // namespace sql
} // namespace oceanbase