Bonjour
Est ce quelqu'un connaitrait un algo pour analyser la justesse d'une requete sql.
Merci.
Version imprimable
Bonjour
Est ce quelqu'un connaitrait un algo pour analyser la justesse d'une requete sql.
Merci.
Ca dépend de ce que tu entends pas justesse. Au niveau syntaxique ou sémantique ?
Le langage SQL doit avoir une grammaire particulière. Il "suffit" donc d'appliquer un analyseur syntaxique en utilisant cette grammaire.
Après, il se peut qu'il faille utiliser un analyseur sémantique pour vérifier si il n'y a pas de problème de type (ou qu'il manque des tables...)
Si tu veux créer à toi tout seul l'analyseur lexical, syntaxique, ce n'est pas marrant :aie: Donc, je te conseillerai d'utiliser des outils suivant le langage que tu utilises (par exemple, lex et yacc sont disponibles en C, C++, camL, java...). Ensuite, je ne crois pas qu'il y ait d'analyseur sémantique tout fait, il faut surement se le farcir... Il y a peut être des outils qui vérifie automatiquement la syntaxe de commande SQL, mais je ne connais pas.
Enfin, tout ça pour dire que l'algorithme pour faire ça. C'est une application de toute la théorie qui définie les langages et les analyseurs. Et c'est pas simple :aie:
c'est un analyseur syntaxique que je cherche en fait. j'ai un peu commencer à débroussailler mais je pense que je vais trop me prendre la tête dessus, c'est pour ca que je me demandais s'il n'y avait pas un algo.
Un algo pour réaliser un analyseur syntaxique ? C'est vraiment compliqué, je te conseille vraiment d'utiliser une bibliothèque externe qui inclue un tel analyseur suivant ton langage (en plus qu'il faut faire l'analyse lexical avant).
et en sql tu en connais des bibliothèques externes?
C'est à quel niveau que tu veux faire l'analyse ? Quelque chose doit m'échapper.
ex: select * toto where id = 10
là il te manque le from. ou bien
select * from toto inner join toto where etc...
il te manque le on plus les éléments de jointure. en gros savoir si la requete est correctemment rédigée.
Oui, oui, c'est bien de l'analyse syntaxique, mais ce n'était pas ma deuxième question :aie: .
Tu veux l'intégrer où dans l'application ton analyseur de requête. Il va te servir à quoi ? Est-ce qu'il faut un SGBD avec, où c'est juste un analyseur de requête qui dit si c'est bien écrit ou non ?
Bah en fait je trouve l'outil d'oracle un peu merdique. donc je me disais que j'allais me faire mon éditeur qui ressemble plus au query analyzer de Sql Server. je faisais un peu ca aussi pour bosser sur la derniere version du framework.Net 3.0.
pourquoi ne pas simplement soumettre un EXPLAIN de ta requête au SGBD ?
Explain? c'est mysql?
En fait je pense que je vais balancer la requete et c'est le SGBD qui va me dire où ca plante. ca demanderait trop de boulot.
Ça existe dans MySQL, Oracle, SQL Server, etc. Ça demande au SGBD de calculer le plan d'exécution ; du coup, c'est bcp plus rapide que de soumettre la requête (si elle est grosse), et ça interceptera les erreurs de syntaxe.
je viens d'essayer sous Oracle effectivement c'est pas mal. je vais opter pour ça.
Merci.