Bandomasis peržiūros vykdymas
DryRun::generate() sukuria žmogui skaitomus SQL sakinius su tiesiogiai įterptomis reikšmėmis. Naudokite jį, kad peržiūrėtumėte, ką sujungimas atliktų, prieš pritaikydami jį duomenų bazei.
use Merql\Apply\DryRun;
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
Peržiūroje pateikiamas sakinys kiekvienai rezultato operacijai, sugrupuotas taip, kaip jas grupuoja Applier: pirmiausia įterpimai, tada atnaujinimai, galiausiai trynimai. Visas sujungimo rezultatas apima visus abiejų pusių pakeitimus, palyginti su bazine versija; būtent juos Merql::apply() vykdytų duomenų bazėje, kurioje vis dar yra bazinė versija. Peržiūrėkite pasirinktą rezultatą, kad matytumėte tik operacijų, kurias ketinate pritaikyti, sakinius.
Pavyzdinė išvestis
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';
Atnaujinant nustatomi visi operacijos perduodami ne tapatybės stulpeliai, o ne vien pakeisti stulpeliai; atnaujinimo, kuris nenustatytų nė vieno stulpelio, atsisakoma.
Reikšmių formatavimas
Visos reikšmės apgaubiamos viengubomis kabutėmis. Specialieji simboliai saugiai atvaizduojami juos pakeičiant:
| Simbolis | Atvaizduojamas kaip |
|---|---|
\ (atvirkštinis brūkšnys) |
\\ |
' (vienguba kabutė) |
'' |
\0 (nulinis baitas) |
\0 |
\n (nauja eilutė) |
\n |
\r (grįžimas į eilutės pradžią) |
\r |
NULL reikšmės pateikiamos kaip kabutėmis neapgaubtas literalas NULL:
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Parametrai
DryRun::generate() priima tuos pačius parametrus kaip SqlGenerator::generate():
$statements = DryRun::generate(
$result,
base: $baseSnapshot,
fkDependencies: ['comments' => ['posts']],
driver: new SqliteDriver(),
);
| Parametras | Tipas | Aprašymas |
|---|---|---|
$result |
MergeResult |
Sujungimo rezultatas, kurį norite peržiūrėti. |
$base |
?Snapshot |
Tapatybės stulpelių bazinė momentinė kopija. Jei nenurodyta, naudojama $result->baseSnapshot(). |
$fkDependencies |
array |
Svetimųjų raktų priklausomybių žemėlapis operacijų tvarkai nustatyti. |
$driver |
?Driver |
Duomenų bazės tvarkyklė identifikatoriams cituoti. |
Bandomasis vykdymas ir „SqlGenerator“
DryRun apgaubia SqlGenerator. Skirtumas:
SqlGenerator::generate()grąžina['sql' => '...', 'params' => [...]]masyvus, skirtus vykdyti adapterio paruoštais sakiniais.DryRun::generate()grąžina paprastas eilutes su įterptomis reikšmėmis, skirtas skaityti žmonėms.
Nevykdykite bandomojo vykdymo išvesties kaip SQL. Ji suformatuota peržiūrai, o ne saugiam vykdymui. Sujungimams vykdyti naudokite tiesiogiai Applier arba SqlGenerator su paruoštais sakiniais.
Naudojimas per fasadą
Per fasadą užfiksuokite sujungimo rezultatą ir peržiūrėkite jį:
use Merql\Merql;
use Merql\Apply\DryRun;
$result = Merql::merge('base', 'ours', 'theirs');
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
Arba per CLI, naudodami vėliavėlę --dry-run:
vendor/bin/merql merge base ours theirs --dry-run
CLI išveda sakinius be svetimųjų raktų tvarkos ar tvarkyklės, todėl identifikatoriams visada naudojamos numatytosios atvirkštinės kabutės, nesvarbu, kokia duomenų bazė. Bazinė momentinė kopija perduodama tapatybės stulpeliams. Sujungimas atliekamas stulpelių lygmeniu, kaip ir Merql::merge().