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.
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
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:
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Paraméterek
A DryRun::generate() ugyanazokat a paramétereket fogadja el, mint a SqlGenerator::generate():
$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:
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:
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().