Especificação aberta · anteriormente DTQL

Consultas que você pode ler, comparar e confiar.

TugQL é uma linguagem de consulta portátil e legível por humanos. Ela combina uma sintaxe de texto limpa semelhante a SQL com uma representação estruturada de árvore de consulta 1:1 e sem perdas (TugQT) serializada como YAML/JSON simples. Salve uma consulta, edite-a manualmente, veja o diff no controle de versão e execute-a entre backends sem perdas.

Ler a especificação Ver um exemplo $ 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 que TugQL

Uma consulta é um dado. Trate-a como dado.

TugQL transforma uma consulta em um documento compreensível e versionável que você pode armazenar, revisar e comparar — portátil em qualquer backend.

Legível por humanos

Sintaxe intuitiva semelhante a SQL para pessoas, além de árvore de consulta YAML/JSON simples (TugQT) para ferramentas — qualquer um pode inspecionar e editar.

Ida e volta sem perdas

A transformação canônica reconstrói consultas estruturalmente idênticas à origem. Nada é silenciosamente descartado ou aproximado.

Validado por esquema

Publicado com validação completa em JSON Schema (draft 2020-12). Qualquer ferramenta em qualquer linguagem pode validar consultas antes da execução.

Ideal para diffs

Formatação canônica e serialização determinística da árvore. Consultas salvas geram diffs limpos no Git e são revisadas como código.

Portátil por design

TugQL expõe funcionalidades portáteis entre plataformas: a mesma consulta executa sem alterações no Git, SQLite, PostgreSQL ou Firestore.

Não é SQL completo

Um subconjunto portátil deliberadamente focado e bem definido. Recursos não portáteis são rejeitados explicitamente em vez de traduzidos de forma insegura.

02 — Exemplo

Uma consulta em TugQL e TugQT

Escreva na sintaxe de texto TugQL; armazene ou compartilhe como árvore de consulta estruturada TugQT.

Desenvolvedores escrevem consultas na sintaxe de texto do TugQL — legível, compacta e parecida com SQL. Por baixo, o parser produz o TugQT (Tug Query Tree), uma representação canônica legível por máquina.

Cada nó mapeia deterministicamente entre sintaxe e árvore. Erros de entrada ou violações de esquema retornam diagnósticos com localização precisa no código.

Nota sobre a nomenclatura: TugQL era anteriormente conhecido como DTQL. Documentos e arquivos de consulta DTQL existentes continuam suportados para compatibilidade com versões anteriores.
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 — nó → TugQT

Mapeamento

Cada nó de consulta possui uma representação estruturada definida.

Nó de consultaRepresentação TugQT
From sobre uma coleção raizfrom: { name, alias? }
Colunaitem sob columns: — expressão com as: opcional
Comparação{ op, left, right }
Condição em grupo (And){ and: [ … ] }
Condição em grupo (Or){ or: [ … ] }
Expressão de ordenaçãoitem sob orderBy: — expressão com desc: true opcional
Referência a campo{ field: <nome> }
Constante{ value: <escalar> }
Array{ values: [ <escalar>, … ] }
Operador==, In, >, >=, <, <=
Limit / Offsetlimit: <int> / offset: <int>

Uma expressão define exatamente um entre field, value ou values, identificando uma referência de campo, constante ou array.

04 — subconjunto coberto

O que o TugQL representa

Coleções individuais ou unidas, colunas selecionadas, expressões de filtro, ordenação e paginação. Tudo fora de escopo é rejeitado — nunca descartado em silêncio.

No escopo

Fontes de coleção · colunas selecionadas · comparações e grupos And/Or · ordenação · limit / offset · joins · parâmetros. Expressões: campo, constante, array. Operadores: ==, !=, In, >, >=, <, <=, And, Or.

Fora de escopo (rejeitado)

Joins cartesianos ilimitados · sintaxe proprietária específica de banco · operadores de mutação sem tipo fora do esquema. A serialização falha explicitamente para evitar perda semântica.

Sem perdas e canônico

resolve(parse(text)) produz árvores determinísticas; a serialização é canônica para que consultas salvas mostrem diffs limpos entre versões.

05 — onde roda

Uma consulta, muitos backends

O TugQL é a superfície de consulta portátil. Ele se integra a uma camada de abstração de dados (DALgo) que se adapta a qualquer armazenamento subjacente.

Como o TugQL expressa o subconjunto portátil, uma consulta escrita uma vez se comporta de forma idêntica tanto em um repositório Git (inGitDB), SQLite, PostgreSQL ou Firestore.

TugQLlinguagem de consulta portátil
DALgocamada de abstração de dados
inGitDB SQLite PostgreSQL Firestore
Usado no desenvolvimento de produtos

Explore e consulte dados com o DataTug.

DataTug ajuda desenvolvedores a explorar esquemas, criar e executar consultas e entender resultados. O trabalho com contratos de consulta usando TugQL e TugQT é contínuo. Conheça as ferramentas por trás do DataTug.

Salve. Compare. Execute em qualquer lugar.

O TugQL torna uma consulta um artefato de primeira classe e auditável — legível por pessoas, validado por ferramentas e portátil entre plataformas.