summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorNikita Malyavin <nikitamalyavin@gmail.com>2020-06-02 16:06:41 +1000
committerNikita Malyavin <nikitamalyavin@gmail.com>2020-06-05 20:04:37 +1000
commit0c595bdeaa5086a81b65d15bb904ff51bc812bc5 (patch)
tree0baaffe0574b0bb7309e7812bf2f66f000a664a9 /sql
parentc3e09a2d3fcf29eec9789edba9965d09211cf678 (diff)
downloadmariadb-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.cc4
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);