disable transform stmt which has instead of trigger
This commit is contained in:
		@ -2016,12 +2016,31 @@ int ObDmlCgService::convert_normal_triggers(ObLogDelUpd &log_op,
 | 
				
			|||||||
          LOG_DEBUG("debug trigger normal column", K(ret), K(is_instead_of),
 | 
					          LOG_DEBUG("debug trigger normal column", K(ret), K(is_instead_of),
 | 
				
			||||||
              K(dml_ctdef.old_row_.count()), K(dml_ctdef.new_row_.count()));
 | 
					              K(dml_ctdef.old_row_.count()), K(dml_ctdef.new_row_.count()));
 | 
				
			||||||
          if (ObTriggerEvents::is_insert_event(dml_event)) {
 | 
					          if (ObTriggerEvents::is_insert_event(dml_event)) {
 | 
				
			||||||
            new_expr = dml_ctdef.new_row_.at(col_idx);
 | 
					            if (OB_UNLIKELY(col_idx < 0) ||
 | 
				
			||||||
 | 
					                OB_UNLIKELY(col_idx >= dml_ctdef.new_row_.count())) {
 | 
				
			||||||
 | 
					              ret = OB_ERR_UNEXPECTED;
 | 
				
			||||||
 | 
					              LOG_WARN("unexpected col idx", K(col_idx), K(dml_ctdef.new_row_));
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					              new_expr = dml_ctdef.new_row_.at(col_idx);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
          } else if (ObTriggerEvents::is_update_event(dml_event)) {
 | 
					          } else if (ObTriggerEvents::is_update_event(dml_event)) {
 | 
				
			||||||
            new_expr = dml_ctdef.new_row_.at(col_idx);
 | 
					            if (OB_UNLIKELY(col_idx < 0) ||
 | 
				
			||||||
            old_expr = dml_ctdef.old_row_.at(col_idx);
 | 
					                OB_UNLIKELY(col_idx >= dml_ctdef.new_row_.count()) ||
 | 
				
			||||||
 | 
					                OB_UNLIKELY(col_idx >= dml_ctdef.old_row_.count())) {
 | 
				
			||||||
 | 
					              ret = OB_ERR_UNEXPECTED;
 | 
				
			||||||
 | 
					              LOG_WARN("unexpected col idx", K(col_idx), K(dml_ctdef.new_row_), K(dml_ctdef.old_row_));
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					              new_expr = dml_ctdef.new_row_.at(col_idx);
 | 
				
			||||||
 | 
					              old_expr = dml_ctdef.old_row_.at(col_idx);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
          } else if (ObTriggerEvents::is_delete_event(dml_event)) {
 | 
					          } else if (ObTriggerEvents::is_delete_event(dml_event)) {
 | 
				
			||||||
            old_expr = dml_ctdef.old_row_.at(col_idx);
 | 
					            if (OB_UNLIKELY(col_idx < 0) ||
 | 
				
			||||||
 | 
					                OB_UNLIKELY(col_idx >= dml_ctdef.old_row_.count())) {
 | 
				
			||||||
 | 
					              ret = OB_ERR_UNEXPECTED;
 | 
				
			||||||
 | 
					              LOG_WARN("unexpected col idx", K(col_idx), K(dml_ctdef.old_row_));
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					              old_expr = dml_ctdef.old_row_.at(col_idx);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
          } else {
 | 
					          } else {
 | 
				
			||||||
            ret = OB_ERR_UNEXPECTED;
 | 
					            ret = OB_ERR_UNEXPECTED;
 | 
				
			||||||
            LOG_WARN("unexpected status: not supported dml type",
 | 
					            LOG_WARN("unexpected status: not supported dml type",
 | 
				
			||||||
 | 
				
			|||||||
@ -624,6 +624,9 @@ int ObTransformRule::need_transform(const common::ObIArray<ObParentDMLStmt> &par
 | 
				
			|||||||
  if (is_normal_disabled_transform(stmt)) {
 | 
					  if (is_normal_disabled_transform(stmt)) {
 | 
				
			||||||
    need_trans = false;
 | 
					    need_trans = false;
 | 
				
			||||||
    OPT_TRACE("hierarchical query or insert query can not transform");
 | 
					    OPT_TRACE("hierarchical query or insert query can not transform");
 | 
				
			||||||
 | 
					  } else if (stmt.has_instead_of_trigger()) {
 | 
				
			||||||
 | 
					    need_trans = false;
 | 
				
			||||||
 | 
					    OPT_TRACE("stmt with instead of trigger can not transform");
 | 
				
			||||||
  } else if (OB_FAIL(check_hint_status(stmt, need_trans))) {
 | 
					  } else if (OB_FAIL(check_hint_status(stmt, need_trans))) {
 | 
				
			||||||
    LOG_WARN("failed to check hint status", K(ret));
 | 
					    LOG_WARN("failed to check hint status", K(ret));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user