Merge lp:~mmcm/akiban-server/alter-table-add-identity into lp:~akiban-technologies/akiban-server/trunk

Proposed by Mike McMahon
Status: Merged
Approved by: Thomas Jones-Low
Approved revision: 2666
Merged at revision: 2665
Proposed branch: lp:~mmcm/akiban-server/alter-table-add-identity
Merge into: lp:~akiban-technologies/akiban-server/trunk
Diff against target: 196 lines (+57/-13)
2 files modified
src/main/java/com/akiban/ais/util/TableChangeValidator.java (+7/-0)
src/test/java/com/akiban/ais/util/TableChangeValidatorTest.java (+50/-13)
To merge this branch: bzr merge lp:~mmcm/akiban-server/alter-table-add-identity
Reviewer Review Type Date Requested Status
Thomas Jones-Low Approve
Review via email: mp+167435@code.launchpad.net

Description of the change

Track added sequence when ALTER TABLE ADD COLUMN adds an identity column.

AlterTableDDLTest#addColumnSerialPk already tests that DDLFunctions is called with the right information, but it uses a mock that only records what was requested of DXL.

The oversight was in the actual AIS implementation. So, add a new test down there this time.

To post a comment you must log in.
Revision history for this message
Thomas Jones-Low (tjoneslo) wrote :

