mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-04 04:46:15 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			1304 lines
		
	
	
	
		
			55 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			1304 lines
		
	
	
	
		
			55 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* -*- c-basic-offset: 2; indent-tabs-mode: nil -*- */
 | 
						|
/*
 | 
						|
  Copyright(C) 2010 Tetsuro IKEDA
 | 
						|
  Copyright(C) 2010-2013 Kentoku SHIBA
 | 
						|
  Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
 | 
						|
 | 
						|
  This library is free software; you can redistribute it and/or
 | 
						|
  modify it under the terms of the GNU Lesser General Public
 | 
						|
  License as published by the Free Software Foundation; either
 | 
						|
  version 2.1 of the License, or (at your option) any later version.
 | 
						|
 | 
						|
  This library is distributed in the hope that it will be useful,
 | 
						|
  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
  Lesser General Public License for more details.
 | 
						|
 | 
						|
  You should have received a copy of the GNU Lesser General Public
 | 
						|
  License along with this library; if not, write to the Free Software
 | 
						|
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1335  USA
 | 
						|
*/
 | 
						|
 | 
						|
#ifndef HA_MROONGA_HPP_
 | 
						|
#define HA_MROONGA_HPP_
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
#include <groonga.h>
 | 
						|
#include "mrn_mysql_compat.h"
 | 
						|
#include <mrn_operations.hpp>
 | 
						|
#include <mrn_database.hpp>
 | 
						|
 | 
						|
#define mrn_override override
 | 
						|
 | 
						|
 | 
						|
#if (MYSQL_VERSION_ID >= 50514 && MYSQL_VERSION_ID < 50600)
 | 
						|
#  define MRN_HANDLER_HAVE_FINAL_ADD_INDEX 1
 | 
						|
#endif
 | 
						|
 | 
						|
#if (MYSQL_VERSION_ID >= 50603) || defined(MRN_MARIADB_P)
 | 
						|
#  define MRN_HANDLER_HAVE_HA_RND_NEXT 1
 | 
						|
#  define MRN_HANDLER_HAVE_HA_RND_POS 1
 | 
						|
#  define MRN_HANDLER_HAVE_HA_INDEX_READ_MAP 1
 | 
						|
#  define MRN_HANDLER_HAVE_HA_INDEX_READ_IDX_MAP 1
 | 
						|
#  define MRN_HANDLER_HAVE_HA_INDEX_NEXT 1
 | 
						|
#  define MRN_HANDLER_HAVE_HA_INDEX_PREV 1
 | 
						|
#  define MRN_HANDLER_HAVE_HA_INDEX_FIRST 1
 | 
						|
#  define MRN_HANDLER_HAVE_HA_INDEX_LAST 1
 | 
						|
#  define MRN_HANDLER_HAVE_HA_INDEX_NEXT_SAME 1
 | 
						|
#endif
 | 
						|
 | 
						|
#if (MYSQL_VERSION_ID >= 50604) || defined(MRN_MARIADB_P)
 | 
						|
#  define MRN_HANDLER_HAVE_HA_CLOSE 1
 | 
						|
#  define MRN_HANDLER_HAVE_MULTI_RANGE_READ 1
 | 
						|
#endif
 | 
						|
 | 
						|
#if (MYSQL_VERSION_ID >= 50607)
 | 
						|
#  define MRN_HANDLER_HAVE_CHECK_IF_SUPPORTED_INPLACE_ALTER 1
 | 
						|
#  define MRN_HANDLER_HAVE_HA_PREPARE_INPLACE_ALTER_TABLE 1
 | 
						|
#  define MRN_HANDLER_HAVE_HA_INPLACE_ALTER_TABLE 1
 | 
						|
#  define MRN_HANDLER_HAVE_HA_COMMIT_INPLACE_ALTER_TABLE 1
 | 
						|
#  define MRN_SUPPORT_FOREIGN_KEYS 1
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef MRN_MARIADB_P
 | 
						|
#  define MRN_HANDLER_HAVE_INDEX_READ_LAST_MAP
 | 
						|
#  if MYSQL_VERSION_ID >= 50611
 | 
						|
#    define MRN_HANDLER_HAVE_HA_INDEX_READ_LAST_MAP
 | 
						|
#  endif
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef MRN_MARIADB_P
 | 
						|
#  define MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID < 50600
 | 
						|
#  define MRN_HANDLER_HAVE_GET_TABLESPACE_NAME
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID >= 50607
 | 
						|
#  define MRN_HANDLER_HAVE_SET_HA_SHARE_REF
 | 
						|
#endif
 | 
						|
 | 
						|
#define MRN_BIG_TABLES
 | 
						|
 | 
						|
#ifdef MRN_BIG_TABLES
 | 
						|
#  define MRN_HA_ROWS_FORMAT "llu"
 | 
						|
#else
 | 
						|
#  define MRN_HA_ROWS_FORMAT "lu"
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef MRN_MARIADB_P
 | 
						|
#  define MRN_NEED_FREE_STRING_MEMALLOC_PLUGIN_VAR
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef MRN_MARIADB_P
 | 
						|
#  define MRN_HAVE_HA_EXTRA_DETACH_CHILD
 | 
						|
#  define MRN_HAVE_HA_EXTRA_PREPARE_FOR_FORCED_CLOSE
 | 
						|
#endif
 | 
						|
 | 
						|
#if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 80002)
 | 
						|
#define MRN_HAVE_HA_EXTRA_SKIP_SERIALIZABLE_DD_VIEW
 | 
						|
#define MRN_HAVE_HA_EXTRA_BEGIN_ALTER_COPY
 | 
						|
#define MRN_HAVE_HA_EXTRA_END_ALTER_COPY
 | 
						|
#define MRN_HAVE_HA_EXTRA_NO_AUTOINC_LOCKING
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID >= 50607 && \
 | 
						|
    (!defined(MRN_MARIADB_P) || MYSQL_VERSION_ID < 100008)
 | 
						|
#  define MRN_HAVE_HA_EXTRA_EXPORT
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID >= 50617 && !defined(MRN_MARIADB_P)
 | 
						|
#  define MRN_HAVE_HA_EXTRA_SECONDARY_SORT_ROWID
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID >= 50604 && !defined(MRN_MARIADB_P)
 | 
						|
#  define MRN_TIMESTAMP_USE_TIMEVAL
 | 
						|
#elif defined(MRN_MARIADB_P)
 | 
						|
#  define MRN_TIMESTAMP_USE_MY_TIME_T
 | 
						|
#else
 | 
						|
#  define MRN_TIMESTAMP_USE_LONG
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID < 50600 && !defined(MRN_MARIADB_P)
 | 
						|
#  define MRN_FIELD_STORE_TIME_NEED_TYPE
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID < 50706 || defined(MRN_MARIADB_P)
 | 
						|
#  define MRN_HAVE_TL_WRITE_DELAYED
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P)
 | 
						|
#  define MRN_HAVE_TL_WRITE_CONCURRENT_DEFAULT
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef MRN_MARIADB_P
 | 
						|
#  define MRN_HANDLER_AUTO_REPAIR_HAVE_ERROR
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID >= 50604
 | 
						|
#  define MRN_JOIN_TAB_HAVE_CONDITION
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID < 50600
 | 
						|
#  define MRN_RBR_UPDATE_NEED_ALL_COLUMNS
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID >= 50500
 | 
						|
#  define MRN_ROW_BASED_CHECK_IS_METHOD
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID >= 50600
 | 
						|
#  define MRN_HAVE_HA_REBIND_PSI
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID >= 50612 && !defined(MRN_MARIADB_P)
 | 
						|
#  define MRN_HAVE_POINT_XY
 | 
						|
#endif
 | 
						|
 | 
						|
#if (defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100000)
 | 
						|
#  define MRN_HANDLER_START_BULK_INSERT_HAS_FLAGS
 | 
						|
#endif
 | 
						|
 | 
						|
#if (defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100010)
 | 
						|
#  define MRN_HAVE_TDC_LOCK_TABLE_SHARE
 | 
						|
#  if MYSQL_VERSION_ID >= 100100
 | 
						|
#    define MRN_TABLE_SHARE_TDC_IS_POINTER
 | 
						|
#  endif
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef MRN_MARIADB_P
 | 
						|
#  if MYSQL_VERSION_ID >= 50542 && MYSQL_VERSION_ID < 100000
 | 
						|
#    define MRN_SUPPORT_THDVAR_SET
 | 
						|
#  elif MYSQL_VERSION_ID >= 100017
 | 
						|
#    define MRN_SUPPORT_THDVAR_SET
 | 
						|
#  endif
 | 
						|
#else
 | 
						|
#  define MRN_SUPPORT_THDVAR_SET
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef MRN_MARIADB_P
 | 
						|
#  if MYSQL_VERSION_ID < 100000
 | 
						|
#    define MRN_SUPPORT_PARTITION
 | 
						|
#  endif
 | 
						|
#else
 | 
						|
#  define MRN_SUPPORT_PARTITION
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P)
 | 
						|
#  define MRN_FLUSH_LOGS_HAVE_BINLOG_GROUP_FLUSH
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID < 50706 || defined(MRN_MARIADB_P)
 | 
						|
#  define MRN_HAVE_HTON_ALTER_TABLE_FLAGS
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID >= 50706
 | 
						|
#  define MRN_FOREIGN_KEY_USE_CONST_STRING
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID < 50706 || defined(MRN_MARIADB_P)
 | 
						|
#  define MRN_HANDLER_IS_FATAL_ERROR_HAVE_FLAGS
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID < 50706 || defined(MRN_MARIADB_P)
 | 
						|
#  define MRN_HANDLER_HAVE_RESET_AUTO_INCREMENT
 | 
						|
#endif
 | 
						|
 | 
						|
