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.
Mais je me demande comment récupérer les résultats sans utiliser les index.
Soit je crée un système d'alias pour les champs accessibles via une structure pour le scope actuel.
Soit on accède au champs via son expression ce qui donnerait
ndb_alias(count, ndb::count(movie.id), now, ndb::now()); // création de la structure
ndb::query<zeta>() << (alias.now(), alias.count(), movie.name);
line[alias.now]; // accès
Je suis en train de refaire la partie expressions dans le but d'ajouter les alias, les requêtes préparées, les formes d'expressions et les requêtes dynamiques.
Je cherche quelqu'un qui serait intéressé par l'implémentation de l'interface pour un moteur de stockage utilisant des expressions différentes de SQL comme bson ou même un moteur qui effectue les opérations de l'expression directement sur le moteur (un tuple engine par exemple)
La syntaxe va légèrement changer pour devenir plus explicite (tout en restant générique) et permettre la construction de requêtes dynamiques et préparées.
La déduction sera mise de côté, c'est une feature qui demande plus d'opérations à la compilation (ce qui peut gêner les gens qui n'ont pas de supercalculateur) et qui demande plus de temps de maintenance (principalement à cause de msvc).
La feature sera peut-être rajouter plus tard mais de manière optionnelle.
J'ajouterai à la place plus de fonctions utilitaires permettant d'effectuer des requêtes standards.
constexpr auto expr = ndb::statement << ndb::del << ndb::source(movie) << ndb::filter(movie.id == 3);
ndb::dynamic_statement<db> stmt;
stmt << ndb::get(movie.id, movie.name) << ndb::source(movie) << ndb::filter;
for (int i = 0; i < 3; ++i)
{
stmt << (movie.id == 3);
if (i < 3 - 1) stmt << ndb::logical_and;
}
std::cout << "\ndyn output : " << stmt.native();
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.