MySQL 8.3.0
Source Code Documentation
ha_blackhole.h
Go to the documentation of this file.
1/* Copyright (c) 2005, 2023, Oracle and/or its affiliates.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License, version 2.0,
5 as published by the Free Software Foundation.
6
7 This program is also distributed with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the program and your derivative works with the
12 separately licensed software that they have included with MySQL.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License, version 2.0, for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
22
23#include <sys/types.h>
24
25#include "my_base.h"
26#include "my_inttypes.h"
27#include "sql/handler.h" /* handler */
28#include "sql/key.h"
29#include "sql/table.h" /* TABLE_SHARE */
30#include "thr_lock.h" /* THR_LOCK */
31
32class String;
33class THD;
34struct FT_INFO;
35namespace dd {
36class Table;
37}
38
39/*
40 Shared structure for correct LOCK operation
41*/
46 char table_name[1];
47};
48
49/*
50 Class definition for the blackhole storage engine
51 "Dumbest named feature ever"
52*/
53class ha_blackhole : public handler {
54 THR_LOCK_DATA lock; /* MySQL lock */
56
57 public:
58 ha_blackhole(handlerton *hton, TABLE_SHARE *table_arg);
59 ~ha_blackhole() override = default;
60 /* The name that will be used for display purposes */
61 const char *table_type() const override { return "BLACKHOLE"; }
63 return HA_KEY_ALG_BTREE;
64 }
65 bool is_index_algorithm_supported(enum ha_key_alg key_alg) const override {
66 return key_alg == HA_KEY_ALG_BTREE || key_alg == HA_KEY_ALG_RTREE;
67 }
68 ulonglong table_flags() const override {
73 }
74 ulong index_flags(uint inx, uint, bool) const override {
75 return ((table_share->key_info[inx].algorithm == HA_KEY_ALG_FULLTEXT)
76 ? 0
79 }
80 /* The following defines can be increased if necessary */
81#define BLACKHOLE_MAX_KEY 64 /* Max allowed keys */
82#define BLACKHOLE_MAX_KEY_SEG 16 /* Max segments for key */
83#define BLACKHOLE_MAX_KEY_LENGTH 3072 /* Keep compatible with innoDB */
84 uint max_supported_keys() const override { return BLACKHOLE_MAX_KEY; }
85 uint max_supported_key_length() const override {
87 }
89 [[maybe_unused]]) const override {
91 }
92 int open(const char *name, int mode, uint test_if_locked,
93 const dd::Table *table_def) override;
94 int close(void) override;
95 int rnd_init(bool scan) override;
96 int rnd_next(uchar *buf) override;
97 int rnd_pos(uchar *buf, uchar *pos) override;
98 int index_read_map(uchar *buf, const uchar *key, key_part_map keypart_map,
99 enum ha_rkey_function find_flag) override;
100 int index_read_idx_map(uchar *buf, uint idx, const uchar *key,
101 key_part_map keypart_map,
102 enum ha_rkey_function find_flag) override;
104 key_part_map keypart_map) override;
105 int index_next(uchar *buf) override;
106 int index_prev(uchar *buf) override;
107 int index_first(uchar *buf) override;
108 int index_last(uchar *buf) override;
109 void position(const uchar *record) override;
110 int info(uint flag) override;
111 int external_lock(THD *thd, int lock_type) override;
112 int create(const char *name, TABLE *table_arg, HA_CREATE_INFO *create_info,
113 dd::Table *table_def) override;
115 enum thr_lock_type lock_type) override;
116 FT_INFO *ft_init_ext(uint flags, uint inx, String *key) override;
117 int ft_init() override;
118
119 protected:
120 int ft_read(uchar *buf) override;
121
122 private:
123 int write_row(uchar *buf) override;
124 int update_row(const uchar *old_data, uchar *new_data) override;
125 int delete_row(const uchar *buf) override;
126};
app_data_ptr new_data(u_int n, char *val, cons_type consensus)
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:166
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:35
Definition: table.h:46
Definition: ha_blackhole.h:53
bool is_index_algorithm_supported(enum ha_key_alg key_alg) const override
Check if SE supports specific key algorithm.
Definition: ha_blackhole.h:65
int index_read_map(uchar *buf, const uchar *key, key_part_map keypart_map, enum ha_rkey_function find_flag) override
Positions an index cursor to the index specified in the handle ('active_index').
Definition: ha_blackhole.cc:194
int index_prev(uchar *buf) override
Definition: ha_blackhole.cc:236
int external_lock(THD *thd, int lock_type) override
Is not invoked for non-transactional temporary tables.
Definition: ha_blackhole.cc:157
int rnd_next(uchar *buf) override
Definition: ha_blackhole.cc:127
int open(const char *name, int mode, uint test_if_locked, const dd::Table *table_def) override
Definition: ha_blackhole.cc:83
ulong index_flags(uint inx, uint, bool) const override
Definition: ha_blackhole.h:74
int ft_read(uchar *buf) override
Definition: ha_blackhole.cc:275
~ha_blackhole() override=default
int index_read_idx_map(uchar *buf, uint idx, const uchar *key, key_part_map keypart_map, enum ha_rkey_function find_flag) override
Positions an index cursor to the index specified in argument.
Definition: ha_blackhole.cc:206
int info(uint flag) override
General method to gather info from handler.
Definition: ha_blackhole.cc:149
st_blackhole_share * share
Definition: ha_blackhole.h:55
int write_row(uchar *buf) override
Write a row.
Definition: ha_blackhole.cc:103
void position(const uchar *record) override
Definition: ha_blackhole.cc:144
ulonglong table_flags() const override
Definition: ha_blackhole.h:68
int index_next(uchar *buf) override
Definition: ha_blackhole.cc:229
FT_INFO * ft_init_ext(uint flags, uint inx, String *key) override
Definition: ha_blackhole.cc:257
int close(void) override
Definition: ha_blackhole.cc:92
uint max_supported_key_length() const override
Definition: ha_blackhole.h:85
int delete_row(const uchar *buf) override
Definition: ha_blackhole.cc:115
THR_LOCK_DATA ** store_lock(THD *thd, THR_LOCK_DATA **to, enum thr_lock_type lock_type) override
Is not invoked for non-transactional temporary tables.
Definition: ha_blackhole.cc:162
const char * table_type() const override
The following can be called without an open handler.
Definition: ha_blackhole.h:61
int ft_init() override
Definition: ha_blackhole.cc:273
int index_first(uchar *buf) override
Definition: ha_blackhole.cc:243
THR_LOCK_DATA lock
Definition: ha_blackhole.h:54
uint max_supported_keys() const override
Definition: ha_blackhole.h:84
ha_blackhole(handlerton *hton, TABLE_SHARE *table_arg)
Definition: ha_blackhole.cc:80
int rnd_init(bool scan) override
rnd_init() can be called two times without rnd_end() in between (it only makes sense if scan=1).
Definition: ha_blackhole.cc:122
int index_last(uchar *buf) override
Definition: ha_blackhole.cc:250
int create(const char *name, TABLE *table_arg, HA_CREATE_INFO *create_info, dd::Table *table_def) override
Create table (implementation).
Definition: ha_blackhole.cc:98
uint max_supported_key_part_length(HA_CREATE_INFO *create_info) const override
Definition: ha_blackhole.h:88
int rnd_pos(uchar *buf, uchar *pos) override
Definition: ha_blackhole.cc:138
int index_read_last_map(uchar *buf, const uchar *key, key_part_map keypart_map) override
The following functions works like index_read, but it find the last row with the current key value or...
Definition: ha_blackhole.cc:218
enum ha_key_alg get_default_index_algorithm() const override
Get default key algorithm for SE.
Definition: ha_blackhole.h:62
int update_row(const uchar *old_data, uchar *new_data) override
Update a single row.
Definition: ha_blackhole.cc:108
The handler class is the interface for dynamically loadable storage engines.
Definition: handler.h:4548
TABLE_SHARE * table_share
Definition: handler.h:4555
A table definition from the master.
Definition: rpl_utility.h:247
#define BLACKHOLE_MAX_KEY
Definition: ha_blackhole.h:81
#define BLACKHOLE_MAX_KEY_LENGTH
Definition: ha_blackhole.h:83
static int flags[50]
Definition: hp_test1.cc:39
static int flag
Definition: hp_test1.cc:39
This file includes constants used by all storage engines.
ha_key_alg
Definition: my_base.h:97
@ HA_KEY_ALG_RTREE
Definition: my_base.h:108
@ HA_KEY_ALG_BTREE
Definition: my_base.h:107
@ HA_KEY_ALG_FULLTEXT
Definition: my_base.h:110
ha_rkey_function
Definition: my_base.h:77
ulong key_part_map
Definition: my_base.h:1007
Some integer typedefs for easier portability.
unsigned long long int ulonglong
Definition: my_inttypes.h:55
unsigned char uchar
Definition: my_inttypes.h:51
static int record
Definition: mysqltest.cc:194
Definition: buf0block_hint.cc:29
The version of the current data dictionary table definitions.
Definition: dictionary_client.h:42
mode
Definition: file_handle.h:59
required string key
Definition: replication_asynchronous_connection_failover.proto:59
#define HA_BINLOG_ROW_CAPABLE
Definition: handler.h:346
#define HA_FILE_BASED
Definition: handler.h:331
#define HA_CAN_INDEX_BLOBS
Definition: handler.h:264
#define HA_READ_NEXT
Definition: handler.h:533
#define HA_KEYREAD_ONLY
Definition: handler.h:578
#define HA_READ_OUT_OF_SYNC
Definition: handler.h:431
#define HA_CAN_GEOMETRY
Definition: handler.h:235
#define HA_CAN_FULLTEXT
Definition: handler.h:312
#define HA_BINLOG_STMT_CAPABLE
Definition: handler.h:347
#define HA_CAN_SQL_HANDLER
Definition: handler.h:317
#define HA_READ_ORDER
Definition: handler.h:549
#define HA_READ_RANGE
Definition: handler.h:556
#define HA_AUTO_PART_KEY
Definition: handler.h:269
#define HA_NULL_IN_KEY
Definition: handler.h:252
#define HA_READ_PREV
Definition: handler.h:537
case opt name
Definition: sslopt-case.h:32
Definition: ft_global.h:71
Struct to hold information about the table that should be created.
Definition: handler.h:3177
This structure is shared between different table objects.
Definition: table.h:698
KEY * key_info
Definition: table.h:748
Definition: table.h:1403
Definition: thr_lock.h:123
Definition: thr_lock.h:138
handlerton is a singleton structure - one instance per storage engine - to provide access to storage ...
Definition: handler.h:2718
Definition: ha_blackhole.h:42
uint table_name_length
Definition: ha_blackhole.h:45
char table_name[1]
Definition: ha_blackhole.h:46
uint use_count
Definition: ha_blackhole.h:44
THR_LOCK lock
Definition: ha_blackhole.h:43
thr_lock_type
Definition: thr_lock.h:50