Pāriet uz saturu

Pārbaudes priekšskatījums

DryRun::generate() izveido cilvēkam lasāmus SQL priekšrakstus, kuros vērtības ir ievietotas tieši tekstā. Izmantojiet to, lai pārskatītu apvienošanas darbības pirms to lietošanas datubāzē.

PHP
use Merql\Apply\DryRun;

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

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

Priekšskatījumā ir iekļauts priekšraksts katrai rezultāta darbībai, grupējot tās tā, kā to dara Applier: vispirms ievietošana, tad atjaunināšana un visbeidzot dzēšana. Pilnā apvienošanas rezultātā ir iekļautas visas abu pušu izmaiņas attiecībā pret bāzi — tās izpildītu Merql::apply() datubāzē, kurā joprojām ir bāze. Priekšskatiet atlasīto rezultātu, lai skatītu tikai to darbību priekšrakstus, ko plānojat lietot.

Rezultāta piemērs

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

Atjauninājumos tiek iestatītas visas darbībā iekļautās kolonnas, kas nav identitātes kolonnas, nevis tikai izmainītās. Atjauninājums, kurā netiktu iestatīta neviena kolonna, tiek izlaists.

Vērtību formatēšana

Visas vērtības tiek ietvertas vienpēdiņās. Speciālās rakstzīmes tiek ekrānētas, lai tās varētu droši parādīt:

Rakstzīme Ekranētais pieraksts
\ (atpakaļvērstā slīpsvītra) \\
' (vienpēdiņa) ''
\0 (nulles baits) \0
\n (jauna rinda) \n
\r (rindas atgrieze) \r

NULL vērtības tiek attēlotas kā neietverts literālis NULL:

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

Parametri

DryRun::generate() pieņem tos pašus parametrus kā SqlGenerator::generate():

PHP
$statements = DryRun::generate(
    $result,
    base: $baseSnapshot,
    fkDependencies: ['comments' => ['posts']],
    driver: new SqliteDriver(),
);
Parametrs Tips Apraksts
$result MergeResult Apvienošanas rezultāts, kas jāpriekšskata.
$base ?Snapshot Bāzes momentuzņēmums identitātes kolonnām. Ja nav norādīts, izmanto $result->baseSnapshot().
$fkDependencies array Ārējo atslēgu atkarību karte darbību secības noteikšanai.
$driver ?Driver Datubāzes draiveris identifikatoru citēšanai.

Pārbaudes režīms un SqlGenerator

DryRun ietver sevī SqlGenerator. Atšķirība:

  • SqlGenerator::generate() atgriež ['sql' => '...', 'params' => [...]] masīvus, kas paredzēti izpildei ar adaptera sagatavotiem priekšrakstiem.
  • DryRun::generate() atgriež vienkārša teksta virknes ar ievietotām vērtībām, lai tās būtu lasāmas cilvēkiem.

Neizpildiet pārbaudes režīma izvadi kā SQL. Tā ir formatēta attēlošanai, nevis drošai izpildei. Apvienošanas izpildei izmantojiet tieši Applier vai SqlGenerator kopā ar sagatavotiem priekšrakstiem.

Izmantošana ar fasādi

Izmantojot fasādi, iegūstiet apvienošanas rezultātu un priekšskatiet to:

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

Vai arī izmantojiet CLI ar karodziņu --dry-run:

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

CLI izdrukā priekšrakstus bez ārējo atslēgu secības un draivera, tāpēc identifikatoriem tiek izmantota noklusējuma citēšana ar atpakaļpēdiņām neatkarīgi no datubāzes. Tas padod bāzes momentuzņēmumu identitātes kolonnām. Tā apvienošana ir kolonnu līmenī, tāpat kā Merql::merge().