CQL เดิมเป็นส่วนหนึ่งของ BaDaaS ช่วยให้สามารถคงอยู่และสืบค้นอ็อบเจ็กต์ได้ง่ายและปลอดภัย
มันถูกสร้างขึ้นบน gorm ซึ่งเป็นไลบรารีที่ให้ฟังก์ชันการทำงานของ ORM: การแมปวัตถุกับตารางในฐานข้อมูล SQL แม้ว่า gorm จะทำงานได้ดีกับการย้ายข้อมูลแบบอัตโนมัติ แต่การดำเนินการสืบค้นบนอ็อบเจ็กต์เหล่านี้ก็มีข้อจำกัดอยู่บ้าง ทำให้เราต้องเขียนคำสั่ง SQL โดยตรงเมื่อมีความซับซ้อน CQL พยายามแก้ไขข้อจำกัดเหล่านี้ด้วยระบบสืบค้นที่:
ภาษา | แบบสอบถาม |
---|---|
SQL | เลือกเมือง* จากเมือง ประเทศที่เข้าร่วมภายใน country.id = cities.country_id และ country.name = "ฝรั่งเศส" WHERE cities.name = "ปารีส" |
กอร์ม | db.ที่ไหน( "เมืองชื่อ = ?", "ปารีส", ).ร่วม( "ประเทศ", db.ที่ไหน( "ชื่อประเทศ = ?", "ฝรั่งเศส", - ).ค้นหา(&เมือง) |
ซีคิวแอล | cql.Query[models.เมือง]( ฐานข้อมูล, เงื่อนไขCity.Name.Is().Eq("ปารีส"), เงื่อนไขเมืองประเทศ( เงื่อนไขCountry.Name.Is().Eq("ฝรั่งเศส"), - ).ค้นหาหนึ่ง() |
เป็นเรื่องจริงที่จุดมุ่งหมายดูเหมือนจะเหมือนกัน:
DAO API ที่ปลอดภัยต่อการพิมพ์ 100% โดยไม่มีอินเทอร์เฟซ{}
แม้ว่า 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 Public License เวอร์ชัน 2.0