fix pullup subquery to outer join bug
This commit is contained in:
@ -1070,9 +1070,15 @@ int ObWhereSubQueryPullup::transform_single_set_query(ObDMLStmt *stmt,
|
|||||||
for (int64_t j = 0; OB_SUCC(ret) && j < queries.count(); ++j) {
|
for (int64_t j = 0; OB_SUCC(ret) && j < queries.count(); ++j) {
|
||||||
ObSelectStmt *subquery = NULL;
|
ObSelectStmt *subquery = NULL;
|
||||||
ObQueryRefRawExpr *query_expr = queries.at(j).query_ref_expr_;
|
ObQueryRefRawExpr *query_expr = queries.at(j).query_ref_expr_;
|
||||||
|
bool subq_match_idx = false;
|
||||||
if (OB_ISNULL(query_expr) || OB_ISNULL(subquery = query_expr->get_ref_stmt())) {
|
if (OB_ISNULL(query_expr) || OB_ISNULL(subquery = query_expr->get_ref_stmt())) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("get unexpected null", K(ret));
|
LOG_WARN("get unexpected null", K(ret));
|
||||||
|
} else if (OB_FAIL(ObTransformUtils::check_subquery_match_index(ctx_, query_expr, subquery, subq_match_idx))) {
|
||||||
|
LOG_WARN("fail to check subquery match index", K(ret));
|
||||||
|
} else if (queries.at(j).use_outer_join_ && subq_match_idx && subquery->get_table_items().count() > 1 &&
|
||||||
|
!subquery->get_stmt_hint().has_enable_hint(T_UNNEST)) {
|
||||||
|
// do nothing
|
||||||
} else if (subquery->get_select_item_size() >= 2) {
|
} else if (subquery->get_select_item_size() >= 2) {
|
||||||
// do nothing
|
// do nothing
|
||||||
} else if (has_exist_in_array(transformed_subqueries, query_expr)) {
|
} else if (has_exist_in_array(transformed_subqueries, query_expr)) {
|
||||||
@ -1107,10 +1113,16 @@ int ObWhereSubQueryPullup::transform_single_set_query(ObDMLStmt *stmt,
|
|||||||
for (int64_t j = 0; OB_SUCC(ret) && j < queries.count(); ++j) {
|
for (int64_t j = 0; OB_SUCC(ret) && j < queries.count(); ++j) {
|
||||||
ObSelectStmt *subquery = NULL;
|
ObSelectStmt *subquery = NULL;
|
||||||
ObQueryRefRawExpr *query_expr = queries.at(j).query_ref_expr_;
|
ObQueryRefRawExpr *query_expr = queries.at(j).query_ref_expr_;
|
||||||
|
bool subq_match_idx = false;
|
||||||
if (OB_ISNULL(query_expr) ||
|
if (OB_ISNULL(query_expr) ||
|
||||||
OB_ISNULL(subquery = query_expr->get_ref_stmt())) {
|
OB_ISNULL(subquery = query_expr->get_ref_stmt())) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("get unexpected null", K(ret));
|
LOG_WARN("get unexpected null", K(ret));
|
||||||
|
} else if (OB_FAIL(ObTransformUtils::check_subquery_match_index(ctx_, query_expr, subquery, subq_match_idx))) {
|
||||||
|
LOG_WARN("fail to check subquery match index", K(ret));
|
||||||
|
} else if (queries.at(j).use_outer_join_ && subq_match_idx && subquery->get_table_items().count() > 1 &&
|
||||||
|
!subquery->get_stmt_hint().has_enable_hint(T_UNNEST)) {
|
||||||
|
// do nothing
|
||||||
} else if (is_select_expr && !subquery->get_stmt_hint().has_enable_hint(T_UNNEST)) {
|
} else if (is_select_expr && !subquery->get_stmt_hint().has_enable_hint(T_UNNEST)) {
|
||||||
//do nothing
|
//do nothing
|
||||||
} else if (has_exist_in_array(transformed_subqueries, query_expr) ||
|
} else if (has_exist_in_array(transformed_subqueries, query_expr) ||
|
||||||
|
|||||||
Reference in New Issue
Block a user