#if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 50709) ||   \
 | 
						|
  (defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100203)
 | 
						|
#  define MRN_ALTER_INPLACE_INFO_ALTER_STORED_COLUMN_TYPE \
 | 
						|
  ALTER_STORED_COLUMN_TYPE
 | 
						|
#  define MRN_ALTER_INPLACE_INFO_ALTER_STORED_COLUMN_ORDER \
 | 
						|
  ALTER_STORED_COLUMN_ORDER
 | 
						|
#else
 | 
						|
#  define MRN_ALTER_INPLACE_INFO_ALTER_STORED_COLUMN_TYPE \
 | 
						|
  Alter_inplace_info::ALTER_COLUMN_TYPE
 | 
						|
#  define MRN_ALTER_INPLACE_INFO_ALTER_STORED_COLUMN_ORDER \
 | 
						|
  Alter_inplace_info::ALTER_COLUMN_ORDER
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID >= 50700 && !defined(MRN_MARIADB_P)
 | 
						|
#  define MRN_HANDLER_RECORDS_RETURN_ERROR
 | 
						|
#endif
 | 
						|
 | 
						|
#if MYSQL_VERSION_ID < 80002 || defined(MRN_MARIADB_P)
 | 
						|
#  define MRN_HANDLER_HAVE_KEYS_TO_USE_FOR_SCANNING
 | 
						|
#endif
 | 
						|
 | 
						|
#if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 80002)
 | 
						|
#  define MRN_ST_MYSQL_PLUGIN_HAVE_CHECK_UNINSTALL
 | 
						|
#endif
 | 
						|
 | 
						|
#if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 80002)
 | 
						|
#  define MRN_HANDLER_OPEN_HAVE_TABLE_DEFINITION
 | 
						|
#  define MRN_HANDLER_CREATE_HAVE_TABLE_DEFINITION
 | 
						|
#endif
 | 
						|
 | 
						|
#if (!defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 80002)
 | 
						|
#  define MRN_HANDLERTON_CREATE_HAVE_PARTITIONED
 | 
						|
#endif
 | 
						|
 | 
						|
#if defined(HAVE_PSI_INTERFACE) &&                      \
 | 
						|
  (MYSQL_VERSION_ID < 80002 || defined(MRN_MARIADB_P))
 | 
						|
#  define MRN_HAVE_PSI_SERVER
 | 
						|
#endif
 | 
						|
 | 
						|
class ha_mroonga;
 | 
						|
 | 
						|
/* structs */
 | 
						|
struct st_mrn_ft_info
 | 
						|
{
 | 
						|
  struct _ft_vft *please;
 | 
						|
#ifdef HA_CAN_FULLTEXT_EXT
 | 
						|
  struct _ft_vft_ext *could_you;
 | 
						|
#endif
 | 
						|
  grn_ctx *ctx;
 | 
						|
  grn_encoding encoding;
 | 
						|
  grn_obj *table;
 | 
						|
  grn_obj *result;
 | 
						|
  grn_obj *score_column;
 | 
						|
  grn_obj key;
 | 
						|
  grn_obj score;
 | 
						|
  uint active_index;
 | 
						|
  KEY *key_info;
 | 
						|
  KEY *primary_key_info;
 | 
						|
  grn_obj *cursor;
 | 
						|
  grn_obj *id_accessor;
 | 
						|
  grn_obj *key_accessor;
 | 
						|
  ha_mroonga *mroonga;
 | 
						|
};
 | 
						|
 | 
						|
#ifdef MRN_SUPPORT_CUSTOM_OPTIONS
 | 
						|
struct ha_field_option_struct
 | 
						|
{
 | 
						|
  const char *groonga_type;
 | 
						|
  const char *flags;
 | 
						|
};
 | 
						|
 | 
						|
struct ha_index_option_struct
 | 
						|
{
 | 
						|
  const char *tokenizer;
 | 
						|
  const char *normalizer;
 | 
						|
  const char *token_filters;
 | 
						|
  const char *flags;
 | 
						|
};
 | 
						|
#endif
 | 
						|
 | 
						|
/* handler class */
 | 
						|
