Skip to content

Commit a90fa3f

Browse files
svojvuvova
authored andcommitted
ALTER TABLE fixes for high-level indexes (i)
Fixes for ALTER TABLE ... ADD/DROP COLUMN, ALGORITHM=COPY. Let quick_rm_table() remove high-level indexes along with original table. Avoid locking uninitialized LOCK_share for INTERNAL_TMP_TABLEs. Don't enable bulk insert when altering a table containing vector index. InnoDB can't handle situation when bulk insert is enabled for one table but disabled for another. We can't do bulk insert on vector index as it does table updates currently.
1 parent e826875 commit a90fa3f

File tree

6 files changed

+531
-17
lines changed

6 files changed

+531
-17
lines changed

mysql-test/main/vector,myisam.rdiff

Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,220 @@
7373
-t1.ibd
7474
drop database test1;
7575
db.opt
76+
@@ -387,9 +387,11 @@
77+
# ADD/DROP COLUMN, ALGORITHM=COPY
78+
alter table t1 add column a int, algorithm=copy;
79+
db.opt
80+
-t1#i#01.ibd
81+
+t1#i#01.MYD
82+
+t1#i#01.MYI
83+
+t1.MYD
84+
+t1.MYI
85+
t1.frm
86+
-t1.ibd
87+
show create table t1;
88+
Table Create Table
89+
t1 CREATE TABLE `t1` (
90+
@@ -398,12 +400,14 @@
91+
`a` int(11) DEFAULT NULL,
92+
PRIMARY KEY (`id`),
93+
VECTOR KEY `v` (`v`)
94+
-) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
95+
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
96+
alter table t1 drop column a, algorithm=copy;
97+
db.opt
98+
-t1#i#01.ibd
99+
+t1#i#01.MYD
100+
+t1#i#01.MYI
101+
+t1.MYD
102+
+t1.MYI
103+
t1.frm
104+
-t1.ibd
105+
show create table t1;
106+
Table Create Table
107+
t1 CREATE TABLE `t1` (
108+
@@ -415,13 +415,15 @@
109+
`v` blob NOT NULL,
110+
PRIMARY KEY (`id`),
111+
VECTOR KEY `v` (`v`)
112+
-) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
113+
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
114+
# ADD/DROP INDEX, ALGORITHM=COPY (non-vector)
115+
alter table t1 add index a(id), algorithm=copy;
116+
db.opt
117+
-t1#i#02.ibd
118+
+t1#i#02.MYD
119+
+t1#i#02.MYI
120+
+t1.MYD
121+
+t1.MYI
122+
t1.frm
123+
-t1.ibd
124+
show create table t1;
125+
Table Create Table
126+
t1 CREATE TABLE `t1` (
127+
@@ -432,12 +432,14 @@
128+
PRIMARY KEY (`id`),
129+
KEY `a` (`id`),
130+
VECTOR KEY `v` (`v`)
131+
-) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
132+
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
133+
alter table t1 drop index a, algorithm=copy;
134+
db.opt
135+
-t1#i#01.ibd
136+
+t1#i#01.MYD
137+
+t1#i#01.MYI
138+
+t1.MYD
139+
+t1.MYI
140+
t1.frm
141+
-t1.ibd
142+
show create table t1;
143+
Table Create Table
144+
t1 CREATE TABLE `t1` (
145+
@@ -445,13 +447,15 @@
146+
`v` blob NOT NULL,
147+
PRIMARY KEY (`id`),
148+
VECTOR KEY `v` (`v`)
149+
-) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
150+
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
151+
# CREATE/DROP INDEX, ALGORITHM=COPY (non-vector)
152+
create index a on t1(id) algorithm=copy;
153+
db.opt
154+
-t1#i#02.ibd
155+
+t1#i#02.MYD
156+
+t1#i#02.MYI
157+
+t1.MYD
158+
+t1.MYI
159+
t1.frm
160+
-t1.ibd
161+
show create table t1;
162+
Table Create Table
163+
t1 CREATE TABLE `t1` (
164+
@@ -460,12 +464,14 @@
165+
PRIMARY KEY (`id`),
166+
KEY `a` (`id`),
167+
VECTOR KEY `v` (`v`)
168+
-) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
169+
-alter table t1 drop index a, algorithm=copy;
170+
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
171+
+drop index a on t1;
172+
db.opt
173+
-t1#i#01.ibd
174+
+t1#i#01.MYD
175+
+t1#i#01.MYI
176+
+t1.MYD
177+
+t1.MYI
178+
t1.frm
179+
-t1.ibd
180+
show create table t1;
181+
Table Create Table
182+
t1 CREATE TABLE `t1` (
183+
@@ -479,13 +479,15 @@
184+
`v` blob NOT NULL,
185+
PRIMARY KEY (`id`),
186+
VECTOR KEY `v` (`v`)
187+
-) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
188+
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
189+
# ADD/DROP COLUMN IF [NOT] EXISTS, ALGORITHM=COPY (non-vector)
190+
alter table t1 add column if not exists a int, algorithm=copy;
191+
db.opt
192+
-t1#i#01.ibd
193+
+t1#i#01.MYD
194+
+t1#i#01.MYI
195+
+t1.MYD
196+
+t1.MYI
197+
t1.frm
198+
-t1.ibd
199+
show create table t1;
200+
Table Create Table
201+
t1 CREATE TABLE `t1` (
202+
@@ -494,12 +496,14 @@
203+
`a` int(11) DEFAULT NULL,
204+
PRIMARY KEY (`id`),
205+
VECTOR KEY `v` (`v`)
206+
-) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
207+
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
208+
alter table t1 drop column if exists a, algorithm=copy;
209+
db.opt
210+
-t1#i#01.ibd
211+
+t1#i#01.MYD
212+
+t1#i#01.MYI
213+
+t1.MYD
214+
+t1.MYI
215+
t1.frm
216+
-t1.ibd
217+
show create table t1;
218+
Table Create Table
219+
t1 CREATE TABLE `t1` (
220+
@@ -509,24 +511,27 @@
221+
`v` blob NOT NULL,
222+
PRIMARY KEY (`id`),
223+
VECTOR KEY `v` (`v`)
224+
-) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
225+
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
226+
# ADD/DROP INDEX, ALGORITHM=COPY (vector)
227+
alter table t1 drop index v, algorithm=copy;
228+
db.opt
229+
+t1.MYD
230+
+t1.MYI
231+
t1.frm
232+
-t1.ibd
233+
show create table t1;
234+
Table Create Table
235+
t1 CREATE TABLE `t1` (
236+
`id` int(11) NOT NULL AUTO_INCREMENT,
237+
`v` blob NOT NULL,
238+
PRIMARY KEY (`id`)
239+
-) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
240+
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
241+
alter table t1 add vector index v(v), algorithm=copy;
242+
db.opt
243+
-t1#i#01.ibd
244+
+t1#i#01.MYD
245+
+t1#i#01.MYI
246+
+t1.MYD
247+
+t1.MYI
248+
t1.frm
249+
-t1.ibd
250+
show create table t1;
251+
Table Create Table
252+
t1 CREATE TABLE `t1` (
253+
@@ -534,24 +539,27 @@
254+
`v` blob NOT NULL,
255+
PRIMARY KEY (`id`),
256+
VECTOR KEY `v` (`v`)
257+
-) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
258+
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
259+
# CREATE/DROP INDEX, ALGORITHM=COPY (vector)
260+
alter table t1 drop index v, algorithm=copy;
261+
db.opt
262+
+t1.MYD
263+
+t1.MYI
264+
t1.frm
265+
-t1.ibd
266+
show create table t1;
267+
Table Create Table
268+
t1 CREATE TABLE `t1` (
269+
`id` int(11) NOT NULL AUTO_INCREMENT,
270+
`v` blob NOT NULL,
271+
PRIMARY KEY (`id`)
272+
-) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
273+
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
274+
create vector index v on t1(v) algorithm=copy;
275+
db.opt
276+
-t1#i#01.ibd
277+
+t1#i#01.MYD
278+
+t1#i#01.MYI
279+
+t1.MYD
280+
+t1.MYI
281+
t1.frm
282+
-t1.ibd
283+
show create table t1;
284+
Table Create Table
285+
t1 CREATE TABLE `t1` (
286+
@@ -565,5 +567,5 @@
287+
`v` blob NOT NULL,
288+
PRIMARY KEY (`id`),
289+
VECTOR KEY `v` (`v`)
290+
-) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
291+
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
292+
drop table t1;

