mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
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.
This commit is contained in:
@ -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 @@ error:
|
||||
|
||||
|
||||
/* 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 @@ write_buffers:
|
||||
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};
|
||||
|
||||
|
Reference in New Issue
Block a user