Aperçu de l'exécution à blanc
DryRun::generate() produit des instructions SQL lisibles, avec les valeurs insérées directement. Utilisez-le pour examiner les effets d'une fusion avant de l'appliquer à la base de données.
use Merql\Apply\DryRun;
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
L'aperçu contient une instruction pour chaque opération du résultat, regroupées comme dans Applier : insertions, puis mises à jour, puis suppressions. Le résultat complet d'une fusion comprend toutes les modifications apportées par les deux côtés par rapport à la base ; ce sont celles que Merql::apply() exécuterait sur une base de données contenant toujours la base. Prévisualisez un résultat sélectionné pour ne voir que les instructions correspondant aux opérations que vous prévoyez d'appliquer.
Exemple de sortie
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';
Les mises à jour définissent toutes les colonnes autres que celles d'identité transportées par l'opération, et pas seulement celles qui ont changé ; une mise à jour qui ne définirait aucune colonne est omise.
Formatage des valeurs
Toutes les valeurs sont entourées de guillemets simples. Les caractères spéciaux sont échappés pour un affichage sûr :
| Caractère | Forme échappée |
|---|---|
\ (barre oblique inverse) |
\\ |
' (guillemet simple) |
'' |
\0 (octet nul) |
\0 |
\n (saut de ligne) |
\n |
\r (retour chariot) |
\r |
Les valeurs NULL sont affichées sous la forme du littéral NULL sans guillemets :
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Paramètres
DryRun::generate() accepte les mêmes paramètres que SqlGenerator::generate() :
$statements = DryRun::generate(
$result,
base: $baseSnapshot,
fkDependencies: ['comments' => ['posts']],
driver: new SqliteDriver(),
);
| Paramètre | Type | Description |
|---|---|---|
$result |
MergeResult |
Le résultat de fusion à prévisualiser. |
$base |
?Snapshot |
Instantané de base pour les colonnes d'identité. Valeur par défaut : $result->baseSnapshot(). |
$fkDependencies |
array |
Correspondance des dépendances entre clés étrangères pour l'ordonnancement. |
$driver |
?Driver |
Pilote de base de données pour citer les identifiants. |
Exécution à blanc ou SqlGenerator
DryRun enveloppe SqlGenerator. La différence :
SqlGenerator::generate()renvoie des tableaux['sql' => '...', 'params' => [...]]destinés à l'exécution par un adaptateur avec des instructions préparées.DryRun::generate()renvoie des chaînes simples où les valeurs sont insérées, conçues pour être lues par des personnes.
N'exécutez pas la sortie de l'exécution à blanc comme SQL. Elle est formatée pour l'affichage et n'est pas sûre à exécuter. Pour exécuter des fusions, utilisez directement Applier ou SqlGenerator avec des instructions préparées.
Utiliser la façade
Avec la façade, capturez un résultat de fusion et prévisualisez-le :
use Merql\Merql;
use Merql\Apply\DryRun;
$result = Merql::merge('base', 'ours', 'theirs');
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
Ou depuis CLI avec l'option --dry-run :
vendor/bin/merql merge base ours theirs --dry-run
CLI affiche les instructions sans ordre des clés étrangères ni pilote ; les identifiants utilisent donc les accents graves par défaut, quel que soit le moteur de base de données. Il transmet l'instantané de base pour les colonnes d'identité. Sa fusion est au niveau des colonnes, comme Merql::merge().