CQL war ursprünglich Teil von BaDaaS und ermöglicht die einfache und sichere Persistenz und Abfrage von Objekten.
Es basiert auf gorm, einer Bibliothek, die tatsächlich die Funktionalität eines ORM bietet: Objekte zu Tabellen in der SQL-Datenbank zuordnen. Obwohl Gorm diese Aufgabe mit seiner automatischen Migration gut erledigt, ist die Durchführung von Abfragen für diese Objekte etwas eingeschränkt, was uns dazu zwingt, SQL-Abfragen direkt zu schreiben, wenn sie komplex sind. CQL versucht, diese Einschränkungen mit einem Abfragesystem zu beseitigen, das:
Sprache | Abfrage |
---|---|
SQL | Städte auswählen.* AUS Städten INNER JOIN Länder EIN Länder.id = Städte.Land_ID UND Länder.name = "Frankreich" WO Städte.name = "Paris" |
GORM | db.Where( "städte.name = ?", "Paris", ).Joins( "Land", db.Where( "Land.name = ?", "Frankreich", ), ).Suchen(&Städte) |
CQL | cql.Query[models.City]( db, Conditions.City.Name.Is().Eq("Paris"), Bedingungen.Stadt.Land( Conditions.Country.Name.Is().Eq("Frankreich"), ), ).FindOne() |
Zwar scheint das Ziel dasselbe zu sein:
100 % typsichere DAO-API ohne Schnittstelle{}
Obwohl gorm-gen eine strukturiertere API als gorm zum Durchführen von Abfragen bietet, bietet es Methoden wie:
Where ( conds ... gen . Condition ) IUserDo
Anhand dieser Signaturen können wir erkennen, dass beispielsweise die Where-Methode Parameter vom Typ gen.Condition empfängt. Auf diese Weise könnten Bedingungen aus verschiedenen Modellen gemischt werden, ohne dass es zu einem Kompilierungsfehler kommt:
u := query . User
c := query . Company
user , err := u . Where ( c . Name . Eq ( "franco" )). First ()
was bei der Ausführung des generierten SQL zu einem Laufzeitfehler führen würde:
SELECT * FROM `users` WHERE `companies`.`name` = "franco"
no such column: companies.name
Aus diesem Grund beschließt cql, bei der Typsicherheit noch einen Schritt weiter zu gehen und zu prüfen, ob die Bedingungen dem richtigen Modell entsprechen, ob die verglichenen Werte vom gleichen Typ sind, ob die Modelle in der Abfrage enthalten sind und vieles mehr, um sicherzustellen, dass ein Laufzeitfehler auftritt nicht erhoben werden.
https://compiledquerylenguage.readthedocs.io/en/latest/
In diesem Abschnitt finden Sie die CQL-Beitragsrichtlinien.
CQL ist unter der Mozilla Public License Version 2.0 lizenziert.