From 3b7874801e6a05ffcf4f7960636bf23a4cdf7dfa Mon Sep 17 00:00:00 2001 From: Christophe Moine Date: Fri, 14 Apr 2017 15:37:01 +0200 Subject: [PATCH] #425 ADD CONSTRAINT also support state such as DEFERRABLE, VALIDATE... --- .../sf/jsqlparser/statement/alter/AlterExpression.java | 6 +++--- src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt | 2 ++ src/test/java/net/sf/jsqlparser/test/alter/AlterTest.java | 8 ++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java b/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java index 85110c033..62b31b667 100644 --- a/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java +++ b/src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java @@ -205,9 +205,6 @@ public String toString() { b.append("CONSTRAINT ").append(constraintName); } else if (pkColumns != null) { b.append("PRIMARY KEY (").append(PlainSelect.getStringList(pkColumns)).append(')'); - if (getConstraints() != null && !getConstraints().isEmpty()) { - b.append(' ').append(PlainSelect.getStringList(constraints, false, false)); - } } else if (ukColumns != null) { b.append("UNIQUE KEY ").append(ukName).append(" (").append(PlainSelect. getStringList(ukColumns)).append(")"); @@ -225,6 +222,9 @@ public String toString() { } else if (index != null) { b.append(index); } + if (getConstraints() != null && !getConstraints().isEmpty()) { + b.append(' ').append(PlainSelect.getStringList(constraints, false, false)); + } return b.toString(); } diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 5b9177d1c..3bae7be66 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -3186,6 +3186,7 @@ AlterExpression AlterExpression(): fkIndex.setReferencedColumnNames(columnNames); alterExp.setIndex(fkIndex); } + constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); } ) | ( tk= tk2= @@ -3197,6 +3198,7 @@ AlterExpression AlterExpression(): index.setColumnsNames(columnNames); alterExp.setIndex(index); } + constraints=AlterExpressionConstraintState() { alterExp.setConstraints(constraints); } ) | ( diff --git a/src/test/java/net/sf/jsqlparser/test/alter/AlterTest.java b/src/test/java/net/sf/jsqlparser/test/alter/AlterTest.java index 389c4d7bc..bd2b7731c 100644 --- a/src/test/java/net/sf/jsqlparser/test/alter/AlterTest.java +++ b/src/test/java/net/sf/jsqlparser/test/alter/AlterTest.java @@ -85,6 +85,14 @@ public void testAlterTableAddConstraint() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE RESOURCELINKTYPE ADD CONSTRAINT FK_RESOURCELINKTYPE_PARENTTYPE_PRIMARYKEY FOREIGN KEY (PARENTTYPE_PRIMARYKEY) REFERENCES RESOURCETYPE(PRIMARYKEY)"); } + public void testAlterTableAddConstraintWithConstraintState() throws JSQLParserException { + assertSqlCanBeParsedAndDeparsed("ALTER TABLE RESOURCELINKTYPE ADD CONSTRAINT FK_RESOURCELINKTYPE_PARENTTYPE_PRIMARYKEY FOREIGN KEY (PARENTTYPE_PRIMARYKEY) REFERENCES RESOURCETYPE(PRIMARYKEY) DEFERRABLE DISABLE NOVALIDATE"); + } + + public void testAlterTableAddConstraintWithConstraintState2() throws JSQLParserException { + assertSqlCanBeParsedAndDeparsed("ALTER TABLE RESOURCELINKTYPE ADD CONSTRAINT RESOURCELINKTYPE_PRIMARYKEY PRIMARY KEY (PRIMARYKEY) DEFERRABLE NOVALIDATE"); + } + public void testAlterTableForgeignKey2() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id)"); }