Açık şartname · eski adıyla DTQL

Kolayca okunan, diff alınan, güvenilir sorgular.

TugQL, taşınabilir ve insan tarafından okunabilir bir sorgu dilidir. Sade, SQL benzeri metin sözdizimini, düz YAML/JSON olarak serileştirilen 1:1 kayıpsız yapılandırılmış sorgu ağacı (TugQT) ile birleştirir. Bir sorguyu kaydedin, elle düzenleyin, versiyon kontrolünde diff alın ve herhangi bir veri kaybı yaşamadan farklı veritabanlarında çalıştırın.

Şartnameyi oku Örneğe göz at $ go get github.com/dal-go/dalgo/dtql
query.tugql TugQL
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
01 — Neden TugQL

Sorgu bir veridir. Ona veri gibi davranın.

TugQL, bir sorguyu depolayabileceğiniz, inceleyebileceğiniz ve sürümlendirebileceğiniz anlaşılır ve diff alınabilir bir belgeye dönüştürür — her arka uçta taşınabilir.

İnsan tarafından okunabilir

Geliştiriciler için sezgisel SQL benzeri yazım sözdizimi ve araçlar için yalın YAML/JSON sorgu ağacı (TugQT) — herkes inceleyebilir, anlayabilir ve düzenleyebilir.

Kayıpsız çift yönlü dönüşüm

Kanonik sadeleştirme işlemi, kaynakla yapısal olarak tamamen aynı sorguları yeniden oluşturur. Hiçbir ifade sessizce atılmaz veya bozulmaz.

Şema doğrulamalı

Tam JSON Schema doğrulaması (draft 2020-12) ile yayınlanmıştır. Her dildeki herhangi bir araç, sorguyu çalıştırmadan önce yapısını doğrulayabilir.

Diff dostu

Kanonik biçimlendirme ve deterministik ağaç serileştirme. Kaydedilen sorgular Git'te temiz diff verir ve standart kod gibi incelenir.

Tasarım gereği taşınabilir

TugQL, farklı veritabanları arasında ortak olan yetenekleri sunar: tek bir sorgu Git, SQLite, PostgreSQL veya Firestore üzerinde değişmeden çalışır.

Tam SQL değil

Bilinçli olarak hedeflenmiş, iyi tanımlanmış taşınabilir bir alt küme. Taşınabilir olmayan yapılar tehlikeli şekilde dönüştürülmek yerine açıkça reddedilir.

02 — Örnek

TugQL ve TugQT olarak bir sorgu

TugQL metin sözdizimiyle yazın; TugQT yapılandırılmış sorgu ağacı olarak saklayın veya paylaşın.

Kullanıcılar sorguları açık, derli toplu ve SQL benzeri TugQL metin sözdizimiyle yazar. Arka planda ayrıştırıcı, makine tarafından okunabilen kanonik TugQT (Tug Query Tree) temsilini üretir.

Her düğüm sözdizimi ile ağaç arasında deterministik olarak eşlenir. Hatalı girişler veya şema ihlalleri, kaynak metindeki tam konumu belirten açıklayıcı tanılama mesajları döndürür.

İsimlendirme hakkında not: TugQL daha önce DTQL olarak biliniyordu. Mevcut DTQL belgeleri ve sorgu dosyaları geriye dönük uyumluluk için desteklenmeye devam etmektedir.
users.tugqt.yaml YAML
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
03 — düğüm → TugQT

Eşleme

Kapsamdaki her sorgu düğümünün tanımlanmış yapılandırılmış bir karşılığı vardır.

Sorgu düğümüTugQT karşılığı
Kök koleksiyon üzerinde Fromfrom: { name, alias? }
Sütuncolumns: altındaki öğe — ifade ve isteğe bağlı as:
Karşılaştırma{ op, left, right }
Grup koşulu (And){ and: [ … ] }
Grup koşulu (Or){ or: [ … ] }
Sıralama ifadesiorderBy: altındaki öğe — ifade ve isteğe bağlı desc: true
Alan başvurusu{ field: <isim> }
Sabit değer{ value: <skaler> }
Dizi{ values: [ <skaler>, … ] }
İşleç==, In, >, >=, <, <=
Limit / Offsetlimit: <int> / offset: <int>

Bir ifade, field, value veya values alanlarından yalnızca birini belirterek alan başvurusu, sabit veya dizi ayrımını yapar.

04 — desteklenen alt küme

TugQL neleri kapsar

Tekil koleksiyonlar veya birleşimler, seçilen sütunlar, filtreler, sıralama ve sayfalama. Kapsam dışındaki her şey reddedilir — asla sessizce yok sayılmaz.

Kapsam dahilinde

Koleksiyon kaynakları · seçilen sütunlar · karşılaştırma ve And/Or grupları · sıralama · limit / offset · join birleştirmeleri · parametreler. İfadeler: alan, sabit, dizi. İşleçler: ==, !=, In, >, >=, <, <=, And, Or.`

Kapsam dışı (reddedilen)

Sınırsız kartezyen çarpımlar · veritabanına özel dialekt sözdizimleri · şema dışı tipsiz veri değiştirme işleçleri. Serileştirme, sorgu anlambilimini kaybetmektense hata verir.

Kayıpsız & kanonik

resolve(parse(text)) deterministik sorgu ağaçları üretir; serileştirme kanoniktir, bu sayede kayıtlı sorgular sürümler arasında temiz diff verir.

05 — nerelerde çalışır

Bir sorgu, çok sayıda arka uç

TugQL, taşınabilir sorgu yüzeyidir. Kendisini alttaki herhangi bir depolama sistemine uyarlayan bir veri soyutlama katmanına (DALgo) bağlanır.

TugQL taşınabilir alt kümeyi ifade ettiği için, bir kez yazılan bir sorgu Git deposu (inGitDB), SQLite, PostgreSQL veya Firestore üzerinde tamamen aynı şekilde çalışır.

TugQLtaşınabilir sorgu dili
DALgoveri soyutlama katmanı
inGitDB SQLite PostgreSQL Firestore
Ürün geliştirmede kullanım

DataTug ile verileri keşfedin ve sorgulayın.

DataTug, geliştiricilerin veritabanı şemalarını keşfetmelerine, sorgular oluşturup çalıştırmalarına ve sonuçları analiz etmelerine yardımcı olur. TugQL ve TugQT ile sorgu sözleşmeleri geliştirmeleri devam etmektedir. DataTug'ın arkasındaki araçları keşfedin.

Kaydet. Diff al. Her yerde çalıştır.

TugQL, bir sorguyu birinci sınıf ve incelenebilir bir yapıya dönüştürür — insanlar tarafından okunabilir, araçlarla doğrulanabilir ve tüm arka uçlarda taşınabilir.