mysql-test/main/vector.result

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,3 +470,178 @@ set @a=vec_fromtext('[94.542572,8.735560,60.050098,74.043800,90.068710,28.212160
470470
select vec_distance_cosine(@a, @a), vec_distance_euclidean(@a, @a);
471471
vec_distance_cosine(@a, @a) vec_distance_euclidean(@a, @a)
472472
0 0
473+
# Test ALTER TABLE, CREATE/DROP INDEX
474+
create table t1 (id int auto_increment primary key, v blob not null, vector index (v));
475+
insert t1 (v) values (x'e360d63ebe554f3fcdbc523f4522193f5236083d'),
476+
(x'f511303f72224a3fdd05fe3eb22a133ffae86a3f'),
477+
(x'f09baa3ea172763f123def3e0c7fe53e288bf33e'),
478+
(x'b97a523f2a193e3eb4f62e3f2d23583e9dd60d3f'),
479+
(x'f7c5df3e984b2b3e65e59d3d7376db3eac63773e'),
480+
(x'de01453ffa486d3f10aa4d3fdd66813c71cb163f'),
481+
(x'76edfc3e4b57243f10f8423fb158713f020bda3e'),
482+
(x'56926c3fdf098d3e2c8c5e3d1ad4953daa9d0b3e'),
483+
(x'7b713f3e5258323f80d1113d673b2b3f66e3583f'),
484+
(x'6ca1d43e9df91b3fe580da3e1c247d3f147cf33e');
485+
# ADD/DROP COLUMN, ALGORITHM=COPY
486+
alter table t1 add column a int, algorithm=copy;
487+
db.opt
488+
t1#i#01.ibd
489+
t1.frm
490+
t1.ibd
491+
show create table t1;
492+
Table Create Table
493+
t1 CREATE TABLE `t1` (
494+
`id` int(11) NOT NULL AUTO_INCREMENT,
495+
`v` blob NOT NULL,
496+
`a` int(11) DEFAULT NULL,
497+
PRIMARY KEY (`id`),
498+
VECTOR KEY `v` (`v`)
499+
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
500+
alter table t1 drop column a, algorithm=copy;
501+
db.opt
502+
t1#i#01.ibd
503+
t1.frm
504+
t1.ibd
505+
show create table t1;
506+
Table Create Table
507+
t1 CREATE TABLE `t1` (
508+
`id` int(11) NOT NULL AUTO_INCREMENT,
509+
`v` blob NOT NULL,
510+
PRIMARY KEY (`id`),
511+
VECTOR KEY `v` (`v`)
512+
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
513+
# ADD/DROP INDEX, ALGORITHM=COPY (non-vector)
514+
alter table t1 add index a(id), algorithm=copy;
515+
db.opt
516+
t1#i#02.ibd
517+
t1.frm
518+
t1.ibd
519+
show create table t1;
520+
Table Create Table
521+
t1 CREATE TABLE `t1` (
522+
`id` int(11) NOT NULL AUTO_INCREMENT,
523+
`v` blob NOT NULL,
524+
PRIMARY KEY (`id`),
525+
KEY `a` (`id`),
526+
VECTOR KEY `v` (`v`)
527+
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
528+
alter table t1 drop index a, algorithm=copy;
529+
db.opt
530+
t1#i#01.ibd
531+
t1.frm
532+
t1.ibd
533+
show create table t1;
534+
Table Create Table
535+
t1 CREATE TABLE `t1` (
536+
`id` int(11) NOT NULL AUTO_INCREMENT,
537+
`v` blob NOT NULL,
538+
PRIMARY KEY (`id`),
539+
VECTOR KEY `v` (`v`)
540+
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
541+
# CREATE/DROP INDEX, ALGORITHM=COPY (non-vector)
542+
create index a on t1(id) algorithm=copy;
543+
db.opt
544+
t1#i#02.ibd
545+
t1.frm
546+
t1.ibd
547+
show create table t1;
548+
Table Create Table
549+
t1 CREATE TABLE `t1` (
550+
`id` int(11) NOT NULL AUTO_INCREMENT,
551+
`v` blob NOT NULL,
552+
PRIMARY KEY (`id`),
553+
KEY `a` (`id`),
554+
VECTOR KEY `v` (`v`)
555+
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
556+
alter table t1 drop index a, algorithm=copy;
557+
db.opt
558+
t1#i#01.ibd
559+
t1.frm
560+
t1.ibd
561+
show create table t1;
562+
Table Create Table
563+
t1 CREATE TABLE `t1` (
564+
`id` int(11) NOT NULL AUTO_INCREMENT,
565+
`v` blob NOT NULL,
566+
PRIMARY KEY (`id`),
567+
VECTOR KEY `v` (`v`)
568+
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
569+
# ADD/DROP COLUMN IF [NOT] EXISTS, ALGORITHM=COPY (non-vector)
570+
alter table t1 add column if not exists a int, algorithm=copy;
571+
db.opt
572+
t1#i#01.ibd
573+
t1.frm
574+
t1.ibd
575+
show create table t1;
576+
Table Create Table
577+
t1 CREATE TABLE `t1` (
578+
`id` int(11) NOT NULL AUTO_INCREMENT,
579+
`v` blob NOT NULL,
580+
`a` int(11) DEFAULT NULL,
581+
PRIMARY KEY (`id`),
582+
VECTOR KEY `v` (`v`)
583+
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
584+
alter table t1 drop column if exists a, algorithm=copy;
585+
db.opt
586+
t1#i#01.ibd
587+
t1.frm
588+
t1.ibd
589+
show create table t1;
590+
Table Create Table
591+
t1 CREATE TABLE `t1` (
592+
`id` int(11) NOT NULL AUTO_INCREMENT,
593+
`v` blob NOT NULL,
594+
PRIMARY KEY (`id`),
595+
VECTOR KEY `v` (`v`)
596+
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
597+
# ADD/DROP INDEX, ALGORITHM=COPY (vector)
598+
alter table t1 drop index v, algorithm=copy;
599+
db.opt
600+
t1.frm
601+
t1.ibd
602+
show create table t1;
603+
Table Create Table
604+
t1 CREATE TABLE `t1` (
605+
`id` int(11) NOT NULL AUTO_INCREMENT,
606+
`v` blob NOT NULL,
607+
PRIMARY KEY (`id`)
608+
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
609+
alter table t1 add vector index v(v), algorithm=copy;
610+
db.opt
611+
t1#i#01.ibd
612+
t1.frm
613+
t1.ibd
614+
show create table t1;
615+
Table Create Table
616+
t1 CREATE TABLE `t1` (
617+
`id` int(11) NOT NULL AUTO_INCREMENT,
618+
`v` blob NOT NULL,
619+
PRIMARY KEY (`id`),
620+
VECTOR KEY `v` (`v`)
621+
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
622+
# CREATE/DROP INDEX, ALGORITHM=COPY (vector)
623+
alter table t1 drop index v, algorithm=copy;
624+
db.opt
625+
t1.frm
626+
t1.ibd
627+
show create table t1;
628+
Table Create Table
629+
t1 CREATE TABLE `t1` (
630+
`id` int(11) NOT NULL AUTO_INCREMENT,
631+
`v` blob NOT NULL,
632+
PRIMARY KEY (`id`)
633+
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
634+
create vector index v on t1(v) algorithm=copy;
635+
db.opt
636+
t1#i#01.ibd
637+
t1.frm
638+
t1.ibd
639+
show create table t1;
640+
Table Create Table
641+
t1 CREATE TABLE `t1` (
642+
`id` int(11) NOT NULL AUTO_INCREMENT,
643+
`v` blob NOT NULL,
644+
PRIMARY KEY (`id`),
645+
VECTOR KEY `v` (`v`)
646+
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
647+
drop table t1;

0 commit comments

Comments
 (0)