Salut !
ndb est une interface générique qui permet de se connecter à n’importe quel moteur de données (SGBD ou autre) Les requêtes sont écrites en C++ et peuvent être exécutées sur différents moteurs de données en changeant un seul paramètre. Les modèles de données sont définis et accessibles compile-time . MySQL et MongoDB sont encore en cours de dev/test.
Tester : https://github.com/ads00/ndb
Features
- Header only
- Requêtes full C++ et génériques
- Support de tout type de moteur de données
- Expressions SQL générées compile-time
- Gestion des types personnalisable
- Accès aux champs via des structures
- Déduction d’expressions partielles
Exemple
Database (avec macros)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ndb_table(movie, ndb_field(id, int, 8), ndb_field(name, std::string, 255) ) ndb_table(music, ndb_field(id, int, 8), ndb_field(image, std::string, 255) ) ndb_model(library, movie, music) ndb_project(my_project, ndb_database(alpha, library, ndb::sqlite), ndb_database(zeta, library, ndb::mongo) ) |
Requêtes
1 2 3 4 | ndb::query<dbs::zeta>() << ( movie.id, movie.image ); // get ndb::query<dbs::zeta>() << ( movie.id == a && movie.name == b ); // get all par condition ndb::query<dbs::zeta>() + ( movie.id = 3, movie.name = "test" ); // add ndb::query<dbs::zeta>() - ( movie.id == 3 ); // del |
Résultats
1 2 3 4 5 | for (auto& line : ndb::query<dbs::zeta>() << (movie.id, movie.name) ) { std::cout << "\nID : " << line[movie.id]; std::cout << "\nName : " << line[movie.name]; } |
Minimal
Un exemple avec une base de donnée libray en utilisant le modèle collection et une table movie
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include "my_database.h" int main() { const auto& movie = ndb::models::collection.movie; // alias ndb::initializer<ndb::sqlite> init; ndb::connect<dbs::library>(); ndb::query<dbs::library>() + (movie.name = "Interstellar", movie.duration = 2.49_h) ); return 0; } |
+5
-0