1 package liquibase.statementexecute;
2
3 import liquibase.database.*;
4 import liquibase.database.core.*;
5 import liquibase.database.typeconversion.TypeConverterFactory;
6 import liquibase.test.DatabaseTestContext;
7 import liquibase.statement.SqlStatement;
8 import liquibase.statement.core.CreateTableStatement;
9 import liquibase.statement.NotNullConstraint;
10 import liquibase.statement.core.AddUniqueConstraintStatement;
11
12 import java.util.List;
13 import java.util.ArrayList;
14
15 import org.junit.Test;
16
17 public class AddUniqueConstraintExecutorTest extends AbstractExecuteTest {
18
19 protected static final String TABLE_NAME = "AddUQTest";
20 protected static final String COLUMN_NAME = "colToMakeUQ";
21 protected static final String CONSTRAINT_NAME = "UQ_TEST";
22 protected static final String TABLESPACE_NAME = "LB_TABLESPACE";
23
24 @Override
25 protected List<? extends SqlStatement> setupStatements(Database database) {
26 List<CreateTableStatement> statements = new ArrayList<CreateTableStatement>();
27 CreateTableStatement table = new CreateTableStatement(null, TABLE_NAME);
28 table
29 .addColumn("id", TypeConverterFactory.getInstance().findTypeConverter(database).getDataType("int", false), null, new NotNullConstraint())
30 .addColumn(COLUMN_NAME, TypeConverterFactory.getInstance().findTypeConverter(database).getDataType("int", false), null, new NotNullConstraint());
31 statements.add(table);
32
33 if (database.supportsSchemas()) {
34 table = new CreateTableStatement(DatabaseTestContext.ALT_SCHEMA, TABLE_NAME);
35 table
36 .addColumn("id", TypeConverterFactory.getInstance().findTypeConverter(database).getDataType("int", false), null, new NotNullConstraint())
37 .addColumn(COLUMN_NAME, TypeConverterFactory.getInstance().findTypeConverter(database).getDataType("int", false), null, new NotNullConstraint());
38 statements.add(table);
39 }
40 return statements;
41 }
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93 @SuppressWarnings("unchecked")
94 @Test
95 public void execute_noSchema() throws Exception {
96 this.statementUnderTest = new AddUniqueConstraintStatement(null, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME);
97 assertCorrect("alter table [adduqtest] add constraint [uq_test] unique ([coltomakeuq])", SybaseDatabase.class);
98 assertCorrect("alter table [dbo].[adduqtest] add constraint [uq_test] unique ([coltomakeuq])", MSSQLDatabase.class);
99 assertCorrect("alter table [adduqtest] add constraint [uq_test] unique ([coltomakeuq])", SybaseASADatabase.class);
100 assertCorrect("alter table `adduqtest` add constraint `uq_test` unique (`coltomakeuq`)", MySQLDatabase.class);
101 assertCorrect("alter table adduqtest add constraint unique (coltomakeuq) constraint uq_test", InformixDatabase.class);
102 assertCorrect("alter table adduqtest add constraint uq_test unique (coltomakeuq)", OracleDatabase.class);
103 assertCorrect("alter table \"adduqtest\" add constraint uq_test unique (\"coltomakeuq\")", PostgresDatabase.class);
104 assertCorrect("alter table adduqtest add constraint uq_test unique (coltomakeuq)", DerbyDatabase.class);
105 assertCorrect("alter table [adduqtest] add constraint [uq_test] unique ([coltomakeuq])");
106 }
107
108 @SuppressWarnings("unchecked")
109 @Test
110 public void execute_noConstraintName() throws Exception {
111 this.statementUnderTest = new AddUniqueConstraintStatement(null, TABLE_NAME, COLUMN_NAME, null);
112 assertCorrect("alter table `adduqtest` add unique (`coltomakeuq`)", MySQLDatabase.class);
113 assertCorrect("alter table adduqtest add constraint unique (coltomakeuq)", InformixDatabase.class);
114 assertCorrect("alter table adduqtest add unique (coltomakeuq)", OracleDatabase.class);
115 assertCorrect("alter table \"adduqtest\" add unique (\"coltomakeuq\")", PostgresDatabase.class);
116 assertCorrect("alter table adduqtest add unique (coltomakeuq)", DerbyDatabase.class);
117 assertCorrect("alter table [adduqtest] add unique ([coltomakeuq])", SybaseASADatabase.class, SybaseDatabase.class);
118 assertCorrect("alter table [dbo].[adduqtest] add unique ([coltomakeuq])", MSSQLDatabase.class);
119
120 assertCorrect("alter table [adduqtest] add unique ([coltomakeuq])");
121 }
122
123 @SuppressWarnings("unchecked")
124 @Test
125 public void execute_withSchema() throws Exception {
126 statementUnderTest = new AddUniqueConstraintStatement(DatabaseTestContext.ALT_SCHEMA, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME);
127
128
129
130 assertCorrect("alter table liquibaseb.adduqtest add constraint unique (coltomakeuq) constraint uq_test", InformixDatabase.class);
131 assertCorrect("alter table liquibaseb.adduqtest add constraint uq_test unique (coltomakeuq)", OracleDatabase.class);
132 assertCorrect("alter table liquibaseb.\"adduqtest\" add constraint uq_test unique (\"coltomakeuq\")", PostgresDatabase.class);
133 assertCorrect("alter table liquibaseb.adduqtest add constraint uq_test unique (coltomakeuq)", DerbyDatabase.class);
134 assertCorrect("alter table [liquibaseb].[adduqtest] add constraint [uq_test] unique ([coltomakeuq])", SybaseASADatabase.class, SybaseDatabase.class, MSSQLDatabase.class);
135 assertCorrect("alter table [adduqtest] add constraint [uq_test] unique ([coltomakeuq])", FirebirdDatabase.class);
136
137 assertCorrectOnRest("alter table [liquibaseb].[adduqtest] add constraint [uq_test] unique ([coltomakeuq])");
138
139 }
140
141 @SuppressWarnings("unchecked")
142 @Test
143 public void execute_withTablespace() throws Exception {
144 statementUnderTest = new AddUniqueConstraintStatement(null, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME).setTablespace(TABLESPACE_NAME);
145 assertCorrect("alter table [adduqtest] add constraint [uq_test] unique ([coltomakeuq])", SybaseASADatabase.class, SybaseDatabase.class);
146 assertCorrect("alter table [dbo].[adduqtest] add constraint [uq_test] unique ([coltomakeuq])", MSSQLDatabase.class);
147 assertCorrect("alter table adduqtest add constraint unique (coltomakeuq) constraint uq_test", InformixDatabase.class);
148 assertCorrect("alter table \"adduqtest\" add constraint uq_test unique (\"coltomakeuq\") USING INDEX TABLESPACE " + TABLESPACE_NAME, PostgresDatabase.class);
149 assertCorrect("alter table `adduqtest` add constraint `uq_test` unique (`coltomakeuq`)", MySQLDatabase.class);
150 assertCorrect("alter table adduqtest add constraint uq_test unique (coltomakeuq)", DerbyDatabase.class, HsqlDatabase.class, DB2Database.class, H2Database.class, CacheDatabase.class, FirebirdDatabase.class, MaxDBDatabase.class);
151 assertCorrectOnRest("alter table [adduqtest] add constraint [uq_test] unique ([coltomakeuq]) USING INDEX TABLESPACE " + TABLESPACE_NAME);
152 }
153
154 @SuppressWarnings("unchecked")
155 @Test
156 public void execute_withDefferedAndDisabled() throws Exception {
157 statementUnderTest = new AddUniqueConstraintStatement(null, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME).setDeferrable(true).setInitiallyDeferred(true).setDisabled(true);
158 assertCorrect("alter table [adduqtest] add constraint [uq_test] unique ([coltomakeuq])", SybaseDatabase.class);
159 assertCorrect("alter table [dbo].[adduqtest] add constraint [uq_test] unique ([coltomakeuq])", MSSQLDatabase.class);
160 assertCorrect("alter table [adduqtest] add constraint [uq_test] unique ([coltomakeuq])", SybaseASADatabase.class);
161 assertCorrect("alter table `adduqtest` add constraint `uq_test` unique (`coltomakeuq`)", MySQLDatabase.class);
162 assertCorrect("alter table adduqtest add constraint unique (coltomakeuq) constraint uq_test", InformixDatabase.class);
163 assertCorrect("alter table adduqtest add constraint uq_test unique (coltomakeuq) DEFERRABLE INITIALLY DEFERRED DISABLE", OracleDatabase.class);
164 assertCorrect("alter table \"adduqtest\" add constraint uq_test unique (\"coltomakeuq\")", PostgresDatabase.class);
165 assertCorrect("alter table adduqtest add constraint uq_test unique (coltomakeuq)", DerbyDatabase.class);
166 assertCorrect("alter table [adduqtest] add constraint [uq_test] unique ([coltomakeuq])");
167 }
168 }