From 918f524490f413d17d51eb2b81a0a2521caf30c1 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 16 Dec 2021 13:31:55 +0100 Subject: [PATCH] RocksDB doesn't support DESC indexes yet disallow descending indexes in rocksdb --- storage/rocksdb/ha_rocksdb.cc | 3 +-- .../rocksdb/r/index_key_block_size.result | 5 +++++ .../mysql-test/rocksdb/t/index_key_block_size.test | 6 ++++++ storage/rocksdb/rdb_datadic.cc | 13 +++++++++++-- storage/rocksdb/rdb_datadic.h | 2 +- 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc index 978fcc945ed..6dcb2562065 100644 --- a/storage/rocksdb/ha_rocksdb.cc +++ b/storage/rocksdb/ha_rocksdb.cc @@ -7533,8 +7533,7 @@ int ha_rocksdb::create_key_def(const TABLE *const table_arg, const uint i, (*new_key_def)->m_ttl_column = ttl_column; } // initialize key_def - (*new_key_def)->setup(table_arg, tbl_def_arg); - DBUG_RETURN(HA_EXIT_SUCCESS); + DBUG_RETURN((*new_key_def)->setup(table_arg, tbl_def_arg)); } int rdb_normalize_tablename(const std::string &tablename, diff --git a/storage/rocksdb/mysql-test/rocksdb/r/index_key_block_size.result b/storage/rocksdb/mysql-test/rocksdb/r/index_key_block_size.result index 4695d94b3fe..c74ce6878c7 100644 --- a/storage/rocksdb/mysql-test/rocksdb/r/index_key_block_size.result +++ b/storage/rocksdb/mysql-test/rocksdb/r/index_key_block_size.result @@ -23,6 +23,11 @@ CREATE TABLE t1 (a INT, b CHAR(8), PRIMARY KEY ind2(b(1) DESC) KEY_BLOCK_SIZE=32768 COMMENT 'big key_block_size value' ) ENGINE=rocksdb; +ERROR HY000: Table storage engine 'ROCKSDB' does not support the create option 'DESC' +CREATE TABLE t1 (a INT, +b CHAR(8), +PRIMARY KEY ind2(b(1)) KEY_BLOCK_SIZE=32768 COMMENT 'big key_block_size value' +) ENGINE=rocksdb; Warnings: Warning 1280 Name 'ind2' ignored for PRIMARY key. SHOW INDEX IN t1; diff --git a/storage/rocksdb/mysql-test/rocksdb/t/index_key_block_size.test b/storage/rocksdb/mysql-test/rocksdb/t/index_key_block_size.test index f156aec0021..4edf684383a 100644 --- a/storage/rocksdb/mysql-test/rocksdb/t/index_key_block_size.test +++ b/storage/rocksdb/mysql-test/rocksdb/t/index_key_block_size.test @@ -28,11 +28,17 @@ CREATE TABLE t1 (a INT, SHOW INDEX IN t1; DROP TABLE t1; +--error ER_ILLEGAL_HA_CREATE_OPTION CREATE TABLE t1 (a INT, b CHAR(8), PRIMARY KEY ind2(b(1) DESC) KEY_BLOCK_SIZE=32768 COMMENT 'big key_block_size value' ) ENGINE=rocksdb; +CREATE TABLE t1 (a INT, + b CHAR(8), + PRIMARY KEY ind2(b(1)) KEY_BLOCK_SIZE=32768 COMMENT 'big key_block_size value' +) ENGINE=rocksdb; + --replace_column 7 # SHOW INDEX IN t1; diff --git a/storage/rocksdb/rdb_datadic.cc b/storage/rocksdb/rdb_datadic.cc index b377edceab4..931ada0acc3 100644 --- a/storage/rocksdb/rdb_datadic.cc +++ b/storage/rocksdb/rdb_datadic.cc @@ -390,7 +390,7 @@ Rdb_key_def::~Rdb_key_def() { m_pack_info = nullptr; } -void Rdb_key_def::setup(const TABLE *const tbl, +uint Rdb_key_def::setup(const TABLE *const tbl, const Rdb_tbl_def *const tbl_def) { DBUG_ASSERT(tbl != nullptr); DBUG_ASSERT(tbl_def != nullptr); @@ -406,7 +406,7 @@ void Rdb_key_def::setup(const TABLE *const tbl, RDB_MUTEX_LOCK_CHECK(m_mutex); if (m_maxlength != 0) { RDB_MUTEX_UNLOCK_CHECK(m_mutex); - return; + return HA_EXIT_SUCCESS; } KEY *key_info = nullptr; @@ -488,6 +488,14 @@ void Rdb_key_def::setup(const TABLE *const tbl, for (uint src_i = 0; src_i < m_key_parts; src_i++, keypart_to_set++) { Field *const field = key_part ? key_part->field : nullptr; + if (key_part && key_part->key_part_flag & HA_REVERSE_SORT) + { + my_error(ER_ILLEGAL_HA_CREATE_OPTION, MYF(0), + "ROCKSDB", "DESC"); + RDB_MUTEX_UNLOCK_CHECK(m_mutex); + return HA_EXIT_FAILURE; + } + if (simulating_extkey && !hidden_pk_exists) { DBUG_ASSERT(secondary_key); /* Check if this field is already present in the key definition */ @@ -591,6 +599,7 @@ void Rdb_key_def::setup(const TABLE *const tbl, RDB_MUTEX_UNLOCK_CHECK(m_mutex); } + return HA_EXIT_SUCCESS; } /* diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h index fb368a17fba..899c6f70071 100644 --- a/storage/rocksdb/rdb_datadic.h +++ b/storage/rocksdb/rdb_datadic.h @@ -593,7 +593,7 @@ class Rdb_key_def { SECONDARY_FORMAT_VERSION_UPDATE3 = 65535, }; - void setup(const TABLE *const table, const Rdb_tbl_def *const tbl_def); + uint setup(const TABLE *const table, const Rdb_tbl_def *const tbl_def); static uint extract_ttl_duration(const TABLE *const table_arg, const Rdb_tbl_def *const tbl_def_arg,