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ē.
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
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:
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Parametri
DryRun::generate() pieņem tos pašus parametrus kā SqlGenerator::generate():
$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:
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:
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().