fix simplify_expr bug

This commit is contained in:
akaError
2024-03-21 03:52:03 +00:00
committed by ob-robot
parent 2ec5e64495
commit 116dce6f58

View File

@ -2408,21 +2408,27 @@ int ObTransformSimplifyExpr::canonicalize_conditions(ObDMLStmt *stmt, bool &tran
//simplify semi info //simplify semi info
OPT_TRACE("canonicalize semi_info condition start:"); OPT_TRACE("canonicalize semi_info condition start:");
for (int64_t i = 0; OB_SUCC(ret) && i < stmt->get_semi_infos().count(); ++i) { for (int64_t i = 0; OB_SUCC(ret) && i < stmt->get_semi_infos().count(); ++i) {
bool is_happended = false;
if (OB_ISNULL(stmt->get_semi_infos().at(i))) { if (OB_ISNULL(stmt->get_semi_infos().at(i))) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpect null semi info", K(stmt->get_semi_infos().at(i)), K(ret)); LOG_WARN("unexpect null semi info", K(stmt->get_semi_infos().at(i)), K(ret));
} else if (OB_FAIL(do_canonicalize(stmt, stmt->get_semi_infos().at(i)->semi_conditions_, canonicalize_semi_info))) { } else if (OB_FAIL(do_canonicalize(stmt, stmt->get_semi_infos().at(i)->semi_conditions_, is_happended))) {
LOG_WARN("canonicalize_semi_info failed", K(ret)); LOG_WARN("canonicalize_semi_info failed", K(ret));
} else {
canonicalize_semi_info |= is_happended;
} }
} }
OPT_TRACE("canonicalize join condition start:"); OPT_TRACE("canonicalize join condition start:");
//simplify join condition expr //simplify join condition expr
for (int64_t i = 0; OB_SUCC(ret) && i < stmt->get_joined_tables().count(); i++) { for (int64_t i = 0; OB_SUCC(ret) && i < stmt->get_joined_tables().count(); i++) {
bool is_happended = false;
if (OB_ISNULL(stmt->get_joined_tables().at(i))) { if (OB_ISNULL(stmt->get_joined_tables().at(i))) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpect null joined table item", K(stmt->get_joined_tables().at(i)), K(ret)); LOG_WARN("unexpect null joined table item", K(stmt->get_joined_tables().at(i)), K(ret));
} else if (OB_FAIL(recursive_canonicalize_join_conditions(stmt, stmt->get_joined_tables().at(i), canonicalize_join))) { } else if (OB_FAIL(recursive_canonicalize_join_conditions(stmt, stmt->get_joined_tables().at(i), is_happended))) {
LOG_WARN("canonicalize_join_condition_expr failed", K(ret)); LOG_WARN("canonicalize_join_condition_expr failed", K(ret));
} else {
canonicalize_join |= is_happended;
} }
} }
} }