Liigu sisu juurde

Proovikäigu eelvaade

DryRun::generate() loob inimesele loetavad SQL-laused, milles väärtused on teksti sisse paigutatud. Kasutage seda, et vaadata üle, mida liitmine teeks, enne kui selle andmebaasis rakendate.

PHP
use Merql\Apply\DryRun;

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

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

Eelvaade sisaldab iga tulemuses oleva toimingu kohta üht lauset, rühmitatuna nii, nagu Applier need rühmitab: esmalt lisamised, seejärel uuendused ja kustutamised. Ühendamise täielik tulemus hõlmab mõlema poole kõiki muudatusi baasi suhtes; need käivitaks Merql::apply() andmebaasi vastu, milles on endiselt baas. Ainult kavandatud toimingute lausete nägemiseks eelvaadake valitud tulemust.

Näidisväljund

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

Uuendused määravad kõik operatsiooniga kaasas olevad mitteidentiteedi veerud, mitte ainult muudetud veerud. Uuendus, mis ei määraks ühtegi veergu, jäetakse välja.

Väärtuste vormindamine

Kõik väärtused pannakse ühekordsete jutumärkide vahele. Kuvamise ohutuse tagamiseks erimärgid paomärgistatakse:

Märk Paomärgistatud kujul
\ (kaldkriips) \\
' (ühekordne jutumärk) ''
\0 (nullbait) \0
\n (reavahetus) \n
\r (käru tagastus) \r

NULL-väärtused kuvatakse jutumärkideta literaalina NULL:

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

Parameetrid

DryRun::generate() kasutab samu parameetreid nagu SqlGenerator::generate():

PHP
$statements = DryRun::generate(
    $result,
    base: $baseSnapshot,
    fkDependencies: ['comments' => ['posts']],
    driver: new SqliteDriver(),
);
Parameeter Tüüp Kirjeldus
$result MergeResult Eelvaates kuvatav liitmise tulem.
$base ?Snapshot Identiteediveergude baasil hetktõmmis. Vaikimisi kasutatakse väärtust $result->baseSnapshot().
$fkDependencies array Võõrvõtmete sõltuvuskaart järjestamiseks.
$driver ?Driver Andmebaasi draiver identifikaatorite jutumärkidesse panemiseks.

Proovikäik ja SqlGenerator

DryRun kasutab SqlGenerator. Erinevus:

  • SqlGenerator::generate() tagastab massiivid kujul ['sql' => '...', 'params' => [...]], mis on mõeldud adapteri ettevalmistatud päringute käivitamiseks.
  • DryRun::generate() tagastab lihtteksti stringid, milles väärtused on sisse kirjutatud ja mis on mõeldud inimestele lugemiseks.

Ärge käivitage proovikäigu väljundit kujul SQL. See on vormindatud kuvamiseks, mitte turvaliseks käivitamiseks. Liitmiste käivitamiseks kasutage ettevalmistatud päringutega otse väärtust Applier või SqlGenerator.

Fassaadi kasutamine

Fassaadi kaudu saate liitmise tulemuse salvestada ja selle eelvaadet vaadata:

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

Või kasutage CLI-i ja lippu --dry-run:

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

CLI väljastab laused ilma võõrvõtmete järjestuse ega draiverita, seega kasutatakse identifikaatorite jaoks andmebaasist olenemata vaikimisi tagurpidi ühekordseid jutumärke. See edastab baashetktõmmise identiteediveergude jaoks. Selle liitmine on veerutasemel nagu Merql::merge().