Awalnya bagian dari BaDaaS, CQL memungkinkan persistensi dan kueri objek dengan mudah dan aman.
Itu dibangun di atas gorm, sebuah perpustakaan yang benar-benar menyediakan fungsionalitas ORM: memetakan objek ke tabel dalam database SQL. Meskipun gorm melakukan pekerjaan ini dengan baik dengan migrasi otomatisnya, maka melakukan kueri pada objek ini agak terbatas, memaksa kami untuk menulis kueri SQL secara langsung jika kueri tersebut rumit. CQL berupaya mengatasi keterbatasan ini dengan sistem kueri yang:
Bahasa | Pertanyaan |
---|---|
SQL | PILIH kota.* DARI kota INNER GABUNG negara AKTIF negara.id = kota.negara_id DAN negara.nama = "Prancis" WHERE kota.nama = "Paris" |
GORM | db.Dimana( "kota.nama =?", "Paris", ).Bergabung( "Negara", db.Dimana( "Negara.nama =?", "Perancis", ), ).Temukan(&kota) |
CQL | cql.Query[model.Kota]( db, kondisi.Kota.Nama.Is().Eq("Paris"), kondisi.Kota.Negara( kondisi.Negara.Nama.Is().Eq("Prancis"), ), ).TemukanSatu() |
Memang benar bahwa tujuannya tampaknya sama:
DAO API yang 100% aman untuk tipe tanpa antarmuka{}
Meskipun gorm-gen menyediakan API yang lebih terstruktur daripada gorm untuk melakukan kueri, ia menyediakan metode seperti:
Where ( conds ... gen . Condition ) IUserDo
kita dapat melihat dari tanda tangan ini bahwa, misalnya, metode Where menerima parameter bertipe gen.Condition. Dengan cara ini, kondisi dari model yang berbeda dapat digabungkan tanpa menimbulkan kesalahan kompilasi:
u := query . User
c := query . Company
user , err := u . Where ( c . Name . Eq ( "franco" )). First ()
yang akan menghasilkan kesalahan runtime selama eksekusi SQL yang dihasilkan:
SELECT * FROM `users` WHERE `companies`.`name` = "franco"
no such column: companies.name
Oleh karena itu, cql memutuskan untuk melangkah lebih jauh dalam keamanan tipe dan memeriksa apakah kondisinya adalah model yang benar, bahwa nilai yang dibandingkan memiliki tipe yang sama, bahwa model disertakan dalam kueri dan banyak lagi, memastikan bahwa kesalahan runtime akan terjadi. tidak dibangkitkan.
https://compiledquerylenguage.readthedocs.io/en/latest/
Lihat bagian ini untuk melihat pedoman kontribusi cql.
CQL Dilisensikan di bawah Lisensi Publik Mozilla Versi 2.0.