Testisuorituksen esikatselu
DryRun::generate() tuottaa ihmisluettavia SQL-lauseita, joissa arvot on sijoitettu suoraan. Käytä sitä tarkistaaksesi, mitä yhdistäminen tekisi, ennen kuin sovellat sitä tietokantaan.
use Merql\Apply\DryRun;
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
Esikatselu sisältää jokaisesta tuloksen operaatiosta lausekkeen, ja ne on ryhmitelty samalla tavalla kuin Applier ryhmittelee ne: ensin lisäykset, sitten päivitykset ja lopuksi poistot. Yhdistämisen koko tulos sisältää molempien puolten kaikki muutokset suhteessa pohjaan, eli kaiken, minkä Merql::apply() suorittaisi tietokantaan, jossa on yhä pohjatila. Esikatsele valittua tulosta nähdäksesi vain niiden operaatioiden lausekkeet, jotka aiot ottaa käyttöön.
Esimerkkituloste
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';
Päivitykset asettavat kaikki operaation sisältämät sarakkeet identiteettisarakkeita lukuun ottamatta, eivät vain muuttuneita sarakkeita. Päivitys, joka ei asettaisi yhtään saraketta, jätetään pois.
Arvojen muotoilu
Kaikki arvot ympäröidään yksinkertaisilla lainausmerkeillä. Erikoismerkit suojataan turvallista näyttämistä varten:
| Merkki | Suojattu muoto |
|---|---|
\ (kenoviiva) |
\\ |
' (yksinkertainen lainausmerkki) |
'' |
\0 (null-tavu) |
\0 |
\n (rivinvaihto) |
\n |
\r (vaununpalautus) |
\r |
NULL-arvot näytetään lainaamattomana literaalina NULL:
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Parametrit
DryRun::generate() hyväksyy samat parametrit kuin SqlGenerator::generate():
$statements = DryRun::generate(
$result,
base: $baseSnapshot,
fkDependencies: ['comments' => ['posts']],
driver: new SqliteDriver(),
);
| Parametri | Tyyppi | Kuvaus |
|---|---|---|
$result |
MergeResult |
Esikatseltava yhdistämistulos. |
$base |
?Snapshot |
Identiteettisarakkeiden pohjan tilannevedos. Oletuksena käytetään arvoa $result->baseSnapshot(). |
$fkDependencies |
array |
Viiteavainriippuvuuksien kartta järjestämistä varten. |
$driver |
?Driver |
Tietokanta-ajuri tunnisteiden lainausmerkkien valintaa varten. |
Koeajo ja SqlGenerator
DryRun käärii SqlGenerator-toiminnon. Ero on seuraava:
SqlGenerator::generate()palauttaa['sql' => '...', 'params' => [...]]-taulukoita, jotka on tarkoitettu adapterin valmisteltujen lausekkeiden suorittamiseen.DryRun::generate()palauttaa litteitä merkkijonoja, joihin arvot on sijoitettu ja jotka on tarkoitettu ihmisluettaviksi.
Älä suorita koeajon tulostetta muodossa SQL. Se on muotoiltu näyttämistä, ei turvallista suoritusta varten. Käytä yhdistämisten suorittamiseen suoraan funktioita Applier tai SqlGenerator valmisteltujen lausekkeiden kanssa.
Käyttö julkisivun kautta
Tallenna yhdistämistulos julkisivun kautta ja esikatsele sitä:
use Merql\Merql;
use Merql\Apply\DryRun;
$result = Merql::merge('base', 'ours', 'theirs');
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
Tai käytä CLI-komentoa lipulla --dry-run:
vendor/bin/merql merge base ours theirs --dry-run
CLI tulostaa lausekkeet ilman viiteavainten mukaista järjestystä tai ajuria, joten tunnisteissa käytetään oletusarvoisia kenoviivoja tietokannasta riippumatta. Pohjan tilannevedos välitetään identiteettisarakkeita varten. Yhdistäminen tehdään saraketasolla kuten toiminnossa Merql::merge().