Pereiti prie turinio

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.

PHP
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

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

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:

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

Parametrai

DryRun::generate() priima tuos pačius parametrus kaip SqlGenerator::generate():

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

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

Arba per CLI, naudodami vėliavėlę --dry-run:

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