원래 BaDaaS의 일부인 CQL을 사용하면 객체에 대한 쉽고 안전한 지속성과 쿼리가 가능합니다.
이는 ORM의 기능(개체를 SQL 데이터베이스의 테이블에 매핑)을 실제로 제공하는 라이브러리인 gorm을 기반으로 구축되었습니다. gorm은 자동 마이그레이션을 통해 이 작업을 잘 수행하지만 이러한 객체에 대한 쿼리를 수행하는 것은 다소 제한되어 있어 복잡한 경우 SQL 쿼리를 직접 작성해야 합니다. CQL은 다음과 같은 쿼리 시스템을 통해 이러한 제한 사항을 해결하려고 합니다.
언어 | 질문 |
---|---|
SQL | 도시를 선택하세요.* 도시에서 INNER JOIN 국가 ON 국가.ID = 도시.국가_ID AND 국가.이름 = "프랑스" 어디 city.name = "파리" |
GORM | db.어디( "도시.이름 = ?", "파리", ).조인( "국가", db.어디( "국가.이름 = ?", "프랑스", ), ).찾기(&도시) |
CQL | cql.Query[모델.도시]( DB, 조건.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에 따라 라이센스가 부여됩니다.