Přejít k obsahu

Náhled nanečisto

DryRun::generate() vytváří čitelné příkazy SQL s vloženými hodnotami. Pomocí něj můžete zkontrolovat, co by sloučení provedlo, než ho použijete na databázi.

PHP
use Merql\Apply\DryRun;

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

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

Náhled obsahuje příkaz pro každou operaci ve výsledku, seskupené stejně jako v Applier: nejprve vložení, pak aktualizace a nakonec odstranění. Úplný výsledek sloučení zahrnuje všechny změny obou stran vůči základu, tedy všechny změny, které by Merql::apply() provedl v databázi, jež stále obsahuje základ. Chcete-li zobrazit náhled vybraného výsledku, uvidíte pouze příkazy pro operace, které plánujete použít.

Ukázkový výstup

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';

Aktualizace nastaví všechny sloupce nesloužící k určení identity, které operace obsahuje, nikoli pouze změněné sloupce. Aktualizace, která by nenastavila žádný sloupec, se vynechá.

Formátování hodnot

Všechny hodnoty jsou uzavřeny v jednoduchých uvozovkách. Speciální znaky jsou kvůli bezpečnému zobrazení escapovány:

Znak Escapován jako
\ (zpětné lomítko) \\
' (jednoduchá uvozovka) ''
\0 (nulový bajt) \0
\n (nový řádek) \n
\r (návrat vozíku) \r

Hodnoty NULL se zobrazují jako neuzavřený literál NULL:

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

Parametry

DryRun::generate() přijímá stejné parametry jako SqlGenerator::generate():

PHP
$statements = DryRun::generate(
    $result,
    base: $baseSnapshot,
    fkDependencies: ['comments' => ['posts']],
    driver: new SqliteDriver(),
);
Parametr Typ Popis
$result MergeResult Výsledek sloučení k zobrazení v náhledu.
$base ?Snapshot Základní snímek pro sloupce určující identitu. Pokud chybí, použije se $result->baseSnapshot().
$fkDependencies array Mapa závislostí cizích klíčů pro určení pořadí.
$driver ?Driver Databázový ovladač pro uvozování identifikátorů.

Náhled nanečisto a SqlGenerator

DryRun obaluje SqlGenerator. Rozdíl:

  • SqlGenerator::generate() vrací pole ['sql' => '...', 'params' => [...]] určená pro spuštění adaptérem pomocí připravených příkazů.
  • DryRun::generate() vrací prosté řetězce s vloženými hodnotami určené ke čtení lidmi.

Výstup náhledu nanečisto nespouštějte jako SQL. Je naformátován k zobrazení, nikoli k bezpečnému provedení. Ke spuštění sloučení použijte přímo Applier nebo SqlGenerator s připravenými příkazy.

Použití přes fasádu

Zachyťte přes fasádu výsledek sloučení a zobrazte jeho náhled:

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";
}

Nebo pomocí CLI a příznaku --dry-run:

Shell
vendor/bin/merql merge base ours theirs --dry-run

CLI vypisuje příkazy bez řazení podle cizích klíčů a bez ovladače, takže identifikátory uzavírá do výchozích zpětných apostrofů bez ohledu na databázi. Předává základní snímek pro sloupce určující identitu. Jeho sloučení pracuje na úrovni sloupců stejně jako Merql::merge().