mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-21138 Assertion col->ord_part' or
f.col->ord_part' failed in row_build_index_entry_low
First part (row0mysql.cc) fixes ins_node_set_new_row() usage workflow as it is designed to operate on empty row (see row_get_prebuilt_insert_row() for example). Second part (row0ins.cc) fixes duplicate key error in FTS_DOC_ID_INDEX since history rows must not generate entries in that index. We detect FTS_DOC_ID_INDEX by a number of attributes and skip it if the row is historical. Misc fixes: row_build_index_entry_low() does not accept non-NULL tuple for FTS index (subject assertion fails), assertion (index->type != DICT_FTS) adds code understanding. Now as historical_row is copied in row_update_vers_insert() there is no need to copy the row twice: ROW_COPY_POINTERS is used to build historical_row initially. dbug_print_rec() debug functions.
This commit is contained in:
@ -130,3 +130,22 @@ ERROR 42S02: Table 'test.xx' doesn't exist
|
||||
drop procedure pr;
|
||||
drop trigger tr;
|
||||
drop table t1;
|
||||
#
|
||||
# MDEV-21138 Assertion `col->ord_part' or `f.col->ord_part' failed in row_build_index_entry_low
|
||||
#
|
||||
create table t1 (
|
||||
f1 int, f2 text, f3 int, fulltext (f2), key(f1), key(f3),
|
||||
foreign key r (f3) references t1 (f1) on delete set null)
|
||||
with system versioning engine innodb;
|
||||
insert into t1 values (1, repeat('a', 8193), 1), (1, repeat('b', 8193), 1);
|
||||
select f1, f3, check_row(row_start, row_end) from t1;
|
||||
f1 f3 check_row(row_start, row_end)
|
||||
1 1 CURRENT ROW
|
||||
1 1 CURRENT ROW
|
||||
delete from t1;
|
||||
select f1, f3, check_row(row_start, row_end) from t1 for system_time all;
|
||||
f1 f3 check_row(row_start, row_end)
|
||||
1 1 HISTORICAL ROW
|
||||
1 NULL ERROR: row_end == row_start
|
||||
1 1 HISTORICAL ROW
|
||||
drop table t1;
|
||||
|
Reference in New Issue
Block a user