JSqlParser
JSqlParser copied to clipboard
Parse errors for ALTER TABLE with Informix syntax
Hello, and thank you very much for this excellent parser. I'm using jsqlparser 0.9.5 and I've found some issues when parsing the following ALTER TABLE statements that work in an Informix database. (Informix's ALTER TABLE syntax is explained here).
ALTER TABLE table_name
ADD CONSTRAINT PRIMARY KEY (column)
CONSTRAINT constraint_name;
(It seems the parser expects "ADD PRIMARY KEY" instead of "ADD CONSTRAINT PRIMARY KEY" and doesn't like "CONSTRAINT constraint_name" at the end)
It's the same case with:
ALTER TABLE table_name
ADD CONSTRAINT FOREIGN KEY (column)
REFERENCES referenced_table(referenced_column)
CONSTRAINT constraint_name;
and
ALTER TABLE table_name
ADD CONSTRAINT UNIQUE (column)
CONSTRAINT constraint_name;
The last one fails with the following stack trace:
net.sf.jsqlparser.JSQLParserException
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:54)
at core.entity.EntityTypeGenerator.process(EntityTypeGenerator.java:196)
at ant.EntityTypeGeneratorTask.execute(EntityTypeGeneratorTask.java:257)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:435)
at org.apache.tools.ant.Target.performTasks(Target.java:456)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
at org.apache.tools.ant.Main.runBuild(Main.java:851)
at org.apache.tools.ant.Main.startAnt(Main.java:235)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: net.sf.jsqlparser.parser.ParseException: Encountered " "UNIQUE" "UNIQUE "" at line 2, column 16.
Was expecting one of:
"DO" ...
"ANY" ...
"KEY" ...
"PERCENT" ...
"OPEN" ...
"XML" ...
"VALUE" ...
"VALUES" ...
"REPLACE" ...
"TRUNCATE" ...
"CAST" ...
"OVER" ...
"PARTITION" ...
"EXTRACT" ...
"MATERIALIZED" ...
"PRIOR" ...
"SIBLINGS" ...
"COLUMN" ...
"NULLS" ...
"FIRST" ...
"LAST" ...
"ROWS" ...
"RANGE" ...
"FOLLOWING" ...
"ROW" ...
"SEPARATOR" ...
"CASCADE" ...
"NO" ...
"ACTION" ...
<S_IDENTIFIER> ...
<S_QUOTED_IDENTIFIER> ...
at net.sf.jsqlparser.parser.CCJSqlParser.generateParseException(CCJSqlParser.java:13996)
at net.sf.jsqlparser.parser.CCJSqlParser.jj_consume_token(CCJSqlParser.java:13852)
at net.sf.jsqlparser.parser.CCJSqlParser.RelObjectName(CCJSqlParser.java:1535)
at net.sf.jsqlparser.parser.CCJSqlParser.Alter(CCJSqlParser.java:8209)
at net.sf.jsqlparser.parser.CCJSqlParser.SingleStatement(CCJSqlParser.java:131)
at net.sf.jsqlparser.parser.CCJSqlParser.Statement(CCJSqlParser.java:68)
at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:52)
... 18 more
You are right. There are a lot of issues for alter table. There is much room for improvements. Pull requests are welcome. Please only one commit and pull request per issue.