Przejdź do treści

Podgląd bez wykonywania

DryRun::generate() tworzy czytelne dla człowieka instrukcje SQL z wartościami wstawionymi bezpośrednio do treści. Użyj go, aby sprawdzić, co zrobiłoby scalanie, zanim zastosujesz je do bazy danych.

PHP
use Merql\Apply\DryRun;

$statements = DryRun::generate($result);

foreach ($statements as $sql) {
    echo "{$sql};\n";
}

Podgląd zawiera instrukcję dla każdej operacji w wyniku, pogrupowane tak, jak robi to Applier: najpierw wstawianie, potem aktualizacje, a na końcu usuwanie. Pełny wynik scalania obejmuje każdą zmianę obu stron względem podstawy, czyli wszystko, co Merql::apply() wykonałoby na bazie danych, która nadal zawiera stan podstawowy. Wyświetl podgląd wybranego wyniku, aby zobaczyć tylko instrukcje dotyczące operacji, które planujesz zastosować.

Przykładowe wyjście

Sql
INSERT INTO `posts` (`id`, `title`, `content`, `status`) VALUES ('42', 'New Post', 'Body text', 'draft');
UPDATE `posts` SET `title` = 'Updated Title', `status` = 'publish' WHERE `id` = '42';
DELETE FROM `posts` WHERE `id` = '99';

Aktualizacje ustawiają wszystkie przenoszone przez operację kolumny niebędące kolumnami identyfikacyjnymi, a nie tylko te zmienione. Aktualizacja, która nie ustawiłaby żadnej kolumny, jest pomijana.

Formatowanie wartości

Wszystkie wartości są ujęte w pojedyncze cudzysłowy. Znaki specjalne są zabezpieczane przez zastępowanie:

Znak Zapis po ucieczce
\ (ukośnik odwrotny) \\
' (pojedynczy cudzysłów) ''
\0 (bajt zerowy) \0
\n (znak nowej linii) \n
\r (powrót karetki) \r

Wartości NULL są wyświetlane jako literał NULL bez cudzysłowów:

Sql
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';

Parametry

DryRun::generate() przyjmuje te same parametry co SqlGenerator::generate():

PHP
$statements = DryRun::generate(
    $result,
    base: $baseSnapshot,
    fkDependencies: ['comments' => ['posts']],
    driver: new SqliteDriver(),
);
Parametr Typ Opis
$result MergeResult Wynik scalania do wyświetlenia w podglądzie.
$base ?Snapshot Zrzut podstawowy dla kolumn identyfikacyjnych. Domyślnie używany jest $result->baseSnapshot().
$fkDependencies array Mapa zależności kluczy obcych używana do ustalania kolejności.
$driver ?Driver Sterownik bazy danych służący do cytowania identyfikatorów.

Podgląd bez wykonywania a SqlGenerator

DryRun stanowi nakładkę na SqlGenerator. Różnica:

  • SqlGenerator::generate() zwraca tablice ['sql' => '...', 'params' => [...]] przeznaczone do wykonywania przez adapter za pomocą przygotowanych zapytań.
  • DryRun::generate() zwraca płaskie ciągi z wstawionymi wartościami, przeznaczone do odczytu przez człowieka.

Nie wykonuj wyniku podglądu bez wykonywania jako SQL. Służy on do wyświetlania, a nie do bezpiecznego wykonywania. Do wykonywania scaleń używaj bezpośrednio Applier lub SqlGenerator z przygotowanymi zapytaniami.

Korzystanie z fasady

Przechwyć wynik scalania za pośrednictwem fasady i wyświetl jego podgląd:

PHP
use Merql\Merql;
use Merql\Apply\DryRun;

$result = Merql::merge('base', 'ours', 'theirs');

$statements = DryRun::generate($result);

foreach ($statements as $sql) {
    echo "{$sql};\n";
}

Lub za pośrednictwem CLI z flagą --dry-run:

Powłoka
vendor/bin/merql merge base ours theirs --dry-run

CLI wyświetla instrukcje bez ustalania kolejności według kluczy obcych ani sterownika, dlatego identyfikatory są cytowane domyślnymi znakami odwrotnego apostrofu niezależnie od bazy danych. Przekazuje podstawowy zrzut dla kolumn identyfikacyjnych. Scalanie odbywa się na poziomie kolumn, tak jak w Merql::merge().