ich hab über das Wochenende mir mal C++11 etwas genauer angeschaut. Am meisten hab ich mich dabei über die neuen "initializer lists" gefreut. Damit kann man sehr einfach komplexe Strukturen basteln. Jetzt habe ich damit eine SQL-API geschrieben mit der man eigentlich garkein SQL mehr braucht. Hier mal ein kleiner Einblick.
Zuerst definiert man Relationen im Code (könnte man ja auch von einer XML auslesen oder so). Der Sinn dahinter ist, das der Datenbankmanager deinen Syntax überprüfen kann und Fehler auswirft wie "Feld 'xy' in Relation 'ij' gibt es nicht".
Das z.B. sieht so aus:
Code: Alles auswählen
map<string, SDataField> datafields;
datafields["identifier"] = SDataField(Unsigned64);
datafields["type"] = SDataField(Unsigned8);
datafields["parent"] = SDataField(Unsigned64);
DatabaseManager.registerRelation("Items", datafields);
Nun kann man sehr einfach zB neue Werte in die Tabelle einfügen. Eben mit den oben erwähnten Initializerlisten. Das sieht zB so aus.
Code: Alles auswählen
DatabaseManager.insertTuple("Items", {{"identifier" , id}, {"parent", parent},{"type", ItemType_Weapon}});
Sehr schön finde ich auch das überladen von Operatoren zum erstellen von Bedigungen (habe die klasse 'S' für Statements genannt). Das Item mit der ID 25 zu entfernen würde dann so aussehen.
Code: Alles auswählen
DatabaseManager.removeTuples("Items", S("identifier")==25);
Intern werden Templates benutzt mit bestimmten Spezialisierungen. Zum Beispiel werden bei einem string automatisch die Anführungszeichen hinzugefügt wie es in SQL benötigt wird.
Das coolste ist aber mMn dass es eine solche Libary ermöglichen würde komplett auf SQL verzichten. Also irgend eine andere Software zum Ablegen der Daten zu verwenden. Ohne SQL-Verarbeitung im Datenverwaltungssystem sollte auch eine Menge Overhead wegfallen. Gibts solche Konzepte irgendwo schon? ( kenn mich mit den ganzen NoSQL Datenbanken nicht so aus)
Meine Frage ist. Was haltet ihr davon? Die kleine Bib hat natürlich auch eine schöne C++ API für "normalen" Zugriff per SQL der unabhängig von der Implementierung ( zurzeit nur libpq) ist.
Gäbe es Interesse an dem Code?