Legible por humanos
Sintaxis intuitiva de autoría tipo SQL para personas, junto a un árbol de consulta YAML/JSON (TugQT) para herramientas: cualquiera puede inspeccionarlo y editarlo.
TugQL es un lenguaje de consulta portátil y legible por humanos. Combina una sintaxis de texto limpia similar a SQL con una representación de árbol estructurado 1:1 y sin pérdidas (TugQT) serializada como YAML/JSON estándar. Guarda una consulta, edítala a mano, compárala en control de versiones y ejecútala en múltiples motores sin pérdida de datos.
from users as u
select
u.name,
u.age as years
where
u.age >= 18
and (u.status in ('active', 'pending') or u.country == 'US')
order by
u.name,
u.age desc
limit 10
offset 20
TugQL convierte una consulta en un documento comprensible y comparable que puedes almacenar, revisar y versionar — portátil en cualquier backend.
Sintaxis intuitiva de autoría tipo SQL para personas, junto a un árbol de consulta YAML/JSON (TugQT) para herramientas: cualquiera puede inspeccionarlo y editarlo.
La transformación canónica reconstruye consultas estructuralmente idénticas al origen. Nada se descarta ni se aproxima en silencio.
Publicado con validación JSON Schema completa (draft 2020-12). Cualquier herramienta en cualquier lenguaje puede validar consultas antes de ejecutarlas.
Formato canónico y serialización determinista. Las consultas guardadas muestran diffs limpios en Git y se revisan como código estándar.
TugQL expone funcionalidad portable entre plataformas: una misma consulta se ejecuta sin cambios en Git, SQLite, PostgreSQL o Firestore.
Un subconjunto portable deliberadamente enfocado y bien definido. Las construcciones no portables se rechazan explícitamente en lugar de traducirse erróneamente.
Escribe en sintaxis de texto TugQL; almacena o intercambia como árbol de consulta estructurado TugQT.
Los autores escriben consultas en la sintaxis de texto de TugQL — legible, compacta y similar a SQL. Por debajo, el analizador produce TugQT (Tug Query Tree), una representación canónica y legible por máquinas.
Cada nodo se asigna de forma determinista entre la sintaxis y el árbol. Entradas con errores o que violen el esquema devuelven diagnósticos precisos.
from:
name: users
columns:
- field: name
- field: age
as: years
where:
and:
- op: '>='
left:
field: age
right:
value: 18
- or:
- op: In
left:
field: status
right:
values:
- active
- pending
- op: ==
left:
field: country
right:
value: US
orderBy:
- field: name
- field: age
desc: true
limit: 10
offset: 20
Cada nodo de consulta tiene una representación estructurada definida.
| Nodo de consulta | Representación en TugQT |
|---|---|
| From sobre una colección raíz | from: { name, alias? } |
| Columna | elemento bajo columns: — expresión con as: opcional |
| Comparación | { op, left, right } |
| Condición de grupo (And) | { and: [ … ] } |
| Condición de grupo (Or) | { or: [ … ] } |
| Expresión de orden | elemento bajo orderBy: — expresión con desc: true opcional |
| Referencia a campo | { field: <nombre> } |
| Constante | { value: <escalar> } |
| Array | { values: [ <escalar>, … ] } |
| Operador | ==, In, >, >=, <, <= |
| Límite / Desplazamiento | limit: <int> / offset: <int> |
Una expresión define exactamente uno de field, value o values, diferenciando una referencia a campo, una constante o un array.
Colecciones individuales o uniones, columnas seleccionadas, filtros, ordenación y paginación. Todo lo fuera de alcance se rechaza — nunca se descarta en silencio.
Orígenes de colección · columnas seleccionadas · árboles de comparación y grupos And/Or · ordenación · limit / offset · joins · parámetros. Expresiones: campo, constante, array. Operadores: ==, !=, In, >, >=, <, <=, And, Or.
Joins cartesianos ilimitados · sintaxis propietaria específica de motor · mutaciones no tipadas fuera de la autoridad del esquema. La serialización falla intencionadamente antes de perder la semántica.
resolve(parse(text)) produce árboles deterministas; la serialización es canónica para que las consultas guardadas se comparen limpiamente entre versiones.
TugQL es la superficie de consulta portátil. Se conecta a una capa de abstracción de datos (DALgo) que la adapta a cualquier almacenamiento subyacente.
Debido a que TugQL expresa el subconjunto portable, una consulta escrita una vez se comporta de manera uniforme tanto en Git (inGitDB), SQLite, PostgreSQL como en Firestore.
El lenguaje es una especificación abierta con esquema publicado e implementaciones en Go y TypeScript.
La especificación de TugQL, el JSON Schema canónico (draft 2020-12) y documentos de ejemplo validados. Anteriormente DTQL.
Librería en Go: analiza, valida, resuelve, formatea y ejecuta consultas TugQL con garantías de ida y vuelta sin pérdidas.
DataTug ayuda a los desarrolladores a explorar esquemas, crear y ejecutar consultas y analizar resultados. Su trabajo en contratos de consulta con TugQL y TugQT continúa. Explora las herramientas tras DataTug.
TugQL hace de cada consulta un artefacto revisable de primera clase: legible por personas, validado por herramientas y portátil entre plataformas.