Zql: a Java SQL parser
What is Zql ?
Zql is an SQL parser written in Java.
Zql parses SQL and fills in java structures representing SQL statements and
expressions.
Zql can parse all the queries given as examples in the following
SQL tutorial (a now old version of
James Hoffman's SQL tutorial).
See the Zql API documentation for more info about
the Zql structures.
An SQL expression evaluator comes with Zql, so you can easily evaluate
SQL expressions out of the parser.
Warning: No warranty !
Zql is no commercial product (license: GNU GPLv3).
Feel free to use it, but we provide no warranty.
Zql APIs may be subject to changes, to enrich functionalities or fix bugs.
Click here
for any bug report or suggestion.
Alternatives to Zql ?
General SQL Parser
looks pretty good, with extended SQL syntax (like PL/SQL and T-SQL) and java + .NET APIs.
The tool is commercial (license available online), with a free download option.
How to use Zql ?
First of all, download Zql! (let's say, the latest version).
Then:
-
Unpack zql.tar.gz:
tar xvzf zql.tar.gz
-
Make your CLASSPATH variable point on the zql/classes directory.
-
Type
java org.gibello.zql.ZqlParser
, then some SQL statements (like
select * from customer;
) to make sure Zql is properly installed.
-
Go in the zql/demo/data directory, see the README file and the ZDemo.java
program to discover how you can use Zql to write your own SQL application!
Some SQL queries for heavy testing...
More details
The parser itself is written with
JavaCC, a Java parser generator (like
Unix's popular yacc generator).
It takes as input SQL statements (select, insert, update, delete, commit,
rollback, set transaction), and fills in Java structures that represent the
statements it parsed.
Example:
SELECT ANTIQUEOWNERS.OWNERLASTNAME, ANTIQUEOWNERS.OWNERFIRSTNAME
FROM ANTIQUEOWNERS, ANTIQUES
WHERE ANTIQUES.BUYERID = ANTIQUEOWNERS.OWNERID AND ANTIQUES.ITEM = 'Chair';
Will result in a ZqlQuery structure.
ZqlQuery's getSelect(), getFrom() and getWhere() methods will extract the
SELECT, FROM and WHERE parts of the query.
-
getSelect() will return a Vector of ZSelectItem, data structures that give
information about the columns and/or operations requested (including
SQL expression support, like in
SELECT a+b FROM num;
).
-
getFrom() will return a Vector of ZFromItem, data structures that give
information about the tables involved in the query.
-
getWhere() will return an SQL expression, a data structure that represents
ANTIQUES.BUYERID = ANTIQUEOWNERS.OWNERID AND ANTIQUES.ITEM = 'Chair'
in the example above (the expression evaluator that comes with
Zql can evaluate such expressions, for a given data tuple).
Some history...
The 1st release of SQL came to the net on March 10... 1998 (!).
After a long proprietary life, I finally decided to open the code,
in september 2010.
In the meantime, some bugs were fixed and some enhancements added, most of
them minor. Note I haven't been working a lot on Zql since the 1st release,
and most of the work was finished in late 2002.