class ha_mroonga: public handler
 | 
						|
{
 | 
						|
public:
 | 
						|
  handler   *wrap_handler;
 | 
						|
  bool      is_clone;
 | 
						|
  ha_mroonga *parent_for_clone;
 | 
						|
  MEM_ROOT  *mem_root_for_clone;
 | 
						|
  grn_obj   key_buffer;
 | 
						|
  grn_id    record_id;
 | 
						|
  grn_id    *key_id;
 | 
						|
  grn_id    *del_key_id;
 | 
						|
  MY_BITMAP multiple_column_key_bitmap;
 | 
						|
 | 
						|
private:
 | 
						|
  THR_LOCK_DATA thr_lock_data;
 | 
						|
 | 
						|
  // for wrapper mode (TODO: need to be confirmed)
 | 
						|
  uint      wrap_ft_init_count;
 | 
						|
  MRN_SHARE *share;
 | 
						|
  KEY       *wrap_key_info;
 | 
						|
  KEY       *base_key_info;
 | 
						|
  key_part_map pk_keypart_map;
 | 
						|
  MEM_ROOT  mem_root;
 | 
						|
  /// for create table and alter table
 | 
						|
  mutable bool        analyzed_for_create;
 | 
						|
  mutable TABLE       table_for_create;
 | 
						|
  mutable MRN_SHARE   share_for_create;
 | 
						|
  mutable TABLE_SHARE table_share_for_create;
 | 
						|
  mutable MEM_ROOT    mem_root_for_create;
 | 
						|
  mutable handler     *wrap_handler_for_create;
 | 
						|
#ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
 | 
						|
  handler_add_index *hnd_add_index;
 | 
						|
#endif
 | 
						|
#ifdef MRN_HANDLER_HAVE_CHECK_IF_SUPPORTED_INPLACE_ALTER
 | 
						|
  alter_table_operations alter_handler_flags;
 | 
						|
  KEY         *alter_key_info_buffer;
 | 
						|
  uint        alter_key_count;
 | 
						|
  uint        alter_index_drop_count;
 | 
						|
  KEY         *alter_index_drop_buffer;
 | 
						|
  uint        alter_index_add_count;
 | 
						|
  uint        *alter_index_add_buffer;
 | 
						|
  TABLE       *wrap_altered_table;
 | 
						|
  KEY         *wrap_altered_table_key_info;
 | 
						|
  TABLE_SHARE *wrap_altered_table_share;
 | 
						|
  KEY         *wrap_altered_table_share_key_info;
 | 
						|
#else
 | 
						|
  KEY         *wrap_alter_key_info;
 | 
						|
#endif
 | 
						|
  int mrn_lock_type;
 | 
						|
 | 
						|
  // for groonga objects
 | 
						|
  grn_ctx ctx_entity_;
 | 
						|
  grn_ctx *ctx;
 | 
						|
  grn_obj *grn_table;
 | 
						|
  grn_obj **grn_columns;
 | 
						|
  grn_obj **grn_column_ranges;
 | 
						|
  grn_obj **grn_index_tables;
 | 
						|
  grn_obj **grn_index_columns;
 | 
						|
 | 
						|
  // buffers
 | 
						|
  grn_obj  encoded_key_buffer;
 | 
						|
  grn_obj  old_value_buffer;
 | 
						|
  grn_obj  new_value_buffer;
 | 
						|
  grn_obj top_left_point;
 | 
						|
  grn_obj bottom_right_point;
 | 
						|
  grn_obj source_point;
 | 
						|
  double top_left_longitude_in_degree;
 | 
						|
  double bottom_right_longitude_in_degree;
 | 
						|
  double bottom_right_latitude_in_degree;
 | 
						|
  double top_left_latitude_in_degree;
 | 
						|
 | 
						|
  // for search
 | 
						|
  grn_obj *grn_source_column_geo;
 | 
						|
  grn_obj *cursor_geo;
 | 
						|
  grn_table_cursor *cursor;
 | 
						|
  grn_table_cursor *index_table_cursor;
 | 
						|
  grn_obj *empty_value_records;
 | 
						|
  grn_table_cursor *empty_value_records_cursor;
 | 
						|
  grn_obj *sorted_result;
 | 
						|
  grn_obj *matched_record_keys;
 | 
						|
  String  *blob_buffers;
 | 
						|
 | 
						|
  // for error report
 | 
						|
  uint dup_key;
 | 
						|
 | 
						|
  // for optimization
 | 
						|
  bool count_skip;
 | 
						|
  bool fast_order_limit;
 | 
						|
  bool fast_order_limit_with_index;
 | 
						|
 | 
						|
  // for context
 | 
						|
  bool ignoring_duplicated_key;
 | 
						|
  bool inserting_with_update;
 | 
						|
  bool fulltext_searching;
 | 
						|
  bool ignoring_no_key_columns;
 | 
						|
  bool replacing_;
 | 
						|
  uint written_by_row_based_binlog;
 | 
						|
 | 
						|
  // for ft in where clause test
 | 
						|
  Item_func_match *current_ft_item;
 | 
						|
 | 
						|
  mrn::Operations *operations_;
 | 
						|
 | 
						|
public:
 | 
						|
  ha_mroonga(handlerton *hton, TABLE_SHARE *share_arg);
 | 
						|
  ~ha_mroonga();
 | 
						|
  const char *table_type() const override;           // required
 | 
						|
  const char *index_type(uint inx) mrn_override;
 | 
						|
  const char **bas_ext() const;                                    // required
 | 
						|
 | 
						|
  ulonglong table_flags() const mrn_override;                                   // required
 | 
						|
  ulong index_flags(uint idx, uint part, bool all_parts) const mrn_override;    // required
 | 
						|
 | 
						|
  // required
 | 
						|
  int create(const char *name, TABLE *form, HA_CREATE_INFO *info
 | 
						|
#ifdef MRN_HANDLER_CREATE_HAVE_TABLE_DEFINITION
 | 
						|
             ,
 | 
						|
             dd::Table *table_def
 | 
						|
#endif
 | 
						|
    ) mrn_override;
 | 
						|
  // required
 | 
						|
  int open(const char *name, int mode, uint open_options
 | 
						|
#ifdef MRN_HANDLER_OPEN_HAVE_TABLE_DEFINITION
 | 
						|
           ,
 | 
						|
           const dd::Table *table_def
 | 
						|
#endif
 | 
						|
    ) mrn_override;
 | 
						|
#ifndef MRN_HANDLER_HAVE_HA_CLOSE
 | 
						|
  int close();                                                     // required
 | 
						|
#endif
 | 
						|
  int info(uint flag) mrn_override;                                             // required
 | 
						|
 | 
						|
  uint lock_count() const mrn_override;
 | 
						|
  THR_LOCK_DATA **store_lock(THD *thd,                             // required
 | 
						|
                             THR_LOCK_DATA **to,
 | 
						|
                             enum thr_lock_type lock_type) mrn_override;
 | 
						|
  int external_lock(THD *thd, int lock_type) mrn_override;
 | 
						|
 | 
						|
  int rnd_init(bool scan) mrn_override;                                         // required
 | 
						|
  int rnd_end() mrn_override;
 | 
						|
#ifndef MRN_HANDLER_HAVE_HA_RND_NEXT
 | 
						|
  int rnd_next(uchar *buf);                                        // required
 | 
						|
#endif
 | 
						|
#ifndef MRN_HANDLER_HAVE_HA_RND_POS
 | 
						|
  int rnd_pos(uchar *buf, uchar *pos);                             // required
 | 
						|
#endif
 | 
						|
  void position(const uchar *record) mrn_override;                              // required
 | 
						|
  int extra(enum ha_extra_function operation) mrn_override;
 | 
						|
  int extra_opt(enum ha_extra_function operation, ulong cache_size) mrn_override;
 | 
						|
 | 
						|
  int delete_table(const char *name) mrn_override;
 | 
						|
  int write_row(const uchar *buf) mrn_override;
 | 
						|
  int update_row(const uchar *old_data, const uchar *new_data) mrn_override;
 | 
						|
  int delete_row(const uchar *buf) mrn_override;
 | 
						|
 | 
						|
  uint max_supported_record_length() const   mrn_override;
 | 
						|
  uint max_supported_keys() const            mrn_override;
 | 
						|
  uint max_supported_key_parts() const       mrn_override;
 | 
						|
  uint max_supported_key_length() const      mrn_override;
 | 
						|
  uint max_supported_key_part_length() const mrn_override;
 | 
						|
 | 
						|
  ha_rows records_in_range(uint inx, const key_range *min_key,
 | 
						|
                           const key_range *max_key, page_range *pages) mrn_override;
 | 
						|
  int index_init(uint idx, bool sorted) mrn_override;
 | 
						|
  int index_end() mrn_override;
 | 
						|
#ifndef MRN_HANDLER_HAVE_HA_INDEX_READ_MAP
 | 
						|
  int index_read_map(uchar * buf, const uchar * key,
 | 
						|
                     key_part_map keypart_map,
 | 
						|
                     enum ha_rkey_function find_flag);
 | 
						|
#endif
 | 
						|
#ifdef MRN_HANDLER_HAVE_INDEX_READ_LAST_MAP
 | 
						|
  int index_read_last_map(uchar *buf, const uchar *key,
 | 
						|
                          key_part_map keypart_map);
 | 
						|
#endif
 | 
						|
#ifndef MRN_HANDLER_HAVE_HA_INDEX_NEXT
 | 
						|
  int index_next(uchar *buf);
 | 
						|
#endif
 | 
						|
#ifndef MRN_HANDLER_HAVE_HA_INDEX_PREV
 | 
						|
  int index_prev(uchar *buf);
 | 
						|
#endif
 | 
						|
#ifndef MRN_HANDLER_HAVE_HA_INDEX_FIRST
 | 
						|
  int index_first(uchar *buf);
 | 
						|
#endif
 | 
						|
#ifndef MRN_HANDLER_HAVE_HA_INDEX_LAST
 | 
						|
  int index_last(uchar *buf);
 | 
						|
#endif
 | 
						|
  int index_next_same(uchar *buf, const uchar *key, uint keylen) mrn_override;
 | 
						|
 | 
						|
  int ft_init() mrn_override;
 | 
						|
  FT_INFO *ft_init_ext(uint flags, uint inx, String *key) mrn_override;
 | 
						|
  int ft_read(uchar *buf) mrn_override;
 | 
						|
 | 
						|
  const Item *cond_push(const Item *cond) mrn_override;
 | 
						|
  void cond_pop() mrn_override;
 | 
						|
 | 
						|
  bool get_error_message(int error, String *buf) mrn_override;
 | 
						|
 | 
						|
  int reset() mrn_override;
 | 
						|
 | 
						|
  handler *clone(const char *name, MEM_ROOT *mem_root) mrn_override;
 | 
						|
  uint8 table_cache_type() mrn_override;
 | 
						|
#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ
 | 
						|
  ha_rows multi_range_read_info_const(uint keyno, RANGE_SEQ_IF *seq,
 | 
						|
                                      void *seq_init_param,
 | 
						|
                                      uint n_ranges, uint *bufsz,
 | 
						|
                                      uint *flags, ha_rows limit,
 | 
						|
                                      Cost_estimate *cost) mrn_override;
 | 
						|
  ha_rows multi_range_read_info(uint keyno, uint n_ranges, uint keys,
 | 
						|
#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
 | 
						|
                                uint key_parts,
 | 
						|
#endif
 | 
						|
                                uint *bufsz, uint *flags, Cost_estimate *cost) mrn_override;
 | 
						|
  int multi_range_read_init(RANGE_SEQ_IF *seq, void *seq_init_param,
 | 
						|
                            uint n_ranges, uint mode,
 | 
						|
                            HANDLER_BUFFER *buf) mrn_override;
 | 
						|
  int multi_range_read_next(range_id_t *range_info) mrn_override;
 | 
						|
#else // MRN_HANDLER_HAVE_MULTI_RANGE_READ
 | 
						|
  int read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
 | 
						|
                             KEY_MULTI_RANGE *ranges,
 | 
						|
                             uint range_count,
 | 
						|
                             bool sorted,
 | 
						|
                             HANDLER_BUFFER *buffer);
 | 
						|
  int read_multi_range_next(KEY_MULTI_RANGE **found_range_p);
 | 
						|
#endif // MRN_HANDLER_HAVE_MULTI_RANGE_READ
 | 
						|
#ifdef MRN_HANDLER_START_BULK_INSERT_HAS_FLAGS
 | 
						|
  void start_bulk_insert(ha_rows rows, uint flags) mrn_override;
 | 
						|
#else
 | 
						|
  void start_bulk_insert(ha_rows rows);
 | 
						|
#endif
 | 
						|
  int end_bulk_insert() mrn_override;
 | 
						|
  int delete_all_rows() mrn_override;
 | 
						|
  int truncate() mrn_override;
 | 
						|
  IO_AND_CPU_COST scan_time() mrn_override;
 | 
						|
  IO_AND_CPU_COST rnd_pos_time(ha_rows rows) mrn_override;
 | 
						|
  IO_AND_CPU_COST keyread_time(uint index, ulong ranges, ha_rows rows, ulonglong blocks) mrn_override;
 | 
						|
#ifdef MRN_HANDLER_HAVE_KEYS_TO_USE_FOR_SCANNING
 | 
						|
  const key_map *keys_to_use_for_scanning() mrn_override;
 | 
						|
#endif
 | 
						|
  ha_rows estimate_rows_upper_bound() mrn_override;
 | 
						|
  void update_create_info(HA_CREATE_INFO* create_info) mrn_override;
 | 
						|
  int rename_table(const char *from, const char *to) mrn_override;
 | 
						|
  bool is_crashed() const mrn_override;
 | 
						|
  bool auto_repair(int error) const mrn_override;
 | 
						|
  bool auto_repair() const;
 | 
						|
  int disable_indexes(key_map map, bool persist) mrn_override;
 | 
						|
  int enable_indexes(key_map map, bool persist) mrn_override;
 | 
						|
  int check(THD* thd, HA_CHECK_OPT* check_opt) mrn_override;
 | 
						|
  int repair(THD* thd, HA_CHECK_OPT* check_opt) mrn_override;
 | 
						|
  bool check_and_repair(THD *thd) mrn_override;
 | 
						|
  int analyze(THD* thd, HA_CHECK_OPT* check_opt) mrn_override;
 | 
						|
  int optimize(THD* thd, HA_CHECK_OPT* check_opt) mrn_override;
 | 
						|
  bool is_fatal_error(int error_num, uint flags=0) mrn_override;
 | 
						|
  bool check_if_incompatible_data(HA_CREATE_INFO *create_info,
 | 
						|
                                  uint table_changes) mrn_override;
 | 
						|
#ifdef MRN_HANDLER_HAVE_CHECK_IF_SUPPORTED_INPLACE_ALTER
 | 
						|
  enum_alter_inplace_result
 | 
						|
  check_if_supported_inplace_alter(TABLE *altered_table,
 | 
						|
                                   Alter_inplace_info *ha_alter_info) mrn_override;
 | 
						|
#else
 | 
						|
  alter_table_operations alter_table_flags(alter_table_operations flags);
 | 
						|
#  ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
 | 
						|
  int add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys,
 | 
						|
                handler_add_index **add);
 | 
						|
  int final_add_index(handler_add_index *add, bool commit);
 | 
						|
#  else
 | 
						|
  int add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys);
 | 
						|
