C++11 Datenbanken API
Verfasst: 17.10.2011, 00:38
Ahoi,
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:
In Zukunft könnte der Datenbank Manager mit diesen Informationen auch Backups o.Ä. durchführen. Eine Datenbankmigration ähnlich wie in Ruby on Rails wäre auch denkbar.
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.
Ihr seht also hier wird kein SQL mehr geschrieben. Intern wird das ganze dann in "INSERT INTO "Items" (identifier, type, parent) VALUES (23, 2, 123);" (etc) umgewandelt. Aber sowas will man ja nicht jedes mal manuell zusammenfrickeln. Hab da teilweise schon zick Probleme gehabt weil z.B. irgendwo ein Komma gefehlt hat. Meine API verhindert das :)
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.
Natürlich können auch hier wieder Mittels Initializerlisten mehrere Bedingungen aneinander gehängt werden!
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?
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?