[CP] Add smart_call in transform_predicate_move_around
This commit is contained in:
		@ -2406,13 +2406,7 @@ int ObTransformPredicateMoveAround::pushdown_into_joined_table(
 | 
			
		||||
  int ret = OB_SUCCESS;
 | 
			
		||||
  ObSEArray<ObRawExpr *, 4> all_preds;
 | 
			
		||||
  /// STEP 1. deduce new join conditions
 | 
			
		||||
  bool is_stack_overflow = false;
 | 
			
		||||
  if (OB_FAIL(check_stack_overflow(is_stack_overflow))) {
 | 
			
		||||
    LOG_WARN("failed to check stack overflow", K(ret));
 | 
			
		||||
  } else if (is_stack_overflow) {
 | 
			
		||||
    ret = OB_SIZE_OVERFLOW;
 | 
			
		||||
    LOG_WARN("too deep recursive", K(ret), K(is_stack_overflow));
 | 
			
		||||
  } else if (OB_ISNULL(stmt) || OB_ISNULL(joined_table) || OB_ISNULL(joined_table->left_table_) ||
 | 
			
		||||
  if (OB_ISNULL(stmt) || OB_ISNULL(joined_table) || OB_ISNULL(joined_table->left_table_) ||
 | 
			
		||||
      OB_ISNULL(joined_table->right_table_)) {
 | 
			
		||||
    ret = OB_ERR_UNEXPECTED;
 | 
			
		||||
    LOG_WARN("params are invalid", K(ret), K(stmt), K(joined_table));
 | 
			
		||||
@ -2547,17 +2541,17 @@ int ObTransformPredicateMoveAround::pushdown_into_joined_table(
 | 
			
		||||
      //can pushdown nothing
 | 
			
		||||
    }
 | 
			
		||||
    if (OB_FAIL(ret)) {
 | 
			
		||||
    } else if (OB_FAIL(pushdown_into_table(stmt,
 | 
			
		||||
    } else if (OB_FAIL(SMART_CALL(pushdown_into_table(stmt,
 | 
			
		||||
                                           joined_table->left_table_,
 | 
			
		||||
                                           pullup_preds,
 | 
			
		||||
                                           left_down,
 | 
			
		||||
                                           left_conditions))) {
 | 
			
		||||
                                           left_conditions)))) {
 | 
			
		||||
      LOG_WARN("failed to push down predicates", K(ret));
 | 
			
		||||
    } else if (OB_FAIL(pushdown_into_table(stmt,
 | 
			
		||||
    } else if (OB_FAIL(SMART_CALL(pushdown_into_table(stmt,
 | 
			
		||||
                                           joined_table->right_table_,
 | 
			
		||||
                                           pullup_preds,
 | 
			
		||||
                                           right_down,
 | 
			
		||||
                                           right_conditions))) {
 | 
			
		||||
                                           right_conditions)))) {
 | 
			
		||||
      LOG_WARN("failed to push down predicates", K(ret));
 | 
			
		||||
    } else {
 | 
			
		||||
      //删除下推的谓词
 | 
			
		||||
@ -2876,19 +2870,13 @@ int ObTransformPredicateMoveAround::pushdown_into_table(ObDMLStmt *stmt,
 | 
			
		||||
                                                        ObIArray<ObRawExprCondition *> &pred_conditions)
 | 
			
		||||
{
 | 
			
		||||
  int ret = OB_SUCCESS;
 | 
			
		||||
  ObSEArray<ObRawExpr*, 8> rename_preds;
 | 
			
		||||
  ObSEArray<ObRawExpr*, 8> table_preds;
 | 
			
		||||
  ObSEArray<ObRawExpr*, 8> candi_preds;
 | 
			
		||||
  ObSEArray<ObRawExpr*, 8> table_pullup_preds;
 | 
			
		||||
  ObSEArray<ObRawExprCondition*, 8> table_conditions;
 | 
			
		||||
  bool is_stack_overflow = false;
 | 
			
		||||
  ObSEArray<ObRawExpr*, 4> rename_preds;
 | 
			
		||||
  ObSEArray<ObRawExpr*, 4> table_preds;
 | 
			
		||||
  ObSEArray<ObRawExpr*, 4> candi_preds;
 | 
			
		||||
  ObSEArray<ObRawExpr*, 4> table_pullup_preds;
 | 
			
		||||
  ObSEArray<ObRawExprCondition*, 4> table_conditions;
 | 
			
		||||
  OPT_TRACE("try to pushdown preds into", table_item);
 | 
			
		||||
  if (OB_FAIL(check_stack_overflow(is_stack_overflow))) {
 | 
			
		||||
    LOG_WARN("failed to check stack overflow", K(ret));
 | 
			
		||||
  } else if (is_stack_overflow) {
 | 
			
		||||
    ret = OB_SIZE_OVERFLOW;
 | 
			
		||||
    LOG_WARN("too deep recursive", K(ret), K(is_stack_overflow));
 | 
			
		||||
  } else if (OB_ISNULL(stmt) || OB_ISNULL(table_item)) {
 | 
			
		||||
  if (OB_ISNULL(stmt) || OB_ISNULL(table_item)) {
 | 
			
		||||
    ret = OB_ERR_UNEXPECTED;
 | 
			
		||||
    LOG_WARN("params have null", K(ret), K(stmt), K(table_item));
 | 
			
		||||
  } else if (OB_FAIL(get_pushdown_predicates(
 | 
			
		||||
@ -2932,12 +2920,12 @@ int ObTransformPredicateMoveAround::pushdown_into_table(ObDMLStmt *stmt,
 | 
			
		||||
  if (OB_SUCC(ret) && table_item->is_joined_table()) {
 | 
			
		||||
    if (OB_FAIL(candi_preds.assign(rename_preds))) {
 | 
			
		||||
      LOG_WARN("failed to assgin exprs", K(ret));
 | 
			
		||||
    } else if (OB_FAIL(pushdown_into_joined_table(
 | 
			
		||||
    } else if (OB_FAIL(SMART_CALL(pushdown_into_joined_table(
 | 
			
		||||
                         stmt,
 | 
			
		||||
                         static_cast<JoinedTable*>(table_item),
 | 
			
		||||
                         table_pullup_preds,
 | 
			
		||||
                         candi_preds,
 | 
			
		||||
                         table_conditions))) {
 | 
			
		||||
                         table_conditions)))) {
 | 
			
		||||
      LOG_WARN("failed to push down predicates", K(ret));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user