실행 없이 미리보기
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 |
식별자 인용을 위한 데이터베이스 드라이버입니다. |
Dry run과 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()처럼 열 수준으로 수행됩니다.