Skip to content

Commit f44989f

Browse files
committed
UPDATE/DELETE post-fixes
1 parent f2512c0 commit f44989f

File tree

9 files changed

+129
-128
lines changed

9 files changed

+129
-128
lines changed

mysql-test/main/vector.result

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,12 @@ id hex(v)
7575
9 7B713F3E5258323F80D1113D673B2B3F66E3583F
7676
10 6CA1D43E9DF91B3FE580DA3E1C247D3F147CF33E
7777
flush tables;
78-
select id,vec_distance(v, x'b047263c9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 3;
78+
select id,vec_distance(v, x'B047263c9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 3;
7979
id d
8080
9 0.4719976290006591
8181
10 0.5069011044450041
8282
3 0.5865673124650332
83-
select id,vec_distance(x'b047263c9f87233fcfd27e3eae493e3f0329f43e', v) d from t1 order by d limit 3;
83+
select id,vec_distance(x'b047263C9f87233fcfd27e3eae493e3f0329f43e', v) d from t1 order by d limit 3;
8484
id d
8585
9 0.4719976290006591
8686
10 0.5069011044450041
@@ -198,32 +198,32 @@ id1 id2 vec_distance(t1.v, t2.v)
198198
7 8 1.288239696195716
199199
8 7 1.288239696195716
200200
delete from t1 where v = x'7b713f3e5258323f80d1113d673b2b3f66e3583f';
201-
select id,vec_distance(v, x'b047263c9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 3;
201+
select id,vec_distance(v, x'B047263C9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 3;
202202
id d
203-
10 0.256948729687565
204-
3 0.344061212052452
205-
7 0.5394116168863548
203+
10 0.5069011044450041
204+
3 0.5865673124650332
205+
7 0.7344464697214867
206206
insert t1 (v) values (x'7b713f3e5258323f80d1113d673b2b3f66e3583f');
207-
select id,vec_distance(v, x'b047263c9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 3;
207+
select id,vec_distance(v, x'b047263c9F87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 3;
208208
id d
209-
11 0.22278176178224385
210-
10 0.256948729687565
211-
3 0.344061212052452
212-
select id,vec_distance(v, x'b047263c9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 5;
209+
11 0.4719976290006591
210+
10 0.5069011044450041
211+
3 0.5865673124650332
212+
select id,vec_distance(v, x'B047263c9F87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 5;
213213
id d
214-
11 0.22278176178224385
215-
10 0.256948729687565
216-
3 0.344061212052452
217-
7 0.5394116168863548
218-
5 0.5884475540369749
214+
11 0.4719976290006591
215+
10 0.5069011044450041
216+
3 0.5865673124650332
217+
7 0.7344464697214867
218+
5 0.7671033529042712
219219
update t1 set v=x'76EDFC3E4B57243F10F8423FB158713F020BAA3E' where v=x'6CA1D43E9DF91B3FE580DA3E1C247D3F147CF33E';
220-
select id,vec_distance(v, x'b047263c9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 5;
220+
select id,vec_distance(v, x'B047263C9F87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 5;
221221
id d
222-
11 0.22278176178224385
223-
3 0.344061212052452
224-
7 0.5394116168863548
225-
10 0.5577650851591898
226-
5 0.5884475540369749
222+
11 0.4719976290006591
223+
3 0.5865673124650332
224+
7 0.7344464697214867
225+
10 0.746836719209219
226+
5 0.7671033529042712
227227
delete from t1;
228228
insert t1 (v) values (x'e360d63ebe554f3fcdbc523f4522193f5236083d'),
229229
(x'f511303f72224a3fdd05fe3eb22a133ffae86a3f'),
@@ -235,13 +235,13 @@ insert t1 (v) values (x'e360d63ebe554f3fcdbc523f4522193f5236083d'),
235235
(x'56926c3fdf098d3e2c8c5e3d1ad4953daa9d0b3e'),
236236
(x'7b713f3e5258323f80d1113d673b2b3f66e3583f'),
237237
(x'6ca1d43e9df91b3fe580da3e1c247d3f147cf33e');
238-
select id,vec_distance(v, x'b047263c9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 5;
238+
select id,vec_distance(v, x'b047263c9f87233Fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 5;
239239
id d
240-
20 0.22278176178224385
241-
21 0.256948729687565
242-
14 0.344061212052452
243-
18 0.5394116168863548
244-
16 0.5884475540369749
240+
20 0.4719976290006591
241+
21 0.5069011044450041
242+
14 0.5865673124650332
243+
18 0.7344464697214867
244+
16 0.7671033529042712
245245
insert t1 (v) values ('');
246246
ERROR 22007: Incorrect vector value: '...' for column `test`.`t1`.`v` at row 1
247247
insert t1 (v) values (x'1234');

mysql-test/main/vector.test

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ insert t1 (v) values (x'e360d63ebe554f3fcdbc523f4522193f5236083d'),
2727
select id, hex(v) from t1;
2828
flush tables;
2929
# test with a valid query vector
30-
select id,vec_distance(v, x'b047263c9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 3;
30+
select id,vec_distance(v, x'B047263c9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 3;
3131
# swapped arguments
32-
select id,vec_distance(x'b047263c9f87233fcfd27e3eae493e3f0329f43e', v) d from t1 order by d limit 3;
32+
select id,vec_distance(x'b047263C9f87233fcfd27e3eae493e3f0329f43e', v) d from t1 order by d limit 3;
3333
# test with NULL (id is unpredictable)
3434
select id>0,vec_distance(v, NULL) d from t1 order by d limit 3;
3535
# test with invalid query vector (id is unpredictable)
@@ -38,16 +38,16 @@ select t1.id as id1, t2.id as id2, vec_distance(t1.v, t2.v) from t1, t1 as t2 or
3838

3939
# test delete
4040
delete from t1 where v = x'7b713f3e5258323f80d1113d673b2b3f66e3583f';
41-
select id,vec_distance(v, x'b047263c9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 3;
41+
select id,vec_distance(v, x'B047263C9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 3;
4242

4343
# test insert deleted vec
4444
insert t1 (v) values (x'7b713f3e5258323f80d1113d673b2b3f66e3583f');
45-
select id,vec_distance(v, x'b047263c9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 3;
45+
select id,vec_distance(v, x'b047263c9F87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 3;
4646

4747
# test update
48-
select id,vec_distance(v, x'b047263c9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 5;
48+
select id,vec_distance(v, x'B047263c9F87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 5;
4949
update t1 set v=x'76EDFC3E4B57243F10F8423FB158713F020BAA3E' where v=x'6CA1D43E9DF91B3FE580DA3E1C247D3F147CF33E';
50-
select id,vec_distance(v, x'b047263c9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 5;
50+
select id,vec_distance(v, x'B047263C9F87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 5;
5151

5252
# test delete all and reinsert
5353
delete from t1;
@@ -61,7 +61,7 @@ insert t1 (v) values (x'e360d63ebe554f3fcdbc523f4522193f5236083d'),
6161
(x'56926c3fdf098d3e2c8c5e3d1ad4953daa9d0b3e'),
6262
(x'7b713f3e5258323f80d1113d673b2b3f66e3583f'),
6363
(x'6ca1d43e9df91b3fe580da3e1c247d3f147cf33e');
64-
select id,vec_distance(v, x'b047263c9f87233fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 5;
64+
select id,vec_distance(v, x'b047263c9f87233Fcfd27e3eae493e3f0329f43e') d from t1 order by d limit 5;
6565

6666
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
6767
insert t1 (v) values ('');

mysql-test/main/vector_innodb.result

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,13 @@ insert t1 (v) values
2121
start transaction;
2222
insert t1 values
2323
(30, x'f8e2413ed4ff773fef8b893eba487b3febee3f3f9e6f693f5961fd3ee479303d');
24+
delete from t1 where id=1;
25+
update t1 set v=x'a17e353e91676a3f8005c53e319b2d3f1410133fc018153e8dca3e3f3144ac3e' where id=2;
2426
savepoint foo;
2527
insert t1 values
2628
(31, x'6129683f90fe1f3e1437bc3ed8c8f63dd141033f21e3a93e54346c3f8c4e043f'),
2729
(32, x'1ec8b83d398c4d3f2efb463f23947a3fa1a5093fdde6303e5580413f51569b3e');
30+
delete from t1 where id=5;
2831
rollback to savepoint foo;
2932
insert t1 values
3033
(33, x'86d1003d4262033f8086713ffc4a633e317e933c4dce013d9c4d573fca83b93e');
@@ -33,19 +36,20 @@ start transaction;
3336
insert t1 values
3437
(40, x'71046a3e85329b3e05240e3f45c9283f1847363f98d47d3f4224b73d487b613f'),
3538
(41, x'71046a3e85329b3e05240e3f45c9283f1847363f98d47d3f4224b73d487b613f');
39+
delete from t1 where id=7;
3640
rollback;
3741
select id,vec_distance(v, x'c923e33dc0da313fe7c7983e526b3d3fde63963e6eaf3a3f27fa133fe27a583f') d from t1 order by d limit 5;
3842
id d
43+
2 0.8781474260354732
3944
10 0.8856208347761952
40-
1 0.9381363209273885
4145
30 1.0162643974895857
4246
7 1.026397313888122
4347
5 1.0308161006949719
4448
select id,vec_distance(v, x'754b5f3ea2312b3fc169f43e4604883e1d20173e8dd7443f421b703fb11e0d3e') d from t1 order by d limit 5;
4549
id d
50+
2 0.9426904171992334
4651
33 0.9477554826856
4752
30 1.111405427702547
48-
1 1.1154613877616022
4953
10 1.118630286292343
5054
8 1.1405733350751739
5155
create table t2 (id int auto_increment primary key, v blob not null, vector index (v)) engine=innodb;
@@ -73,7 +77,7 @@ id d
7377
5 0.9706304662574956
7478
30 0.98144492002831
7579
50 1.079862635421575
76-
51 1.2403734530917931
80+
2 1.0907138991979892
7781
select id,vec_distance(v, x'f618663f256be73e62cd453f8bcdbf3e16ae503c3858313f') d from t2 order by d limit 5;
7882
id d
7983
21 0.43559180321379337

mysql-test/main/vector_innodb.test

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,13 @@ insert t1 (v) values
1919
start transaction;
2020
insert t1 values
2121
(30, x'f8e2413ed4ff773fef8b893eba487b3febee3f3f9e6f693f5961fd3ee479303d');
22+
delete from t1 where id=1;
23+
update t1 set v=x'a17e353e91676a3f8005c53e319b2d3f1410133fc018153e8dca3e3f3144ac3e' where id=2;
2224
savepoint foo;
2325
insert t1 values
2426
(31, x'6129683f90fe1f3e1437bc3ed8c8f63dd141033f21e3a93e54346c3f8c4e043f'),
2527
(32, x'1ec8b83d398c4d3f2efb463f23947a3fa1a5093fdde6303e5580413f51569b3e');
28+
delete from t1 where id=5;
2629
rollback to savepoint foo;
2730
insert t1 values
2831
(33, x'86d1003d4262033f8086713ffc4a633e317e933c4dce013d9c4d573fca83b93e');
@@ -31,6 +34,7 @@ start transaction;
3134
insert t1 values
3235
(40, x'71046a3e85329b3e05240e3f45c9283f1847363f98d47d3f4224b73d487b613f'),
3336
(41, x'71046a3e85329b3e05240e3f45c9283f1847363f98d47d3f4224b73d487b613f');
37+
delete from t1 where id=7;
3438
rollback;
3539

3640
select id,vec_distance(v, x'c923e33dc0da313fe7c7983e526b3d3fde63963e6eaf3a3f27fa133fe27a583f') d from t1 order by d limit 5;

sql/handler.cc

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5476,12 +5476,11 @@ handler::ha_delete_all_rows()
54765476
m_lock_type == F_WRLCK);
54775477
mark_trx_read_write();
54785478

5479-
int err= 0;
5480-
if ((err= table->open_hlindexes_for_write()) ||
5481-
(err= table->hlindexes_on_delete_all()))
5482-
return err;
5479+
int err= delete_all_rows();
5480+
if (!err)
5481+
err= table->hlindexes_on_delete_all();
54835482

5484-
return delete_all_rows();
5483+
return err;
54855484
}
54865485

54875486

@@ -8189,9 +8188,6 @@ int handler::ha_update_row(const uchar *old_data, const uchar *new_data)
81898188
DBUG_ASSERT(new_data == table->record[0]);
81908189
DBUG_ASSERT(old_data == table->record[1]);
81918190

8192-
if (table->open_hlindexes_for_write())
8193-
return 1;
8194-
81958191
uint saved_status= table->status;
81968192
error= ha_check_overlaps(old_data, new_data);
81978193

@@ -8283,13 +8279,10 @@ int handler::ha_delete_row(const uchar *buf)
82838279
mark_trx_read_write();
82848280
increment_statistics(&SSV::ha_delete_count);
82858281

8286-
if (table->open_hlindexes_for_write())
8287-
return 1;
8288-
82898282
TABLE_IO_WAIT(tracker, PSI_TABLE_DELETE_ROW, active_index, error,
82908283
{ error= delete_row(buf);})
82918284
MYSQL_DELETE_ROW_DONE(error);
8292-
if (likely(!error) && !(error= table->hlindexes_on_delete()))
8285+
if (likely(!error) && !(error= table->hlindexes_on_delete(buf)))
82938286
{
82948287
rows_stats.deleted++;
82958288
Log_func *log_func= Delete_rows_log_event::binlog_row_logging_function;

sql/sql_base.cc

Lines changed: 25 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -9887,12 +9887,13 @@ int TABLE::hlindex_open(uint nr)
98879887
else
98889888
mysql_mutex_unlock(&s->LOCK_share);
98899889
TABLE *table= (TABLE*)alloc_root(&mem_root, sizeof(*table));
9890-
if (!table ||
9891-
open_table_from_share(in_use, s->hlindex, &empty_clex_str, db_stat, EXTRA_RECORD,
9892-
in_use->open_options, table, 0))
9890+
if (!table || open_table_from_share(in_use, s->hlindex, &empty_clex_str,
9891+
db_stat, EXTRA_RECORD, in_use->open_options, table, 0))
98939892
return 1;
98949893
hlindex= table;
98959894
}
9895+
else if (hlindex->in_use == in_use)
9896+
return 0;
98969897
hlindex->in_use= in_use; // mark in use for this query
98979898
hlindex->use_all_columns();
98989899
return hlindex->file->ha_external_lock(in_use, F_WRLCK);
@@ -9902,17 +9903,8 @@ int TABLE::open_hlindexes_for_write()
99029903
{
99039904
DBUG_ASSERT(s->hlindexes() <= 1);
99049905
for (uint i= s->keys; i < s->total_keys; i++)
9905-
{
9906-
KEY *key= s->key_info + i;
9907-
for (uint j=0; j < key->usable_key_parts; j++)
9908-
// TODO WHY?
9909-
// if (bitmap_is_set(write_set, key->key_part[j].fieldnr - 1))
9910-
{
9911-
if (hlindex_open(i))
9912-
return 1;
9913-
break;
9914-
}
9915-
}
9906+
if (hlindex_open(i))
9907+
return 1;
99169908
return 0;
99179909
}
99189910

@@ -9937,38 +9929,35 @@ int TABLE::hlindexes_on_insert()
99379929

99389930
int TABLE::hlindexes_on_update()
99399931
{
9940-
DBUG_ASSERT(s->total_keys - s->keys == (hlindex != NULL));
9941-
if (!hlindex || !hlindex->in_use)
9942-
return 0;
9943-
9944-
int err;
9945-
// mark deleted node invalid and insert node for new row
9946-
if ((err= mhnsw_invalidate(this, this->record[1], key_info + s->keys)) ||
9947-
(err= mhnsw_insert(this, key_info + s->keys)))
9948-
return err;
9932+
DBUG_ASSERT(s->hlindexes() == (hlindex != NULL));
9933+
if (hlindex && hlindex->in_use)
9934+
{
9935+
int err;
9936+
// mark deleted node invalid and insert node for new row
9937+
if ((err= mhnsw_invalidate(this, record[1], key_info + s->keys)) ||
9938+
(err= mhnsw_insert(this, key_info + s->keys)))
9939+
return err;
9940+
}
99499941

99509942
return 0;
99519943
}
99529944

9953-
int TABLE::hlindexes_on_delete()
9945+
int TABLE::hlindexes_on_delete(const uchar *buf)
99549946
{
9955-
DBUG_ASSERT(s->total_keys - s->keys == (hlindex != NULL));
9956-
if (!hlindex || !hlindex->in_use)
9957-
return 0;
9958-
9959-
if (int err= mhnsw_invalidate(this, this->record[0], key_info + s->keys))
9960-
return err;
9961-
9947+
DBUG_ASSERT(s->hlindexes() == (hlindex != NULL));
9948+
DBUG_ASSERT(buf == record[0] || buf == record[1]); // note: REPLACE
9949+
if (hlindex && hlindex->in_use)
9950+
if (int err= mhnsw_invalidate(this, buf, key_info + s->keys))
9951+
return err;
99629952
return 0;
99639953
}
99649954

99659955
int TABLE::hlindexes_on_delete_all()
99669956
{
9967-
DBUG_ASSERT(s->total_keys - s->keys == (hlindex != NULL));
9968-
if (!hlindex || !hlindex->in_use)
9969-
return 0;
9970-
9971-
this->hlindex->file->ha_delete_all_rows();
9957+
DBUG_ASSERT(s->hlindexes() == (hlindex != NULL));
9958+
if (hlindex && hlindex->in_use)
9959+
if (int err= mhnsw_delete_all(this, key_info + s->keys))
9960+
return err;
99729961
return 0;
99739962
}
99749963

sql/table.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1800,7 +1800,7 @@ struct TABLE
18001800
int open_hlindexes_for_write();
18011801
int hlindexes_on_insert();
18021802
int hlindexes_on_update();
1803-
int hlindexes_on_delete();
1803+
int hlindexes_on_delete(const uchar *buf);
18041804
int hlindexes_on_delete_all();
18051805
int reset_hlindexes();
18061806

0 commit comments

Comments
 (0)