1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-07 00:04:31 +03:00

post-fixes for TRUNCATE

* fix the truncate-by-handler variant, used by InnoDB
* test that insert works after truncate, meaning graph table was emptied
* test that the vector index size is zero after truncate in MyISAM
This commit is contained in:
Sergei Golubchik
2024-07-25 20:27:50 +02:00
parent 70575defb7
commit ebcbed6d74
8 changed files with 68 additions and 14 deletions

View File

@@ -0,0 +1,33 @@
--- a/mysql-test/main/vector.result
+++ b/mysql-test/main/vector.result
@@ -305,8 +305,30 @@
create table t1 (id int auto_increment primary key, v blob not null, vector index (v));
insert t1 (id, v) values (1, x'e360d63ebe554f3fcdbc523f4522193f5236083d');
truncate table t1;
+
+MyISAM file: datadir/test/t1#i#01
+Record format: Packed
+Character set: ? (0)
+Data records: 0 Deleted blocks: 0
+Recordlength: 30
+
+table description:
+Key Start Len Index Type
+1 3 6 unique varbin NULL
+2 2 1 multip. int8
insert t1 (id, v) values (1, x'e360d63ebe554f3fcdbc523f4522193f5236083d');
truncate table t1;
+
+MyISAM file: datadir/test/t1#i#01
+Record format: Packed
+Character set: ? (0)
+Data records: 0 Deleted blocks: 0
+Recordlength: 30
+
+table description:
+Key Start Len Index Type
+1 3 6 unique varbin NULL
+2 2 1 multip. int8
insert t1 (id, v) values (1, x'e360d63ebe554f3fcdbc523f4522193f5236083d');
select id, hex(v) from t1;
id hex(v)

View File

@@ -303,11 +303,14 @@ id hex(v)
drop table t1, t2;
db.opt
create table t1 (id int auto_increment primary key, v blob not null, vector index (v));
insert t1 (id, v) values (1, x'e360d63ebe554f3fcdbc523f4522193f5236083d');
truncate table t1;
insert t1 (v) values (x'e360d63ebe554f3fcdbc523f4522193f5236083d');
insert t1 (id, v) values (1, x'e360d63ebe554f3fcdbc523f4522193f5236083d');
truncate table t1;
select * from t1;
id v
insert t1 (id, v) values (1, x'e360d63ebe554f3fcdbc523f4522193f5236083d');
select id, hex(v) from t1;
id hex(v)
1 E360D63EBE554F3FCDBC523F4522193F5236083D
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
@@ -315,6 +318,6 @@ t1 CREATE TABLE `t1` (
`v` blob NOT NULL,
PRIMARY KEY (`id`),
VECTOR KEY `v` (`v`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
drop table t1;
db.opt

View File

@@ -103,10 +103,20 @@ drop table t1, t2;
list_files $datadir/test;
create table t1 (id int auto_increment primary key, v blob not null, vector index (v));
insert t1 (id, v) values (1, x'e360d63ebe554f3fcdbc523f4522193f5236083d');
truncate table t1;
insert t1 (v) values (x'e360d63ebe554f3fcdbc523f4522193f5236083d');
if ($MTR_COMBINATION_MYISAM) {
--replace_result $datadir datadir
--exec $MYISAMCHK -d $datadir/test/t1#i#01
}
insert t1 (id, v) values (1, x'e360d63ebe554f3fcdbc523f4522193f5236083d');
truncate table t1;
select * from t1;
if ($MTR_COMBINATION_MYISAM) {
--replace_result $datadir datadir
--exec $MYISAMCHK -d $datadir/test/t1#i#01
}
insert t1 (id, v) values (1, x'e360d63ebe554f3fcdbc523f4522193f5236083d');
select id, hex(v) from t1;
replace_result InnoDB MyISAM;
show create table t1;
drop table t1;

View File

@@ -5478,7 +5478,7 @@ handler::ha_delete_all_rows()
int err= delete_all_rows();
if (!err)
err= table->hlindexes_on_delete_all();
err= table->hlindexes_on_delete_all(false);
return err;
}
@@ -5497,7 +5497,14 @@ handler::ha_truncate()
m_lock_type == F_WRLCK);
mark_trx_read_write();
return truncate();
int err= truncate();
if (!err && table->s->hlindexes())
{
if (!(err= table->hlindex_open(table->s->keys)))
err= table->hlindexes_on_delete_all(true);
}
return err;
}

View File

@@ -9952,11 +9952,11 @@ int TABLE::hlindexes_on_delete(const uchar *buf)
return 0;
}
int TABLE::hlindexes_on_delete_all()
int TABLE::hlindexes_on_delete_all(bool truncate)
{
DBUG_ASSERT(s->hlindexes() == (hlindex != NULL));
if (hlindex && hlindex->in_use)
if (int err= mhnsw_delete_all(this, key_info + s->keys))
if (int err= mhnsw_delete_all(this, key_info + s->keys, truncate))
return err;
return 0;
}

View File

@@ -1801,7 +1801,7 @@ public:
int hlindexes_on_insert();
int hlindexes_on_update();
int hlindexes_on_delete(const uchar *buf);
int hlindexes_on_delete_all();
int hlindexes_on_delete_all(bool truncate);
int reset_hlindexes();
void prepare_triggers_for_insert_stmt_or_event();

View File

@@ -1250,7 +1250,7 @@ int mhnsw_invalidate(TABLE *table, const uchar *rec, KEY *keyinfo)
return 0;
}
int mhnsw_delete_all(TABLE *table, KEY *keyinfo)
int mhnsw_delete_all(TABLE *table, KEY *keyinfo, bool truncate)
{
TABLE *graph= table->hlindex;
@@ -1259,7 +1259,8 @@ int mhnsw_delete_all(TABLE *table, KEY *keyinfo)
DBUG_ASSERT(keyinfo->algorithm == HA_KEY_ALG_VECTOR);
DBUG_ASSERT(keyinfo->usable_key_parts == 1);
if (int err= graph->file->ha_delete_all_rows())
if (int err= truncate ? graph->file->truncate()
: graph->file->delete_all_rows())
return err;
MHNSW_Context *ctx;

View File

@@ -26,7 +26,7 @@ int mhnsw_insert(TABLE *table, KEY *keyinfo);
int mhnsw_read_first(TABLE *table, KEY *keyinfo, Item *dist, ulonglong limit);
int mhnsw_read_next(TABLE *table);
int mhnsw_invalidate(TABLE *table, const uchar *rec, KEY *keyinfo);
int mhnsw_delete_all(TABLE *table, KEY *keyinfo);
int mhnsw_delete_all(TABLE *table, KEY *keyinfo, bool truncate);
void mhnsw_free(TABLE_SHARE *share);
extern ulonglong mhnsw_cache_size;