Le but du projet est de réaliser un mini Système de Gestion de Bases de Données, capable de répondre à des requêtes SQL très simplistes.
Les données
Les données seront stockées ainsi :
un dossier par base,
un fichier par table,
une ligne par entrée,
les champs sont séparés par des virgules.
Les données ne peuvent être que des suites de caractères alphanumériques. En particulier, les valeurs ne contiennent jamais d'espaces ou de symboles de ponctuation. La première ligne du fichier indique les noms des colonnes de la table, séparés par des virgules également.
Les requêtes seront tapées par l'utilisateur dans la console. Il y aura une requête par ligne, et chaque requête fera 200 caractères (fin de ligne et \0 compris) au maximum. Tout le programme est sensible à la casse (majuscules/minuscules).
Votre programme doit pouvoir répondre à trois types de requête. Le type de la requête est déterminé par le premier mot de celle-ci :
SELECT {colonne} FROM {table} WHERE {colonne}{opérateur}{colonne}
INSERT INTO {table} VALUES {valeur},{valeur},{valeur},...
ALTER TABLE <table> SET {colonne}={valeur} WHERE {colonne}{opérateur}{colonne}
Où :
{table} est le nom du fichier de données que l'on manipule,
{colonne} est le nom d'une colonne de ce fichier,
{valeur} est une suite de caractères alphanumériques,
{opérateur} est l'un des caractères = > < !
Exemples de requêtes:
SELECT nom FROM personnel WHERE age=42
INSERT INTO livres VALUES candide,voltaire
ALTER TABLE articles SET prix=10 WHERE promotion=1
Lorsque l'utilisateur tape une commande de type SELECT, votre moteur doit parcourir le fichier indiqué après FROM, et afficher le contenu de la colonne indiquée après SELECT si la condition après le WHERE est vérifiée.
Lorsqu'il entre une commande INSERTINTO, il faut insérer une nouvelle ligne dans la table donnée après INTO, contenant les valeurs données après VALUES.
Enfin, plus difficile, lorque l'utilisateur entre une commande ALTERTABLE, toutes les lignes du fichier indiqué après TABLE qui vérifient la condition du WHERE doivent être modifiées comme indiqué après le SET.
Les vérifications
L'intérêt d'un tel programme est qu'il ne doit surtout pas faire n'importe quoi ! Par exemple, si, dans une requête, on fait référence à une colonne inexistante, vous ne devez surtout rien faire et afficher un message d'erreur. D'une façon générale, toute requête dépourvue de sens, ne respectant pas la syntaxe, ou, de façon générale incorrecte, doit renvoyer un message d'erreur.
Énoncé
Écrivez le programme implémentant ce mini-moteur de mini-SQL !
Il n'y a pas de « niveaux » pour cette fois-ci. Chacun peut aller à son rythme : vous pouvez n'implémenter que les deux premier types de requêtes (oublier ALTER), ou améliorer le programme jusqu'à supporter totalement le SQL !
Bien entendu, il vous est interdit de recourir à SQLite ou une autre base de données. Le but est de tout refaire soi-même.
Si vous souhaitez plus de renseignements sur les défis, rendez vous sur le topic de recensement des défis, vous y trouverez également les règles principales.
Cet exercice a été écrit par GuilOooo, merci à lui !
Je vais essayer de participer mais je ne garantie rien, surtout que c'est assez chaud je trouve.
En fait, c'est une sorte de recherche de sous-chaine dans un fichier selon des arguments précis non ?
C'est un exercice très intéressant !
Je suppose qu'en guise de base de donnée, on doit utiliser exclusivement des fichiers...
Si jamais je souhaite que mon programme exécute de réelles requêtes pour un site web (un site perso, par exemple), comment dois-je faire ? Il faut que je trouve un cours sur les réseaux, non ?
J'ai commencé le langage C avec le livre du zero, mais je n'ai pas souvenir de SQL, requêtes ou autres, alors mon problème c'est que je ne sais même pas par où commencer ton défis pourtant bien intéressant.
Le SQL n'est-il pas un langage particulier? Peut-on s'en sortir si on ne connais rien au SQL?
" Celui qui aime à apprendre est bien près du savoir " Confucius
J'me suis dit que j'allais faire votre 'défi', mais en fait j'ai pas compris l'exercice. L'explication est un peu trop vague, faudrait clarifier les choses.
Peut-être que si on connais déjà SQL c'est simple, mais comme je n'y connais strictement rien...
Honnêtement, je ne connais pas le langage SQL en lui-même. Si le mot-clé correct est UPDATE, alors utilisez UPDATE, et toutes mes excuses pour la confusion.
Pour le stockage, faites comme vous voulez, ceci n'est qu'un exemple. Prenez ce défi comme une idée de programme à coder et pas comme une consigne stricte.
@stoads : je n'ai moi-même qu'une très faible connaissance du SQL. Le but de l'exercice est plutôt de travailler sur le stockage des données que sur le parsing d'un langage complet. La grammaire donnée en énoncé est une version ultra-ultra-simplifiée du SQL.
J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
[Défis] #10 : Le mini moteur SQL
× 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.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
" Celui qui aime à apprendre est bien près du savoir " Confucius