refine large size query range
This commit is contained in:
		| @ -337,12 +337,15 @@ int ObRawExprCanonicalizerImpl::pull_parallel_expr(ObRawExpr*& expr) | ||||
|         } | ||||
|       } | ||||
|       if (OB_SUCC(ret) && has_sub) { | ||||
|         ObOpRawExpr tmp; | ||||
|         ret = tmp.assign(*parent_expr);  // ret will be checked in the following loop | ||||
|         parent_expr->clear_child(); | ||||
|         for (int64_t i = 0; OB_SUCC(ret) && i < tmp.get_param_count(); ++i) { | ||||
|           ObRawExpr* sub_expr = tmp.get_param_expr(i); | ||||
|           if (OB_ISNULL(sub_expr)) { | ||||
|         ObSEArray<ObRawExpr*, 2> param_exprs; | ||||
|         ObRawExpr *sub_expr = NULL; | ||||
|         if (OB_FAIL(param_exprs.assign(parent_expr->get_param_exprs()))) { | ||||
|           LOG_WARN("failed to assign exprs", K(ret)); | ||||
|         } else { | ||||
|           parent_expr->clear_child(); | ||||
|         } | ||||
|         for (int64_t i = 0; OB_SUCC(ret) && i < param_exprs.count(); ++i) { | ||||
|           if (OB_ISNULL(sub_expr = param_exprs.at(i))) { | ||||
|             ret = OB_ERR_UNEXPECTED; | ||||
|             LOG_WARN("sub_expr is null", K(i)); | ||||
|           } else if (sub_expr->get_expr_type() == parent_expr->get_expr_type()) { | ||||
| @ -364,9 +367,6 @@ int ObRawExprCanonicalizerImpl::pull_parallel_expr(ObRawExpr*& expr) | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|         if (OB_SUCC(ret)) { | ||||
|           tmp.reset(); | ||||
|         } | ||||
|       } | ||||
|       if (OB_SUCC(ret)) { | ||||
|         if (expr->get_expr_type() == T_OP_AND && expr->get_param_count() == 1) { | ||||
| @ -426,26 +426,24 @@ int ObRawExprCanonicalizerImpl::do_push_not(ObRawExpr*& expr) | ||||
|         child_expr->set_expr_type(child_expr->get_expr_type() == T_OP_AND ? T_OP_OR : T_OP_AND); | ||||
|         // child_expr->free_op(); @todo | ||||
|         expr = child_expr; | ||||
|         ObOpRawExpr* m_expr = static_cast<ObOpRawExpr*>(child_expr);  // and, or | ||||
|         ObOpRawExpr tmp; | ||||
|         ret = tmp.assign(*m_expr);  // copy old children | ||||
|         if (OB_SUCC(ret)) { | ||||
|         ObOpRawExpr *m_expr = static_cast<ObOpRawExpr *>(child_expr); // and, or | ||||
|         ObSEArray<ObRawExpr*, 2> param_exprs; | ||||
|         if (OB_FAIL(param_exprs.assign(m_expr->get_param_exprs()))) { | ||||
|           LOG_WARN("failed to assign exprs", K(ret)); | ||||
|         } else { | ||||
|           not_expr->reset(); | ||||
|           m_expr->clear_child(); | ||||
|           // reuse not | ||||
|           not_expr->set_expr_type(T_OP_NOT); | ||||
|           not_expr->set_param_expr(tmp.get_param_expr(0)); | ||||
|           not_expr->set_expr_type(T_OP_NOT); // reuse not | ||||
|           not_expr->set_param_expr(param_exprs.at(0)); | ||||
|           if (OB_FAIL(not_expr->add_flag(IS_NOT))) { | ||||
|             LOG_WARN("failed to add flag IS_NOT", K(ret)); | ||||
|           } else if (OB_FAIL(m_expr->add_param_expr(not_expr))) { | ||||
|             LOG_WARN("failed to add param expr", K(ret)); | ||||
|           } else if (OB_FAIL(SMART_CALL(do_push_not(m_expr->get_param_expr(0))))) { | ||||
|             LOG_WARN("failed to do push not", K(ret)); | ||||
|           } | ||||
|         } | ||||
|         if (OB_FAIL(ret)) { | ||||
|           LOG_WARN("failed to assigin expr", K(ret)); | ||||
|         } else if (OB_FAIL(not_expr->add_flag(IS_NOT))) { | ||||
|           LOG_WARN("failed to add flag IS_NOT", K(ret)); | ||||
|         } else if (OB_FAIL(m_expr->add_param_expr(not_expr))) { | ||||
|           LOG_WARN("failed to add param expr", K(ret)); | ||||
|         } else if (OB_FAIL(SMART_CALL(do_push_not(m_expr->get_param_expr(0))))) { | ||||
|           LOG_WARN("failed to do push not", K(ret)); | ||||
|         } | ||||
|         for (int64_t i = 1; OB_SUCC(ret) && i < tmp.get_param_count(); ++i) { | ||||
|         for (int64_t i = 1; OB_SUCC(ret) && i < param_exprs.count(); ++i) { | ||||
|           ObOpRawExpr* another = NULL; | ||||
|           if (OB_FAIL(ctx_.expr_factory_.create_raw_expr(T_OP_NOT, another))) { | ||||
|             LOG_WARN("create ObOpRawExpr failed", K(ret)); | ||||
| @ -453,7 +451,7 @@ int ObRawExprCanonicalizerImpl::do_push_not(ObRawExpr*& expr) | ||||
|             ret = OB_ERR_UNEXPECTED; | ||||
|             LOG_WARN("expr is null"); | ||||
|           } else { | ||||
|             another->set_param_expr(tmp.get_param_expr(i)); | ||||
|             another->set_param_expr(param_exprs.at(i)); | ||||
|             if (OB_FAIL(another->add_flag(IS_NOT))) { | ||||
|               LOG_WARN("failed to add flag IS_NOT", K(ret)); | ||||
|             } else if (OB_FAIL(m_expr->add_param_expr(another))) { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 zs0
					zs0