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.
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
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:
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Parametry
DryRun::generate() přijímá stejné parametry jako SqlGenerator::generate():
$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:
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:
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().