@@ -487,14 +487,21 @@ int ObTransformQueryPushDown::check_select_item_push_down(ObSelectStmt *select_s
487487 bool check_status = false ;
488488 bool is_select_expr_valid = false ;
489489 ObSEArray<ObRawExpr*, 8 > select_exprs;
490+ bool has_assign = false ;
490491 if (OB_ISNULL (select_stmt) || OB_ISNULL (view_stmt)) {
491492 ret = OB_INVALID_ARGUMENT;
492493 LOG_WARN (" stmt is NULL" , K (select_stmt), K (view_stmt), K (ret));
493494 } else if (OB_FAIL (check_select_item_subquery (*select_stmt, *view_stmt, check_status))) {
494495 LOG_WARN (" failed to check select item has subquery" , K (ret));
495496 } else if (!check_status) {
496497 can_be = false ;
497- } else if (view_stmt->is_contains_assignment () || select_stmt->is_contains_assignment ()) {
498+ } else if (OB_FAIL (ObTransformUtils::check_has_assignment (*view_stmt, has_assign))) {
499+ LOG_WARN (" check has assign failed" , K (ret));
500+ } else if (has_assign) {
501+ can_be = false ;
502+ } else if (OB_FAIL (ObTransformUtils::check_has_assignment (*select_stmt, has_assign))) {
503+ LOG_WARN (" check has assign failed" , K (ret));
504+ } else if (has_assign) {
498505 can_be = false ;
499506 } else if (OB_FAIL (view_stmt->get_select_exprs (select_exprs))) {
500507 LOG_WARN (" failed to get select exprs" , K (ret));
@@ -582,15 +589,19 @@ int ObTransformQueryPushDown::check_where_condition_push_down(ObSelectStmt *sele
582589 bool &can_be)
583590{
584591 int ret = OB_SUCCESS;
592+ bool has_assign = false ;
585593 can_be = false ;
586594 transform_having = false ;
587595 if (OB_ISNULL (select_stmt) || OB_ISNULL (view_stmt)) {
588596 ret = OB_INVALID_ARGUMENT;
589597 LOG_WARN (" stmt is NULL" , K (view_stmt), K (ret));
590598 } else if (view_stmt->is_set_stmt () ||
591599 view_stmt->has_limit () ||
592- view_stmt->has_window_function () ||
593- view_stmt->is_contains_assignment ()) {
600+ view_stmt->has_window_function ()) {
601+ can_be = false ;
602+ } else if (OB_FAIL (ObTransformUtils::check_has_assignment (*view_stmt, has_assign))) {
603+ LOG_WARN (" check has assign failed" , K (ret));
604+ } else if (has_assign) {
594605 can_be = false ;
595606 } else if (view_stmt->has_group_by () || view_stmt->has_rollup ()) {
596607 bool is_invalid = false ;
0 commit comments