#  endif
 | 
						|
  int prepare_drop_index(TABLE *table_arg, uint *key_num, uint num_of_keys);
 | 
						|
  int final_drop_index(TABLE *table_arg);
 | 
						|
#endif
 | 
						|
  int update_auto_increment();
 | 
						|
  void set_next_insert_id(ulonglong id);
 | 
						|
  void get_auto_increment(ulonglong offset, ulonglong increment, ulonglong nb_desired_values,
 | 
						|
                          ulonglong *first_value, ulonglong *nb_reserved_values) mrn_override;
 | 
						|
  void restore_auto_increment(ulonglong prev_insert_id) mrn_override;
 | 
						|
  void release_auto_increment() mrn_override;
 | 
						|
  int check_for_upgrade(HA_CHECK_OPT *check_opt) mrn_override;
 | 
						|
#ifdef MRN_HANDLER_HAVE_RESET_AUTO_INCREMENT
 | 
						|
  int reset_auto_increment(ulonglong value) mrn_override;
 | 
						|
#endif
 | 
						|
  bool was_semi_consistent_read() mrn_override;
 | 
						|
  void try_semi_consistent_read(bool yes) mrn_override;
 | 
						|
  void unlock_row() mrn_override;
 | 
						|
  int start_stmt(THD *thd, thr_lock_type lock_type) mrn_override;
 | 
						|
 | 
						|
protected:
 | 
						|
#ifdef MRN_HANDLER_RECORDS_RETURN_ERROR
 | 
						|
  int records(ha_rows *num_rows);
 | 
						|
#else
 | 
						|
  ha_rows records() mrn_override;
 | 
						|
#endif
 | 
						|
#ifdef MRN_HANDLER_HAVE_HA_RND_NEXT
 | 
						|
  int rnd_next(uchar *buf) mrn_override;
 | 
						|
#endif
 | 
						|
#ifdef MRN_HANDLER_HAVE_HA_RND_POS
 | 
						|
  int rnd_pos(uchar *buf, uchar *pos) mrn_override;
 | 
						|
#endif
 | 
						|
#ifdef MRN_HANDLER_HAVE_HA_INDEX_READ_MAP
 | 
						|
  int index_read_map(uchar *buf, const uchar *key,
 | 
						|
                     key_part_map keypart_map,
 | 
						|
                     enum ha_rkey_function find_flag) mrn_override;
 | 
						|
#endif
 | 
						|
#ifdef MRN_HANDLER_HAVE_HA_INDEX_NEXT
 | 
						|
  int index_next(uchar *buf) mrn_override;
 | 
						|
#endif
 | 
						|
#ifdef MRN_HANDLER_HAVE_HA_INDEX_PREV
 | 
						|
  int index_prev(uchar *buf) mrn_override;
 | 
						|
#endif
 | 
						|
#ifdef MRN_HANDLER_HAVE_HA_INDEX_FIRST
 | 
						|
  int index_first(uchar *buf) mrn_override;
 | 
						|
#endif
 | 
						|
#ifdef MRN_HANDLER_HAVE_HA_INDEX_LAST
 | 
						|
  int index_last(uchar *buf) mrn_override;
 | 
						|
#endif
 | 
						|
  void change_table_ptr(TABLE *table_arg, TABLE_SHARE *share_arg) mrn_override;
 | 
						|
  bool is_fk_defined_on_table_or_index(uint index) mrn_override;
 | 
						|
  char *get_foreign_key_create_info() mrn_override;
 | 
						|
#ifdef MRN_HANDLER_HAVE_GET_TABLESPACE_NAME
 | 
						|
  char *get_tablespace_name(THD *thd, char *name, uint name_len);
 | 
						|
#endif
 | 
						|
  bool can_switch_engines() mrn_override;
 | 
						|
  int get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list) mrn_override;
 | 
						|
  int get_parent_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list) mrn_override;
 | 
						|
  bool referenced_by_foreign_key() const noexcept mrn_override;
 | 
						|
  void init_table_handle_for_HANDLER() mrn_override;
 | 
						|
  void free_foreign_key_create_info(char* str) mrn_override;
 | 
						|
#ifdef MRN_HAVE_HA_REBIND_PSI
 | 
						|
  void unbind_psi() mrn_override;
 | 
						|
  void rebind_psi() mrn_override;
 | 
						|
#endif
 | 
						|
  my_bool register_query_cache_table(THD *thd,
 | 
						|
                                     const char *table_key,
 | 
						|
                                     uint key_length,
 | 
						|
                                     qc_engine_callback *engine_callback,
 | 
						|
                                     ulonglong *engine_data) mrn_override;
 | 
						|
#ifdef MRN_HANDLER_HAVE_CHECK_IF_SUPPORTED_INPLACE_ALTER
 | 
						|
  bool prepare_inplace_alter_table(TABLE *altered_table,
 | 
						|
                                   Alter_inplace_info *ha_alter_info) mrn_override;
 | 
						|
  bool inplace_alter_table(TABLE *altered_table,
 | 
						|
                           Alter_inplace_info *ha_alter_info) mrn_override;
 | 
						|
  bool commit_inplace_alter_table(TABLE *altered_table,
 | 
						|
                                  Alter_inplace_info *ha_alter_info,
 | 
						|
                                  bool commit) mrn_override;
 | 
						|
#endif
 | 
						|
 | 
						|
private:
 | 
						|
  void mkdir_p(const char *directory);
 | 
						|
  ulonglong file_size(const char *path);
 | 
						|
 | 
						|
  bool have_unique_index();
 | 
						|
 | 
						|
  bool is_foreign_key_field(const char *table_name,
 | 
						|
                            const char *field_name);
 | 
						|
 | 
						|
  void push_warning_unsupported_spatial_index_search(enum ha_rkey_function flag);
 | 
						|
  void clear_cursor();
 | 
						|
  void clear_cursor_geo();
 | 
						|
  void clear_empty_value_records();
 | 
						|
  void clear_search_result();
 | 
						|
  void clear_search_result_geo();
 | 
						|
  void clear_indexes();
 | 
						|
  int add_wrap_hton(const char *path, handlerton *wrap_handlerton);
 | 
						|
  void remove_related_files(const char *base_path);
 | 
						|
  void remove_grn_obj_force(const char *name);
 | 
						|
  int drop_index(MRN_SHARE *target_share, uint key_index);
 | 
						|
  int drop_indexes_normal(const char *table_name, grn_obj *table);
 | 
						|
  int drop_indexes_multiple(const char *table_name, grn_obj *table,
 | 
						|
                            const char *index_table_name_separator);
 | 
						|
  int drop_indexes(const char *table_name);
 | 
						|
  bool find_column_flags(Field *field, MRN_SHARE *mrn_share, int i,
 | 
						|
                         grn_obj_flags *column_flags);
 | 
						|
  grn_obj *find_column_type(Field *field, MRN_SHARE *mrn_share, int i,
 | 
						|
                            int error_code);
 | 
						|
  grn_obj *find_tokenizer(KEY *key, MRN_SHARE *mrn_share, int i);
 | 
						|
  grn_obj *find_tokenizer(const char *name, int name_length);
 | 
						|
  bool have_custom_normalizer(KEY *key) const;
 | 
						|
  grn_obj *find_normalizer(KEY *key);
 | 
						|
  grn_obj *find_normalizer(KEY *key, const char *name);
 | 
						|
  bool find_index_column_flags(KEY *key, grn_column_flags *index_column_flags);
 | 
						|
  bool find_token_filters(KEY *key, grn_obj *token_filters);
 | 
						|
  bool find_token_filters_put(grn_obj *token_filters,
 | 
						|
                              const char *token_filter_name,
 | 
						|
                              int token_filter_name_length);
 | 
						|
  bool find_token_filters_fill(grn_obj *token_filters,
 | 
						|
                               const char *token_filter_names,
 | 
						|
                               int token_filter_name_length);
 | 
						|
  int wrapper_get_record(uchar *buf, const uchar *key);
 | 
						|
  int wrapper_get_next_geo_record(uchar *buf);
 | 
						|
  int storage_get_next_record(uchar *buf);
 | 
						|
  void geo_store_rectangle(const uchar *rectangle);
 | 
						|
  int generic_geo_open_cursor(const uchar *key, enum ha_rkey_function find_flag);
 | 
						|
 | 
						|
#ifdef MRN_HANDLER_HAVE_HA_CLOSE
 | 
						|
  int close() mrn_override;
 | 
						|
#endif
 | 
						|
  bool is_dry_write();
 | 
						|
  bool is_enable_optimization();
 | 
						|
  bool should_normalize(Field *field) const;
 | 
						|
  void check_count_skip(key_part_map target_key_part_map);
 | 
						|
  bool is_grn_zero_column_value(grn_obj *column, grn_obj *value);
 | 
						|
  bool is_primary_key_field(Field *field) const;
 | 
						|
  void check_fast_order_limit(grn_table_sort_key **sort_keys, int *n_sort_keys,
 | 
						|
                              longlong *limit);
 | 
						|
 | 
						|
  long long int get_grn_time_from_timestamp_field(Field_timestamp *field);
 | 
						|
 | 
						|
  int generic_store_bulk_fixed_size_string(Field *field, grn_obj *buf);
 | 
						|
  int generic_store_bulk_variable_size_string(Field *field, grn_obj *buf);
 | 
						|
  int generic_store_bulk_integer(Field *field, grn_obj *buf);
 | 
						|
  int generic_store_bulk_unsigned_integer(Field *field, grn_obj *buf);
 | 
						|
  int generic_store_bulk_float(Field *field, grn_obj *buf);
 | 
						|
  int generic_store_bulk_timestamp(Field *field, grn_obj *buf);
 | 
						|
  int generic_store_bulk_date(Field *field, grn_obj *buf);
 | 
						|
  int generic_store_bulk_time(Field *field, grn_obj *buf);
 | 
						|
  int generic_store_bulk_datetime(Field *field, grn_obj *buf);
 | 
						|
  int generic_store_bulk_year(Field *field, grn_obj *buf);
 | 
						|
  int generic_store_bulk_new_date(Field *field, grn_obj *buf);
 | 
						|
