[CP] [to #55654538]fix bug trigger resolve core

This commit is contained in:
seuwebber 2024-04-25 08:46:09 +00:00 committed by ob-robot
parent 4cb79d3efd
commit 348df7f4f8
3 changed files with 13 additions and 3 deletions

View File

@ -169,13 +169,20 @@ int ObPLResolver::init_default_expr(ObPLFunctionAST &func_ast,
const ParseNode *default_node = NULL;
ObRawExpr *default_expr = NULL;
ObString default_value = param.get_default_value();
bool is_for_trigger = false;
if (resolve_ctx_.session_info_.is_for_trigger_package()
&& lib::is_oracle_mode()
&& ObTriggerInfo::is_trigger_body_package_id(func_ast.get_package_id())) {
is_for_trigger = true;
}
OZ (ObSQLUtils::convert_sql_text_from_schema_for_resolve(
resolve_ctx_.allocator_, resolve_ctx_.session_info_.get_dtc_params(), default_value));
OZ (ObRawExprUtils::parse_default_expr_from_str(
default_value,
resolve_ctx_.session_info_.get_charsets4parser(),
resolve_ctx_.allocator_,
default_node));
default_node,
is_for_trigger));
CK (OB_NOT_NULL(default_node));
OZ (resolve_expr(default_node, func_ast, default_expr,
combine_line_and_col(default_node->stmt_loc_), true, &expected_type));

View File

@ -1487,7 +1487,8 @@ int ObRawExprUtils::make_raw_expr_from_str(const ObString &expr_str,
}
int ObRawExprUtils::parse_default_expr_from_str(const ObString &expr_str,
ObCharsets4Parser expr_str_cs_type, ObIAllocator &allocator, const ParseNode *&node)
ObCharsets4Parser expr_str_cs_type, ObIAllocator &allocator, const ParseNode *&node,
bool is_for_trigger)
{
int ret = OB_SUCCESS;
ObSqlString sql_str;
@ -1509,6 +1510,7 @@ int ObRawExprUtils::parse_default_expr_from_str(const ObString &expr_str,
(ObCharset::charset_type_by_coll(expr_str_cs_type.string_collation_) != CHARSET_UTF8MB4) : false;
parse_result.connection_collation_ = expr_str_cs_type.string_collation_;
parse_result.semicolon_start_col_ = INT32_MAX;
parse_result.is_for_trigger_ = is_for_trigger;
if (OB_FAIL(sql_str.append_fmt("DO %.*s", expr_str.length(), expr_str.ptr()))) {
LOG_WARN("failed to concat expr str", K(expr_str), K(ret));
} else if (OB_FAIL(parser.parse(

View File

@ -217,7 +217,8 @@ public:
static int parse_default_expr_from_str(const common::ObString &expr_str,
ObCharsets4Parser expr_str_cs_type,
common::ObIAllocator &allocator,
const ParseNode *&node);
const ParseNode *&node,
bool is_for_trigger = false);
static int parse_expr_list_node_from_str(const common::ObString &expr_str,
ObCharsets4Parser expr_str_cs_type,
common::ObIAllocator &allocator,