13
13
along with this program; if not, write to the Free Software
14
14
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
16
#include <drizzled/common_includes.h>
17
#ifdef USE_PRAGMA_IMPLEMENTATION
18
#pragma implementation // gcc: Class implementation
21
#include "mysql_priv.h"
17
22
#include "ha_blackhole.h"
19
24
/* Static declarations for handlerton */
53
58
return ha_blackhole_exts;
56
int ha_blackhole::open(const char *name, int mode __attribute__((unused)),
57
uint32_t test_if_locked __attribute__((unused)))
61
int ha_blackhole::open(const char *name, int mode __attribute__((__unused__)),
62
uint test_if_locked __attribute__((__unused__)))
59
64
if (!(share= get_share(name)))
60
65
return(HA_ERR_OUT_OF_MEM);
72
int ha_blackhole::create(const char *name __attribute__((unused)),
73
Table *table_arg __attribute__((unused)),
74
HA_CREATE_INFO *create_info __attribute__((unused)))
77
int ha_blackhole::create(const char *name __attribute__((__unused__)),
78
TABLE *table_arg __attribute__((__unused__)),
79
HA_CREATE_INFO *create_info __attribute__((__unused__)))
79
const char *ha_blackhole::index_type(uint32_t key_number __attribute__((unused)))
84
const char *ha_blackhole::index_type(uint key_number)
86
return((table_share->key_info[key_number].flags & HA_FULLTEXT) ?
88
(table_share->key_info[key_number].flags & HA_SPATIAL) ?
90
(table_share->key_info[key_number].algorithm ==
91
HA_KEY_ALG_RTREE) ? "RTREE" : "BTREE");
84
int ha_blackhole::write_row(unsigned char * buf __attribute__((unused)))
94
int ha_blackhole::write_row(uchar * buf __attribute__((__unused__)))
86
96
return(table->next_number_field ? update_auto_increment() : 0);
89
int ha_blackhole::rnd_init(bool scan __attribute__((unused)))
99
int ha_blackhole::rnd_init(bool scan __attribute__((__unused__)))
95
int ha_blackhole::rnd_next(unsigned char *buf __attribute__((unused)))
105
int ha_blackhole::rnd_next(uchar *buf __attribute__((__unused__)))
97
107
return(HA_ERR_END_OF_FILE);
101
int ha_blackhole::rnd_pos(unsigned char * buf __attribute__((unused)),
102
unsigned char *pos __attribute__((unused)))
111
int ha_blackhole::rnd_pos(uchar * buf __attribute__((__unused__)),
112
uchar *pos __attribute__((__unused__)))
109
void ha_blackhole::position(const unsigned char *record __attribute__((unused)))
119
void ha_blackhole::position(const uchar *record __attribute__((__unused__)))
116
int ha_blackhole::info(uint32_t flag)
126
int ha_blackhole::info(uint flag)
118
memset(&stats, 0, sizeof(stats));
128
bzero((char*) &stats, sizeof(stats));
119
129
if (flag & HA_STATUS_AUTO)
120
130
stats.auto_increment_value= 1;
124
int ha_blackhole::external_lock(THD *thd __attribute__((unused)),
125
int lock_type __attribute__((unused)))
134
int ha_blackhole::external_lock(THD *thd __attribute__((__unused__)),
135
int lock_type __attribute__((__unused__)))
167
int ha_blackhole::index_read_map(unsigned char * buf __attribute__((unused)),
168
const unsigned char * key __attribute__((unused)),
169
key_part_map keypart_map __attribute__((unused)),
170
enum ha_rkey_function find_flag __attribute__((unused)))
172
return(HA_ERR_END_OF_FILE);
176
int ha_blackhole::index_read_idx_map(unsigned char * buf __attribute__((unused)),
177
uint32_t idx __attribute__((unused)),
178
const unsigned char * key __attribute__((unused)),
179
key_part_map keypart_map __attribute__((unused)),
180
enum ha_rkey_function find_flag __attribute__((unused)))
182
return(HA_ERR_END_OF_FILE);
186
int ha_blackhole::index_read_last_map(unsigned char * buf __attribute__((unused)),
187
const unsigned char * key __attribute__((unused)),
188
key_part_map keypart_map __attribute__((unused)))
190
return(HA_ERR_END_OF_FILE);
194
int ha_blackhole::index_next(unsigned char * buf __attribute__((unused)))
196
return(HA_ERR_END_OF_FILE);
200
int ha_blackhole::index_prev(unsigned char * buf __attribute__((unused)))
202
return(HA_ERR_END_OF_FILE);
206
int ha_blackhole::index_first(unsigned char * buf __attribute__((unused)))
208
return(HA_ERR_END_OF_FILE);
212
int ha_blackhole::index_last(unsigned char * buf __attribute__((unused)))
177
int ha_blackhole::index_read_map(uchar * buf __attribute__((__unused__)),
178
const uchar * key __attribute__((__unused__)),
179
key_part_map keypart_map __attribute__((__unused__)),
180
enum ha_rkey_function find_flag __attribute__((__unused__)))
182
return(HA_ERR_END_OF_FILE);
186
int ha_blackhole::index_read_idx_map(uchar * buf __attribute__((__unused__)),
187
uint idx __attribute__((__unused__)),
188
const uchar * key __attribute__((__unused__)),
189
key_part_map keypart_map __attribute__((__unused__)),
190
enum ha_rkey_function find_flag __attribute__((__unused__)))
192
return(HA_ERR_END_OF_FILE);
196
int ha_blackhole::index_read_last_map(uchar * buf __attribute__((__unused__)),
197
const uchar * key __attribute__((__unused__)),
198
key_part_map keypart_map __attribute__((__unused__)))
200
return(HA_ERR_END_OF_FILE);
204
int ha_blackhole::index_next(uchar * buf __attribute__((__unused__)))
206
return(HA_ERR_END_OF_FILE);
210
int ha_blackhole::index_prev(uchar * buf __attribute__((__unused__)))
212
return(HA_ERR_END_OF_FILE);
216
int ha_blackhole::index_first(uchar * buf __attribute__((__unused__)))
218
return(HA_ERR_END_OF_FILE);
222
int ha_blackhole::index_last(uchar * buf __attribute__((__unused__)))
214
224
return(HA_ERR_END_OF_FILE);
218
228
static st_blackhole_share *get_share(const char *table_name)
220
230
st_blackhole_share *share;
223
233
length= (uint) strlen(table_name);
224
234
pthread_mutex_lock(&blackhole_mutex);
226
236
if (!(share= (st_blackhole_share*) hash_search(&blackhole_open_tables,
227
(unsigned char*) table_name, length)))
237
(uchar*) table_name, length)))
229
239
if (!(share= (st_blackhole_share*) my_malloc(sizeof(st_blackhole_share) +
234
244
share->table_name_length= length;
235
my_stpcpy(share->table_name, table_name);
245
strmov(share->table_name, table_name);
237
if (my_hash_insert(&blackhole_open_tables, (unsigned char*) share))
247
if (my_hash_insert(&blackhole_open_tables, (uchar*) share))
239
free((unsigned char*) share);
249
my_free((uchar*) share, MYF(0));
255
265
pthread_mutex_lock(&blackhole_mutex);
256
266
if (!--share->use_count)
257
hash_delete(&blackhole_open_tables, (unsigned char*) share);
267
hash_delete(&blackhole_open_tables, (uchar*) share);
258
268
pthread_mutex_unlock(&blackhole_mutex);
261
271
static void blackhole_free_key(st_blackhole_share *share)
263
273
thr_lock_delete(&share->lock);
264
free((unsigned char*) share);
274
my_free((uchar*) share, MYF(0));
267
static unsigned char* blackhole_get_key(st_blackhole_share *share, size_t *length,
268
bool not_used __attribute__((unused)))
277
static uchar* blackhole_get_key(st_blackhole_share *share, size_t *length,
278
my_bool not_used __attribute__((unused)))
270
280
*length= share->table_name_length;
271
return (unsigned char*) share->table_name;
281
return (uchar*) share->table_name;
274
284
static int blackhole_init(void *p)
276
286
handlerton *blackhole_hton;
277
287
blackhole_hton= (handlerton *)p;
278
288
blackhole_hton->state= SHOW_OPTION_YES;
289
blackhole_hton->db_type= DB_TYPE_BLACKHOLE_DB;
279
290
blackhole_hton->create= blackhole_create_handler;
280
291
blackhole_hton->flags= HTON_CAN_RECREATE;
282
pthread_mutex_init(&blackhole_mutex, MY_MUTEX_INIT_FAST);
293
VOID(pthread_mutex_init(&blackhole_mutex, MY_MUTEX_INIT_FAST));
283
294
(void) hash_init(&blackhole_open_tables, system_charset_info,32,0,0,
284
295
(hash_get_key) blackhole_get_key,
285
296
(hash_free_key) blackhole_free_key, 0);