Hoppa till innehåll

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.

PHP
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

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

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:

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

Parametrar

DryRun::generate() godtar samma parametrar som SqlGenerator::generate():

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

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 från CLI med flaggan --dry-run:

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