Treci la conținut

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.

PHP
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

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

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:

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

Parametri

DryRun::generate() acceptă aceiași parametri ca SqlGenerator::generate():

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

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";
}

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.

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