Lisible par les humains
Syntaxe de rédaction intuitive type SQL pour les développeurs, plus arbre de requêtes YAML/JSON (TugQT) pour l’outillage : accessible à tous pour inspection et modification.
TugQL est un langage de requête portable et lisible par les humains. Il associe une syntaxe textuelle épurée inspirée du SQL à une représentation arborescente structurée 1:1 et sans perte (TugQT) sérialisée en YAML/JSON brut. Enregistrez une requête, modifiez-la à la main, comparez ses versions dans Git et exécutez-la sur plusieurs moteurs sans aucune perte.
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 transforme une requête en un document clair et diffable que vous pouvez stocker, réviser et versionner — portable sur tous vos backends.
Syntaxe de rédaction intuitive type SQL pour les développeurs, plus arbre de requêtes YAML/JSON (TugQT) pour l’outillage : accessible à tous pour inspection et modification.
La simplification canonique reconstruit des requêtes structurellement identiques à la source. Rien n’est abandonné ou déformé silencieusement.
Publié avec validation JSON Schema intégrale (draft 2020-12). N’importe quel outil, dans n’importe quel langage, peut valider la structure d’une requête.
Formatage canonique et sérialisation arborescente déterministe. Les requêtes enregistrées produisent des diffs nets dans Git et se relisent comme du code classique.
TugQL expose des fonctionnalités universellement portables : une requête écrite une fois s’exécute à l’identique sur Git, SQLite, PostgreSQL ou Firestore.
Un sous-ensemble portable volontairement ciblé et rigoureusement défini. Les constructions non portables sont explicitement rejetées plutôt que mal traduites.
Rédigez en syntaxe textuelle TugQL ; conservez ou échangez sous forme d’arbre de requêtes structuré TugQT.
Les auteurs rédigent les requêtes dans la syntaxe textuelle TugQL — claire, compacte et proche du SQL. En sous-main, l’analyseur génère TugQT (Tug Query Tree), une représentation canonique lisible par machine.
Chaque nœud correspond de façon déterministe entre la syntaxe et l’arbre. Les erreurs de saisie ou de schéma renvoient des diagnostics exploitables avec localisation exacte.
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
Chaque nœud de requête couvert dispose d’une représentation structurée définie.
| Nœud de requête | Représentation TugQT |
|---|---|
| From sur une collection racine | from: { name, alias? } |
| Colonne | élément sous columns: — expression avec as: optionnel |
| Comparaison | { op, left, right } |
| Condition de groupe (And) | { and: [ … ] } |
| Condition de groupe (Or) | { or: [ … ] } |
| Expression d’ordre | élément sous orderBy: — expression avec desc: true optionnel |
| Référence de champ | { field: <nom> } |
| Constante | { value: <scalaire> } |
| Tableau | { values: [ <scalaire>, … ] } |
| Opérateur | ==, In, >, >=, <, <= |
| Limite / Décalage | limit: <int> / offset: <int> |
Une expression définit exactement un parmi field, value ou values, ce qui distingue une référence de champ, une constante ou un tableau.
Collections simples ou jointures, colonnes sélectionnées, expressions de filtrage, tri et pagination. Tout ce qui sort du périmètre est rejeté — jamais ignoré en silence.
Sources de collections · colonnes sélectionnées · arbres de comparaison et groupes And/Or · tri · limit / offset · jointures · paramètres. Expressions : référence de champ, constante, tableau. Opérateurs : ==, !=, In, >, >=, <, <=, And, Or.
Jointures cartésiennes non bornées · syntaxe spécifique à un éditeur · opérateurs de mutation non typés hors schéma. La sérialisation échoue plutôt que de perdre la sémantique de la requête.
resolve(parse(text)) produit des arbres déterministes ; la sérialisation est canonique afin que les requêtes sauvegardées se comparent nettement d’une version à l’autre.
TugQL constitue la surface de requête portable. Il s’appuie sur une couche d’abstraction de données (DALgo) qui l’adapte au stockage sous-jacent.
Parce que TugQL formalise le sous-ensemble portable, une requête écrite une fois se comporte de manière identique qu’elle s’exécute sur un dépôt Git (inGitDB), SQLite, PostgreSQL ou Firestore.
Le langage est une spécification ouverte accompagnée d’un schéma publié et d’implémentations en Go et TypeScript.
La spécification TugQL, le schéma canonique JSON Schema (draft 2020-12) et les exemples validés. Anciennement DTQL.
La bibliothèque Go : analyser, valider, résoudre, formater et exécuter des requêtes TugQL avec garanties d’aller-retour sans perte.
DataTug aide les développeurs à explorer les schémas de bases de données, construire et exécuter des requêtes et interpréter les résultats. L’intégration des contrats de requête avec TugQL et TugQT se poursuit. Découvrez les outils développés pour DataTug.
TugQL fait de la requête un artefact révisable de premier ordre — lisible par les humains, validé par l’outillage et portable sur tous vos moteurs.