Preskoči na vsebino

Predogled preizkusnega zagona

DryRun::generate() ustvari berljive stavke SQL z vstavljenimi vrednostmi. Uporabite ga za pregled učinkov združevanja, preden ga uveljavite v zbirki podatkov.

PHP
use Merql\Apply\DryRun;

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

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

Predogled vsebuje stavek za vsako operacijo v rezultatu, razvrščene tako, kot jih razvršča Applier: vstavljanja, nato posodobitve in nazadnje brisanja. Celoten rezultat združevanja zajema vse spremembe obeh strani glede na osnovo, ki bi jih Merql::apply() izvedel v zbirki podatkov, ki še vedno vsebuje osnovno stanje. Če si želite ogledati le stavke za operacije, ki jih nameravate uveljaviti, prikažite predogled izbranega rezultata.

Primer izhoda

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

Posodobitve nastavijo vse stolpce, ki jih operacija vsebuje, razen identifikacijskih, ne le spremenjenih; posodobitev, ki ne bi nastavila nobenega stolpca, je izpuščena.

Oblikovanje vrednosti

Vse vrednosti so obdane z enojnimi narekovaji. Posebni znaki so zaradi varnega prikaza ubežno zapisani:

Znak Ubežni zapis
\ (obratna poševnica) \\
' (enojni narekovaj) ''
\0 (ničelni bajt) \0
\n (nova vrstica) \n
\r (vrnitev na začetek vrstice) \r

Vrednosti NULL so prikazane kot necitiran literal NULL:

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

Parametri

DryRun::generate() sprejema iste parametre kot SqlGenerator::generate():

PHP
$statements = DryRun::generate(
    $result,
    base: $baseSnapshot,
    fkDependencies: ['comments' => ['posts']],
    driver: new SqliteDriver(),
);
Parameter Type Description
$result MergeResult Rezultat združitve za predogled.
$base ?Snapshot Osnovni posnetek za stolpce identitete. Če ni na voljo, se uporabi $result->baseSnapshot().
$fkDependencies array Zemljevid odvisnosti tujih ključev za določanje vrstnega reda.
$driver ?Driver Gonilnik podatkovne zbirke za navajanje identifikatorjev.

Suhi zagon v primerjavi s SqlGenerator

DryRun ovije SqlGenerator. Razlika:

  • SqlGenerator::generate() vrne polja ['sql' => '...', 'params' => [...]], namenjena izvajanju prek adapterja s pripravljenimi stavki.
  • DryRun::generate() vrne enostavne nize z vstavljenimi vrednostmi, namenjene branju.

Izhoda preizkusnega zagona ne izvajajte kot SQL. Oblikovan je za prikaz, ne pa za varno izvajanje. Za izvajanje združevanj uporabite neposredno Applier ali SqlGenerator s pripravljenimi stavki.

Uporaba prek fasade

Prek fasade zajemite rezultat združevanja in si oglejte njegov predogled:

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

Ali pa uporabite CLI z zastavico --dry-run:

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

CLI izpiše stavke brez razvrščanja glede na tuje ključe in brez gonilnika, zato se za identifikatorje ne glede na zbirko podatkov uporablja privzeto citiranje z obratnimi narekovaji. Posreduje osnovni posnetek za identifikacijske stolpce. Združevanje poteka na ravni stolpcev, kot pri Merql::merge().