Originalmente parte do BaDaaS, o CQL permite persistência e consulta de objetos de maneira fácil e segura.
Ele é construído sobre gorm, uma biblioteca que realmente fornece a funcionalidade de um ORM: mapear objetos para tabelas no banco de dados SQL. Embora o gorm faça bem esse trabalho com sua migração automática, a execução de consultas nesses objetos é um tanto limitada, forçando-nos a escrever consultas SQL diretamente quando elas são complexas. CQL procura resolver essas limitações com um sistema de consulta que:
Linguagem | Consulta |
---|---|
SQL | SELECIONE cidades.* DAS cidades INNER JOIN países ON países.id = cidades.country_id E países.name = "França" ONDE cidades.name = "Paris" |
GORM | banco de dados.Onde( "cidades.nome =?", "Paris", ).Junta( "País", banco de dados.Onde( "País.nome =?", "França", ), ).Encontrar(&cidades) |
CQL | cql.Query[modelos.Cidade]( banco de dados, condições.Cidade.Nome.Is().Eq("Paris"), condições.Cidade.País( condições.Country.Name.Is().Eq("França"), ), ).FindOne() |
É verdade que o seu objectivo parece ser o mesmo:
API DAO 100% segura, sem interface{}
Embora gorm-gen forneça uma API mais estruturada do que gorm para realizar consultas, fornecendo métodos como:
Where ( conds ... gen . Condition ) IUserDo
podemos ver nestas assinaturas que, por exemplo, o método Where recebe parâmetros do tipo gen.Condition. Desta forma, condições de diferentes modelos poderiam ser misturadas sem gerar erro de compilação:
u := query . User
c := query . Company
user , err := u . Where ( c . Name . Eq ( "franco" )). First ()
o que geraria um erro de execução durante a execução do SQL gerado:
SELECT * FROM `users` WHERE `companies`.`name` = "franco"
no such column: companies.name
Por conta disso, cql decide ir mais longe na segurança de tipo e verificar se as condições são do modelo correto, se os valores comparados são do mesmo tipo, se os modelos estão incluídos na consulta e muito mais, garantindo que um erro de tempo de execução ocorrerá não ser levantado.
https://compiledquerylenguage.readthedocs.io/en/latest/
Consulte esta seção para visualizar as diretrizes de contribuição do cql.
CQL é licenciado sob a Licença Pública Mozilla Versão 2.0.