[CP] [to #54388714] fix anonymous in arguments resolve & udf expr location & symbol compare with new interface
This commit is contained in:
parent
772c61d04b
commit
057b8cf550
@ -252,7 +252,8 @@ int ObPLCompiler::compile(
|
||||
} else if (!symbol->is_readonly()) {
|
||||
OZ (func.add_out_arg(i));
|
||||
if (OB_SUCC(ret)
|
||||
&& 0 == symbol->get_name().case_compare(ObPLResolver::ANONYMOUS_INOUT_ARG)) {
|
||||
&& (0 == symbol->get_name().case_compare(ObPLResolver::ANONYMOUS_INOUT_ARG)
|
||||
|| 0 == symbol->get_name().case_compare(ObPLResolver::ANONYMOUS_SQL_ARG))) {
|
||||
OZ (func.add_in_arg(i));
|
||||
}
|
||||
} else {
|
||||
|
@ -9709,6 +9709,22 @@ int ObPLResolver::analyze_expr_type(ObRawExpr *&expr,
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObPLResolver::set_udf_expr_line_number(ObRawExpr *expr, uint64_t line_number)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (OB_NOT_NULL(expr)) {
|
||||
if (expr->is_udf_expr()) {
|
||||
ObUDFRawExpr *udf_expr = static_cast<ObUDFRawExpr *>(expr);
|
||||
udf_expr->set_loc(line_number);
|
||||
} else {
|
||||
for (int64_t i = 0; i < expr->get_children_count(); ++i) {
|
||||
OZ (SMART_CALL(set_udf_expr_line_number(expr->get_param_expr(i), line_number)));
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObPLResolver::resolve_expr(const ParseNode *node,
|
||||
ObPLCompileUnitAST &unit_ast,
|
||||
ObRawExpr *&expr,
|
||||
@ -9763,11 +9779,10 @@ int ObPLResolver::resolve_expr(const ParseNode *node,
|
||||
if (OB_SUCC(ret) && lib::is_oracle_mode()) {
|
||||
OZ (add_pl_integer_checker_expr(expr_factory_, expr, need_replace));
|
||||
}
|
||||
if (OB_SUCC(ret) && expr->is_udf_expr()) {
|
||||
ObUDFRawExpr *udf_expr = static_cast<ObUDFRawExpr *>(expr);
|
||||
udf_expr->set_loc(line_number);
|
||||
if (OB_SUCC(ret)) {
|
||||
OZ (set_udf_expr_line_number(expr, line_number));
|
||||
}
|
||||
if (is_mysql_mode()) {
|
||||
if (OB_SUCC(ret) && is_mysql_mode()) {
|
||||
ObRawExprWrapEnumSet enum_set_wrapper(expr_factory_, &resolve_ctx_.session_info_);
|
||||
OZ (enum_set_wrapper.analyze_expr(expr));
|
||||
}
|
||||
|
@ -748,6 +748,7 @@ private:
|
||||
int set_cm_warn_on_fail(ObRawExpr *&expr);
|
||||
int analyze_expr_type(ObRawExpr *&expr,
|
||||
ObPLCompileUnitAST &unit_ast);
|
||||
int set_udf_expr_line_number(ObRawExpr *expr, uint64_t line_number);
|
||||
int resolve_expr(const ParseNode *node, ObPLCompileUnitAST &unit_ast,
|
||||
sql::ObRawExpr *&expr, uint64_t line_number = 0, /* where this expr called */
|
||||
bool need_add = true, const ObPLDataType *expected_type = NULL,
|
||||
|
@ -2762,7 +2762,7 @@ int ObPLBlockNS::resolve_symbol(const ObString &var_name,
|
||||
const ObPLRoutineInfo *routine = NULL;
|
||||
OZ (get_routine_info(routines.at(i), routine));
|
||||
CK (OB_NOT_NULL(routine));
|
||||
if (OB_SUCC(ret) && 0 == routine->get_routine_name().case_compare(var_name)) {
|
||||
if (OB_SUCC(ret) && ObCharset::case_compat_mode_equal(routine->get_routine_name(), var_name)) {
|
||||
if (get_block_type() != BLOCK_ROUTINE // subprogram is not member function, distingish with block type
|
||||
&& routine->is_udt_routine() && !routine->is_udt_cons() && !routine->is_udt_static_routine()) {
|
||||
// only care about member routine without prefix.
|
||||
|
@ -1128,7 +1128,7 @@ int ObRecordType::add_record_member(const ObRecordMember &record)
|
||||
LOG_ERROR("record member count is too many", K(record_members_.count()));
|
||||
} else {
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < record_members_.count(); ++i) {
|
||||
if (common::ObCharset::case_insensitive_equal(
|
||||
if (common::ObCharset::case_compat_mode_equal(
|
||||
record_members_.at(i).member_name_, record.member_name_)) {
|
||||
ret = OB_ENTRY_EXIST;
|
||||
LOG_WARN("dup record member found", K(ret), K(record.member_name_), K(i));
|
||||
@ -1154,7 +1154,7 @@ int ObRecordType::add_record_member(const ObString &record_name,
|
||||
LOG_WARN("record member with not null modifier must hava default value", K(ret));
|
||||
} else {
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < record_members_.count(); ++i) {
|
||||
if (common::ObCharset::case_insensitive_equal(
|
||||
if (common::ObCharset::case_compat_mode_equal(
|
||||
record_members_.at(i).member_name_, record_name)) {
|
||||
ret = OB_ENTRY_EXIST;
|
||||
LOG_WARN("dup record member found", K(ret), K(record_name), K(i));
|
||||
@ -1192,7 +1192,7 @@ int64_t ObRecordType::get_record_member_index(const ObString &record_name) const
|
||||
{
|
||||
int64_t index = OB_INVALID_INDEX;
|
||||
for (int64_t i = 0; i < record_members_.count(); ++i) {
|
||||
if (common::ObCharset::case_insensitive_equal(
|
||||
if (common::ObCharset::case_compat_mode_equal(
|
||||
record_members_.at(i).member_name_, record_name)) {
|
||||
index = i;
|
||||
break;
|
||||
|
@ -459,7 +459,7 @@ int ObCreatePackageResolver::resolve_functions_spec(const ObPackageInfo &package
|
||||
routine_info.set_overload(NO_OVERLOAD_IDX); //no overload
|
||||
for (int64_t k = routine_list.count(); OB_SUCC(ret) && k>0; k--) {
|
||||
ObRoutineInfo &tmp_routine_info = routine_list.at(k-1);
|
||||
if (ObCharset::case_insensitive_equal(routine_info.get_routine_name(),
|
||||
if (ObCharset::case_compat_mode_equal(routine_info.get_routine_name(),
|
||||
tmp_routine_info.get_routine_name())) {
|
||||
if (NO_OVERLOAD_IDX == tmp_routine_info.get_overload()) {
|
||||
tmp_routine_info.set_overload(OVERLOAD_START_IDX);
|
||||
|
Loading…
x
Reference in New Issue
Block a user