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.
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
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:
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Parametre
DryRun::generate() accepterer de samme parametre som SqlGenerator::generate():
$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:
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:
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().