Previzualizare de simulare
DryRun::generate() generează instrucțiuni SQL ușor de citit, cu valorile inserate direct. Folosiți-l pentru a verifica ce ar face o îmbinare înainte de a o aplica bazei de date.
use Merql\Apply\DryRun;
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
Previzualizarea conține câte o instrucțiune pentru fiecare operație din rezultat, grupate așa cum le grupează Applier: inserări, apoi actualizări, apoi ștergeri. Pentru rezultatul complet al unei îmbinări, sunt incluse toate modificările ambelor părți față de bază, adică exact ce ar executa Merql::apply() asupra unei baze de date care încă păstrează baza. Previzualizați un rezultat selectat pentru a vedea doar instrucțiunile operațiilor pe care intenționați să le aplicați.
Exemplu de ieșire
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';
Actualizările setează fiecare coloană care nu este de identitate și pe care o conține operația, nu doar coloanele modificate; o actualizare care nu ar seta nicio coloană este omisă.
Formatarea valorilor
Toate valorile sunt încadrate între ghilimele simple. Caracterele speciale sunt escape-uite pentru afișare sigură:
| Caracter | Reprezentare escape-uită |
|---|---|
\ (bară oblică inversă) |
\\ |
' (ghilimea simplă) |
'' |
\0 (octet null) |
\0 |
\n (linie nouă) |
\n |
\r (retur de car) |
\r |
Valorile NULL sunt afișate ca literalul neîncadrat în ghilimele NULL:
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Parametri
DryRun::generate() acceptă aceiași parametri ca SqlGenerator::generate():
$statements = DryRun::generate(
$result,
base: $baseSnapshot,
fkDependencies: ['comments' => ['posts']],
driver: new SqliteDriver(),
);
| Parametru | Tip | Descriere |
|---|---|---|
$result |
MergeResult |
Rezultatul îmbinării de previzualizat. |
$base |
?Snapshot |
Instantaneul de bază pentru coloanele de identitate. În lipsă, se folosește $result->baseSnapshot(). |
$fkDependencies |
array |
Harta dependențelor dintre cheile străine, folosită pentru ordonare. |
$driver |
?Driver |
Driverul bazei de date pentru citarea identificatorilor. |
Rulare de probă vs SqlGenerator
DryRun învelește SqlGenerator. Diferența:
Nu executați rezultatul simulării ca SqlGenerator::generate(). Este formatat pentru afișare, nu pentru executare sigură. Pentru a executa îmbinări, folosiți direct ['sql' => '...', 'params' => [...]] sau DryRun::generate() cu instrucțiuni pregătite.
Nu executați rezultatul rulării de probă ca SQL. Este formatat pentru afișare, nu pentru execuție sigură. Pentru a executa îmbinări, folosiți direct Applier sau SqlGenerator cu instrucțiuni pregătite.
Utilizarea fațadei
Prin fațadă, capturați rezultatul unei îmbinări și previzualizați-l:
use Merql\Merql;
use Merql\Apply\DryRun;
$result = Merql::merge('base', 'ours', 'theirs');
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
CLI afișează instrucțiunile fără ordonarea după chei străine sau un driver, așa că identificatorii folosesc citarea implicită cu backtick-uri, indiferent de baza de date. Transmite instantaneea de bază pentru coloanele de identitate. Îmbinarea sa operează la nivel de coloană, la fel ca --dry-run.
vendor/bin/merql merge base ours theirs --dry-run
CLI afișează instrucțiunile fără ordonarea cheilor străine sau un driver, așa că identificatorii folosesc citarea implicită cu backtick-uri, indiferent de baza de date. Transmite instantaneul de bază pentru coloanele de identitate. Îmbinarea sa este la nivel de coloană, la fel ca Merql::merge().