_viveka
_viveka

Reputation:

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.

Upvotes: 15

Views: 17999

Answers (9)

Benski
Benski

Reputation: 83

The standalone SQL parser of the Hyrise database system is open source and, even though it is written in C++, it can be accessed from C and is easy to understand and modify. It utilizes bison and flex.

Upvotes: 3

frogatto
frogatto

Reputation: 29285

µSQL for C++

What is µSQL ?

µSQL is a SQL parser engine for C++ to develop SQL based applications easily, and it supports other SQL like domain specific languages such as UnQL and GQL too. Because µSQL is written only in old standard C++ library such as STL with ANTLR, then you can use it with many C++ compilers and platforms.

Repo on Github

Upvotes: 2

James Wang
James Wang

Reputation: 483

Not sure is there any mature C sql parser can do that easily.

Here is a Java version SQL library can do what you need exactly, it can be used to Retrieve/Refactor table & column name from a complex SQL query easily.

Upvotes: 1

Pavel Minaev
Pavel Minaev

Reputation: 101555

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

Upvotes: 2

bortzmeyer
bortzmeyer

Reputation: 35459

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.

Upvotes: 7

epatel
epatel

Reputation: 46051

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

Upvotes: 13

Andrew Y
Andrew Y

Reputation: 5107

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

Upvotes: 2

Pierre
Pierre

Reputation: 35226

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

Upvotes: 2

lexu
lexu

Reputation: 8849

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

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

Upvotes: -3

Related Questions