Skip to content

Commit 7e29f2d

Browse files
author
Alexander Barkov
committed
MDEV-8948 ALTER ... INPLACE does work for BINARY, BLOB
1 parent 1993780 commit 7e29f2d

File tree

6 files changed

+429
-17
lines changed

6 files changed

+429
-17
lines changed

mysql-test/r/alter_table_online.result

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,117 @@ create table t3 (a int not null primary key, b int, c varchar(80)) engine=merge
6565
alter online table t3 union=(t1,t2);
6666
ERROR 0A000: LOCK=NONE/SHARED is not supported for this operation. Try LOCK=EXCLUSIVE.
6767
drop table t1,t2,t3;
68+
#
69+
# MDEV-8948 ALTER ... INPLACE does work for BINARY, BLOB
70+
#
71+
CREATE TABLE t1 (a BINARY(10));
72+
ALTER TABLE t1 MODIFY a BINARY(10), ALGORITHM=INPLACE;
73+
DROP TABLE t1;
74+
CREATE TABLE t1 (a VARBINARY(10));
75+
ALTER TABLE t1 MODIFY a VARBINARY(10), ALGORITHM=INPLACE;
76+
DROP TABLE t1;
77+
CREATE TABLE t1 (a TINYBLOB);
78+
ALTER TABLE t1 MODIFY a TINYBLOB, ALGORITHM=INPLACE;
79+
DROP TABLE t1;
80+
CREATE TABLE t1 (a MEDIUMBLOB);
81+
ALTER TABLE t1 MODIFY a MEDIUMBLOB, ALGORITHM=INPLACE;
82+
DROP TABLE t1;
83+
CREATE TABLE t1 (a BLOB);
84+
ALTER TABLE t1 MODIFY a BLOB, ALGORITHM=INPLACE;
85+
DROP TABLE t1;
86+
CREATE TABLE t1 (a LONGBLOB);
87+
ALTER TABLE t1 MODIFY a LONGBLOB, ALGORITHM=INPLACE;
88+
DROP TABLE t1;
89+
CREATE TABLE t1 (a CHAR(10));
90+
ALTER TABLE t1 MODIFY a CHAR(10), ALGORITHM=INPLACE;
91+
DROP TABLE t1;
92+
CREATE TABLE t1 (a VARCHAR(10));
93+
ALTER TABLE t1 MODIFY a VARCHAR(10), ALGORITHM=INPLACE;
94+
DROP TABLE t1;
95+
CREATE TABLE t1 (a TINYTEXT);
96+
ALTER TABLE t1 MODIFY a TINYTEXT, ALGORITHM=INPLACE;
97+
DROP TABLE t1;
98+
CREATE TABLE t1 (a MEDIUMTEXT);
99+
ALTER TABLE t1 MODIFY a MEDIUMTEXT, ALGORITHM=INPLACE;
100+
DROP TABLE t1;
101+
CREATE TABLE t1 (a TEXT);
102+
ALTER TABLE t1 MODIFY a TEXT, ALGORITHM=INPLACE;
103+
DROP TABLE t1;
104+
CREATE TABLE t1 (a LONGTEXT);
105+
ALTER TABLE t1 MODIFY a LONGTEXT, ALGORITHM=INPLACE;
106+
DROP TABLE t1;
107+
CREATE TABLE t1 (a CHAR(10));
108+
ALTER TABLE t1 MODIFY a CHAR(10) COLLATE latin1_bin, ALGORITHM=INPLACE;
109+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
110+
DROP TABLE t1;
111+
CREATE TABLE t1 (a VARCHAR(10));
112+
ALTER TABLE t1 MODIFY a VARCHAR(10) COLLATE latin1_bin, ALGORITHM=INPLACE;
113+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
114+
DROP TABLE t1;
115+
CREATE TABLE t1 (a TINYTEXT);
116+
ALTER TABLE t1 MODIFY a TINYTEXT COLLATE latin1_bin, ALGORITHM=INPLACE;
117+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
118+
DROP TABLE t1;
119+
CREATE TABLE t1 (a MEDIUMTEXT);
120+
ALTER TABLE t1 MODIFY a MEDIUMTEXT COLLATE latin1_bin, ALGORITHM=INPLACE;
121+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
122+
DROP TABLE t1;
123+
CREATE TABLE t1 (a TEXT);
124+
ALTER TABLE t1 MODIFY a TEXT COLLATE latin1_bin, ALGORITHM=INPLACE;
125+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
126+
DROP TABLE t1;
127+
CREATE TABLE t1 (a LONGTEXT);
128+
ALTER TABLE t1 MODIFY a LONGTEXT COLLATE latin1_bin, ALGORITHM=INPLACE;
129+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
130+
DROP TABLE t1;
131+
CREATE TABLE t1 (a CHAR(10) COLLATE latin1_bin);
132+
ALTER TABLE t1 MODIFY a CHAR(10) COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
133+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
134+
DROP TABLE t1;
135+
CREATE TABLE t1 (a VARCHAR(10) COLLATE latin1_bin);
136+
ALTER TABLE t1 MODIFY a VARCHAR(10) COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
137+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
138+
DROP TABLE t1;
139+
CREATE TABLE t1 (a TINYTEXT COLLATE latin1_bin);
140+
ALTER TABLE t1 MODIFY a TINYTEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
141+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
142+
DROP TABLE t1;
143+
CREATE TABLE t1 (a MEDIUMTEXT COLLATE latin1_bin);
144+
ALTER TABLE t1 MODIFY a MEDIUMTEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
145+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
146+
DROP TABLE t1;
147+
CREATE TABLE t1 (a TEXT COLLATE latin1_bin);
148+
ALTER TABLE t1 MODIFY a TEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
149+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
150+
DROP TABLE t1;
151+
CREATE TABLE t1 (a LONGTEXT COLLATE latin1_bin);
152+
ALTER TABLE t1 MODIFY a LONGTEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
153+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
154+
DROP TABLE t1;
155+
CREATE TABLE t1 (a CHAR(10) COLLATE latin1_general_ci);
156+
ALTER TABLE t1 MODIFY a CHAR(10) COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
157+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
158+
DROP TABLE t1;
159+
CREATE TABLE t1 (a VARCHAR(10) COLLATE latin1_general_ci);
160+
ALTER TABLE t1 MODIFY a VARCHAR(10) COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
161+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
162+
DROP TABLE t1;
163+
CREATE TABLE t1 (a TINYTEXT COLLATE latin1_general_ci);
164+
ALTER TABLE t1 MODIFY a TINYTEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
165+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
166+
DROP TABLE t1;
167+
CREATE TABLE t1 (a MEDIUMTEXT COLLATE latin1_general_ci);
168+
ALTER TABLE t1 MODIFY a MEDIUMTEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
169+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
170+
DROP TABLE t1;
171+
CREATE TABLE t1 (a TEXT COLLATE latin1_general_ci);
172+
ALTER TABLE t1 MODIFY a TEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
173+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
174+
DROP TABLE t1;
175+
CREATE TABLE t1 (a LONGTEXT COLLATE latin1_general_ci);
176+
ALTER TABLE t1 MODIFY a LONGTEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
177+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
178+
DROP TABLE t1;
179+
#
180+
# End of MDEV-8948 ALTER ... INPLACE does work for BINARY, BLOB
181+
#
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#
2+
# Start of 10.1 tests
3+
#
4+
#
5+
# MDEV-8948 ALTER ... INPLACE does work for BINARY, BLOB
6+
#
7+
CREATE TABLE t1 (a TINYBLOB);
8+
ALTER TABLE t1 MODIFY a GEOMETRY, ALGORITHM=INPLACE;
9+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
10+
DROP TABLE t1;
11+
CREATE TABLE t1 (a MEDIUMBLOB);
12+
ALTER TABLE t1 MODIFY a GEOMETRY, ALGORITHM=INPLACE;
13+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
14+
DROP TABLE t1;
15+
CREATE TABLE t1 (a BLOB);
16+
ALTER TABLE t1 MODIFY a GEOMETRY, ALGORITHM=INPLACE;
17+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
18+
DROP TABLE t1;
19+
CREATE TABLE t1 (a LONGBLOB);
20+
ALTER TABLE t1 MODIFY a GEOMETRY, ALGORITHM=INPLACE;
21+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
22+
DROP TABLE t1;
23+
CREATE TABLE t1 (a GEOMETRY);
24+
ALTER TABLE t1 MODIFY a TINYBLOB, ALGORITHM=INPLACE;
25+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
26+
DROP TABLE t1;
27+
CREATE TABLE t1 (a GEOMETRY);
28+
ALTER TABLE t1 MODIFY a MEDIUMBLOB, ALGORITHM=INPLACE;
29+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
30+
DROP TABLE t1;
31+
CREATE TABLE t1 (a GEOMETRY);
32+
ALTER TABLE t1 MODIFY a BLOB, ALGORITHM=INPLACE;
33+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
34+
DROP TABLE t1;
35+
CREATE TABLE t1 (a GEOMETRY);
36+
ALTER TABLE t1 MODIFY a LONGBLOB, ALGORITHM=INPLACE;
37+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
38+
DROP TABLE t1;
39+
CREATE TABLE t1 (a GEOMETRY);
40+
ALTER TABLE t1 MODIFY a POLYGON, ALGORITHM=INPLACE;
41+
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY.
42+
DROP TABLE t1;
43+
CREATE TABLE t1 (a POLYGON);
44+
ALTER TABLE t1 MODIFY a GEOMETRY, ALGORITHM=INPLACE;
45+
DROP TABLE t1;
46+
CREATE TABLE t1 (a POLYGON);
47+
ALTER TABLE t1 MODIFY a POLYGON, ALGORITHM=INPLACE;
48+
DROP TABLE t1;
49+
#
50+
# End of 10.1 tests
51+
#

