advpl-embedded-sqllisted
Install: claude install-skill JoniPraia/plugadvpl
# advpl-embedded-sql — SQL nativo em ADVPL/TLPP
ADVPL/TLPP suporta SQL embarcado direto no fonte com **substituição por macros** que garantem multi-empresa, multi-filial, anti-SQL-injection e portabilidade entre DBMS (Oracle, SQL Server, Postgres, DB2 via DBAccess).
Famílias de execução SQL no Protheus:
| Comando / Função | Tipo | Use quando |
|-----------------------|----------|---------------------------------------------------------|
| **`BeginSql/EndSql`** | SELECT | **Default pra novo código**, suporta macros |
| `TCQuery` | SELECT | Legacy. Equivalente ao BeginSql mas string crua |
| `TCGenQry` | SELECT | Internamente usado por `TCQuery`; raramente direto |
| **`MPSysOpenQuery`** | SELECT | Como TCQuery mas com `TCSetField` automático dos campos dicionarizados |
| **`TCSqlExec`** | DML/DDL | UPDATE/DELETE/INSERT/CREATE direto no DBMS |
## Quando usar
- Edit/criação de qualquer query SQL no fonte ADVPL.
- Refator de SQL legado (`TCQuery` + concatenação → `BeginSql`).
- Revisão de regra `PERF-001`/`PERF-002`/`PERF-003` ou `SEC-001` do lint.
- DML em massa (atualização cross-tabela) — usar `TCSqlExec` em vez de loop ADVPL com `RecLock`.
- Antes de testar performance — sem macros, queries dão problema em produção multi-empresa.
## Macros obrigatórias do `BeginSql`
| Macro | O que faz