@@ 483-540 (lines=58) @@ | ||
480 | * |
|
481 | * @return array |
|
482 | */ |
|
483 | protected function generateCommitSql() |
|
484 | { |
|
485 | $sqlArray = []; |
|
486 | $db = $this->db; |
|
487 | ||
488 | foreach ($this->diff as $table => $rowArray) { |
|
489 | foreach ((array)$rowArray as $index => $row) { |
|
490 | $sqlConfig = []; |
|
491 | ||
492 | switch ($row['mode']) { |
|
493 | case 'INSERT': |
|
494 | $sqlConfig['INSERT'] = $table; |
|
495 | ||
496 | $columnArray = $row['pk'] + $row['column']; |
|
497 | foreach ($columnArray as $k => $v) { |
|
498 | $sqlConfig['VALUES'][$k] = $v['new']; |
|
499 | } |
|
500 | ||
501 | break; |
|
502 | ||
503 | case 'DELETE': |
|
504 | $sqlConfig['DELETE'] = $table; |
|
505 | // Limit row count to 1 for safety |
|
506 | $sqlConfig['LIMIT'] = 1; |
|
507 | ||
508 | foreach ($row['pk'] as $k => $v) { |
|
509 | $sqlConfig['WHERE'][] = $k . ' = ' . |
|
510 | $db->quoteValue($table, $k, $v['old']); |
|
511 | } |
|
512 | ||
513 | break; |
|
514 | ||
515 | case 'UPDATE': |
|
516 | $sqlConfig['UPDATE'] = $table; |
|
517 | // Limit row count to 1 for safety |
|
518 | $sqlConfig['LIMIT'] = 1; |
|
519 | ||
520 | foreach ($row['column'] as $k => $v) { |
|
521 | $sqlConfig['SET'][$k] = $v['new']; |
|
522 | } |
|
523 | ||
524 | foreach ($row['pk'] as $k => $v) { |
|
525 | $sqlConfig['WHERE'][] = $k . ' = ' . |
|
526 | $db->quoteValue($table, $k, $v['new']); |
|
527 | } |
|
528 | ||
529 | break; |
|
530 | ||
531 | default: |
|
532 | throw new \Exception("Invalid mode {$row['mode']}"); |
|
533 | } |
|
534 | ||
535 | $sqlArray[] = $db->generateSql($sqlConfig); |
|
536 | } |
|
537 | } |
|
538 | ||
539 | return $sqlArray; |
|
540 | } |
|
541 | ||
542 | ||
543 | /** |
|
@@ 548-605 (lines=58) @@ | ||
545 | * |
|
546 | * @return array |
|
547 | */ |
|
548 | protected function generateRollbackSql() |
|
549 | { |
|
550 | $sqlArray = []; |
|
551 | $db = $this->db; |
|
552 | ||
553 | foreach ($this->diff as $table => $rowArray) { |
|
554 | foreach ((array)$rowArray as $index => $row) { |
|
555 | $sqlConfig = []; |
|
556 | ||
557 | switch ($row['mode']) { |
|
558 | case 'INSERT': |
|
559 | $sqlConfig['DELETE'] = $table; |
|
560 | // Limit row count to 1 for safety |
|
561 | $sqlConfig['LIMIT'] = 1; |
|
562 | ||
563 | foreach ($row['pk'] as $k => $v) { |
|
564 | $sqlConfig['WHERE'][] = $k . ' = ' . |
|
565 | $db->quoteValue($table, $k, $v['new']); |
|
566 | } |
|
567 | ||
568 | break; |
|
569 | ||
570 | case 'DELETE': |
|
571 | $sqlConfig['INSERT'] = $table; |
|
572 | ||
573 | $columnArray = $row['pk'] + $row['column']; |
|
574 | foreach ($columnArray as $k => $v) { |
|
575 | $sqlConfig['VALUES'][$k] = $v['old']; |
|
576 | } |
|
577 | ||
578 | break; |
|
579 | ||
580 | case 'UPDATE': |
|
581 | $sqlConfig['UPDATE'] = $table; |
|
582 | // Limit row count to 1 for safety |
|
583 | $sqlConfig['LIMIT'] = 1; |
|
584 | ||
585 | foreach ($row['column'] as $k => $v) { |
|
586 | $sqlConfig['SET'][$k] = $v['old']; |
|
587 | } |
|
588 | ||
589 | foreach ($row['pk'] as $k => $v) { |
|
590 | $sqlConfig['WHERE'][] = $k . ' = ' . |
|
591 | $db->quoteValue($table, $k, $v['old']); |
|
592 | } |
|
593 | ||
594 | break; |
|
595 | ||
596 | default: |
|
597 | throw new \Exception("Invalid mode {$row['mode']}"); |
|
598 | } |
|
599 | ||
600 | $sqlArray[] = $db->generateSql($sqlConfig); |
|
601 | } |
|
602 | } |
|
603 | ||
604 | return $sqlArray; |
|
605 | } |
|
606 | ||
607 | ||
608 | /** |