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.
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
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:
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Parametri
DryRun::generate() sprejema iste parametre kot SqlGenerator::generate():
$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:
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:
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().