Gå til indhold

Forhåndsvisning af prøvekørsel

DryRun::generate() genererer menneskeligt læsbare SQL-sætninger med værdier indsat direkte. Brug den til at gennemgå, hvad en sammenfletning vil gøre, før den anvendes på databasen.

PHP
use Merql\Apply\DryRun;

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

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

Forhåndsvisningen indeholder en sætning for hver operation i resultatet, grupperet på samme måde, som Applier grupperer dem: indsættelser, derefter opdateringer og til sidst sletninger. Det fulde resultat af en sammenfletning omfatter alle ændringer fra begge sider i forhold til base, og det er dem, Merql::apply() ville udføre på en database, der stadig indeholder base. Se en valgt resultat for kun at få vist sætningerne for de operationer, du planlægger at anvende.

Eksempel på output

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

Opdateringer angiver alle ikke-identitetskolonner, som operationen indeholder, ikke kun de ændrede kolonner. En opdatering, der ikke ville angive nogen kolonner, udelades.

Værdiformatering

Alle værdier omsluttes af enkelte anførselstegn. Specialtegn escapes, så de vises sikkert:

Tegn Escapes som
\ (omvendt skråstreg) \\
' (enkelt anførselstegn) ''
\0 (null-byte) \0
\n (linjeskift) \n
\r (vognretur) \r

NULL-værdier vises som den uanførte bogstavelige værdi NULL:

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

Parametre

DryRun::generate() accepterer de samme parametre som SqlGenerator::generate():

PHP
$statements = DryRun::generate(
    $result,
    base: $baseSnapshot,
    fkDependencies: ['comments' => ['posts']],
    driver: new SqliteDriver(),
);
Parameter Type Beskrivelse
$result MergeResult Det sammenfletningsresultat, der skal forhåndsvises.
$base ?Snapshot Basesnapshot for identitetskolonner. Falder tilbage til $result->baseSnapshot().
$fkDependencies array Afhængighedskort over fremmednøgler til rækkefølgen.
$driver ?Driver Databasedriver til citering af identifikatorer.

Prøvekørsel kontra SqlGenerator

DryRun omslutter SqlGenerator. Forskellen:

  • SqlGenerator::generate() returnerer ['sql' => '...', 'params' => [...]]-arrays, der er beregnet til udførelse af forberedte adapter-sætninger.
  • DryRun::generate() returnerer flade strenge med værdier indsat direkte, beregnet til at blive læst af mennesker.

Udfør ikke output fra prøvekørslen som SQL. Det er formateret til visning, ikke til sikker udførelse. Brug Applier eller SqlGenerator direkte med forberedte sætninger til at udføre sammenfletninger.

Brug via facaden

Registrer et sammenfletningsresultat via facaden, og se en forhåndsvisning af det:

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

Eller fra CLI med flaget --dry-run:

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

CLI udskriver sætningerne uden rækkefølge efter fremmednøgler eller en driver, så identifikatorer bruger standardcitering med backticks uanset database. Den sender basesnapshot med for identitetskolonner. Sammenfletningen sker på kolonneniveau som i Merql::merge().