#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
 | 
						|
  int generic_store_bulk_datetime2(Field *field, grn_obj *buf);
 | 
						|
#endif
 | 
						|
#ifdef MRN_HAVE_MYSQL_TYPE_TIME2
 | 
						|
  int generic_store_bulk_time2(Field *field, grn_obj *buf);
 | 
						|
#endif
 | 
						|
  int generic_store_bulk_new_decimal(Field *field, grn_obj *buf);
 | 
						|
  int generic_store_bulk_blob(Field *field, grn_obj *buf);
 | 
						|
  int generic_store_bulk_geometry(Field *field, grn_obj *buf);
 | 
						|
#ifdef MRN_HAVE_MYSQL_TYPE_JSON
 | 
						|
  int generic_store_bulk_json(Field *field, grn_obj *buf);
 | 
						|
#endif
 | 
						|
  int generic_store_bulk(Field *field, grn_obj *buf);
 | 
						|
 | 
						|
  void storage_store_field_string(Field *field,
 | 
						|
                                  const char *value, uint value_length);
 | 
						|
  void storage_store_field_integer(Field *field,
 | 
						|
                                   const char *value, uint value_length);
 | 
						|
  void storage_store_field_unsigned_integer(Field *field,
 | 
						|
                                            const char *value,
 | 
						|
                                            uint value_length);
 | 
						|
  void storage_store_field_float(Field *field,
 | 
						|
                                 const char *value, uint value_length);
 | 
						|
  void storage_store_field_timestamp(Field *field,
 | 
						|
                                     const char *value, uint value_length);
 | 
						|
  void storage_store_field_date(Field *field,
 | 
						|
                                const char *value, uint value_length);
 | 
						|
  void storage_store_field_time(Field *field,
 | 
						|
                                const char *value, uint value_length);
 | 
						|
  void storage_store_field_datetime(Field *field,
 | 
						|
                                    const char *value, uint value_length);
 | 
						|
  void storage_store_field_year(Field *field,
 | 
						|
                                const char *value, uint value_length);
 | 
						|
  void storage_store_field_new_date(Field *field,
 | 
						|
                                    const char *value, uint value_length);
 | 
						|
#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
 | 
						|
  void storage_store_field_datetime2(Field *field,
 | 
						|
                                     const char *value, uint value_length);
 | 
						|
#endif
 | 
						|
#ifdef MRN_HAVE_MYSQL_TYPE_TIME2
 | 
						|
  void storage_store_field_time2(Field *field,
 | 
						|
                                 const char *value, uint value_length);
 | 
						|
#endif
 | 
						|
  void storage_store_field_blob(Field *field,
 | 
						|
                                const char *value, uint value_length);
 | 
						|
  void storage_store_field_geometry(Field *field,
 | 
						|
                                    const char *value, uint value_length);
 | 
						|
#ifdef MRN_HAVE_MYSQL_TYPE_JSON
 | 
						|
  void storage_store_field_json(Field *field,
 | 
						|
                                const char *value, uint value_length);
 | 
						|
#endif
 | 
						|
  void storage_store_field(Field *field, const char *value, uint value_length);
 | 
						|
  void storage_store_field_column(Field *field, bool is_primary_key,
 | 
						|
                                  int nth_column, grn_id record_id);
 | 
						|
  void storage_store_fields(uchar *buf, grn_id record_id);
 | 
						|
  void storage_store_fields_for_prep_update(const uchar *old_data,
 | 
						|
                                            const uchar *new_data,
 | 
						|
                                            grn_id record_id);
 | 
						|
  void storage_store_fields_by_index(uchar *buf);
 | 
						|
 | 
						|
  int storage_encode_key_normalize_min_sort_chars(Field *field,
 | 
						|
                                                  uchar *buf,
 | 
						|
                                                  uint size);
 | 
						|
  int storage_encode_key_fixed_size_string(Field *field, const uchar *key,
 | 
						|
                                           uchar *buf, uint *size);
 | 
						|
  int storage_encode_key_variable_size_string(Field *field, const uchar *key,
 | 
						|
                                              uchar *buf, uint *size);
 | 
						|
  int storage_encode_key_timestamp(Field *field, const uchar *key,
 | 
						|
                                   uchar *buf, uint *size);
 | 
						|
  int storage_encode_key_time(Field *field, const uchar *key,
 | 
						|
                              uchar *buf, uint *size);
 | 
						|
  int storage_encode_key_year(Field *field, const uchar *key,
 | 
						|
                              uchar *buf, uint *size);
 | 
						|
  int storage_encode_key_datetime(Field *field, const uchar *key,
 | 
						|
                                  uchar *buf, uint *size);
 | 
						|
#ifdef MRN_HAVE_MYSQL_TYPE_TIMESTAMP2
 | 
						|
  int storage_encode_key_timestamp2(Field *field, const uchar *key,
 | 
						|
                                    uchar *buf, uint *size);
 | 
						|
#endif
 | 
						|
#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
 | 
						|
  int storage_encode_key_datetime2(Field *field, bool is_null, const uchar *key,
 | 
						|
                                   uchar *buf, uint *size);
 | 
						|
#endif
 | 
						|
#ifdef MRN_HAVE_MYSQL_TYPE_TIME2
 | 
						|
  int storage_encode_key_time2(Field *field, const uchar *key,
 | 
						|
                               uchar *buf, uint *size);
 | 
						|
#endif
 | 
						|
  int storage_encode_key_enum(Field *field, const uchar *key,
 | 
						|
                              uchar *buf, uint *size);
 | 
						|
  int storage_encode_key_set(Field *field, const uchar *key,
 | 
						|
                             uchar *buf, uint *size);
 | 
						|
  int storage_encode_key(Field *field, const uchar *key, uchar *buf, uint *size);
 | 
						|
  int storage_encode_multiple_column_key(KEY *key_info,
 | 
						|
                                         const uchar *key, uint key_length,
 | 
						|
                                         uchar *buffer, uint *encoded_length);
 | 
						|
  int storage_encode_multiple_column_key_range(KEY *key_info,
 | 
						|
                                               const uchar *start,
 | 
						|
                                               uint start_size,
 | 
						|
                                               const uchar *end,
 | 
						|
                                               uint end_size,
 | 
						|
                                               uchar *min_buffer,
 | 
						|
                                               uint *min_encoded_size,
 | 
						|
                                               uchar *max_buffer,
 | 
						|
                                               uint *max_encoded_size);
 | 
						|
  int storage_encode_multiple_column_key_range(KEY *key_info,
 | 
						|
                                               const key_range *start,
 | 
						|
                                               const key_range *end,
 | 
						|
                                               uchar *min_buffer,
 | 
						|
                                               uint *min_encoded_size,
 | 
						|
                                               uchar *max_buffer,
 | 
						|
                                               uint *max_encoded_size);
 | 
						|
 | 
						|
  void set_pk_bitmap();
 | 
						|
  int create_share_for_create() const;
 | 
						|
  int wrapper_create(const char *name, TABLE *table,
 | 
						|
                     HA_CREATE_INFO *info, MRN_SHARE *tmp_share);
 | 
						|
  int storage_create(const char *name, TABLE *table,
 | 
						|
                     HA_CREATE_INFO *info, MRN_SHARE *tmp_share);
 | 
						|
  int wrapper_create_index_fulltext_validate(KEY *key_info);
 | 
						|
  int wrapper_create_index_fulltext(const char *grn_table_name,
 | 
						|
                                    int i,
 | 
						|
                                    KEY *key_info,
 | 
						|
                                    grn_obj **index_tables,
 | 
						|
                                    grn_obj **index_columns,
 | 
						|
                                    MRN_SHARE *tmp_share);
 | 
						|
  int wrapper_create_index_geo(const char *grn_table_name,
 | 
						|
                               int i,
 | 
						|
                               KEY *key_info,
 | 
						|
                               grn_obj **index_tables,
 | 
						|
                               grn_obj **index_columns,
 | 
						|
                               MRN_SHARE *tmp_share);
 | 
						|
  int wrapper_create_index(const char *name, TABLE *table, MRN_SHARE *tmp_share);
 | 
						|
  int storage_create_validate_pseudo_column(TABLE *table);
 | 
						|
#ifdef MRN_SUPPORT_FOREIGN_KEYS
 | 
						|
  bool storage_create_foreign_key(TABLE *table, const char *grn_table_name,
 | 
						|
                                  Field *field, grn_obj *table_obj, int &error);
 | 
						|
