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.
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ı
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:
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Parametreler
DryRun::generate(), SqlGenerator::generate() ile aynı parametreleri kabul eder:
$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:
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:
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.