mysql-test/t/alter_table_online.test

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,170 @@ create table t3 (a int not null primary key, b int, c varchar(80)) engine=merge
104104
--error ER_ALTER_OPERATION_NOT_SUPPORTED
105105
alter online table t3 union=(t1,t2);
106106
drop table t1,t2,t3;
107+
108+
--echo #
109+
--echo # MDEV-8948 ALTER ... INPLACE does work for BINARY, BLOB
110+
--echo #
111+
#
112+
# ALTER to the same [VAR]BINARY type
113+
#
114+
CREATE TABLE t1 (a BINARY(10));
115+
ALTER TABLE t1 MODIFY a BINARY(10), ALGORITHM=INPLACE;
116+
DROP TABLE t1;
117+
118+
CREATE TABLE t1 (a VARBINARY(10));
119+
ALTER TABLE t1 MODIFY a VARBINARY(10), ALGORITHM=INPLACE;
120+
DROP TABLE t1;
121+
122+
#
123+
# ALTER to the same BLOB variant
124+
#
125+
CREATE TABLE t1 (a TINYBLOB);
126+
ALTER TABLE t1 MODIFY a TINYBLOB, ALGORITHM=INPLACE;
127+
DROP TABLE t1;
128+
129+
CREATE TABLE t1 (a MEDIUMBLOB);
130+
ALTER TABLE t1 MODIFY a MEDIUMBLOB, ALGORITHM=INPLACE;
131+
DROP TABLE t1;
132+
133+
CREATE TABLE t1 (a BLOB);
134+
ALTER TABLE t1 MODIFY a BLOB, ALGORITHM=INPLACE;
135+
DROP TABLE t1;
136+
137+
CREATE TABLE t1 (a LONGBLOB);
138+
ALTER TABLE t1 MODIFY a LONGBLOB, ALGORITHM=INPLACE;
139+
DROP TABLE t1;
140+
141+
#
142+
# ALTER to the same [VAR]CHAR type
143+
#
144+
CREATE TABLE t1 (a CHAR(10));
145+
ALTER TABLE t1 MODIFY a CHAR(10), ALGORITHM=INPLACE;
146+
DROP TABLE t1;
147+
148+
CREATE TABLE t1 (a VARCHAR(10));
149+
ALTER TABLE t1 MODIFY a VARCHAR(10), ALGORITHM=INPLACE;
150+
DROP TABLE t1;
151+
152+
153+
#
154+
# ALTER to the same TEXT variant
155+
#
156+
CREATE TABLE t1 (a TINYTEXT);
157+
ALTER TABLE t1 MODIFY a TINYTEXT, ALGORITHM=INPLACE;
158+
DROP TABLE t1;
159+
160+
CREATE TABLE t1 (a MEDIUMTEXT);
161+
ALTER TABLE t1 MODIFY a MEDIUMTEXT, ALGORITHM=INPLACE;
162+
DROP TABLE t1;
163+
164+
CREATE TABLE t1 (a TEXT);
165+
ALTER TABLE t1 MODIFY a TEXT, ALGORITHM=INPLACE;
166+
DROP TABLE t1;
167+
168+
CREATE TABLE t1 (a LONGTEXT);
169+
ALTER TABLE t1 MODIFY a LONGTEXT, ALGORITHM=INPLACE;
170+
DROP TABLE t1;
171+
172+
#
173+
# ALTER from a non-binary to a binary collation
174+
#
175+
CREATE TABLE t1 (a CHAR(10));
176+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
177+
ALTER TABLE t1 MODIFY a CHAR(10) COLLATE latin1_bin, ALGORITHM=INPLACE;
178+
DROP TABLE t1;
179+
180+
CREATE TABLE t1 (a VARCHAR(10));
181+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
182+
ALTER TABLE t1 MODIFY a VARCHAR(10) COLLATE latin1_bin, ALGORITHM=INPLACE;
183+
DROP TABLE t1;
184+
185+
CREATE TABLE t1 (a TINYTEXT);
186+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
187+
ALTER TABLE t1 MODIFY a TINYTEXT COLLATE latin1_bin, ALGORITHM=INPLACE;
188+
DROP TABLE t1;
189+
190+
CREATE TABLE t1 (a MEDIUMTEXT);
191+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
192+
ALTER TABLE t1 MODIFY a MEDIUMTEXT COLLATE latin1_bin, ALGORITHM=INPLACE;
193+
DROP TABLE t1;
194+
195+
CREATE TABLE t1 (a TEXT);
196+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
197+
ALTER TABLE t1 MODIFY a TEXT COLLATE latin1_bin, ALGORITHM=INPLACE;
198+
DROP TABLE t1;
199+
200+
CREATE TABLE t1 (a LONGTEXT);
201+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
202+
ALTER TABLE t1 MODIFY a LONGTEXT COLLATE latin1_bin, ALGORITHM=INPLACE;
203+
DROP TABLE t1;
204+
205+
#
206+
# ALTER from a binary to a non-binary collation
207+
#
208+
CREATE TABLE t1 (a CHAR(10) COLLATE latin1_bin);
209+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
210+
ALTER TABLE t1 MODIFY a CHAR(10) COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
211+
DROP TABLE t1;
212+
213+
CREATE TABLE t1 (a VARCHAR(10) COLLATE latin1_bin);
214+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
215+
ALTER TABLE t1 MODIFY a VARCHAR(10) COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
216+
DROP TABLE t1;
217+
218+
CREATE TABLE t1 (a TINYTEXT COLLATE latin1_bin);
219+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
220+
ALTER TABLE t1 MODIFY a TINYTEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
221+
DROP TABLE t1;
222+
223+
CREATE TABLE t1 (a MEDIUMTEXT COLLATE latin1_bin);
224+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
225+
ALTER TABLE t1 MODIFY a MEDIUMTEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
226+
DROP TABLE t1;
227+
228+
CREATE TABLE t1 (a TEXT COLLATE latin1_bin);
229+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
230+
ALTER TABLE t1 MODIFY a TEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
231+
DROP TABLE t1;
232+
233+
CREATE TABLE t1 (a LONGTEXT COLLATE latin1_bin);
234+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
235+
ALTER TABLE t1 MODIFY a LONGTEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
236+
DROP TABLE t1;
237+
238+
#
239+
# ALTER from a non-binary collation to another non-binary collation
240+
#
241+
CREATE TABLE t1 (a CHAR(10) COLLATE latin1_general_ci);
242+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
243+
ALTER TABLE t1 MODIFY a CHAR(10) COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
244+
DROP TABLE t1;
245+
246+
CREATE TABLE t1 (a VARCHAR(10) COLLATE latin1_general_ci);
247+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
248+
ALTER TABLE t1 MODIFY a VARCHAR(10) COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
249+
DROP TABLE t1;
250+
251+
CREATE TABLE t1 (a TINYTEXT COLLATE latin1_general_ci);
252+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
253+
ALTER TABLE t1 MODIFY a TINYTEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
254+
DROP TABLE t1;
255+
256+
CREATE TABLE t1 (a MEDIUMTEXT COLLATE latin1_general_ci);
257+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
258+
ALTER TABLE t1 MODIFY a MEDIUMTEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
259+
DROP TABLE t1;
260+
261+
CREATE TABLE t1 (a TEXT COLLATE latin1_general_ci);
262+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
263+
ALTER TABLE t1 MODIFY a TEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
264+
DROP TABLE t1;
265+
266+
CREATE TABLE t1 (a LONGTEXT COLLATE latin1_general_ci);
267+
--error ER_ALTER_OPERATION_NOT_SUPPORTED
268+
ALTER TABLE t1 MODIFY a LONGTEXT COLLATE latin1_swedish_ci, ALGORITHM=INPLACE;
269+
DROP TABLE t1;
270+
271+
--echo #
272+
--echo # End of MDEV-8948 ALTER ... INPLACE does work for BINARY, BLOB
273+
--echo #

0 commit comments

Comments
 (0)