Preskočiť na obsah

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.

PHP
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

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

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:

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

Parametre

DryRun::generate() prijíma rovnaké parametre ako SqlGenerator::generate():

PHP
$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:

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

Alebo cez CLI s príznakom --dry-run:

Shell
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().