Skip to content

Commit

Permalink
No commit message
Browse files Browse the repository at this point in the history
  • Loading branch information
wumpz committed Aug 23, 2018
1 parent bfbfc76 commit 1a90b16
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 24 deletions.
4 changes: 2 additions & 2 deletions src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -3599,12 +3599,12 @@ AlterExpression AlterExpression():
)
|
(
tk=<K_UNIQUE> tk2=<K_KEY>
tk=<K_UNIQUE> (tk2=<K_KEY>)?
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);
}
Expand Down
80 changes: 59 additions & 21 deletions src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java
Original file line number Diff line number Diff line change
@@ -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)");
Expand All @@ -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);
Expand All @@ -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");

Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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");

Expand All @@ -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)");

Expand All @@ -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);
Expand All @@ -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)");

Expand All @@ -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");
Expand All @@ -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";
Expand All @@ -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)");
}
}
Original file line number Diff line number Diff line change
@@ -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;

/**
Expand Down Expand Up @@ -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)");
}
}

0 comments on commit 1a90b16

Please sign in to comment.