في الأصل جزء من BaDaaS، يتيح CQL استمرارًا واستعلامًا سهلاً وآمنًا عن الكائنات.
إنها مبنية على مكتبة gorm، التي توفر في الواقع وظيفة ORM: تعيين الكائنات إلى الجداول في قاعدة بيانات SQL. على الرغم من أن gorm يقوم بهذه المهمة بشكل جيد من خلال ترحيله التلقائي، فإن تنفيذ الاستعلامات على هذه الكائنات يكون محدودًا إلى حد ما، مما يجبرنا على كتابة استعلامات SQL مباشرةً عندما تكون معقدة. تسعى CQL إلى معالجة هذه القيود من خلال نظام استعلام يقوم بما يلي:
لغة | استفسار |
---|---|
SQL | اختر المدن.* من المدن بلدان الانضمام الداخلي ON countries.id=city.country_id AND اسم البلدان = "فرنسا" أين اسم المدن = "باريس" |
جورم | ديسيبل أين ( "اسم المدن =؟"، "باريس"، ).ينضم( "دولة"، ديسيبل أين ( "اسم البلد =؟"، "فرنسا"، )، ).بحث عن(&المدن) |
CQL | cql.Query[models.City]( ديسيبل, الشروط.City.Name.Is().Eq("باريس"), الشروط.المدينة.البلد( الشروط.Country.Name.Is().Eq("فرنسا"), )، ).فايندون() |
وصحيح أن هدفها يبدو واحدًا:
واجهة برمجة تطبيقات DAO الآمنة بنسبة 100% بدون واجهة{}
على الرغم من أن gorm-gen يوفر واجهة برمجة تطبيقات أكثر تنظيمًا من 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.