tags:

views:

943

answers:

6
+2  Q: 

SQL parser in C

I want to parse and store the columns and values of a SQL DML (INSERT, UPDATE, DELETE) statement in C. Need the URL of the open source code or a library with which I can link my C program. The platform is SUSE Linux. Have tried to make and use libSQL unsuccessfully. A detailed answer is appreciated. Thanks.

Additional Notes: Please suggest a library/code that I can link with my C program. In my program I want to use the functions of this library to parse and use the tokens for further processing.

A: 

Have you considered writing your own using lex and yacc? (the hacker - hardcore approach)

Not trivial .. but this site might help you get started

lexu
+2  A: 

See the Chapter "Parsing SQL" in "Lex & Yacc"(O'Reilly) in google books http://books.google.fr/books?id=YrzpxNYegEkC&lpg=PT1&dq=bison%20flex%20sql%20grammar&client=firefox-a&hl=en&pg=PA109

Pierre
+1  A: 

Have you looked at SQLite ? It certainly does have the code to parse SQL, so maybe you could avoid reimplementing it..

Andrew Y
+4  A: 

You can have a look at the source code for SQLite. It uses a parser called Lemon.

Links:

SQLite architecture

Lemon parser

You can also look at the source code for postgresql-plpython3. Looks like it has a pure C based SQL parser.

Link:

postgresql-plpython3 @ github

epatel
+1  A: 

I would suggest to start from the real parser of a real DBMS. There are several in free software. For instance, the parser of PostgreSQL is in the directory src/backend/parser of the distribution and is written in C and Yacc.

bortzmeyer
A: 

ANTLR can target C, among other languages, and its catalog of premade grammars has a bunch of SQL dialects - notably MySQL and Oracle.

Pavel Minaev