İçeriğe geç

Deneme Çalıştırması Önizlemesi

DryRun::generate(), değerleri satır içine yerleştirilmiş, insanlar tarafından okunabilir SQL ifadeleri üretir. Birleştirmenin veritabanına uygulamadan önce ne yapacağını incelemek için kullanın.

PHP
use Merql\Apply\DryRun;

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

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

Önizleme, sonuçtaki her işlem için bir ifade içerir ve Applier öğesinin gruplandırdığı şekilde gruplandırılır: önce eklemeler, sonra güncellemeler, ardından silmeler. Birleştirmenin tüm sonucu için bu, her iki tarafın tabana göre yaptığı tüm değişikliklerdir; Merql::apply() öğesinin tabanı hâlâ tutan bir veritabanında yürüteceği işlemler bunlardır. Yalnızca uygulamayı planladığınız işlemlerin ifadelerini görmek için seçili sonucu önizleyin.

Örnek çıktı

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

Güncellemeler, yalnızca değişenleri değil, işlemin içerdiği tüm kimlik dışı sütunları ayarlar. Herhangi bir sütunu ayarlamayacak bir güncelleme çıktıya eklenmez.

Değer biçimlendirme

Tüm değerler tek tırnak içine alınır. Özel karakterler güvenli görüntüleme için kaçırılır:

Karakter Kaçış biçimi
\ (ters eğik çizgi) \\
' (tek tırnak) ''
\0 (null baytı) \0
\n (yeni satır) \n
\r (satır başı) \r

NULL değerleri, tırnak içine alınmamış NULL sabit değeri olarak gösterilir:

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

Parametreler

DryRun::generate(), SqlGenerator::generate() ile aynı parametreleri kabul eder:

PHP
$statements = DryRun::generate(
    $result,
    base: $baseSnapshot,
    fkDependencies: ['comments' => ['posts']],
    driver: new SqliteDriver(),
);
Parametre Tür Açıklama
$result MergeResult Önizlenecek birleştirme sonucu.
$base ?Snapshot Kimlik sütunları için temel anlık görüntü. Belirtilmezse $result->baseSnapshot() kullanılır.
$fkDependencies array Sıralama için yabancı anahtar bağımlılık eşlemesi.
$driver ?Driver Tanımlayıcıları tırnaklamak için veritabanı sürücüsü.

Deneme çalıştırması ve SqlGenerator karşılaştırması

DryRun, SqlGenerator öğesini sarar. Fark:

  • SqlGenerator::generate(), bağdaştırıcıda hazırlanmış ifadelerle yürütülmek üzere tasarlanmış ['sql' => '...', 'params' => [...]] dizileri döndürür.
  • DryRun::generate(), insanların okuyabilmesi için değerleri satır içine eklenmiş düz dizeler döndürür.

Deneme çalıştırması çıktısını SQL olarak yürütmeyin. Güvenli yürütme için değil, görüntüleme için biçimlendirilmiştir. Birleştirmeleri yürütmek için Applier veya SqlGenerator öğesini doğrudan hazırlanmış ifadelerle kullanın.

Facade ile kullanma

Facade üzerinden birleştirme sonucunu yakalayıp önizleyin:

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

Veya CLI üzerinden --dry-run bayrağıyla:

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

CLI, ifadeleri yabancı anahtar sıralaması veya sürücü olmadan yazdırır; bu nedenle tanımlayıcılar veritabanından bağımsız olarak varsayılan ters tırnak işaretleriyle tırnaklanır. Kimlik sütunları için temel anlık görüntüyü iletir. Birleştirmesi, Merql::merge() gibi sütun düzeyindedir.