From 1a90b16e215ac80cd127db0d9a5254790f05a30b Mon Sep 17 00:00:00 2001 From: wumpz Date: Fri, 24 Aug 2018 00:11:35 +0200 Subject: [PATCH] --- .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 4 +- .../jsqlparser/statement/alter/AlterTest.java | 80 ++++++++++++++----- .../statement/create/CreateIndexTest.java | 8 +- 3 files changed, 68 insertions(+), 24 deletions(-) diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 51898868c..729ab1c29 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -3599,12 +3599,12 @@ AlterExpression AlterExpression(): ) | ( - tk= tk2= + tk= (tk2=)? columnNames=ColumnsNamesList() { index = new NamedConstraint(); index.setName(sk3); - index.setType(tk.image + " " + tk2.image); + index.setType(tk.image + (tk2!=null?" " + tk2.image:"")); index.setColumnsNames(columnNames); alterExp.setIndex(index); } diff --git a/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java b/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java index 021b8a4e9..006523522 100644 --- a/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java @@ -1,23 +1,22 @@ package net.sf.jsqlparser.statement.alter; -import static net.sf.jsqlparser.test.TestUtils.assertSqlCanBeParsedAndDeparsed; -import static net.sf.jsqlparser.test.TestUtils.assertStatementCanBeDeparsedAs; - import java.util.Arrays; import java.util.List; - -import junit.framework.TestCase; import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.alter.AlterExpression.ColumnDataType; +import static net.sf.jsqlparser.test.TestUtils.assertSqlCanBeParsedAndDeparsed; +import static net.sf.jsqlparser.test.TestUtils.assertStatementCanBeDeparsedAs; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import org.junit.Test; -public class AlterTest extends TestCase { - - public AlterTest(String arg0) { - super(arg0); - } +public class AlterTest { + @Test public void testAlterTableAddColumn() throws JSQLParserException { Statement stmt = CCJSqlParserUtil. parse("ALTER TABLE mytable ADD COLUMN mycolumn varchar (255)"); @@ -31,6 +30,7 @@ public void testAlterTableAddColumn() throws JSQLParserException { assertEquals("varchar (255)", colDataTypes.get(0).getColDataType().toString()); } + @Test public void testAlterTableAddColumn_ColumnKeyWordImplicit() throws JSQLParserException { Statement stmt = CCJSqlParserUtil.parse("ALTER TABLE mytable ADD mycolumn varchar (255)"); assertTrue(stmt instanceof Alter); @@ -43,70 +43,87 @@ public void testAlterTableAddColumn_ColumnKeyWordImplicit() throws JSQLParserExc assertEquals("varchar (255)", colDataTypes.get(0).getColDataType().toString()); } + @Test public void testAlterTablePrimaryKey() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE animals ADD PRIMARY KEY (id)"); } + @Test public void testAlterTablePrimaryKeyDeferrable() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE animals ADD PRIMARY KEY (id) DEFERRABLE"); } + @Test public void testAlterTablePrimaryKeyNotDeferrable() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE animals ADD PRIMARY KEY (id) NOT DEFERRABLE"); } + @Test public void testAlterTablePrimaryKeyValidate() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE animals ADD PRIMARY KEY (id) VALIDATE"); } + @Test public void testAlterTablePrimaryKeyNoValidate() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE animals ADD PRIMARY KEY (id) NOVALIDATE"); } + @Test public void testAlterTablePrimaryKeyDeferrableValidate() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE animals ADD PRIMARY KEY (id) DEFERRABLE VALIDATE"); } + @Test public void testAlterTablePrimaryKeyDeferrableDisableNoValidate() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE animals ADD PRIMARY KEY (id) DEFERRABLE DISABLE NOVALIDATE"); } + @Test public void testAlterTableUniqueKey() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE `schema_migrations` ADD UNIQUE KEY `unique_schema_migrations` (`version`)"); } + @Test public void testAlterTableForgeignKey() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id) ON DELETE CASCADE"); } + @Test public void testAlterTableAddConstraint() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE RESOURCELINKTYPE ADD CONSTRAINT FK_RESOURCELINKTYPE_PARENTTYPE_PRIMARYKEY FOREIGN KEY (PARENTTYPE_PRIMARYKEY) REFERENCES RESOURCETYPE(PRIMARYKEY)"); } + @Test 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"); } - + + @Test public void testAlterTableAddConstraintWithConstraintState2() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE RESOURCELINKTYPE ADD CONSTRAINT RESOURCELINKTYPE_PRIMARYKEY PRIMARY KEY (PRIMARYKEY) DEFERRABLE NOVALIDATE"); } + @Test public void testAlterTableForgeignKey2() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id)"); } + @Test public void testAlterTableForgeignKey3() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id) ON DELETE RESTRICT"); } + @Test public void testAlterTableForgeignKey4() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id) ON DELETE SET NULL"); } + @Test public void testAlterTableDropColumn() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE test DROP COLUMN YYY"); } + @Test public void testAlterTableDropColumn2() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE mytable DROP COLUMN col1, DROP COLUMN col2"); @@ -120,6 +137,7 @@ public void testAlterTableDropColumn2() throws JSQLParserException { assertEquals("col2", col2Exp.getColumnName()); } + @Test public void testAlterTableDropConstraint() throws JSQLParserException { final String sql = "ALTER TABLE test DROP CONSTRAINT YYY"; Statement stmt = CCJSqlParserUtil.parse(sql); @@ -128,6 +146,7 @@ public void testAlterTableDropConstraint() throws JSQLParserException { assertEquals(alterExpression.getConstraintName(), "YYY"); } + @Test public void testAlterTablePK() throws JSQLParserException { final String sql = "ALTER TABLE `Author` ADD CONSTRAINT `AuthorPK` PRIMARY KEY (`ID`)"; Statement stmt = CCJSqlParserUtil.parse(sql); @@ -138,6 +157,7 @@ public void testAlterTablePK() throws JSQLParserException { assertEquals(alterExpression.getIndex().getColumnsNames().get(0), "`ID`"); } + @Test public void testAlterTableFK() throws JSQLParserException { String sql = "ALTER TABLE `Novels` ADD FOREIGN KEY (AuthorID) REFERENCES Author (ID)"; Statement stmt = CCJSqlParserUtil.parse(sql); @@ -150,18 +170,22 @@ public void testAlterTableFK() throws JSQLParserException { assertEquals(alterExpression.getFkSourceColumns().get(0), "ID"); } + @Test public void testAlterTableCheckConstraint() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE `Author` ADD CONSTRAINT name_not_empty CHECK (`NAME` <> '')"); } + @Test public void testAlterTableAddColumn2() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE animals ADD (col1 integer, col2 integer)"); } + @Test public void testAlterTableAddColumn3() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE mytable ADD COLUMN mycolumn varchar (255)"); } + @Test public void testAlterTableAddColumn4() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE mytable ADD COLUMN col1 varchar (255), ADD COLUMN col2 integer"); @@ -179,6 +203,7 @@ public void testAlterTableAddColumn4() throws JSQLParserException { assertEquals("integer", col2DataTypes.get(0).getColDataType().toString()); } + @Test public void testAlterTableAddColumn5() throws JSQLParserException { Statement stmt = CCJSqlParserUtil.parse("ALTER TABLE mytable ADD col1 timestamp (3)"); @@ -193,6 +218,7 @@ public void testAlterTableAddColumn5() throws JSQLParserException { assertEquals("timestamp (3)", col1DataTypes.get(0).getColDataType().toString()); } + @Test public void testAlterTableAddColumn6() throws JSQLParserException { final String sql = "ALTER TABLE mytable ADD COLUMN col1 timestamp (3) not null"; Statement stmt = CCJSqlParserUtil.parse(sql); @@ -204,10 +230,12 @@ public void testAlterTableAddColumn6() throws JSQLParserException { assertEquals("null", col1Exp.getColDataTypeList().get(0).getColumnSpecs().get(1)); } + @Test public void testAlterTableModifyColumn1() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE animals MODIFY (col1 integer, col2 number (8, 2))"); } + @Test public void testAlterTableModifyColumn2() throws JSQLParserException { Statement stmt = CCJSqlParserUtil.parse("ALTER TABLE mytable modify col1 timestamp (6)"); @@ -218,6 +246,7 @@ public void testAlterTableModifyColumn2() throws JSQLParserException { getOperation()); } + @Test public void testAlterTableAddColumnWithZone() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE mytable ADD COLUMN col1 timestamp with time zone"); assertSqlCanBeParsedAndDeparsed("ALTER TABLE mytable ADD COLUMN col1 timestamp without time zone"); @@ -233,24 +262,28 @@ public void testAlterTableAddColumnWithZone() throws JSQLParserException { assertEquals("timestamp with time zone", col1DataTypes.get(0).getColDataType().toString()); } + @Test public void testAlterTableAddColumnKeywordTypes() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE mytable ADD COLUMN col1 xml"); assertSqlCanBeParsedAndDeparsed("ALTER TABLE mytable ADD COLUMN col1 interval"); assertSqlCanBeParsedAndDeparsed("ALTER TABLE mytable ADD COLUMN col1 bit varying"); } - + + @Test public void testDropColumnRestrictIssue510() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("ALTER TABLE TABLE1 DROP COLUMN NewColumn CASCADE"); } - + + @Test public void testDropColumnRestrictIssue551() throws JSQLParserException { Statement stmt = CCJSqlParserUtil.parse("ALTER TABLE table1 DROP NewColumn"); - + // COLUMN keyword appears in deparsed statement, drop becomes all caps assertStatementCanBeDeparsedAs(stmt, "ALTER TABLE table1 DROP COLUMN NewColumn"); - + } - + + @Test public void testAddConstraintKeyIssue320() throws JSQLParserException { String tableName = "table1"; String columnName1 = "col1"; @@ -260,16 +293,21 @@ public void testAddConstraintKeyIssue320() throws JSQLParserException { String constraintName1 = "table1_constraint_1"; String constraintName2 = "table1_constraint_2"; - for(String constraintType : Arrays.asList("UNIQUE KEY", "KEY")) { - assertSqlCanBeParsedAndDeparsed("ALTER TABLE " + tableName + " ADD CONSTRAINT " + constraintName1 + " " + for (String constraintType : Arrays.asList("UNIQUE KEY", "KEY")) { + assertSqlCanBeParsedAndDeparsed("ALTER TABLE " + tableName + " ADD CONSTRAINT " + constraintName1 + " " + constraintType + " (" + columnName1 + ")"); - assertSqlCanBeParsedAndDeparsed("ALTER TABLE " + tableName + " ADD CONSTRAINT " + constraintName1 + " " + assertSqlCanBeParsedAndDeparsed("ALTER TABLE " + tableName + " ADD CONSTRAINT " + constraintName1 + " " + constraintType + " (" + columnName1 + ", " + columnName2 + ")"); - assertSqlCanBeParsedAndDeparsed("ALTER TABLE " + tableName + " ADD CONSTRAINT " + constraintName1 + " " - + constraintType + " (" + columnName1 + ", " + columnName2 + "), ADD CONSTRAINT " + assertSqlCanBeParsedAndDeparsed("ALTER TABLE " + tableName + " ADD CONSTRAINT " + constraintName1 + " " + + constraintType + " (" + columnName1 + ", " + columnName2 + "), ADD CONSTRAINT " + constraintName2 + " " + constraintType + " (" + columnName3 + ", " + columnName4 + ")"); } } + + @Test + public void testIssue633() throws JSQLParserException { + assertSqlCanBeParsedAndDeparsed("ALTER TABLE team_phases ADD CONSTRAINT team_phases_id_key UNIQUE (id)"); + } } diff --git a/src/test/java/net/sf/jsqlparser/statement/create/CreateIndexTest.java b/src/test/java/net/sf/jsqlparser/statement/create/CreateIndexTest.java index 786ee0425..034a75fde 100644 --- a/src/test/java/net/sf/jsqlparser/statement/create/CreateIndexTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/create/CreateIndexTest.java @@ -1,13 +1,13 @@ package net.sf.jsqlparser.statement.create; import java.io.StringReader; - import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.parser.CCJSqlParserManager; import net.sf.jsqlparser.statement.create.index.CreateIndex; import static net.sf.jsqlparser.test.TestUtils.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import org.junit.Ignore; import org.junit.Test; /** @@ -84,4 +84,10 @@ public void testCreateIndex6() throws JSQLParserException { String stmt = "CREATE INDEX myindex ON mytab (mycol, mycol2)"; assertSqlCanBeParsedAndDeparsed(stmt); } + + @Test + @Ignore + public void testCreateIndexIssue633() throws JSQLParserException { + assertSqlCanBeParsedAndDeparsed("CREATE INDEX idx_american_football_action_plays_1 ON american_football_action_plays USING btree (play_type)"); + } }