# Migrations SQL

O sistema possui um runner de migrations em `tools/migrate-sql.php` para aplicar os arquivos `.sql` versionados em `sql/` sem copiar e colar manualmente no banco.

## Como funciona

- varre todos os arquivos `.sql` dentro de `sql/`, incluindo subpastas;
- calcula checksum SHA-256 de cada arquivo;
- grava o estado atual em `wpjy_schema_migrations`;
- grava cada tentativa em `wpjy_schema_migration_runs`;
- executa apenas migrations pendentes ou que falharam antes;
- bloqueia execucoes paralelas com `GET_LOCK`;
- para na primeira falha por padrao;
- marca como problema quando uma migration ja aplicada foi alterada depois.

## Comandos

Ver pendentes, erros e arquivos alterados:

```bash
php tools/migrate-sql.php status
```

Ver tudo, inclusive ja aplicado:

```bash
php tools/migrate-sql.php status --all
```

Executar pendentes:

```bash
php tools/migrate-sql.php run --no-interaction
```

Por seguranca, se o controle ainda estiver vazio, o comando `run` nao executa todos os SQL antigos automaticamente. Para uma instalacao nova onde isso seja desejado, use:

```bash
php tools/migrate-sql.php run --no-interaction --allow-initial-run
```

Simular sem executar:

```bash
php tools/migrate-sql.php run --dry-run
```

Ver historico:

```bash
php tools/migrate-sql.php history --limit=20
```

Registrar baseline inicial sem executar SQL:

```bash
php tools/migrate-sql.php baseline --no-interaction
```

Use baseline quando a producao ja recebeu migrations antigas manualmente e voce quer iniciar o controle a partir do estado atual.

## Deploy via GitHub

O script `tools/deploy-github-repo.sh` ja reconhece estas variaveis:

- `TIIX_DEPLOY_RUN_MIGRATIONS=1` habilita a execucao apos o `rsync`;
- `TIIX_DEPLOY_PHP_BIN=php` define o binario PHP;
- `TIIX_DEPLOY_MIGRATIONS_CMD=/caminho/tools/migrate-sql.php` permite trocar o script;
- `TIIX_DEPLOY_MIGRATIONS_ARGS="run --no-interaction"` define os argumentos.

Na integracao do GitHub, estas opcoes tambem podem ser salvas na configuracao de deploy:

- `run_migrations`;
- `php_bin`;
- `migrations_cmd`;
- `migrations_args`.

Quando uma migration falha, o deploy retorna erro no callback, o log do deploy registra a falha e a tabela `wpjy_schema_migration_runs` guarda a mensagem do banco.

## Fluxo recomendado

1. Subir o runner e conferir com `php tools/migrate-sql.php status`.
2. Se os SQL antigos ja foram aplicados manualmente, executar `php tools/migrate-sql.php baseline --no-interaction`.
3. Habilitar `run_migrations` na configuracao do deploy.
4. A cada commit com novo arquivo em `sql/`, o deploy aplica apenas o que ainda nao rodou.
