Преглед без изпълнение
DryRun::generate() генерира разбираеми за хората заявки SQL с вградени стойности. Използвайте го, за да прегледате какво би направило едно сливане, преди да го приложите към базата данни.
use Merql\Apply\DryRun;
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
Прегледът съдържа по една заявка за всяка операция в резултата, групирани по начина, по който ги групира
Applier: първо вмъквания, после актуализации и накрая изтривания. Пълният
резултат от сливането включва всяка промяна от двете страни спрямо основата,
която Merql::apply() би приложил към база данни, в която все още се намира
основата. Прегледайте избран резултат, за да видите само заявките
за операциите, които планирате да приложите.
Примерен изход
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';
Актуализациите задават всички колони, които носят операцията, освен тези за идентичност, а не само променените. Актуализация, която не би задала нито една колона, се пропуска.
Форматиране на стойности
Всички стойности се ограждат в единични кавички. Специалните символи се екранират за безопасно визуализиране:
| Символ | Екраниран като |
|---|---|
\ (обратна наклонена черта) |
\\ |
' (единична кавичка) |
'' |
\0 (нулев байт) |
\0 |
\n (нов ред) |
\n |
\r (връщане на каретката) |
\r |
Стойностите NULL се извеждат като литерал NULL без кавички:
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Параметри
DryRun::generate() приема същите параметри като SqlGenerator::generate():
$statements = DryRun::generate(
$result,
base: $baseSnapshot,
fkDependencies: ['comments' => ['posts']],
driver: new SqliteDriver(),
);
| Параметър | Тип | Описание |
|---|---|---|
$result |
MergeResult |
Резултатът от сливането за преглед. |
$base |
?Snapshot |
Основна моментна снимка за колоните за идентичност. Ако липсва, се използва $result->baseSnapshot(). |
$fkDependencies |
array |
Съпоставяне на зависимости между външни ключове за подреждане. |
$driver |
?Driver |
Драйвер за базата данни, използван за ограждане на идентификатори с кавички. |
Преглед без изпълнение и SqlGenerator
DryRun обгръща SqlGenerator. Разликата:
SqlGenerator::generate()връща масиви['sql' => '...', 'params' => [...]], предназначени за изпълнение от адаптер с подготвени заявки.DryRun::generate()връща обикновени низове с вградени стойности, предназначени за четене от хора.
Не изпълнявайте изхода от прегледа без изпълнение като SQL. Той е форматиран за показване, а не за безопасно изпълнение. За изпълнение на сливания използвайте директно Applier или SqlGenerator с подготвени заявки.
Използване чрез фасадата
Заснемете резултат от сливане чрез фасадата и го прегледайте:
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 с флага --dry-run:
vendor/bin/merql merge base ours theirs --dry-run
CLI извежда заявките без подреждане по външни ключове или драйвер, затова
идентификаторите се ограждат с кавички чрез обратни апострофи по подразбиране, независимо от базата данни. Подават се
основната моментна снимка за колоните за идентичност. Сливането е на ниво колона, както при
Merql::merge().