Prévia da execução de teste
DryRun::generate() gera instruções SQL legíveis por humanos, com os valores interpolados diretamente. Use-o para revisar o que uma mesclagem faria antes de aplicá-la ao banco de dados.
use Merql\Apply\DryRun;
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
A prévia contém uma instrução para cada operação no resultado, agrupadas da mesma forma que Applier as agrupa: inserções, depois atualizações e, por fim, exclusões. No resultado completo de uma mesclagem, isso inclui todas as alterações de ambos os lados em relação à base, que é o que Merql::apply() executaria em um banco de dados que ainda contém a base. Visualize um resultado selecionado para ver apenas as instruções das operações que você pretende aplicar.
Exemplo de saída
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';
As atualizações definem todas as colunas que a operação contém, exceto as colunas de identidade, e não apenas as alteradas. Uma atualização que não definiria nenhuma coluna é omitida.
Formatação de valores
Todos os valores são envolvidos por aspas simples. Os caracteres especiais são escapados para exibição segura:
| Caractere | Escapado como |
|---|---|
\ (barra invertida) |
\\ |
' (aspas simples) |
'' |
\0 (byte nulo) |
\0 |
\n (nova linha) |
\n |
\r (retorno de carro) |
\r |
Valores NULL são exibidos como o literal sem aspas NULL:
UPDATE `posts` SET `subtitle` = NULL WHERE `id` = '42';
Parâmetros
DryRun::generate() aceita os mesmos parâmetros que SqlGenerator::generate():
$statements = DryRun::generate(
$result,
base: $baseSnapshot,
fkDependencies: ['comments' => ['posts']],
driver: new SqliteDriver(),
);
| Parâmetro | Tipo | Descrição |
|---|---|---|
$result |
MergeResult |
O resultado da mesclagem a visualizar. |
$base |
?Snapshot |
Snapshot base para colunas de identidade. Usa $result->baseSnapshot() como alternativa. |
$fkDependencies |
array |
Mapa de dependências de chaves estrangeiras para ordenação. |
$driver |
?Driver |
Driver do banco de dados para delimitar identificadores. |
Execução de teste vs. SqlGenerator
DryRun envolve SqlGenerator. A diferença:
SqlGenerator::generate()retorna arrays['sql' => '...', 'params' => [...]]destinados à execução por prepared statements do adaptador.DryRun::generate()retorna strings simples com valores inseridos diretamente, destinadas à leitura humana.
Não execute a saída da execução de teste como SQL. Ela é formatada para exibição, não para execução segura. Para executar mesclagens, use Applier ou SqlGenerator diretamente com prepared statements.
Usando com a fachada
Pela fachada, capture um resultado da mesclagem e visualize-o:
use Merql\Merql;
use Merql\Apply\DryRun;
$result = Merql::merge('base', 'ours', 'theirs');
$statements = DryRun::generate($result);
foreach ($statements as $sql) {
echo "{$sql};\n";
}
Ou de CLI com a opção --dry-run:
vendor/bin/merql merge base ours theirs --dry-run
O CLI imprime as instruções sem ordenação por chave estrangeira nem driver, então
os identificadores usam aspas invertidas por padrão, independentemente do banco de dados. Ele passa
o snapshot base para colunas de identidade. Sua mesclagem é no nível da coluna, como
Merql::merge().