Skip to content

Commit

Permalink
MDEV-30528 Assertion in dtype_get_at_most_n_mbchars
Browse files Browse the repository at this point in the history
1. Exclude merging history rows into fts index.

The check !history_fts && (index->type & DICT_FTS) was just incorrect
attempt to avoid history in fts index.

2. Don't check for duplicates for history rows.
  • Loading branch information
midenok committed Jul 20, 2023
1 parent 2ba5c38 commit add0c01
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 4 deletions.
23 changes: 23 additions & 0 deletions mysql-test/suite/innodb_fts/r/innodb_fts_misc.result
Expand Up @@ -1393,3 +1393,26 @@ INSERT INTO t1 VALUES(repeat("this is the test case", 500));
ALTER TABLE t1 KEY_BLOCK_SIZE=4;
ALTER TABLE t1 KEY_BLOCK_SIZE=0;
DROP TABLE t1;
#
# MDEV-30528 Assertion in dtype_get_at_most_n_mbchars
#
create table t (f text) with system versioning character set utf8 engine=innodb;
insert into t (f) values
('mysql from tutorial dbms stands for database ...') ,
('when to use mysql well after that you went through a ...'),
('where will optimizing mysql in what tutorial we will show ...'),
('1001 mysql tricks 1. never run mysqld as root. 2. ...'),
('mysql vs. yoursql in the following database comparison ...'),
('mysql security when configured properly, mysql ...');
delete from t where f like 'mysql%';
alter table t add fulltext (f);
select * from t where match(f) against ("use");
f
when to use mysql well after that you went through a ...
select * from t where match(f) against ("run");
f
1001 mysql tricks 1. never run mysqld as root. 2. ...
select * from t where match(f) against ("tutorial");
f
where will optimizing mysql in what tutorial we will show ...
drop table t;
18 changes: 18 additions & 0 deletions mysql-test/suite/innodb_fts/t/innodb_fts_misc.test
Expand Up @@ -1341,3 +1341,21 @@ ALTER TABLE t1 KEY_BLOCK_SIZE=4;
ALTER TABLE t1 KEY_BLOCK_SIZE=0;
DROP TABLE t1;

--echo #
--echo # MDEV-30528 Assertion in dtype_get_at_most_n_mbchars
--echo #
create table t (f text) with system versioning character set utf8 engine=innodb;
insert into t (f) values
('mysql from tutorial dbms stands for database ...') ,
('when to use mysql well after that you went through a ...'),
('where will optimizing mysql in what tutorial we will show ...'),
('1001 mysql tricks 1. never run mysqld as root. 2. ...'),
('mysql vs. yoursql in the following database comparison ...'),
('mysql security when configured properly, mysql ...');
delete from t where f like 'mysql%';
alter table t add fulltext (f);
select * from t where match(f) against ("use");
select * from t where match(f) against ("run");
select * from t where match(f) against ("tutorial");
# cleanup
drop table t;
12 changes: 8 additions & 4 deletions storage/innobase/row/row0merge.cc
Expand Up @@ -502,7 +502,8 @@ row_merge_buf_add(
VCOL_STORAGE vcol_storage;
DBUG_ENTER("row_merge_buf_add");

if (buf->n_tuples >= buf->max_tuples) {
if (buf->n_tuples >= buf->max_tuples
|| (history_fts && (buf->index->type & DICT_FTS))) {
error:
n_row_added = 0;
goto end;
Expand Down Expand Up @@ -595,7 +596,8 @@ row_merge_buf_add(


/* Tokenize and process data for FTS */
if (!history_fts && (index->type & DICT_FTS)) {
if (index->type & DICT_FTS) {
ut_ad(!history_fts);
fts_doc_item_t* doc_item;
byte* value;
void* ptr;
Expand Down Expand Up @@ -1876,6 +1878,7 @@ row_merge_read_clustered_index(
mach_write_to_8(new_sys_trx_start, trx->id);
mach_write_to_8(new_sys_trx_end, TRX_ID_MAX);
uint64_t n_rows = 0;
bool history_row = false;

/* Scan the clustered index. */
for (;;) {
Expand All @@ -1892,7 +1895,7 @@ row_merge_read_clustered_index(
dtuple_t* row;
row_ext_t* ext;
page_cur_t* cur = btr_pcur_get_page_cur(&pcur);
bool history_row, history_fts = false;
bool history_fts = false;

page_cur_move_to_next(cur);

Expand Down Expand Up @@ -2527,7 +2530,8 @@ row_merge_read_clustered_index(
ut_ad(i == 0);
break;
}
} else if (dict_index_is_unique(buf->index)) {
} else if (!history_row
&& dict_index_is_unique(buf->index)) {
row_merge_dup_t dup = {
buf->index, table, col_map, 0};

Expand Down

0 comments on commit add0c01

Please sign in to comment.