Menschenlesbar
Intuitive SQL-ähnliche Syntax für Entwickler, plus einfacher YAML/JSON-Abfragebaum (TugQT) für Tools — jeder kann sie inspizieren, verstehen und bearbeiten.
TugQL ist eine portable, menschenlesbare Abfragesprache. Sie kombiniert eine saubere SQL-ähnliche Textsyntax mit einer verlustfreien 1:1-Darstellung als strukturierter Abfragebaum (TugQT), serialisiert in einfachem YAML/JSON. Speichern Sie eine Abfrage, bearbeiten Sie sie von Hand, überprüfen Sie Diffs in der Versionskontrolle und führen Sie sie verlustfrei über verschiedene Backends aus.
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 macht aus einer Abfrage ein verständliches, diffbares Dokument, das Sie speichern, überprüfen und versionieren können — portabel auf jedem Backend.
Intuitive SQL-ähnliche Syntax für Entwickler, plus einfacher YAML/JSON-Abfragebaum (TugQT) für Tools — jeder kann sie inspizieren, verstehen und bearbeiten.
Kanonische Transformation rekonstruiert Abfragen strukturell identisch zur Quelle. Nichts wird stillschweigend verworfen oder angenähert.
Veröffentlicht mit vollständiger JSON-Schema-Validierung (Draft 2020-12). Jedes Tool in jeder Sprache kann Abfragestrukturen vor der Ausführung validieren.
Kanonische Formatierung und deterministische Baum-Serialisierung. Gespeicherte Abfragen diffen sauber in Git und lassen sich wie Code reviewen.
TugQL bietet Funktionalität, die über verschiedene Speicher hinweg portabel ist — dieselbe Abfrage läuft ohne Änderung auf Git, SQLite, PostgreSQL oder Firestore.
Eine bewusst fokussierte, wohldefinierte portable Teilmenge. Nicht-portable Konstrukte werden explizit abgewiesen, statt gefährlich fehlübersetzt zu werden.
In TugQL-Textsyntax verfassen; als strukturierter TugQT-Abfragebaum speichern oder austauschen.
Abfragen werden in TugQL-Textsyntax verfasst — lesbar, kompakt und SQL-nah. Darunter erzeugt der Parser TugQT (Tug Query Tree), eine kanonische, maschinenlesbare Repräsentation.
Jeder Knoten wird deterministisch zwischen Syntax und Baum abgebildet. Fehlerhafte Eingaben oder Schemaverletzungen liefern präzise Diagnosen.
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
Jeder abgedeckte Abfrageknoten besitzt eine definierte strukturierte Darstellung.
| Abfrageknoten | TugQT-Darstellung |
|---|---|
| From über eine Quell-Sammlung | from: { name, alias? } |
| Spalte | Element unter columns: — Ausdruck mit optionalem as: |
| Vergleich | { op, left, right } |
| Gruppenbedingung (And) | { and: [ … ] } |
| Gruppenbedingung (Or) | { or: [ … ] } |
| Sortierausdruck | Element unter orderBy: — Ausdruck mit optionalem desc: true |
| Feldreferenz | { field: <name> } |
| Konstante | { value: <skalar> } |
| Array | { values: [ <skalar>, … ] } |
| Operator | ==, In, >, >=, <, <= |
| Limit / Offset | limit: <int> / offset: <int> |
Ein Ausdruck setzt genau eines von field, value oder values, was eine Feldreferenz, eine Konstante oder ein Array unterscheidet.
Einzelsammlungen oder Verknüpfungen, Spaltenauswahl, Filterausdrücke, Sortierung und Paginierung. Alles außerhalb des Umfangs wird abgelehnt — niemals stillschweigend verworfen.
Sammlungsquellen · ausgewählte Spalten · Vergleiche und And/Or-Bäume · Sortierung · Limit / Offset · Joins · Parameter. Ausdrücke: Feld, Konstante, Array. Operatoren: ==, !=, In, >, >=, <, <=, And, Or.
Unbeschränkte kartesische Joins · herstellerspezifische Dialektsyntax · ungetypte Mutationsoperatoren außerhalb des Schemas. Die Serialisierung bricht ab, statt Semantik zu verlieren.
resolve(parse(text)) erzeugt deterministische Abfragebäume; die Serialisierung ist kanonisch, damit Diffs in Versionskontrollen sauber bleiben.
TugQL ist die portable Abfrageebene. Es verbindet sich mit einer Datenabstraktionsschicht (DALgo), die es an den jeweiligen Speicher anpasst.
Weil TugQL die portable Teilmenge abbildet, verhält sich eine einmal geschriebene Abfrage identisch — egal ob auf einem Git-Repository (inGitDB), SQLite, PostgreSQL oder Firestore.
Die Sprache ist eine offene Spezifikation mit publiziertem Schema und Implementierungen in Go und TypeScript.
Die TugQL-Spezifikation, das kanonische JSON Schema (Draft 2020-12) und validierte Beispieldokumente. Ehemals DTQL.
Die Go-Bibliothek: Parsen, Validieren, Auflösen, Formatieren und Ausführen von TugQL-Abfragen mit verlustfreier Garantie.
DataTug hilft Entwicklern beim Erkunden von Datenbankschemata, Erstellen und Ausführen von Abfragen und Verstehen der Ergebnisse. Die Arbeit an Abfrageverträgen mit TugQL und TugQT läuft kontinuierlich. Erkunden Sie die Werkzeuge hinter DataTug.
TugQL macht eine Abfrage zu einem erstklassigen, überprüfbaren Artefakt — lesbar für Menschen, validiert von Werkzeugen und portabel auf allen Backends.