Fixes the problem as stated.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/main/java/com/akiban/ais/util/TableChangeValidator.java'
2--- src/main/java/com/akiban/ais/util/TableChangeValidator.java 2013-05-28 21:18:45 +0000
3+++ src/main/java/com/akiban/ais/util/TableChangeValidator.java 2013-06-05 01:18:27 +0000
4@@ -420,6 +420,13 @@
5 droppedSequences.add(oldColumn.getIdentityGenerator().getSequenceName());
6 }
7 } break;
8+ case ADD: {
9+ Column newColumn = newTable.getColumn(change.getNewName());
10+ Sequence newSeq = newColumn.getIdentityGenerator();
11+ if(newSeq != null) {
12+ addedIdentity.add(newColumn.getName());
13+ }
14+ } break;
15 }
16 }
17
18
19=== modified file 'src/test/java/com/akiban/ais/util/TableChangeValidatorTest.java'
20--- src/test/java/com/akiban/ais/util/TableChangeValidatorTest.java 2013-03-22 20:05:57 +0000
21+++ src/test/java/com/akiban/ais/util/TableChangeValidatorTest.java 2013-06-05 01:18:27 +0000
22@@ -49,6 +49,7 @@
23 private static final String TABLE = "t";
24 private static final TableName TABLE_NAME = new TableName(SCHEMA, TABLE);
25 private static final String NO_INDEX_CHANGE = "{}";
26+ private static final String NO_IDENTITY_CHANGE = "";
27
28 private List<TableChange> NO_CHANGES = new ArrayList<>();
29
30@@ -78,7 +79,7 @@
31 ChangeLevel expectedChangeLevel) {
32 return validate(t1, t2, columnChanges, indexChanges, expectedChangeLevel,
33 asList(changeDesc(TABLE_NAME, TABLE_NAME, false, ParentChange.NONE, "PRIMARY", "PRIMARY")),
34- false, false, NO_INDEX_CHANGE, false);
35+ false, false, NO_INDEX_CHANGE, false, NO_IDENTITY_CHANGE);
36 }
37
38 private static TableChangeValidator validate(UserTable t1, UserTable t2,
39@@ -87,7 +88,7 @@
40 List<String> expectedChangedTables) {
41 return validate(t1, t2, columnChanges, indexChanges, expectedChangeLevel,
42 expectedChangedTables,
43- false, false, NO_INDEX_CHANGE, false);
44+ false, false, NO_INDEX_CHANGE, false, NO_IDENTITY_CHANGE);
45 }
46
47 private static TableChangeValidator validate(UserTable t1, UserTable t2,
48@@ -97,7 +98,8 @@
49 boolean expectedParentChange,
50 boolean expectedPrimaryKeyChange,
51 String expectedAutoGroupIndexChange,
52- boolean autoIndexChanges) {
53+ boolean autoIndexChanges,
54+ String expectedIdentityChange) {
55 TableChangeValidator validator = new TableChangeValidator(t1, t2, columnChanges, indexChanges, autoIndexChanges);
56 validator.compareAndThrowIfNecessary();
57 assertEquals("Final change level", expectedChangeLevel, validator.getFinalChangeLevel());
58@@ -106,6 +108,7 @@
59 assertEquals("Changed tables", expectedChangedTables.toString(), validator.getAllChangedTables().toString());
60 assertEquals("Affected group index", expectedAutoGroupIndexChange, validator.getAffectedGroupIndexes().toString());
61 assertEquals("Unmodified changes", "[]", validator.getUnmodifiedChanges().toString());
62+ assertEquals("Changed identity", expectedIdentityChange, identityChangeDesc(validator.getAllChangedTables()));
63 return validator;
64 }
65
66@@ -122,7 +125,19 @@
67 return ChangedTableDescription.toString(oldName, newName, newGroup, parentChange, map(indexPairs));
68 }
69
70-
71+ private static String identityChangeDesc(Collection<ChangedTableDescription> tableChanges) {
72+ StringBuilder str = new StringBuilder();
73+ for (ChangedTableDescription change : tableChanges) {
74+ if (!change.getDroppedSequences().isEmpty()) {
75+ str.append("-").append(change.getDroppedSequences());
76+ }
77+ if (!change.getIdentityAdded().isEmpty()) {
78+ str.append("+").append(change.getIdentityAdded());
79+ }
80+ }
81+ return str.toString();
82+ }
83+
84 //
85 // Table
86 //
87@@ -179,6 +194,18 @@
88 }
89
90 @Test
91+ public void addIdentityColumn() {
92+ final TableName SEQ_NAME = new TableName(SCHEMA, "seq-1");
93+ UserTable t1 = table(builder(TABLE_NAME).colBigInt("x"));
94+ UserTable t2 = table(builder(TABLE_NAME).colBigInt("x").colBigInt("id").pk("id").sequence(SEQ_NAME.getTableName()));
95+ t2.getColumn("id").setIdentityGenerator(t2.getAIS().getSequence(SEQ_NAME));
96+ t2.getColumn("id").setDefaultIdentity(true);
97+ validate(t1, t2, asList(TableChange.createAdd("id")), asList(TableChange.createAdd("PRIMARY")), ChangeLevel.GROUP,
98+ asList(changeDesc(TABLE_NAME, TABLE_NAME, false, ParentChange.NONE)),
99+ false, true, NO_INDEX_CHANGE, false, "+[id]");
100+ }
101+
102+ @Test
103 public void dropColumn() {
104 UserTable t1 = table(builder(TABLE_NAME).colBigInt("id").colBigInt("x").pk("id"));
105 UserTable t2 = table(builder(TABLE_NAME).colBigInt("id").pk("id"));
106@@ -220,7 +247,10 @@
107 UserTable t2 = table(builder(TABLE_NAME).colLong("id", false).pk("id").sequence(SEQ_NAME.getTableName()));
108 t2.getColumn("id").setIdentityGenerator(t2.getAIS().getSequence(SEQ_NAME));
109 t2.getColumn("id").setDefaultIdentity(true);
110- validate(t1, t2, asList(TableChange.createModify("id", "id")), NO_CHANGES, ChangeLevel.METADATA);
111+ validate(t1, t2, asList(TableChange.createModify("id", "id")), NO_CHANGES, ChangeLevel.METADATA,
112+ asList(changeDesc(TABLE_NAME, TABLE_NAME, false, ParentChange.NONE, "PRIMARY", "PRIMARY")),
113+ false, false, NO_INDEX_CHANGE, false,
114+ "+[id]");
115 }
116
117 @Test
118@@ -230,7 +260,10 @@
119 t1.getColumn("id").setIdentityGenerator(t1.getAIS().getSequence(SEQ_NAME));
120 t1.getColumn("id").setDefaultIdentity(true);
121 UserTable t2 = table(builder(TABLE_NAME).colLong("id", false).pk("id"));
122- validate(t1, t2, asList(TableChange.createModify("id", "id")), NO_CHANGES, ChangeLevel.METADATA);
123+ validate(t1, t2, asList(TableChange.createModify("id", "id")), NO_CHANGES, ChangeLevel.METADATA,
124+ asList(changeDesc(TABLE_NAME, TABLE_NAME, false, ParentChange.NONE, "PRIMARY", "PRIMARY")),
125+ false, false, NO_INDEX_CHANGE, false,
126+ "-[test.seq-1]");
127 }
128
129 @Test
130@@ -408,7 +441,7 @@
131 asList(TableChange.createModify(Index.PRIMARY_KEY_CONSTRAINT, Index.PRIMARY_KEY_CONSTRAINT)),
132 ChangeLevel.GROUP,
133 asList(changeDesc(TABLE_NAME, TABLE_NAME, false, ParentChange.NONE)),
134- false, true, NO_INDEX_CHANGE, false);
135+ false, true, NO_INDEX_CHANGE, false, NO_IDENTITY_CHANGE);
136 }
137
138 @Test
139@@ -420,7 +453,7 @@
140 asList(TableChange.createDrop(Index.PRIMARY_KEY_CONSTRAINT)),
141 ChangeLevel.GROUP,
142 asList(changeDesc(TABLE_NAME, TABLE_NAME, false, ParentChange.NONE)),
143- false, true, NO_INDEX_CHANGE, false);
144+ false, true, NO_INDEX_CHANGE, false, NO_IDENTITY_CHANGE);
145 }
146
147 @Test
148@@ -437,7 +470,7 @@
149 asList(TableChange.createDrop("__akiban_fk")),
150 ChangeLevel.GROUP,
151 asList(changeDesc(TABLE_NAME, TABLE_NAME, true, ParentChange.DROP)),
152- true, false, NO_INDEX_CHANGE, false);
153+ true, false, NO_INDEX_CHANGE, false, NO_IDENTITY_CHANGE);
154 }
155
156 @Test
157@@ -467,7 +500,8 @@
158 false,
159 true,
160 NO_INDEX_CHANGE,
161- false
162+ false,
163+ NO_IDENTITY_CHANGE
164 );
165 }
166
167@@ -514,7 +548,8 @@
168 false,
169 false,
170 NO_INDEX_CHANGE,
171- true
172+ true,
173+ NO_IDENTITY_CHANGE
174 );
175 }
176
177@@ -544,7 +579,8 @@
178 false,
179 false,
180 "{test.p.x_y=[]}",
181- false
182+ false,
183+ NO_IDENTITY_CHANGE
184 );
185 }
186
187@@ -572,7 +608,8 @@
188 true,
189 false,
190 "{test.p.x_y=[], test.p.x_y_z=[]}",
191- false
192+ false,
193+ NO_IDENTITY_CHANGE
194 );
195 }
196 }

Subscribers

People subscribed via source and target branches