diff options
author | Nikita Malyavin <nikitamalyavin@gmail.com> | 2020-06-02 16:06:41 +1000 |
---|---|---|
committer | Nikita Malyavin <nikitamalyavin@gmail.com> | 2020-06-05 20:04:37 +1000 |
commit | 0c595bdeaa5086a81b65d15bb904ff51bc812bc5 (patch) | |
tree | 0baaffe0574b0bb7309e7812bf2f66f000a664a9 /sql | |
parent | c3e09a2d3fcf29eec9789edba9965d09211cf678 (diff) | |
download | mariadb-git-0c595bdeaa5086a81b65d15bb904ff51bc812bc5.tar.gz |
MDEV-22434 UPDATE on RocksDB table with WITHOUT OVERLAPS fails
Insert worked incorrect as well. RocksDB used table->record[0] internally to store some
intermediate results for key conversion, during index searching among other operations.
So table->record[0] is spoiled during ha_rnd_index_map in ha_check_overlaps, so in turn
the broken record data was inserted.
The fix is to store RocksDB intermediate result in its own buffer instead of table->record[0].
`rocksdb` MTR suite is is checked and runs fine.
No need for additional tests. The existing overlaps.test covers the case completely.
However, I am not going to add anything related to rocksdb to suite, to keep it away
from additional dependencies.
To run tests with RocksDB engine, one can add following to engines.combinations:
[rocksdb]
plugin-load=$HA_ROCKSDB_SO
default-storage-engine=rocksdb
rocksdb
Diffstat (limited to 'sql')
-rw-r--r-- | sql/sql_table.cc | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/sql/sql_table.cc b/sql/sql_table.cc index d748bd959bc..6efd0210652 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4279,7 +4279,9 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, key_info->without_overlaps= key->without_overlaps; if (key_info->without_overlaps) { - if (key_info->algorithm == HA_KEY_ALG_LONG_HASH) + if (key_info->algorithm == HA_KEY_ALG_HASH || + key_info->algorithm == HA_KEY_ALG_LONG_HASH) + { my_error(ER_KEY_CANT_HAVE_WITHOUT_OVERLAPS, MYF(0), key_info->name.str); DBUG_RETURN(true); |