Commit add0c01b authored by Aleksey Midenkov's avatar Aleksey Midenkov

MDEV-30528 Assertion in dtype_get_at_most_n_mbchars

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.
parent 2ba5c387
......@@ -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;
......@@ -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;
......@@ -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;
......@@ -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;
......@@ -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 (;;) {
......@@ -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);
......@@ -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};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment