diff --git a/src/sql/engine/expr/ob_expr_collation.cpp b/src/sql/engine/expr/ob_expr_collation.cpp index b042257af1..ee21fe0efa 100644 --- a/src/sql/engine/expr/ob_expr_collation.cpp +++ b/src/sql/engine/expr/ob_expr_collation.cpp @@ -28,7 +28,7 @@ namespace sql //{} ObExprCharset::ObExprCharset(ObIAllocator &alloc) - :ObStringExprOperator(alloc, T_FUN_SYS_CHARSET, N_CHARSET, 1, NOT_VALID_FOR_GENERATED_COL) + :ObStringExprOperator(alloc, T_FUN_SYS_CHARSET, N_CHARSET, 1, VALID_FOR_GENERATED_COL) {} ObExprCharset::~ObExprCharset() @@ -100,7 +100,7 @@ namespace sql //{} ObExprCollation::ObExprCollation(ObIAllocator &alloc) - :ObStringExprOperator(alloc, T_FUN_SYS_COLLATION, N_COLLATION, 1, NOT_VALID_FOR_GENERATED_COL) + :ObStringExprOperator(alloc, T_FUN_SYS_COLLATION, N_COLLATION, 1, VALID_FOR_GENERATED_COL) { need_charset_convert_ = false; } @@ -175,7 +175,7 @@ ObExprCoercibility::ObExprCoercibility(ObIAllocator &alloc) :ObExprOperator(alloc, T_FUN_SYS_COERCIBILITY, N_COERCIBILITY, 1, - NOT_VALID_FOR_GENERATED_COL, NOT_ROW_DIMENSION) + VALID_FOR_GENERATED_COL, NOT_ROW_DIMENSION) { disable_operand_auto_cast(); } diff --git a/src/sql/resolver/expr/ob_raw_expr_util.cpp b/src/sql/resolver/expr/ob_raw_expr_util.cpp index 6d19c8001c..0b7550ab6a 100644 --- a/src/sql/resolver/expr/ob_raw_expr_util.cpp +++ b/src/sql/resolver/expr/ob_raw_expr_util.cpp @@ -2010,18 +2010,17 @@ int ObRawExprUtils::build_generated_column_expr(const obrpc::ObCreateIndexArg *a if (OB_SUCC(ret)) { OZ (expr->formalize(&session_info)); } - if (OB_SUCC(ret) && - (ObResolverUtils::CHECK_FOR_FUNCTION_INDEX == check_status || - ObResolverUtils::CHECK_FOR_GENERATED_COLUMN == check_status)) { - - if (OB_FAIL(check_is_valid_generated_col(expr, expr_factory.get_allocator()))) { - if (OB_ERR_ONLY_PURE_FUNC_CANBE_VIRTUAL_COLUMN_EXPRESSION == ret - && ObResolverUtils::CHECK_FOR_FUNCTION_INDEX == check_status) { - ret = OB_ERR_ONLY_PURE_FUNC_CANBE_INDEXED; - LOG_WARN("sysfunc in expr is not valid for generated column", K(ret), K(*expr)); - } else { - LOG_WARN("fail to check if the sysfunc exprs are valid in generated columns", K(ret)); - } + } + if (OB_SUCC(ret) && + (ObResolverUtils::CHECK_FOR_FUNCTION_INDEX == check_status || + ObResolverUtils::CHECK_FOR_GENERATED_COLUMN == check_status)) { + if (OB_FAIL(check_is_valid_generated_col(expr, expr_factory.get_allocator()))) { + if (OB_ERR_ONLY_PURE_FUNC_CANBE_VIRTUAL_COLUMN_EXPRESSION == ret + && ObResolverUtils::CHECK_FOR_FUNCTION_INDEX == check_status) { + ret = OB_ERR_ONLY_PURE_FUNC_CANBE_INDEXED; + LOG_WARN("sysfunc in expr is not valid for generated column", K(ret), K(*expr)); + } else { + LOG_WARN("fail to check if the sysfunc exprs are valid in generated columns", K(ret)); } } } diff --git a/src/sql/resolver/ob_resolver_utils.cpp b/src/sql/resolver/ob_resolver_utils.cpp index 878daa9ba0..435fcd1bbd 100644 --- a/src/sql/resolver/ob_resolver_utils.cpp +++ b/src/sql/resolver/ob_resolver_utils.cpp @@ -4409,8 +4409,8 @@ int ObResolverUtils::resolve_generated_column_expr(ObResolverParams ¶ms, *expr_factory, expr, expr_changed)); - OZ (expr->formalize(session_info)); } + OZ (expr->formalize(session_info)); if (OB_SUCC(ret) && lib::is_oracle_mode()) { if (OB_FAIL(ObRawExprUtils::try_modify_udt_col_expr_for_gen_col_recursively(*session_info, tbl_schema, @@ -4423,9 +4423,7 @@ int ObResolverUtils::resolve_generated_column_expr(ObResolverParams ¶ms, if (OB_SUCC(ret) && (ObResolverUtils::CHECK_FOR_FUNCTION_INDEX == check_status || ObResolverUtils::CHECK_FOR_GENERATED_COLUMN == check_status)) { - if (OB_FAIL(expr->formalize(session_info))) { - LOG_WARN("fail to formalize expr", K(ret)); - } else if (OB_FAIL(ObRawExprUtils::check_is_valid_generated_col(expr, expr_factory->get_allocator()))) { + if (OB_FAIL(ObRawExprUtils::check_is_valid_generated_col(expr, expr_factory->get_allocator()))) { if (OB_ERR_ONLY_PURE_FUNC_CANBE_VIRTUAL_COLUMN_EXPRESSION == ret && ObResolverUtils::CHECK_FOR_FUNCTION_INDEX == check_status) { ret = OB_ERR_ONLY_PURE_FUNC_CANBE_INDEXED;