易于人类阅读
面向开发者的直观类 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 中呈现干净清晰的 diff,能像代码一样进行 code review。
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: <scalar> } |
| 数组 | { values: [ <scalar>, … ] } |
| 运算符 | ==, In, >, >=, <, <= |
| Limit / Offset | limit: <int> / offset: <int> |
表达式只设置 field、value 或 values 中的恰好一项,以此区分字段引用、常量或数组。
单个集合来源或连接树、选定列、过滤表达式、排序和分页。任何超出范围的内容都会被明确拒绝——绝不会悄悄丢弃。
集合源 · 选定列 · 比较及 And/Or 树 · 排序 · limit / offset · 连接 · 参数。表达式:字段引用、常量、数组。运算符:==, !=, In, >, >=, <, <=, And, Or。
无约束的笛卡尔积 · 厂商特定的私有 SQL 方言 · 缺乏模式约束的无类型修改操作。序列化时会直接报错,确保绝不破坏查询语义。
resolve(parse(text)) 生成确定性的查询树;序列化具有规范性,因此保存的查询能够在不同版本之间清晰呈现 diff。
TugQL 是通用的便携查询层。它映射到底层数据抽象层(DALgo),后者将其适配到底层的各种存储引擎中。
因为 TugQL 仅表达跨平台的通用子集,所以编写一次的查询在 Git 仓库(inGitDB)、嵌入式 SQLite 文件、PostgreSQL 数据库或 Firestore 上的行为完全一致。
该语言是一项开放规范,拥有公开发布的 Schema,以及 Go 和 TypeScript 实现。
DataTug 帮助开发者浏览数据库模式、构建并运行查询并深入分析结果。其基于 TugQL 和 TugQT 的查询协议研发正在持续推进。探索 DataTug 背后的工具。