#endif
 | 
						|
  int storage_create_validate_index(TABLE *table);
 | 
						|
  int storage_create_index_table(TABLE *table, const char *grn_table_name,
 | 
						|
                                 grn_obj *grn_table, MRN_SHARE *tmp_share,
 | 
						|
                                 KEY *key_info, grn_obj **index_tables,
 | 
						|
                                 uint i);
 | 
						|
  int storage_create_index(TABLE *table, const char *grn_table_name,
 | 
						|
                           grn_obj *grn_table, MRN_SHARE *tmp_share,
 | 
						|
                           KEY *key_info, grn_obj **index_tables,
 | 
						|
                           grn_obj **index_columns, uint i);
 | 
						|
  int storage_create_indexes(TABLE *table, const char *grn_table_name,
 | 
						|
                             grn_obj *grn_table, MRN_SHARE *tmp_share);
 | 
						|
  int close_databases();
 | 
						|
  int ensure_database_open(const char *name, mrn::Database **db=NULL);
 | 
						|
  int ensure_database_remove(const char *name);
 | 
						|
  int wrapper_delete_table(const char *name, handlerton *wrap_handlerton,
 | 
						|
                           const char *table_name);
 | 
						|
  int generic_delete_table(const char *name, const char *table_name);
 | 
						|
  int wrapper_open(const char *name, int mode, uint open_options);
 | 
						|
  int wrapper_open_indexes(const char *name);
 | 
						|
  int storage_reindex();
 | 
						|
  int storage_open(const char *name, int mode, uint open_options);
 | 
						|
  int open_table(const char *name);
 | 
						|
  int storage_open_columns(void);
 | 
						|
  void storage_close_columns(void);
 | 
						|
  int storage_open_indexes(const char *name);
 | 
						|
  void wrapper_overwrite_index_bits();
 | 
						|
  int wrapper_close();
 | 
						|
  int storage_close();
 | 
						|
  int generic_extra(enum ha_extra_function operation);
 | 
						|
  int wrapper_extra(enum ha_extra_function operation);
 | 
						|
  int storage_extra(enum ha_extra_function operation);
 | 
						|
  int wrapper_extra_opt(enum ha_extra_function operation, ulong cache_size);
 | 
						|
  int storage_extra_opt(enum ha_extra_function operation, ulong cache_size);
 | 
						|
  int generic_reset();
 | 
						|
  int wrapper_reset();
 | 
						|
  int storage_reset();
 | 
						|
  uint wrapper_lock_count() const;
 | 
						|
  uint storage_lock_count() const;
 | 
						|
  THR_LOCK_DATA **wrapper_store_lock(THD *thd, THR_LOCK_DATA **to,
 | 
						|
                                     enum thr_lock_type lock_type);
 | 
						|
  THR_LOCK_DATA **storage_store_lock(THD *thd, THR_LOCK_DATA **to,
 | 
						|
                                     enum thr_lock_type lock_type);
 | 
						|
  int wrapper_external_lock(THD *thd, int lock_type);
 | 
						|
  int storage_external_lock(THD *thd, int lock_type);
 | 
						|
#ifdef MRN_HANDLER_START_BULK_INSERT_HAS_FLAGS
 | 
						|
  void wrapper_start_bulk_insert(ha_rows rows, uint flags);
 | 
						|
  void storage_start_bulk_insert(ha_rows rows, uint flags);
 | 
						|
#else
 | 
						|
  void wrapper_start_bulk_insert(ha_rows rows);
 | 
						|
  void storage_start_bulk_insert(ha_rows rows);
 | 
						|
#endif
 | 
						|
  int wrapper_end_bulk_insert();
 | 
						|
  int storage_end_bulk_insert();
 | 
						|
  bool wrapper_is_target_index(KEY *key_info);
 | 
						|
  bool wrapper_have_target_index();
 | 
						|
  int wrapper_write_row(const uchar *buf);
 | 
						|
  int wrapper_write_row_index(const uchar *buf);
 | 
						|
  int storage_write_row(const uchar *buf);
 | 
						|
  int storage_write_row_multiple_column_index(const uchar *buf,
 | 
						|
                                              grn_id record_id,
 | 
						|
                                              KEY *key_info,
 | 
						|
                                              grn_obj *index_column);
 | 
						|
  int storage_write_row_multiple_column_indexes(const uchar *buf, grn_id record_id);
 | 
						|
  int storage_write_row_unique_index(const uchar *buf,
 | 
						|
                                     KEY *key_info,
 | 
						|
                                     grn_obj *index_table,
 | 
						|
                                     grn_obj *index_column,
 | 
						|
                                     grn_id *key_id);
 | 
						|
  int storage_write_row_unique_indexes(const uchar *buf);
 | 
						|
  int wrapper_get_record_id(uchar *data, grn_id *record_id,
 | 
						|
                            const char *context);
 | 
						|
  int wrapper_update_row(const uchar *old_data, const uchar *new_data);
 | 
						|
  int wrapper_update_row_index(const uchar *old_data,
 | 
						|
                               const uchar *new_data);
 | 
						|
  int storage_update_row(const uchar *old_data, const uchar *new_data);
 | 
						|
  int storage_update_row_index(const uchar *old_data,
 | 
						|
                               const uchar *new_data);
 | 
						|
  int storage_update_row_unique_indexes(const uchar *new_data);
 | 
						|
  int wrapper_delete_row(const uchar *buf);
 | 
						|
  int wrapper_delete_row_index(const uchar *buf);
 | 
						|
  int storage_delete_row(const uchar *buf);
 | 
						|
  int storage_delete_row_index(const uchar *buf);
 | 
						|
  int storage_delete_row_unique_index(grn_obj *index_table, grn_id del_key_id);
 | 
						|
  int storage_delete_row_unique_indexes();
 | 
						|
  int storage_prepare_delete_row_unique_index(const uchar *buf,
 | 
						|
                                              grn_id record_id,
 | 
						|
                                              KEY *key_info,
 | 
						|
                                              grn_obj *index_table,
 | 
						|
                                              grn_obj *index_column,
 | 
						|
                                              grn_id *del_key_id);
 | 
						|
  int storage_prepare_delete_row_unique_indexes(const uchar *buf,
 | 
						|
                                                grn_id record_id);
 | 
						|
  uint wrapper_max_supported_record_length() const;
 | 
						|
  uint storage_max_supported_record_length() const;
 | 
						|
  uint wrapper_max_supported_keys() const;
 | 
						|
  uint storage_max_supported_keys() const;
 | 
						|
  uint wrapper_max_supported_key_parts() const;
 | 
						|
  uint storage_max_supported_key_parts() const;
 | 
						|
  uint wrapper_max_supported_key_length() const;
 | 
						|
  uint storage_max_supported_key_length() const;
 | 
						|
  uint wrapper_max_supported_key_part_length() const;
 | 
						|
  uint storage_max_supported_key_part_length() const;
 | 
						|
  ulonglong wrapper_table_flags() const;
 | 
						|
  ulonglong storage_table_flags() const;
 | 
						|
  ulong wrapper_index_flags(uint idx, uint part, bool all_parts) const;
 | 
						|
  ulong storage_index_flags(uint idx, uint part, bool all_parts) const;
 | 
						|
  int wrapper_info(uint flag);
 | 
						|
  int storage_info(uint flag);
 | 
						|
  void storage_info_variable();
 | 
						|
  void storage_info_variable_records();
 | 
						|
  void storage_info_variable_data_file_length();
 | 
						|
#ifdef MRN_HANDLER_RECORDS_RETURN_ERROR
 | 
						|
  int wrapper_records(ha_rows *num_rows);
 | 
						|
  int storage_records(ha_rows *num_rows);
 | 
						|
#else
 | 
						|
  ha_rows wrapper_records();
 | 
						|
  ha_rows storage_records();
 | 
						|
#endif
 | 
						|
  int wrapper_rnd_init(bool scan);
 | 
						|
  int storage_rnd_init(bool scan);
 | 
						|
  int wrapper_rnd_end();
 | 
						|
  int storage_rnd_end();
 | 
						|
  int wrapper_rnd_next(uchar *buf);
 | 
						|
  int storage_rnd_next(uchar *buf);
 | 
						|
  int wrapper_rnd_pos(uchar *buf, uchar *pos);
 | 
						|
  int storage_rnd_pos(uchar *buf, uchar *pos);
 | 
						|
  void wrapper_position(const uchar *record);
 | 
						|
  void storage_position(const uchar *record);
 | 
						|
  ha_rows wrapper_records_in_range(uint key_nr, const key_range *range_min,
 | 
						|
                                   const key_range *range_max,
 | 
						|
                                   page_range *pages);
 | 
						|
  ha_rows storage_records_in_range(uint key_nr, const key_range *range_min,
 | 
						|
                                   const key_range *range_max,
 | 
						|
                                   page_range *pages);
 | 
						|
  ha_rows generic_records_in_range_geo(uint key_nr, const key_range *range_min,
 | 
						|
                                       const key_range *range_max);
 | 
						|
  int wrapper_index_init(uint idx, bool sorted);
 | 
						|
  int storage_index_init(uint idx, bool sorted);
 | 
						|
  int wrapper_index_end();
 | 
						|
  int storage_index_end();
 | 
						|
  int wrapper_index_read_map(uchar *buf, const uchar *key,
 | 
						|
                             key_part_map keypart_map,
 | 
						|
                             enum ha_rkey_function find_flag);
 | 
						|
  int storage_index_read_map(uchar *buf, const uchar *key,
 | 
						|
                             key_part_map keypart_map,
 | 
						|
                             enum ha_rkey_function find_flag);
 | 
						|
#ifdef MRN_HANDLER_HAVE_INDEX_READ_LAST_MAP
 | 
						|
  int wrapper_index_read_last_map(uchar *buf, const uchar *key,
 | 
						|
                                  key_part_map keypart_map);
 | 
						|
  int storage_index_read_last_map(uchar *buf, const uchar *key,
 | 
						|
                                  key_part_map keypart_map);
 | 
						|
