Especificación abierta · anteriormente DTQL

Consultas que puedes leer, comparar y confiar.

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.

Leer la especificación Ver un ejemplo $ go get github.com/dal-go/dalgo/dtql
query.tugql TugQL
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
01 — Por qué TugQL

Una consulta es un dato. Trátala como tal.

TugQL convierte una consulta en un documento comprensible y comparable que puedes almacenar, revisar y versionar — portátil en cualquier backend.

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.

Ida y vuelta sin pérdidas

La transformación canónica reconstruye consultas estructuralmente idénticas al origen. Nada se descarta ni se aproxima en silencio.

Validado por esquema

Publicado con validación JSON Schema completa (draft 2020-12). Cualquier herramienta en cualquier lenguaje puede validar consultas antes de ejecutarlas.

Amigable con diffs

Formato canónico y serialización determinista. Las consultas guardadas muestran diffs limpios en Git y se revisan como código estándar.

Portátil por diseño

TugQL expone funcionalidad portable entre plataformas: una misma consulta se ejecuta sin cambios en Git, SQLite, PostgreSQL o Firestore.

No es todo SQL

Un subconjunto portable deliberadamente enfocado y bien definido. Las construcciones no portables se rechazan explícitamente en lugar de traducirse erróneamente.

02 — Ejemplo

Una consulta en TugQL y TugQT

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.

Nota sobre el nombre: TugQL se conocía anteriormente como DTQL. Los documentos y archivos de consulta DTQL existentes siguen siendo compatibles.
users.tugqt.yaml YAML
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
03 — nodo → TugQT

Mapeo

Cada nodo de consulta tiene una representación estructurada definida.

Nodo de consultaRepresentación en TugQT
From sobre una colección raízfrom: { name, alias? }
Columnaelemento 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 ordenelemento bajo orderBy: — expresión con desc: true opcional
Referencia a campo{ field: <nombre> }
Constante{ value: <escalar> }
Array{ values: [ <escalar>, … ] }
Operador==, In, >, >=, <, <=
Límite / Desplazamientolimit: <int> / offset: <int>

Una expresión define exactamente uno de field, value o values, diferenciando una referencia a campo, una constante o un array.

04 — subconjunto cubierto

Qué representa TugQL

Colecciones individuales o uniones, columnas seleccionadas, filtros, ordenación y paginación. Todo lo fuera de alcance se rechaza — nunca se descarta en silencio.

Dentro del alcance

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.

Fuera de alcance (rechazado)

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.

Sin pérdidas y canónico

resolve(parse(text)) produce árboles deterministas; la serialización es canónica para que las consultas guardadas se comparen limpiamente entre versiones.

05 — dónde se ejecuta

Una consulta, muchos backends

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.

TugQLlenguaje de consulta portátil
DALgocapa de abstracción de datos
inGitDB SQLite PostgreSQL Firestore
Uso en desarrollo de productos

Explora y consulta datos con DataTug.

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.

Guárdala. Compárala. Ejecútala donde sea.

TugQL hace de cada consulta un artefacto revisable de primera clase: legible por personas, validado por herramientas y portátil entre plataformas.