Voorbeeld van een dry run
DryRun::generate() genereert voor mensen leesbare SQL-instructies met de waarden inline ingevuld. Gebruik deze om te bekijken wat een samenvoeging zou doen voordat u die op de database toepast.
use Merql\Apply\DryRun;
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
De preview bevat voor elke bewerking in het resultaat een instructie, gegroepeerd zoals Applier ze groepeert: eerst inserts, dan updates en vervolgens deletes. Voor het volledige resultaat van een samenvoeging zijn dat alle wijzigingen van beide kanten ten opzichte van de basis; die zou Merql::apply() uitvoeren op een database die de basis nog bevat. Bekijk een geselecteerd resultaat om alleen de instructies te zien voor de bewerkingen die u wilt toepassen.
Voorbeeld van uitvoer
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';
Updates stellen elke niet-identiteitskolom in die de bewerking bevat, niet alleen de gewijzigde kolommen. Een update die geen kolom zou instellen, wordt weggelaten.
Waarden opmaken
Alle waarden staan tussen enkele aanhalingstekens. Speciale tekens worden veilig weergegeven door ze te escapen:
| Teken | Geëscapet als |
|---|---|
\ (backslash) |
\\ |
' (enkel aanhalingsteken) |
'' |
\0 (null-byte) |
\0 |
\n (nieuwe regel) |
\n |
\r (regeleinde) |
\r |
NULL-waarden worden weergegeven als de niet-gequote letterlijke waarde NULL:
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Parameters
DryRun::generate() accepteert dezelfde parameters als SqlGenerator::generate():
$statements = DryRun::generate(
$result,
base: $baseSnapshot,
fkDependencies: ['comments' => ['posts']],
driver: new SqliteDriver(),
);
| Parameter | Type | Beschrijving |
|---|---|---|
$result |
MergeResult |
Het samenvoegingsresultaat dat u wilt bekijken. |
$base |
?Snapshot |
Basissnapshot voor identiteitskolommen. Valt terug op $result->baseSnapshot(). |
$fkDependencies |
array |
Afhankelijkheidskaart van foreign keys voor de volgorde. |
$driver |
?Driver |
Databasedriver voor het citeren van identifiers. |
Dry run versus SqlGenerator
DryRun bouwt voort op SqlGenerator. Het verschil:
SqlGenerator::generate()retourneert['sql' => '...', 'params' => [...]]-arrays voor uitvoering met prepared statements van de adapter.DryRun::generate()retourneert platte strings met inline ingevulde waarden, bedoeld om door mensen te worden gelezen.
Voer de uitvoer van een dry run niet uit als SQL. Deze is opgemaakt voor weergave, niet voor veilige uitvoering. Gebruik voor het uitvoeren van samenvoegingen rechtstreeks Applier of SqlGenerator met prepared statements.
De facade gebruiken
Leg via de facade een samenvoegingsresultaat vast en bekijk een preview:
use Merql\Merql;
use Merql\Apply\DryRun;
$result = Merql::merge('base', 'ours', 'theirs');
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
Of gebruik de CLI met de vlag --dry-run:
vendor/bin/merql merge base ours theirs --dry-run
De CLI geeft de instructies weer zonder foreign key-volgorde of driver, waardoor identifiers standaard met backticks worden geciteerd, ongeacht de database. De basissnapshot wordt meegegeven voor identiteitskolommen. De samenvoeging werkt op kolomniveau, net als Merql::merge().