#endif
 | 
						|
  int wrapper_index_next(uchar *buf);
 | 
						|
  int storage_index_next(uchar *buf);
 | 
						|
  int wrapper_index_prev(uchar *buf);
 | 
						|
  int storage_index_prev(uchar *buf);
 | 
						|
  int wrapper_index_first(uchar *buf);
 | 
						|
  int storage_index_first(uchar *buf);
 | 
						|
  int wrapper_index_last(uchar *buf);
 | 
						|
  int storage_index_last(uchar *buf);
 | 
						|
  int wrapper_index_next_same(uchar *buf, const uchar *key, uint keylen);
 | 
						|
  int storage_index_next_same(uchar *buf, const uchar *key, uint keylen);
 | 
						|
  int generic_ft_init();
 | 
						|
  int wrapper_ft_init();
 | 
						|
  int storage_ft_init();
 | 
						|
  FT_INFO *wrapper_ft_init_ext(uint flags, uint key_nr, String *key);
 | 
						|
  FT_INFO *storage_ft_init_ext(uint flags, uint key_nr, String *key);
 | 
						|
  void generic_ft_init_ext_add_conditions_fast_order_limit(
 | 
						|
      struct st_mrn_ft_info *info, grn_obj *expression);
 | 
						|
  grn_rc generic_ft_init_ext_prepare_expression_in_boolean_mode(
 | 
						|
    struct st_mrn_ft_info *info,
 | 
						|
    String *key,
 | 
						|
    grn_obj *index_column,
 | 
						|
    grn_obj *match_columns,
 | 
						|
    grn_obj *expression);
 | 
						|
  grn_rc generic_ft_init_ext_prepare_expression_in_normal_mode(
 | 
						|
    struct st_mrn_ft_info *info,
 | 
						|
    String *key,
 | 
						|
    grn_obj *index_column,
 | 
						|
    grn_obj *match_columns,
 | 
						|
    grn_obj *expression);
 | 
						|
  struct st_mrn_ft_info *generic_ft_init_ext_select(uint flags,
 | 
						|
                                                    uint key_nr,
 | 
						|
                                                    String *key);
 | 
						|
  FT_INFO *generic_ft_init_ext(uint flags, uint key_nr, String *key);
 | 
						|
  int wrapper_ft_read(uchar *buf);
 | 
						|
  int storage_ft_read(uchar *buf);
 | 
						|
  const Item *wrapper_cond_push(const Item *cond);
 | 
						|
  const Item *storage_cond_push(const Item *cond);
 | 
						|
  void wrapper_cond_pop();
 | 
						|
  void storage_cond_pop();
 | 
						|
  bool wrapper_get_error_message(int error, String *buf);
 | 
						|
  bool storage_get_error_message(int error, String *buf);
 | 
						|
  handler *wrapper_clone(const char *name, MEM_ROOT *mem_root);
 | 
						|
  handler *storage_clone(const char *name, MEM_ROOT *mem_root);
 | 
						|
  uint8 wrapper_table_cache_type();
 | 
						|
  uint8 storage_table_cache_type();
 | 
						|
#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ
 | 
						|
  ha_rows wrapper_multi_range_read_info_const(uint keyno,
 | 
						|
                                              RANGE_SEQ_IF *seq,
 | 
						|
                                              void *seq_init_param,
 | 
						|
                                              uint n_ranges,
 | 
						|
                                              uint *bufsz,
 | 
						|
                                              uint *flags,
 | 
						|
                                              ha_rows limit,
 | 
						|
                                              Cost_estimate *cost);
 | 
						|
  ha_rows storage_multi_range_read_info_const(uint keyno,
 | 
						|
                                              RANGE_SEQ_IF *seq,
 | 
						|
                                              void *seq_init_param,
 | 
						|
                                              uint n_ranges,
 | 
						|
                                              uint *bufsz,
 | 
						|
                                              uint *flags,
 | 
						|
                                              ha_rows limit,
 | 
						|
                                              Cost_estimate *cost);
 | 
						|
  ha_rows wrapper_multi_range_read_info(uint keyno, uint n_ranges, uint keys,
 | 
						|
#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
 | 
						|
                                        uint key_parts,
 | 
						|
#endif
 | 
						|
                                        uint *bufsz, uint *flags,
 | 
						|
                                        Cost_estimate *cost);
 | 
						|
  ha_rows storage_multi_range_read_info(uint keyno, uint n_ranges, uint keys,
 | 
						|
#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
 | 
						|
                                        uint key_parts,
 | 
						|
#endif
 | 
						|
                                        uint *bufsz, uint *flags,
 | 
						|
                                        Cost_estimate *cost);
 | 
						|
  int wrapper_multi_range_read_init(RANGE_SEQ_IF *seq, void *seq_init_param,
 | 
						|
                                    uint n_ranges, uint mode,
 | 
						|
                                    HANDLER_BUFFER *buf);
 | 
						|
  int storage_multi_range_read_init(RANGE_SEQ_IF *seq, void *seq_init_param,
 | 
						|
                                    uint n_ranges, uint mode,
 | 
						|
                                    HANDLER_BUFFER *buf);
 | 
						|
  int wrapper_multi_range_read_next(range_id_t *range_info);
 | 
						|
  int storage_multi_range_read_next(range_id_t *range_info);
 | 
						|
#else // MRN_HANDLER_HAVE_MULTI_RANGE_READ
 | 
						|
  int wrapper_read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
 | 
						|
                                     KEY_MULTI_RANGE *ranges,
 | 
						|
                                     uint range_count,
 | 
						|
                                     bool sorted,
 | 
						|
                                     HANDLER_BUFFER *buffer);
 | 
						|
  int storage_read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
 | 
						|
                                     KEY_MULTI_RANGE *ranges,
 | 
						|
                                     uint range_count,
 | 
						|
                                     bool sorted,
 | 
						|
                                     HANDLER_BUFFER *buffer);
 | 
						|
  int wrapper_read_multi_range_next(KEY_MULTI_RANGE **found_range_p);
 | 
						|
  int storage_read_multi_range_next(KEY_MULTI_RANGE **found_range_p);
 | 
						|
#endif // MRN_HANDLER_HAVE_MULTI_RANGE_READ
 | 
						|
  int generic_delete_all_rows(grn_obj *target_grn_table,
 | 
						|
                              const char *function_name);
 | 
						|
  int wrapper_delete_all_rows();
 | 
						|
  int storage_delete_all_rows();
 | 
						|
  int wrapper_truncate();
 | 
						|
  int wrapper_truncate_index();
 | 
						|
  int storage_truncate();
 | 
						|
  int storage_truncate_index();
 | 
						|
  IO_AND_CPU_COST wrapper_scan_time();
 | 
						|
  IO_AND_CPU_COST storage_scan_time();
 | 
						|
  IO_AND_CPU_COST wrapper_rnd_pos_time(ha_rows rows);
 | 
						|
  IO_AND_CPU_COST storage_rnd_pos_time(ha_rows rows);
 | 
						|
  IO_AND_CPU_COST wrapper_keyread_time(uint index, ulong ranges, ha_rows rows, ulonglong blocks);
 | 
						|
  IO_AND_CPU_COST storage_keyread_time(uint index, ulong ranges, ha_rows rows, ulonglong blocks);
 | 
						|
#ifdef MRN_HANDLER_HAVE_KEYS_TO_USE_FOR_SCANNING
 | 
						|
  const key_map *wrapper_keys_to_use_for_scanning();
 | 
						|
  const key_map *storage_keys_to_use_for_scanning();
 | 
						|
#endif
 | 
						|
  ha_rows wrapper_estimate_rows_upper_bound();
 | 
						|
  ha_rows storage_estimate_rows_upper_bound();
 | 
						|
  void wrapper_update_create_info(HA_CREATE_INFO* create_info);
 | 
						|
  void storage_update_create_info(HA_CREATE_INFO* create_info);
 | 
						|
  int wrapper_rename_table(const char *from, const char *to,
 | 
						|
                           MRN_SHARE *tmp_share,
 | 
						|
                           const char *from_table_name,
 | 
						|
                           const char *to_table_name);
 | 
						|
  int wrapper_rename_index(const char *from, const char *to,
 | 
						|
                           MRN_SHARE *tmp_share,
 | 
						|
                           const char *from_table_name,
 | 
						|
                           const char *to_table_name);
 | 
						|
  int storage_rename_table(const char *from, const char *to,
 | 
						|
                           MRN_SHARE *tmp_share,
 | 
						|
                           const char *from_table_name,
 | 
						|
                           const char *to_table_name);
 | 
						|
#ifdef MRN_SUPPORT_FOREIGN_KEYS
 | 
						|
  int storage_rename_foreign_key(MRN_SHARE *tmp_share,
 | 
						|
                                 const char *from_table_name,
 | 
						|
                                 const char *to_table_name);
 | 
						|
#endif
 | 
						|
  bool wrapper_is_crashed() const;
 | 
						|
  bool storage_is_crashed() const;
 | 
						|
  bool wrapper_auto_repair(int error) const;
 | 
						|
  bool storage_auto_repair(int error) const;
 | 
						|
  int generic_disable_index(int i, KEY *key_info);
 | 
						|
  int wrapper_disable_indexes_mroonga(key_map map, bool persist);
 | 
						|
  int wrapper_disable_indexes(key_map map, bool persist);
 | 
						|
  int storage_disable_indexes(key_map map, bool persist);
 | 
						|
  int wrapper_enable_indexes_mroonga(key_map map, bool persist);
 | 
						|
  int wrapper_enable_indexes(key_map map, bool persist);
 | 
						|
  int storage_enable_indexes(key_map map, bool persist);
 | 
						|
  int wrapper_check(THD* thd, HA_CHECK_OPT* check_opt);
 | 
						|
  int storage_check(THD* thd, HA_CHECK_OPT* check_opt);
 | 
						|
  int wrapper_fill_indexes(THD *thd, KEY *key_info,
 | 
						|
                           grn_obj **index_columns, uint n_keys);
 | 
						|
  int wrapper_recreate_indexes(THD *thd);
 | 
						|
  int storage_recreate_indexes(THD *thd);
 | 
						|
  int wrapper_repair(THD* thd, HA_CHECK_OPT* check_opt);
 | 
						|
  int storage_repair(THD* thd, HA_CHECK_OPT* check_opt);
 | 
						|
  bool wrapper_check_and_repair(THD *thd);
 | 
						|
  bool storage_check_and_repair(THD *thd);
 | 
						|
  int wrapper_analyze(THD* thd, HA_CHECK_OPT* check_opt);
 | 
						|
  int storage_analyze(THD* thd, HA_CHECK_OPT* check_opt);
 | 
						|
  int wrapper_optimize(THD* thd, HA_CHECK_OPT* check_opt);
 | 
						|
  int storage_optimize(THD* thd, HA_CHECK_OPT* check_opt);
 | 
						|
  bool wrapper_is_fatal_error(int error_num, uint flags);
 | 
						|
  bool storage_is_fatal_error(int error_num, uint flags);
 | 
						|
  bool wrapper_is_comment_changed(TABLE *table1, TABLE *table2);
 | 
						|
  bool wrapper_check_if_incompatible_data(HA_CREATE_INFO *create_info,
 | 
						|
                                          uint table_changes);
 | 
						|
  bool storage_check_if_incompatible_data(HA_CREATE_INFO *create_info,
 | 
						|
                                          uint table_changes);
 | 
						|
  int storage_add_index_multiple_columns(KEY *key_info, uint num_of_keys,
 | 
						|
                                         grn_obj **index_tables,
 | 
						|
                                         grn_obj **index_columns,
 | 
						|
                                         bool skip_unique_key);
 | 
						|
