
# 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](https://merql.inline0.dev/tr/docs/merge/plans) ö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:

```bash
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.
