2010-03-13 33 views
6

¿Existen bibliotecas de código abierto (se prefiere cualquier lenguaje, python/PHP) que integrarán/analizarán una cadena SQL ANSI en sus diversos componentes?Análisis/Tokenización de una cadena que contiene un comando SQL

Es decir, si tuviera la siguiente cadena

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

me vuelva una estructura de datos/objeto algo así como

//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... 

Reexpresado, estoy buscando el código de una paquete de base de datos que separa el comando SQL para que el motor sepa qué hacer con él. La búsqueda en Internet arroja muchos resultados sobre cómo analizar una cadena CON SQL. Eso no es lo que quiero.

que se dan cuenta de que podía glop a través del código de una base de datos de código abierto para encontrar lo que quiero, pero me esperaba algo un poco más ya hecha, (aunque si se sabe donde en el MySQL, PostgreSQL, fuente de SQLite a mira, no dudes en pasarlo)

Gracias!

+0

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

Respuesta

2

SQLite source tiene un archivo llamado parse.y que contiene gramática para SQL. Puede pasar ese archivo al lemon parser generator para generar el código C que ejecuta la gramática.

+0

No puedo encontrar el archivo 'parse.y' en el código fuente, ¿me refiero a un enlace? –

Cuestiones relacionadas