Към съдържанието

Преглед без изпълнение

DryRun::generate() генерира разбираеми за хората заявки SQL с вградени стойности. Използвайте го, за да прегледате какво би направило едно сливане, преди да го приложите към базата данни.

PHP
use Merql\Apply\DryRun;

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

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

Прегледът съдържа по една заявка за всяка операция в резултата, групирани по начина, по който ги групира Applier: първо вмъквания, после актуализации и накрая изтривания. Пълният резултат от сливането включва всяка промяна от двете страни спрямо основата, която Merql::apply() би приложил към база данни, в която все още се намира основата. Прегледайте избран резултат, за да видите само заявките за операциите, които планирате да приложите.

Примерен изход

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

Актуализациите задават всички колони, които носят операцията, освен тези за идентичност, а не само променените. Актуализация, която не би задала нито една колона, се пропуска.

Форматиране на стойности

Всички стойности се ограждат в единични кавички. Специалните символи се екранират за безопасно визуализиране:

Символ Екраниран като
\ (обратна наклонена черта) \\
' (единична кавичка) ''
\0 (нулев байт) \0
\n (нов ред) \n
\r (връщане на каретката) \r

Стойностите NULL се извеждат като литерал NULL без кавички:

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

Параметри

DryRun::generate() приема същите параметри като SqlGenerator::generate():

PHP
$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 с подготвени заявки.

Използване чрез фасадата

Заснемете резултат от сливане чрез фасадата и го прегледайте:

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 с флага --dry-run:

Обвивка
vendor/bin/merql merge base ours theirs --dry-run

CLI извежда заявките без подреждане по външни ключове или драйвер, затова идентификаторите се ограждат с кавички чрез обратни апострофи по подразбиране, независимо от базата данни. Подават се основната моментна снимка за колоните за идентичност. Сливането е на ниво колона, както при Merql::merge().