元々は BaDaaS の一部であった CQL により、オブジェクトの永続化とクエリが簡単かつ安全に実行できるようになります。
これは、オブジェクトを SQL データベース内のテーブルにマッピングするという ORM の機能を実際に提供するライブラリである gorm の上に構築されています。 gorm は自動移行でこのジョブを適切に実行しますが、これらのオブジェクトに対するクエリの実行はある程度制限されており、複雑な場合は SQL クエリを直接記述する必要があります。 CQL は、次のクエリ システムを使用してこれらの制限に対処しようとします。
言語 | クエリ |
---|---|
SQL | 都市を選択してください。* 都市から INNER JOIN がオンの国 国.id = 都市.国_id AND country.name = "フランス" WHERE city.name = "パリ" |
ゴーム | db.どこ( "都市名 = ?", "パリ"、 ).結合( "国"、 db.どこ( "国名 = ?", "フランス"、 )、 ).Find(&Cities) |
CQL | cql.Query[モデル.都市]( データベース、 条件.City.Name.Is().Eq("パリ"), 条件.都市.国( 条件.国.名前.Is().Eq("フランス"), )、 ).FindOne() |
確かに、その目的は同じであるようです。
インターフェースなしの 100% タイプセーフな DAO API{}
gorm-gen はクエリを実行するために gorm よりも構造化された API を提供しますが、次のようなメソッドが提供されます。
Where ( conds ... gen . Condition ) IUserDo
このシグネチャから、たとえば、Where メソッドが gen.Condition 型のパラメータを受け取ることがわかります。このようにして、コンパイル エラーを生成せずに、さまざまなモデルの条件を混合できます。
u := query . User
c := query . Company
user , err := u . Where ( c . Name . Eq ( "franco" )). First ()
これにより、生成された SQL の実行中にランタイム エラーが生成されます。
SELECT * FROM `users` WHERE `companies`.`name` = "franco"
no such column: companies.name
このため、CQL は型安全性をさらに強化し、条件が正しいモデルであること、比較された値が同じ型であること、モデルがクエリに含まれていることなどを確認して、実行時エラーが発生しないようにすることを決定します。上げられない。
https://compiledquerylenguage.readthedocs.io/en/latest/
CQL 貢献ガイドラインを確認するには、このセクションを参照してください。
CQL は、Mozilla Public License バージョン 2.0 に基づいてライセンスされています。