[CP] fix set variable subquery bug

This commit is contained in:
Larry955
2022-12-29 13:08:07 +00:00
committed by ob-robot
parent efc06a1b8f
commit 9b16d56c2f

View File

@ -226,6 +226,16 @@ int ObVariableSetResolver::resolve_value_expr(ParseNode &val_node, ObRawExpr *&v
} else if (udf_info.count() > 0 &&
OB_FAIL(ObRawExprUtils::init_udfs_info(params_, udf_info))) {
LOG_WARN("failed to init udf infos", K(ret));
} else if (OB_FAIL(ObResolverUtils::resolve_columns_for_const_expr(value_expr, columns, params_))) {
LOG_WARN("resolve columns for const expr failed", K(ret));
} else if (value_expr->get_expr_type() == T_SP_CPARAM) {
ObCallParamRawExpr *call_expr = static_cast<ObCallParamRawExpr *>(value_expr);
if (OB_ISNULL(call_expr->get_expr())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null", K(ret));
} else if (OB_FAIL(call_expr->get_expr()->formalize(params_.session_info_))) {
LOG_WARN("failed to formalize call expr", K(ret));
}
} else if (value_expr->has_flag(CNT_SUB_QUERY)) {
if (is_oracle_mode()) {
ret = OB_NOT_SUPPORTED;
@ -234,28 +244,14 @@ int ObVariableSetResolver::resolve_value_expr(ParseNode &val_node, ObRawExpr *&v
} else if (is_mysql_mode()) {
if (OB_FAIL(resolve_subquery_info(sub_query_info, value_expr))) {
LOG_WARN("failed to resolve subquery info", K(ret));
} else if (OB_FAIL(value_expr->formalize(params_.session_info_))) {
LOG_WARN("failed to formalize value expr", K(ret));
}
}
LOG_TRACE("set user variable with subquery", K(sub_query_info.count()), K(is_mysql_mode()));
} else {
if (OB_FAIL(ObResolverUtils::resolve_columns_for_const_expr(value_expr, columns, params_))) {
LOG_WARN("resolve columnts for const expr failed", K(ret));
} else if (value_expr->get_expr_type() == T_SP_CPARAM) {
ObCallParamRawExpr *call_expr = static_cast<ObCallParamRawExpr *>(value_expr);
if (OB_ISNULL(call_expr->get_expr())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("get unexpected null", K(ret));
} else if (OB_FAIL(call_expr->get_expr()->formalize(params_.session_info_))) {
LOG_WARN("failed to formalize call expr", K(ret));
}
} else if (OB_FAIL(value_expr->formalize(params_.session_info_))) {
LOG_WARN("failed to formalize value expr", K(ret));
}
}
if (OB_SUCC(ret)) {
if (OB_FAIL(ret)) {
} else if (OB_FAIL(value_expr->formalize(params_.session_info_))) {
LOG_WARN("failed to formalize value expr", K(ret));
} else {
params_.prepare_param_count_ += ctx.prepare_param_count_; //prepare param count
}
}