Siirry sisältöön

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.

PHP
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

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

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:

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

Parametrit

DryRun::generate() hyväksyy samat parametrit kuin SqlGenerator::generate():

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

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

Tai käytä CLI-komentoa lipulla --dry-run:

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