CQL, изначально являвшийся частью BaDaaS, обеспечивает простое и безопасное сохранение и выполнение запросов к объектам.
Она построена на основе gorm, библиотеки, которая фактически обеспечивает функциональность ORM: сопоставление объектов с таблицами в базе данных SQL. Хотя gorm хорошо справляется со своей задачей благодаря автоматической миграции, выполнение запросов к этим объектам несколько ограничено, что вынуждает нас писать SQL-запросы напрямую, если они сложны. CQL стремится устранить эти ограничения с помощью системы запросов, которая:
Язык | Запрос |
---|---|
SQL | ВЫБЕРИТЕ города.* ИЗ городов Страны INNER JOIN ВКЛ. страны.id = города.country_id И страны.имя = "Франция" ГДЕ города.имя = "Париж" |
ГОРМ | БД.Где( "cities.name =?", "Париж", ).Объединяется( "Страна", БД.Где( "Страна.имя =?", "Франция", ), ).Найти(&города) |
ККЛ | cql.Query[модели.Город]( дБ, условия.Город.Имя.Is().Eq("Париж"), условия.Город.Страна( условия.Страна.Имя.Is().Eq("Франция"), ), ).НайтиОдин() |
Правда, цель его, по-видимому, та же:
100 % типобезопасный API DAO без интерфейса{}
Хотя gorm-gen предоставляет более структурированный API, чем gorm, для выполнения запросов, предоставляя такие методы, как:
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 версии 2.0.