2010-03-13 3 views
6

Existe-t-il des bibliothèques open source (n'importe quelle langue, python/PHP préférée) qui vont marquer/analyser une chaîne SQL ANSI dans ses différents composants?Analyse/Tokenizing d'une chaîne contenant une commande SQL

C'est, si j'avais la chaîne suivante

SELECT a.foo, b.baz, a.bar 
FROM TABLE_A a 
LEFT JOIN TABLE_B b 
ON a.id = b.id 
WHERE baz = 'snafu'; 

Je reviens d'une structure de données/objet quelque chose comme

//fake PHPish 
$results['select-columns'] = Array[a.foo,b.baz,a.bar]; 
$results['tables'] = Array[TABLE_A,TABLE_B]; 
$results['table-aliases'] = Array[a=>TABLE_A, b=>TABLE_B]; 
//etc... 

reformulé, je suis à la recherche du code dans un package de base de données qui taquine la commande SQL de manière à ce que le moteur sache quoi faire avec. La recherche sur Internet donne beaucoup de résultats sur la façon d'analyser une chaîne avec SQL. Ce n'est pas ce que je veux.

Je me rends compte que je pouvais glop par un code de base de données open source pour trouver ce que je veux, mais j'espérais quelque chose d'un peu plus prêt à l'emploi, (bien que si vous connaissez dans MySQL, PostgreSQL, source SQLite regardez, n'hésitez pas à le transmettre le long)

Merci!

+0

http://stackoverflow.com/questions/1394998/parsing-sql-with-python – bernie

Répondre

2

La source SQLite a un fichier nommé parse.y qui contient la grammaire pour SQL. Vous pouvez passer ce fichier à lemon parser generator pour générer du code C qui exécute la grammaire.

+0

Je n'arrive pas à trouver le fichier 'parse.y' dans le code source, en y ajoutant un lien? –

Questions connexes