JSqlParser icon indicating copy to clipboard operation
JSqlParser copied to clipboard

Parse errors for ALTER TABLE with Informix syntax

Open javier-godoy opened this issue 9 years ago • 1 comments

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

javier-godoy avatar May 22 '16 18:05 javier-godoy

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.

wumpz avatar May 23 '16 17:05 wumpz