高い可読性
人間にとって直感的なSQL風の記述構文に加え、ツール向けにはプレーンなYAML/JSONクエリツリー(TugQT)を提供。誰でも検証・理解・編集が可能です。
TugQLは、ポータブルで人間が読みやすいクエリ言語です。洗練されたSQL風テキスト構文と、プレーンなYAML/JSONとしてシリアライズ可能な1:1完全ロスレスの構造化クエリツリー(TugQT)を融合。クエリを保存し、手作業で編集し、バージョン管理で差分を確認し、複数のバックエンドで情報の欠落なく実行できます。
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はクエリを、保存・レビュー・バージョン管理が可能な、理解しやすく差分が取れるドキュメントへと変革します。あらゆるバックエンドで動作します。
人間にとって直感的なSQL風の記述構文に加え、ツール向けにはプレーンなYAML/JSONクエリツリー(TugQT)を提供。誰でも検証・理解・編集が可能です。
正規化処理により、元のクエリと構造的に同等なクエリを正確に復元。暗黙的に破棄されたり、変形されたりすることはありません。
完全なJSON Schema(Draft 2020-12)とともに公開。あらゆる言語のあらゆるツールで、実行前にクエリ構造を検証できます。
正規フォーマットと決定論的なツリーシリアライズ。保存されたクエリはGitで綺麗に差分が表示され、通常のコードと同様にレビューできます。
バックエンド間で移植可能な機能に絞り込んでいるため、1つのクエリがGit、SQLite、PostgreSQL、Firestore上でそのまま動作します。
あえてポータブルなサブセットに集中して厳密に定義。非互換な構文は危険に変換せず、明確にエラーとして拒絶します。
TugQLテキスト構文で記述し、構造化クエリツリーTugQTとして永続化・交換します。
ユーザーは親しみやすく簡潔なTugQLテキスト構文でクエリを記述します。パーサーはそれを機械可読な正規表現である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: <scalar> } |
| 配列 | { values: [ <scalar>, … ] } |
| 演算子 | ==, In, >, >=, <, <= |
| Limit / Offset | limit: <int> / offset: <int> |
式には field、value、values のいずれか1つだけを設定し、フィールド参照、定数、配列を識別します。
単一コレクションまたは結合ツリー、カラム選択、フィルタ式、並び替え、ページネーション。範囲外の構文は拒絶され、勝手に無視されることはありません。
コレクションソース · 選択カラム · 比較およびAnd/Orグループツリー · 並び替え · limit / offset · 結合 · パラメータ。式: フィールド参照、定数、配列。演算子: ==, !=, In, >, >=, <, <=, And, Or。
制限のない直積結合 · 特定DB専用のベンダー構文 · スキーマ管理外の非型付け更新演算子。セマンティクスが損なわれる前にシリアライズがエラー終了します。
resolve(parse(text)) は決定論的なクエリツリーを生成します。シリアライズも正規化されているため、保存されたクエリはGitで綺麗に差分比較できます。
TugQLはポータブルなクエリ層です。データ抽象化レイヤー(DALgo)を介して、背後にあるあらゆるストレージへと適合させます。
TugQLがポータブルなサブセットのみを表現するため、一度記述したクエリはGitリポジトリ(inGitDB)、SQLite、PostgreSQL、Firestoreのいずれに対しても一貫して動作します。
本言語はオープン仕様であり、スキーマが公開され、GoおよびTypeScriptによる実装が提供されています。
DataTugは開発者がデータベーススキーマを探索し、クエリを作成・実行し、結果を理解することを支援します。TugQLおよびTugQTとのクエリ連携は現在も進行中です。DataTugの基盤ツールを見る。
TugQLはクエリをファーストクラスのレビュー可能な成果物へと進化させます — 人間が読め、ツールで検証され、あらゆるバックエンドで動作します。