SQLCute — Constructor Fluido de SQL para Delphi
🌍 Idioma: English | Español
Construye consultas SQL con una API fluida, segura en tipos. Sin concatenación de cadenas, sin SQL crudo — solo encadenamiento de métodos que compila a SQL parametrizado.
Conceptos
| Concepto | Descripción |
|---|---|
IQuery |
Interfaz fluida — cada método devuelve IQuery para encadenamiento |
TQuery.New |
Punto de entrada — crea una query con conteo de referencias, sin necesidad de Free |
TSQLResult |
Resultado: cadena SQL + array Bindings de parámetros posicionales |
IQueryCompiler |
Estrategia para generación de SQL específica del dialecto (ANSI por defecto, o un compilador de dialecto) |
Inicio Rápido
uses Daf.SQLCute;
var Q := TQuery.New
.From('pedidos')
.Select(['id', 'total', 'estado'])
.Where('estado', 'pendiente')
.Where('total', '>', 100)
.OrderByDesc('creado_en')
.Limit(20);
var R := TAnsiSqlCompiler.Create.Compile(Q);
// R.SQL → 'SELECT id, total, estado FROM pedidos WHERE estado = ? AND total > ? ORDER BY creado_en DESC LIMIT 20'
// R.Bindings → ['pendiente', 100]Patrones Comunes
Filtrar y paginar
TQuery.New
.From('usuarios')
.Where('activo', True)
.ForPage(Pagina, 25) // LIMIT 25 OFFSET (Pagina-1)*25JOIN
TQuery.New
.From('pedidos')
.Join('clientes', 'pedidos.cliente_id', 'clientes.id')
.Select(['pedidos.id', 'clientes.nombre'])Agregación
TQuery.New
.From('ventas')
.GroupBy('producto_id')
.SelectCount('*', 'qty')
.SelectSum('importe', 'total')
.Having('count(*)', '>', 10)DML
// INSERT
TQuery.New.From('logs')
.AsInsert(['nivel', 'mensaje'], ['error', 'disco lleno']);
// UPDATE
TQuery.New.From('usuarios')
.Where('id', 42)
.AsUpdate(['email'], ['nuevo@ejemplo.com']);
// DELETE
TQuery.New.From('sesiones')
.Where('expirado', True)
.AsDelete;Compilador de dialecto
uses Daf.SQLCute.Compiler.Postgres;
var R := TPostgresCompiler.Create.Compile(Q);
// identificadores entrecomillados con "", marcadores $1 $2 …Documentación
| Recurso | Descripción |
|---|---|
| Guía de Uso | Referencia completa de la API con todos los métodos |
| SELECT & FROM | Columnas, DISTINCT, agregados, ORDER BY, LIMIT |
| WHERE | Condiciones, IN, EXISTS, grupos, LIKE, operaciones de fecha |
| JOINs | Todos los tipos de join y callbacks |
| GROUP BY / HAVING | Agrupación y filtros de agregados |
| Operaciones de Conjunto | UNION, INTERSECT, EXCEPT, paginación |
| DML | INSERT, UPDATE, DELETE |
| Subconsultas y CTEs | Tablas derivadas, WITH, CTEs recursivos |
| Operaciones de Cadena | LIKE, starts/ends/contains |
| Operaciones de Fecha | WhereDate, casting por dialecto |
| Compiladores de Dialecto | Postgres, MySQL, SQLite, SQL Server, Oracle, Firebird |
| Paquete Compilers | Clases de compiladores de dialecto |
Compiladores
SQLCute.Compilers — Compiladores de Dialecto
🌍 Idioma: English | Español
Compiladores SQL específicos de dialecto para SQLCute. Cada compilador extiende la base ANSI con entrecomillado de identificadores, marcadores de parámetros, cast de fechas y paginación nativos de cada base de datos.
Compiladores Disponibles
| Clase | Unidad | Comillas | Marcador | Notas |
|---|---|---|---|---|
TPostgresCompiler |
Daf.SQLCute.Compiler.Postgres |
" |
$1, $2… |
Cast ::date |
TMySqlCompiler |
Daf.SQLCute.Compiler.MySql |
` |
? |
Cast DATE(col) |
TSQLiteCompiler |
Daf.SQLCute.Compiler.SQLite |
" |
? |
date(col) / strftime |
TSqlServerCompiler |
Daf.SQLCute.Compiler.SqlServer |
[…] |
@p1, @p2… |
Paginación FETCH NEXT |
TOracleCompiler |
Daf.SQLCute.Compiler.Oracle |
" |
:p1, :p2… |
Cast TRUNC(col), paginación FETCH |
TFirebirdCompiler |
Daf.SQLCute.Compiler.Firebird |
" |
? |
Partes de fecha con EXTRACT |
El compilador base ANSI (TAnsiSqlCompiler) vive en el paquete núcleo de SQLCute (Daf.SQLCute.Compiler).
Ejemplo Rápido
uses
Daf.SQLCute,
Daf.SQLCute.Compiler.Postgres;
var Q := TQuery.New
.From('pedidos')
.Join('clientes', 'pedidos.cliente_id', 'clientes.id')
.Where('pedidos.estado', 'pendiente')
.WhereDate('pedidos.creado_en', '2024-06-01')
.OrderByDesc('pedidos.creado_en')
.Limit(50);
var R := TPostgresCompiler.Create.Compile(Q);
// R.SQL →
// SELECT * FROM "pedidos"
// INNER JOIN "clientes" ON "pedidos"."cliente_id" = "clientes"."id"
// WHERE "pedidos"."estado" = $1
// AND "pedidos"."creado_en"::date = $2
// ORDER BY "pedidos"."creado_en" DESC
// LIMIT 50Documentación
- Guía de Compiladores de Dialecto — referencia completa, patrón DI, compilador personalizado
- Operaciones de Fecha — matriz de cast de fechas por dialecto