Partage
  • Partager sur Facebook
  • Partager sur Twitter

Un wrapper sqlite pour c++

https://tentacule.be/fossil/cpp-sql_wrapper

11 décembre 2014 à 10:55:44

Bonjours chers camarades,
Je vais au travers de ce post vous parler d'un projet de wrapper c++ pour SQLite, vous avez mal à la tête rien qu'à ces mots ne paniquez pas c'est normal, et ne vous inquiétez pas, le reste est pire. Si vous êtes pressés tout est là https://tentacule.be/fossil/cpp-sql_wrapper/ et si vous êtes moins pressés je vais sagement suivre le plan des présentations du site du zéro.


Moi, mon égo et moi même

Je suis à mes heures perdus chercheur en bio-informatique, vaste travail qui consiste à boire du café et à insulter les ordinateurs. La biologie ce n'est pas que mettre son nez dans du crottin pour compter les asticots, elle génère des tonnes de connaissances et de données. Il y en a tellement qu'un petit cerveau humain est bien trop faible pour en faire quelque chose, d'où l'utilisation d'ordinateurs pour les traiter. Mon travail consiste à organiser des connaissances dans des modèles, des données dans des bases de données, et à vérifier que les connaissances soient bien conformes aux données. Ce travail implique notamment de travailler avec des bases de données, d'où le développement de ce wrapper.

J'ai fait la plus part de ce projet tout seul, sauf une partie sur l'application d'une fonction a un tuple, dont la solution m'a été gentiment donnée par jo_link_noir, un membre de ce site.

Mon projet est un wrapper c++ pour sqlite qui sers à faire marcher sqlite avec les fonctions cools du c++, on ne s'en serait pas douté monsieur Lapalisse.

En savoir plus sur le projet

Genèse

Je ai développé ce projet car la plus part des wrappers que j'ai pu voir ne permettent de ranger les données des requêtes que dans un format particulier, ce qui a tendance a être pénible parce qu'on écrit des tas de code de glue, et qu'on a des perfs pourries. J'ai donc tenté de faire en sorte que ce soit les templates qui fassent tout ce joyeux désordre pour moi, avec le coût à l’exécution le plus faible possible.

L'idée m'est venue parce que j'en avais marre de m'écrire du code pourris et incompréhensible à partir de l'interface de base de sqlite qui a l’avantage d'être aussi obscure que mal documentée. Et comme j'utilise sqlite pour plein de trucs (stocker des données, m'interfacer avec R...) et bien j'ai eu besoin d'écrire cette lib.

J'ai été drôlement motivé parce que courir les filles et boire des bières c'est pas que pour les nases, et malheureusement ça se fait assez mal le cul posé sur sa chaise de bureau, alors il a bien fallu que je me creuse un peu le ciboulot pour tenter de gagner du temps.

Et puis bon, comme c'est important d’épater la galerie, et comme tester 150 wrappers différents pour se rendre compte qu'au final ils sont tous un peu tout pourris, je me suis dit que ce serait sympa de mettre mon code a disposition de la communauté. Ca fera un wrapper pourris de plus certes, il reste peut être encore des tas de bugs, mais au moins comme j'en aie besoin pour mon boulot, je vais continuer a le maintenir pendant encore quelques temps.

Généralités et avancement

Le projet est de nature informatique, ce qui n'est, quand on y réfléchit bien, pas très très naturel.

Il permet d’exécuter des requêtes dans sqlite et de récupérer des données avec une interface utilisateur simple et générique.

Le code est du code template, ce qui évite d'avoir des tas de conversions inutiles à l'exécution, et épargne à l'utilisateur l'écriture de code de glue infernal.

Le projet ne fait pas de café.

Objectifs

Je veux faire:
- Diffuser le programme, je me suis arraché les cheveux a l'écrire, c'est injuste si personne s'arrache les cheveux a l'utiliser.
- Améliorer le code existant, en particulier en écrivant des tests
- Avoir une implémentation multi-thread proof du wrapper (ce qui implique d'avoir de la doc compréhensible sur sqlite en multi thread).
- Améliorer la gestion des dates.

Je veux pas :
- Gagner des sous !!! Le code est sous LGPL et je veux pas de donations (même en bières, payes ton altruisme).
- Conquérir le monde en construisant l'usine à gaz ultime. J'aimerais bien que ce projet reste simple et de petite taille

No future:
Pour l'avenir, j'espère que ce code sera utilisé. Déjà parce que çà sauvera quelques prise de choux aux personnes qui veulent utiliser sqlite, et ensuite car ça me permettra d'améliorer mon code. Je serai aussi content de ne pas être le seul contributeur, coder c'est mieux avec les copains, et puis si un météore me tombe dessus, ce serait dommage que le projet finisse aux oubliettes. Je compte donc faire ce que je peux pour mettre les clefs dans les mains de la communauté, ce qui serait encore plus cool si cette dernière n'était pas composée que de moi et moi même. En attendant, je développe les fonctionnalités au fur et à mesure de mes besoins mais faut pas hésiter à demander des trucs.

Le projet et son originalité

Mon projet vise les gens qui veulent utiliser sqlite en C++, on ne le répètera jamais assez, c'est d'ailleurs exactement ce que veut dire un wrapper de sqlite en C++.

Il vise les gens qui aiment bien ce système de gestion de base de données, mais qui détestent se prendre le choux avec des machins bas niveaux écrits en C, et les gens qui comprennent rien à la doc de sqlite.

Dans l'océan d'internet mon projet est un petit dépot fossil ici : https://tentacule.be/fossil/cpp-sql_wrapper . Parmi les autres wrappers sqlite, c'est à ma connaissance le seul qui fonctionne avec des templates, des tuples, et tous les trucs modernes cools du c++11. Il a l’avantage d'être maintenu, d'avoir de la doc, et d'être plus versatile que les autres wrappers. Il limite aussi les conversions entre différents formats de données, ce qui est drôlement pratique pour avoir de bonnes performances. En plus il est même pas relou à installer : on copie les fichiers à inclure, on les inclue, on linke avec libsqlite et voila.

D'ailleurs, rien ne vaux une preuve, depuis le temps que je me la pète...

#include <sqlwrapper/sqlite.hpp>

void example{
  //connect
  sqlwrapper::DbConnect_sqlite   con("test.sqlite3");
  sqlwrapper::Db_sqlite db(con);

  //create a table
  db.execute("CREATE TABLE test(i integer, s varchar)");

  //fill the table
  auto rowid = db.insertRow  ("insert into test values(?,?)", 5,"five");

  //get the table
  std::vector<std::tuple<int, std::string> > data;
  db.getTable("select * from test",data);

}

Les internautes iront chez moi parce que je suis sympa, que je fais des blagues nulles et que j'ai un poney. Les autres iront ici pour télécharger mon programme : https://tentacule.be/fossil/cpp-sql_wrapper

-
Edité par ledemonboiteux 20 janvier 2015 à 16:26:07

  • Partager sur Facebook
  • Partager sur Twitter

Un wrapper sqlite pour c++

× 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.
  • Editeur
  • Markdown