Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Défis] #10 : Le mini moteur SQL

    7 janvier 2012 à 17:42:07

    Le mini moteur SQL



    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.

    Exemple :
    nom,prenom,job,ville
    Jean,Dupont,Conseiller,Dijon
    Vincent,Vega,Gangster,LosAngeles
    Scott,McKenzie,Chanteur,SanFransisco


    Les requêtes


    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 INSERT INTO, 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 ALTER TABLE, 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. :)

    Bon courage et bonne chance !

    GuilOooo


    ______________________________________________________________________________________________

    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 !

    PS: 1 jour de retard ^^" Pas taper ...
    • Partager sur Facebook
    • Partager sur Twitter
      7 janvier 2012 à 17:57:55

      Intéressant ! :)

      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 ?
      • Partager sur Facebook
      • Partager sur Twitter
        7 janvier 2012 à 18:00:47

        Salut,

        Juste pour dire:

        INSERT INTO livres VALUES candide,volaire
        


        C'est pas voltaire et non volaire? :-°
        • Partager sur Facebook
        • Partager sur Twitter
          7 janvier 2012 à 18:02:15

          Citation : paraze

          En fait, c'est une sorte de recherche de sous-chaine dans un fichier selon des arguments précis non ?


          Ce n'ai pas vraiment comme cela que je le conçois mais ça peut être vue ainsi ...

          @Taurre: Je corrige :-°


          PS: Non moi je ne participerais pas :p Parcontre, je ferais les anciens exo que j'ai loupé et en écrirais le prochain si j'ai le temps
          • Partager sur Facebook
          • Partager sur Twitter
          🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.
            7 janvier 2012 à 18:04:42

            Je parlais pour le SELECT bien sûr. ^^

            @robaseche: Comment voyais tu la chose ?
            • Partager sur Facebook
            • Partager sur Twitter
              7 janvier 2012 à 18:11:16

              Citation : paraze

              Je parlais pour le SELECT bien sûr. ^^


              J'avais compris

              Citation : paraze

              @robaseche

              On va pas s'entendre tous les 2 :p

              Citation : paraze

              Comment voyais tu la chose ?


              Un peu comme une bibliothèque genre Biblio++
              • Partager sur Facebook
              • Partager sur Twitter
              🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.
                7 janvier 2012 à 21:51:03

                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 ?
                • Partager sur Facebook
                • Partager sur Twitter
                  7 janvier 2012 à 21:58:18

                  Tu sais, les BDD sont stockées sur ton PC. ;)
                  Ou sur le serveur en effet, donc ouais, je pense que tu devrais voir les sockets.

                  Citation : Compufan

                  C'est un exercice très intéressant !


                  +1
                  Je le trouve vraiment très bien ! :D
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 janvier 2012 à 22:53:56

                    C'est bien tout çà, mais il ne faudrait pas ajouter un CREATE TABLE { }...

                    Sinon comment est-ce que nous devons créer les tables?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      7 janvier 2012 à 23:15:13

                      D'après ce que dit Paraze, elles doivent être stockées sur le PC, puisque les BDD le sont
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 janvier 2012 à 5:09:28

                        un truc qui peut paraitre con, mais pourquoi ALTER TABLE et non UPDATE ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          8 janvier 2012 à 21:44:30

                          Aucune idée, dans ce tuto, c'est ALTER TABLE, dans celui de math0, c'est UPDATE.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 janvier 2012 à 21:54:08

                            ALTER TABLE, comme son nom l'indique, permet de modifier la structure de la table. Alors que UPDATE en modifie le contenu (comme ici).
                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 janvier 2012 à 17:12:01

                              Bonjour GuilOooo,

                              Quels sont les pré-requis?


                              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?
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Celui qui aime à apprendre est bien près du savoir " Confucius
                                10 mars 2012 à 18:01:43

                                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...
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  10 mars 2012 à 18:17:20

                                  Ça aurait été plus intéressant avec plus de liberté au niveau de la gestion de la BDD et du stockage des données à mon avis.

                                  Donc est-ce juste un exemple ou réellement imposé par l'exercice ? :)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    10 mars 2012 à 18:55:22

                                    Salut,

                                    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. :)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    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.
                                    • Editeur
                                    • Markdown