Ukážka bez spustenia
DryRun::generate() vytvára ľuďom čitateľné príkazy SQL s hodnotami vloženými priamo do príkazu. Použite ho na kontrolu toho, čo by zlúčenie vykonalo, pred jeho použitím v databáze.
use Merql\Apply\DryRun;
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
Ukážka obsahuje príkaz pre každú operáciu vo výsledku, zoskupenú rovnako, ako ich zoskupuje Applier: najprv vkladania, potom aktualizácie a nakoniec odstraňovania. Úplný výsledok zlúčenia obsahuje každú zmenu oboch strán vzhľadom na základ, teda všetky zmeny, ktoré by Merql::apply() vykonalo v databáze, v ktorej sa stále nachádza základ. Ak chcete zobraziť iba príkazy pre operácie, ktoré plánujete použiť, ukážte si náhľad vybraného výsledku.
Ukážka výstupu
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';
Aktualizácie nastavujú každý nestotožňovací stĺpec zahrnutý v operácii, nielen zmenené stĺpce. Aktualizácia, ktorá by nenastavila žiadny stĺpec, sa vynechá.
Formátovanie hodnôt
Všetky hodnoty sú uzavreté v jednoduchých úvodzovkách. Špeciálne znaky sa bezpečne zobrazia takto:
| Znak | Escapuje sa ako |
|---|---|
\ (spätná lomka) |
\\ |
' (jednoduchá úvodzovka) |
'' |
\0 (nulový bajt) |
\0 |
\n (nový riadok) |
\n |
\r (návrat vozíka) |
\r |
Hodnoty NULL sa zobrazujú ako neuzatvorený literál NULL:
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Parametre
DryRun::generate() prijíma rovnaké parametre ako SqlGenerator::generate():
$statements = DryRun::generate(
$result,
base: $baseSnapshot,
fkDependencies: ['comments' => ['posts']],
driver: new SqliteDriver(),
);
| Parameter | Typ | Popis |
|---|---|---|
$result |
MergeResult |
Výsledok zlúčenia, ktorého náhľad sa má zobraziť. |
$base |
?Snapshot |
Základný snímok pre stĺpce identity. Ak chýba, použije sa $result->baseSnapshot(). |
$fkDependencies |
array |
Mapa závislostí cudzích kľúčov na určenie poradia. |
$driver |
?Driver |
Databázový ovládač na uzatváranie identifikátorov do úvodzoviek. |
Ukážka bez spustenia a SqlGenerator
DryRun obaluje SqlGenerator. Rozdiel:
SqlGenerator::generate()vracia polia['sql' => '...', 'params' => [...]]určené na vykonávanie pripravených príkazov adaptérom.DryRun::generate()vracia ploché reťazce s vloženými hodnotami, určené na čítanie ľuďmi.
Nevykonávajte výstup ukážky bez spustenia ako SQL. Je naformátovaný na zobrazenie, nie na bezpečné vykonanie. Na vykonávanie zlúčení použite priamo Applier alebo SqlGenerator s pripravenými príkazmi.
Použitie cez fasádu
Zachyťte výsledok zlúčenia cez fasádu a zobrazte jeho náhľad:
use Merql\Merql;
use Merql\Apply\DryRun;
$result = Merql::merge('base', 'ours', 'theirs');
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
Alebo cez CLI s príznakom --dry-run:
vendor/bin/merql merge base ours theirs --dry-run
CLI vypisuje príkazy bez poradia cudzích kľúčov a bez ovládača, takže identifikátory používa predvolené uzatváranie spätnými apostrofmi bez ohľadu na databázu. Základný snímok odovzdá pre stĺpce identity. Zlúčenie pracuje na úrovni stĺpcov, rovnako ako Merql::merge().