Зрозумілий людині
Інтуїтивний SQL-подібний синтаксис для людей плюс просте дерево запиту YAML/JSON (TugQT) для інструментів — кожен може перевірити та відредагувати.
TugQL — портативна, людиночитана мова запитів. Вона поєднує чистий SQL-подібний синтаксис із еквівалентним представленням 1:1 без втрат у вигляді структурованого дерева запитів (TugQT), серіалізованого у звичайний YAML/JSON. Зберігайте запит, редагуйте вручну, переглядайте diff у системі контролю версій та виконуйте на різних бекендах без втрат.
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 перетворює запит на зрозумілий документ із підтримкою diff, який можна зберігати, рецензувати та версіонувати — портативний на будь-якому бекенді.
Інтуїтивний SQL-подібний синтаксис для людей плюс просте дерево запиту YAML/JSON (TugQT) для інструментів — кожен може перевірити та відредагувати.
Канонічна нормалізація відтворює запити, структурно ідентичні вихідним. Жодна деталь не втрачається і не спотворюється непомітно.
Опубліковано з повною валідацією через JSON Schema (draft 2020-12). Будь-який інструмент будь-якою мовою може перевірити структуру запиту.
Канонічне форматування та детермінована серіалізація. Збережені запити дають чистий diff у Git і перевіряються як звичайний код.
TugQL надає функціональність, універсальну між різними сховищами: запит без змін працює у Git, SQLite, PostgreSQL або Firestore.
Свідомо сфокусована, чітко окреслена портативна підмножина. Непереносні конструкції відхиляються явно, а не транслюються з ризиками.
Створюйте у текстовому синтаксисі TugQL; зберігайте чи передавайте як структуроване дерево TugQT.
Розробники пишуть запити в текстовому синтаксисі TugQL — наочному, компактному та схожому на SQL. Усередині парсер створює TugQT (Tug Query Tree) — канонічне машиночитане представлення.
Кожен вузол детерміновано співвідноситься між синтаксисом і деревом. Помилки введення або порушення схеми повертають точну діагностику з вказівкою місця в тексті.
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
Кожен підтримуваний вузол запиту має чітко визначене структуроване представлення.
| Вузол запиту | Представлення в TugQT |
|---|---|
| From по кореневій колекції | from: { name, alias? } |
| Колонка | елемент у columns: — вираз із необов’язковим as: |
| Порівняння | { op, left, right } |
| Групова умова (And) | { and: [ … ] } |
| Групова умова (Or) | { or: [ … ] } |
| Вираз сортування | елемент у orderBy: — вираз із необов’язковим desc: true |
| Посилання на поле | { field: <name> } |
| Константа | { value: <скаляр> } |
| Масив | { values: [ <скаляр>, … ] } |
| Оператор | ==, In, >, >=, <, <= |
| Limit / Offset | limit: <int> / offset: <int> |
Вираз встановлює рівно одне з полів: field, value або values, що розрізняє посилання на поле, константу або масив.
Колекції та об’єднання, вибір колонок, фільтрація, сортування та пагінація. Усе за межами відхиляється — і ніколи не ігнорується мовчки.
Джерела колекцій · вибрані колонки · порівняння та дерева And/Or · сортування · limit / offset · joins · параметри. Вирази: поле, константа, масив. Оператори: ==, !=, In, >, >=, <, <=, And, Or.
Необмежені декартові добутки · діалектний синтаксис окремих СКБД · нетипізовані оператори модифікації поза схемою. Серіалізація завершується помилкою, щоб не втратити семантику запиту.
resolve(parse(text)) генерує детерміновані дерева; серіалізація канонічна, тому збережені запити дають чистий diff при порівнянні версій.
TugQL — це портативний інтерфейс запитів. Він спирається на шар абстракції даних (DALgo), що адаптує його до будь-якого сховища.
Оскільки TugQL визначає портативну підмножину, одного разу написаний запит поводиться однаково як над Git-репозиторієм (inGitDB), так і в SQLite, PostgreSQL або Firestore.
Мова є відкритою специфікацією з опублікованою схемою та реалізаціями мовами Go і TypeScript.
Специфікація TugQL, канонічна JSON Schema (draft 2020-12) та перевірені приклади документів. Раніше DTQL.
Бібліотека для Go: парсинг, валідація, резолвінг, форматування та виконання запитів TugQL з гарантією оборотності без втрат.
DataTug допомагає розробникам досліджувати схеми баз даних, створювати та виконувати запити й розуміти результати. Робота над контрактами запитів TugQL та TugQT активно триває. Дізнайтеся більше про інструменти DataTug.
TugQL робить запит повноцінним артефактом — зрозумілим для людей, валідованим інструментами та портативним для будь-яких баз даних.