~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
/* Copyright (C) 2005 MySQL AB
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 as published by
5
  the Free Software Foundation; version 2 of the License.
6
7
  This program is distributed in the hope that it will be useful,
8
  but WITHOUT ANY WARRANTY; without even the implied warranty of
9
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
  GNU General Public License for more details.
11
12
  You should have received a copy of the GNU General Public License
13
  along with this program; if not, write to the Free Software
14
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
15
16
#ifdef USE_PRAGMA_INTERFACE
17
#pragma interface			/* gcc class implementation */
18
#endif
19
20
/*
21
  Shared structure for correct LOCK operation
22
*/
23
struct st_blackhole_share {
24
  THR_LOCK lock;
25
  uint use_count;
26
  uint table_name_length;
27
  char table_name[1];
28
};
29
30
31
/*
32
  Class definition for the blackhole storage engine
33
  "Dumbest named feature ever"
34
*/
35
class ha_blackhole: public handler
36
{
37
  THR_LOCK_DATA lock;      /* MySQL lock */
38
  st_blackhole_share *share;
39
40
public:
41
  ha_blackhole(handlerton *hton, TABLE_SHARE *table_arg);
42
  ~ha_blackhole()
43
  {
44
  }
45
  /* The name that will be used for display purposes */
46
  const char *table_type() const { return "BLACKHOLE"; }
47
  /*
48
    The name of the index type that will be used for display
49
    don't implement this method unless you really have indexes
50
  */
51
  const char *index_type(uint key_number);
52
  const char **bas_ext() const;
53
  uint64_t table_flags() const
54
  {
55
    return(HA_NULL_IN_KEY | HA_CAN_FULLTEXT | HA_CAN_SQL_HANDLER |
56
           HA_BINLOG_STMT_CAPABLE |
57
           HA_CAN_INDEX_BLOBS | HA_AUTO_PART_KEY |
58
           HA_FILE_BASED | HA_CAN_GEOMETRY | HA_CAN_INSERT_DELAYED);
59
  }
212.1.3 by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)).
60
  uint32_t index_flags(uint inx, uint part __attribute__((unused)),
61
                       bool all_parts __attribute__((unused))) const
1 by brian
clean slate
62
  {
63
    return ((table_share->key_info[inx].algorithm == HA_KEY_ALG_FULLTEXT) ?
64
            0 : HA_READ_NEXT | HA_READ_PREV | HA_READ_RANGE |
65
            HA_READ_ORDER | HA_KEYREAD_ONLY);
66
  }
67
  /* The following defines can be increased if necessary */
68
#define BLACKHOLE_MAX_KEY	64		/* Max allowed keys */
69
#define BLACKHOLE_MAX_KEY_SEG	16		/* Max segments for key */
70
#define BLACKHOLE_MAX_KEY_LENGTH 1000
71
  uint max_supported_keys()          const { return BLACKHOLE_MAX_KEY; }
72
  uint max_supported_key_length()    const { return BLACKHOLE_MAX_KEY_LENGTH; }
73
  uint max_supported_key_part_length() const { return BLACKHOLE_MAX_KEY_LENGTH; }
74
  int open(const char *name, int mode, uint test_if_locked);
75
  int close(void);
76
  int write_row(uchar * buf);
77
  int rnd_init(bool scan);
78
  int rnd_next(uchar *buf);
79
  int rnd_pos(uchar * buf, uchar *pos);
80
  int index_read_map(uchar * buf, const uchar * key, key_part_map keypart_map,
81
                     enum ha_rkey_function find_flag);
82
  int index_read_idx_map(uchar * buf, uint idx, const uchar * key,
83
                         key_part_map keypart_map,
84
                         enum ha_rkey_function find_flag);
85
  int index_read_last_map(uchar * buf, const uchar * key, key_part_map keypart_map);
86
  int index_next(uchar * buf);
87
  int index_prev(uchar * buf);
88
  int index_first(uchar * buf);
89
  int index_last(uchar * buf);
90
  void position(const uchar *record);
91
  int info(uint flag);
92
  int external_lock(THD *thd, int lock_type);
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
93
  int create(const char *name, Table *table_arg,
1 by brian
clean slate
94
             HA_CREATE_INFO *create_info);
95
  THR_LOCK_DATA **store_lock(THD *thd,
96
                             THR_LOCK_DATA **to,
97
                             enum thr_lock_type lock_type);
98
};