#ifdef MRN_HANDLER_HAVE_CHECK_IF_SUPPORTED_INPLACE_ALTER
 | 
						|
  enum_alter_inplace_result
 | 
						|
  wrapper_check_if_supported_inplace_alter(TABLE *altered_table,
 | 
						|
                                           Alter_inplace_info *ha_alter_info);
 | 
						|
  enum_alter_inplace_result
 | 
						|
  storage_check_if_supported_inplace_alter(TABLE *altered_table,
 | 
						|
                                           Alter_inplace_info *ha_alter_info);
 | 
						|
  bool wrapper_prepare_inplace_alter_table(TABLE *altered_table,
 | 
						|
                                           Alter_inplace_info *ha_alter_info);
 | 
						|
  bool storage_prepare_inplace_alter_table(TABLE *altered_table,
 | 
						|
                                           Alter_inplace_info *ha_alter_info);
 | 
						|
  bool wrapper_inplace_alter_table(TABLE *altered_table,
 | 
						|
                                   Alter_inplace_info *ha_alter_info);
 | 
						|
  bool storage_inplace_alter_table_add_index(TABLE *altered_table,
 | 
						|
                                             Alter_inplace_info *ha_alter_info);
 | 
						|
  bool storage_inplace_alter_table_drop_index(TABLE *altered_table,
 | 
						|
                                              Alter_inplace_info *ha_alter_info);
 | 
						|
  bool storage_inplace_alter_table_add_column(TABLE *altered_table,
 | 
						|
                                              Alter_inplace_info *ha_alter_info);
 | 
						|
  bool storage_inplace_alter_table_drop_column(TABLE *altered_table,
 | 
						|
                                               Alter_inplace_info *ha_alter_info);
 | 
						|
  bool storage_inplace_alter_table_rename_column(TABLE *altered_table,
 | 
						|
                                                 Alter_inplace_info *ha_alter_info);
 | 
						|
  bool storage_inplace_alter_table(TABLE *altered_table,
 | 
						|
                                   Alter_inplace_info *ha_alter_info);
 | 
						|
  bool wrapper_commit_inplace_alter_table(TABLE *altered_table,
 | 
						|
                                          Alter_inplace_info *ha_alter_info,
 | 
						|
                                          bool commit);
 | 
						|
  bool storage_commit_inplace_alter_table(TABLE *altered_table,
 | 
						|
                                          Alter_inplace_info *ha_alter_info,
 | 
						|
                                          bool commit);
 | 
						|
#else
 | 
						|
  alter_table_operations wrapper_alter_table_flags(alter_table_operations flags);
 | 
						|
  alter_table_operations storage_alter_table_flags(alter_table_operations flags);
 | 
						|
#  ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
 | 
						|
  int wrapper_add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys,
 | 
						|
                        handler_add_index **add);
 | 
						|
  int storage_add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys,
 | 
						|
                        handler_add_index **add);
 | 
						|
#  else
 | 
						|
  int wrapper_add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys);
 | 
						|
  int storage_add_index(TABLE *table_arg, KEY *key_info, uint num_of_keys);
 | 
						|
#  endif
 | 
						|
#  ifdef MRN_HANDLER_HAVE_FINAL_ADD_INDEX
 | 
						|
  int wrapper_final_add_index(handler_add_index *add, bool commit);
 | 
						|
  int storage_final_add_index(handler_add_index *add, bool commit);
 | 
						|
#  endif
 | 
						|
  int wrapper_prepare_drop_index(TABLE *table_arg, uint *key_num,
 | 
						|
                                 uint num_of_keys);
 | 
						|
  int storage_prepare_drop_index(TABLE *table_arg, uint *key_num,
 | 
						|
                                 uint num_of_keys);
 | 
						|
  int wrapper_final_drop_index(TABLE *table_arg);
 | 
						|
  int storage_final_drop_index(TABLE *table_arg);
 | 
						|
#endif
 | 
						|
  int wrapper_update_auto_increment();
 | 
						|
  int storage_update_auto_increment();
 | 
						|
  void wrapper_set_next_insert_id(ulonglong id);
 | 
						|
  void storage_set_next_insert_id(ulonglong id);
 | 
						|
  void wrapper_get_auto_increment(ulonglong offset, ulonglong increment,
 | 
						|
                                  ulonglong nb_desired_values,
 | 
						|
                                  ulonglong *first_value,
 | 
						|
                                  ulonglong *nb_reserved_values);
 | 
						|
  void storage_get_auto_increment(ulonglong offset, ulonglong increment,
 | 
						|
                                  ulonglong nb_desired_values,
 | 
						|
                                  ulonglong *first_value,
 | 
						|
                                  ulonglong *nb_reserved_values);
 | 
						|
  void wrapper_restore_auto_increment(ulonglong prev_insert_id);
 | 
						|
  void storage_restore_auto_increment(ulonglong prev_insert_id);
 | 
						|
  void wrapper_release_auto_increment();
 | 
						|
  void storage_release_auto_increment();
 | 
						|
  int wrapper_check_for_upgrade(HA_CHECK_OPT *check_opt);
 | 
						|
  int storage_check_for_upgrade(HA_CHECK_OPT *check_opt);
 | 
						|
#ifdef MRN_HANDLER_HAVE_RESET_AUTO_INCREMENT
 | 
						|
  int wrapper_reset_auto_increment(ulonglong value);
 | 
						|
  int storage_reset_auto_increment(ulonglong value);
 | 
						|
#endif
 | 
						|
  bool wrapper_was_semi_consistent_read();
 | 
						|
  bool storage_was_semi_consistent_read();
 | 
						|
  void wrapper_try_semi_consistent_read(bool yes);
 | 
						|
  void storage_try_semi_consistent_read(bool yes);
 | 
						|
  void wrapper_unlock_row();
 | 
						|
  void storage_unlock_row();
 | 
						|
  int wrapper_start_stmt(THD *thd, thr_lock_type lock_type);
 | 
						|
  int storage_start_stmt(THD *thd, thr_lock_type lock_type);
 | 
						|
  void wrapper_change_table_ptr(TABLE *table_arg, TABLE_SHARE *share_arg);
 | 
						|
  void storage_change_table_ptr(TABLE *table_arg, TABLE_SHARE *share_arg);
 | 
						|
  bool wrapper_is_fk_defined_on_table_or_index(uint index);
 | 
						|
  bool storage_is_fk_defined_on_table_or_index(uint index);
 | 
						|
  char *wrapper_get_foreign_key_create_info();
 | 
						|
  char *storage_get_foreign_key_create_info();
 | 
						|
#ifdef MRN_HANDLER_HAVE_GET_TABLESPACE_NAME
 | 
						|
  char *wrapper_get_tablespace_name(THD *thd, char *name, uint name_len);
 | 
						|
  char *storage_get_tablespace_name(THD *thd, char *name, uint name_len);
 | 
						|
#endif
 | 
						|
  bool wrapper_can_switch_engines();
 | 
						|
  bool storage_can_switch_engines();
 | 
						|
  int wrapper_get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
 | 
						|
  int storage_get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
 | 
						|
  int wrapper_get_parent_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
 | 
						|
  int storage_get_parent_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
 | 
						|
  bool wrapper_referenced_by_foreign_key() const noexcept;
 | 
						|
  bool storage_referenced_by_foreign_key() const noexcept;
 | 
						|
  void wrapper_init_table_handle_for_HANDLER();
 | 
						|
  void storage_init_table_handle_for_HANDLER();
 | 
						|
  void wrapper_free_foreign_key_create_info(char* str);
 | 
						|
  void storage_free_foreign_key_create_info(char* str);
 | 
						|
  void wrapper_set_keys_in_use();
 | 
						|
  void storage_set_keys_in_use();
 | 
						|
#ifdef MRN_RBR_UPDATE_NEED_ALL_COLUMNS
 | 
						|
  bool check_written_by_row_based_binlog();
 | 
						|
#endif
 | 
						|
#ifdef MRN_HAVE_HA_REBIND_PSI
 | 
						|
  void wrapper_unbind_psi();
 | 
						|
  void storage_unbind_psi();
 | 
						|
  void wrapper_rebind();
 | 
						|
  void storage_rebind();
 | 
						|
#endif
 | 
						|
  my_bool wrapper_register_query_cache_table(THD *thd,
 | 
						|
                                             const char *table_key,
 | 
						|
                                             uint key_length,
 | 
						|
                                             qc_engine_callback
 | 
						|
                                             *engine_callback,
 | 
						|
                                             ulonglong *engine_data);
 | 
						|
  my_bool storage_register_query_cache_table(THD *thd,
 | 
						|
                                             const char *table_key,
 | 
						|
                                             uint key_length,
 | 
						|
                                             qc_engine_callback
 | 
						|
                                             *engine_callback,
 | 
						|
                                             ulonglong *engine_data);
 | 
						|
};
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* HA_MROONGA_HPP_ */
 |