Förhandsgranskning av torrkörning
DryRun::generate() genererar människoläsbara SQL-satser med värden infogade direkt i texten. Använd den för att granska vad en sammanslagning skulle göra innan den tillämpas på databasen.
use Merql\Apply\DryRun;
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
Förhandsgranskningen innehåller en sats för varje åtgärd i resultatet, grupperade på samma sätt som Applier grupperar dem: infogningar, sedan uppdateringar och därefter borttagningar. För hela sammanslagningsresultatet omfattar det alla ändringar från båda sidorna i förhållande till basen, alltså allt som Merql::apply() skulle köra mot en databas som fortfarande innehåller basen. Förhandsgranska ett valt resultat för att endast se satserna för de åtgärder du planerar att tillämpa.
Exempel på utdata
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';
Uppdateringar anger alla kolumner som inte är identitetskolumner och som åtgärden innehåller, inte bara de ändrade kolumnerna. En uppdatering som inte skulle ange någon kolumn utelämnas.
Värdeformatering
Alla värden omges av enkla citattecken. Specialtecken escape:as för säker visning:
| Tecken | Escapas som |
|---|---|
\ (omvänt snedstreck) |
\\ |
' (enkelt citattecken) |
'' |
\0 (nullbyte) |
\0 |
\n (radbrytning) |
\n |
\r (vagnretur) |
\r |
NULL-värden återges som den ociterade bokstavliga konstanten NULL:
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Parametrar
DryRun::generate() godtar samma parametrar som SqlGenerator::generate():
$statements = DryRun::generate(
$result,
base: $baseSnapshot,
fkDependencies: ['comments' => ['posts']],
driver: new SqliteDriver(),
);
| Parameter | Typ | Beskrivning |
|---|---|---|
$result |
MergeResult |
Sammanslagningsresultatet att förhandsgranska. |
$base |
?Snapshot |
Basögonblicksbild för identitetskolumner. Använder $result->baseSnapshot() som reserv. |
$fkDependencies |
array |
Beroendekarta för främmande nycklar som styr ordningen. |
$driver |
?Driver |
Databasdrivrutin för citering av identifierare. |
Torrkörning jämfört med SqlGenerator
DryRun omsluter SqlGenerator. Skillnaden:
SqlGenerator::generate()returnerar['sql' => '...', 'params' => [...]]-arrayer avsedda för körning med adapterns förberedda satser.DryRun::generate()returnerar platta strängar med värden infogade direkt, avsedda för människor att läsa.
Kör inte utdata från torrkörningen som SQL. Den är formaterad för visning, inte för säker körning. Använd Applier eller SqlGenerator direkt med förberedda satser för att köra sammanslagningar.
Användning med fasaden
Samla in ett sammanslagningsresultat via fasaden och förhandsgranska 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 från CLI med flaggan --dry-run:
vendor/bin/merql merge base ours theirs --dry-run
CLI skriver ut satserna utan ordning efter främmande nycklar eller drivrutin, så identifierare använder standardcitering med omvända apostrofer oavsett databas. Den skickar med basögonblicksbilden för identitetskolumner. Dess sammanslagning sker på kolumnnivå, precis som Merql::merge().