Ugrás a tartalomhoz

Végrehajtás nélküli előnézet

A DryRun::generate() ember által olvasható SQL-utasításokat állít elő, amelyekben az értékek közvetlenül szerepelnek. Használatával még az adatbázis módosítása előtt áttekintheti, mit tenne az egyesítés.

PHP
use Merql\Apply\DryRun;

$statements = DryRun::generate($result);

foreach ($statements as $sql) {
    echo "{$sql};\n";
}

Az előnézet az eredmény minden műveletéhez tartalmaz egy utasítást, az Applier csoportosítását követve: beszúrások, majd frissítések, végül törlések. Az egyesítés teljes eredményében ez az alaphoz képest mindkét oldalon történt összes változást jelenti, amelyeket a Merql::apply() hajtana végre egy olyan adatbázison, amely még az alapállapotot tartalmazza. A kiválasztott eredmény előnézetében csak az alkalmazni kívánt műveletek utasításait láthatja.

Példakimenet

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

A frissítés a műveletben szereplő összes nem azonosító oszlopot beállítja, nem csupán a megváltozottakat; kimarad az a frissítés, amely egyetlen oszlopot sem állítana be.

Értékek formázása

Minden érték egyszeres idézőjelek közé kerül. A speciális karaktereket a biztonságos megjelenítés érdekében escape-eli a rendszer:

Karakter Escape-elt alak
\ (fordított perjel) \\
' (egyszeres idézőjel) ''
\0 (null bájt) \0
\n (újsor) \n
\r (kocsi-vissza) \r

A NULL értékek idézőjelek nélküli NULL literálként jelennek meg:

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

Paraméterek

A DryRun::generate() ugyanazokat a paramétereket fogadja el, mint a SqlGenerator::generate():

PHP
$statements = DryRun::generate(
    $result,
    base: $baseSnapshot,
    fkDependencies: ['comments' => ['posts']],
    driver: new SqliteDriver(),
);
Paraméter Típus Leírás
$result MergeResult Az előnézetben megjelenítendő egyesítési eredmény.
$base ?Snapshot Az azonosító oszlopok alap-pillantképe. Ha nincs megadva, a rendszer az $result->baseSnapshot() értékét használja.
$fkDependencies array Az idegen kulcsok függőségi térképe a sorrend meghatározásához.
$driver ?Driver Adatbázis-illesztőprogram azonosítók idézőjelezéséhez.

A végrehajtás nélküli futtatás és a SqlGenerator összevetése

A DryRun a SqlGenerator köré épül. A különbség:

  • A SqlGenerator::generate() ['sql' => '...', 'params' => [...]] tömböket ad vissza, amelyeket adapteres, előkészített utasításos végrehajtásra szántak.
  • A DryRun::generate() lapos karakterláncokat ad vissza beillesztett értékekkel, emberi olvasásra.

Ne hajtsa végre a végrehajtás nélküli kimenetet SQL formájában. Megjelenítésre készült, nem biztonságos végrehajtásra. Egyesítések végrehajtásához közvetlenül a Applier vagy a SqlGenerator használja előkészített utasításokkal.

Használat a homlokzaton keresztül

A homlokzaton keresztül rögzítse az egyesítési eredményt, majd tekintse meg az előnézetét:

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

Vagy a CLI felől, a --dry-run jelzővel:

Shell
vendor/bin/merql merge base ours theirs --dry-run

A CLI illesztőprogram és idegenkulcs-sorrend nélkül írja ki az utasításokat, ezért az azonosítóknál az adatbázistól függetlenül az alapértelmezett backtick idézőjelezést használja. Átadja az alap pillanatképet az azonosító oszlopokhoz. Egyesítése oszlopszintű, akárcsak a Merql::merge().