~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/plugin/storage_engine.h

  • Committer: Monty Taylor
  • Date: 2009-03-31 07:57:46 UTC
  • mto: (971.1.10 mordred)
  • mto: This revision was merged to the branch mainline in revision 971.
  • Revision ID: mordred@inaugust.com-20090331075746-7filp1zeagjgwuzm
Removed references to stdbool, since they aren't valid in c++. Added them in C where we need them. Made archive tests c++.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
18
 */
19
19
 
20
 
#ifndef DRIZZLED_PLUGIN_STORAGE_ENGINE_H
21
 
#define DRIZZLED_PLUGIN_STORAGE_ENGINE_H
 
20
#ifndef DRIZZLED_HANDLERTON_H
 
21
#define DRIZZLED_HANDLERTON_H
22
22
 
23
23
 
24
24
#include <drizzled/definitions.h>
26
26
 
27
27
#include <bitset>
28
28
#include <string>
29
 
#include <vector>
30
29
 
31
30
class TableList;
32
31
class Session;
82
81
    Name used for storage engine.
83
82
  */
84
83
  const std::string name;
85
 
  const bool two_phase_commit;
86
 
  bool enabled;
87
 
  const std::bitset<HTON_BIT_SIZE> flags; /* global handler flags */
88
 
  /*
89
 
    to store per-savepoint data storage engine is provided with an area
90
 
    of a requested size (0 is ok here).
91
 
    savepoint_offset must be initialized statically to the size of
92
 
    the needed memory to store per-savepoint information.
93
 
    After xxx_init it is changed to be an offset to savepoint storage
94
 
    area and need not be used by storage engine.
95
 
    see binlog_engine and binlog_savepoint_set/rollback for an example.
96
 
  */
97
 
  size_t savepoint_offset;
98
 
  size_t orig_savepoint_offset;
99
 
  std::vector<std::string> aliases;
100
 
 
101
 
protected:
102
 
 
103
 
  /**
104
 
   * Implementing classes should override these to provide savepoint
105
 
   * functionality.
106
 
   */
107
 
  virtual int savepoint_set_hook(Session *, void *) { return 0; }
108
 
 
109
 
  virtual int savepoint_rollback_hook(Session *, void *) { return 0; }
110
 
 
111
 
  virtual int savepoint_release_hook(Session *, void *) { return 0; }
 
84
  bool _2pc;
112
85
 
113
86
public:
114
87
 
115
88
  /*
 
89
    Historical marker for if the engine is available of not
 
90
  */
 
91
  SHOW_COMP_OPTION state;
 
92
 
 
93
  /*
116
94
    each storage engine has it's own memory area (actually a pointer)
117
95
    in the session, for storing per-connection information.
118
96
    It is accessed as
120
98
      session->ha_data[xxx_engine.slot]
121
99
 
122
100
   slot number is initialized by MySQL after xxx_init() is called.
123
 
  */
124
 
  uint32_t slot;
125
 
 
126
 
  StorageEngine(const std::string name_arg,
127
 
                const std::bitset<HTON_BIT_SIZE> &flags_arg= HTON_NO_FLAGS,
128
 
                size_t savepoint_offset_arg= 0,
129
 
                bool support_2pc= false);
130
 
 
131
 
  virtual ~StorageEngine();
132
 
 
133
 
  const std::vector<std::string>& getAliases()
134
 
  {
135
 
    return aliases;
136
 
  }
137
 
 
138
 
  void addAlias(std::string alias)
139
 
  {
140
 
    aliases.push_back(alias);
141
 
  }
 
101
   */
 
102
   uint32_t slot;
 
103
   std::bitset<HTON_BIT_SIZE> flags; /* global handler flags */
 
104
   /*
 
105
     to store per-savepoint data storage engine is provided with an area
 
106
     of a requested size (0 is ok here).
 
107
     savepoint_offset must be initialized statically to the size of
 
108
     the needed memory to store per-savepoint information.
 
109
     After xxx_init it is changed to be an offset to savepoint storage
 
110
     area and need not be used by storage engine.
 
111
     see binlog_engine and binlog_savepoint_set/rollback for an example.
 
112
   */
 
113
   uint32_t savepoint_offset;
 
114
   uint32_t license; /* Flag for Engine License */
 
115
 
 
116
  StorageEngine(const std::string &name_arg, bool support_2pc= false)
 
117
    : name(name_arg), _2pc(support_2pc), savepoint_offset(0)  {}
 
118
  virtual ~StorageEngine() {}
142
119
 
143
120
  bool has_2pc()
144
121
  {
145
 
    return two_phase_commit;
146
 
  }
147
 
 
148
 
 
149
 
  bool is_enabled() const
150
 
  {
151
 
    return enabled;
152
 
  }
153
 
 
154
 
  bool is_user_selectable() const
155
 
  {
156
 
    return not flags.test(HTON_BIT_NOT_USER_SELECTABLE);
157
 
  }
158
 
 
159
 
  bool check_flag(const engine_flag_bits flag) const
160
 
  {
161
 
    return flags.test(flag);
162
 
  }
163
 
 
164
 
  void enable() { enabled= true; }
165
 
  void disable() { enabled= false; }
166
 
 
167
 
  std::string getName() const { return name; }
168
 
 
169
 
  /*
170
 
    StorageEngine methods:
171
 
 
172
 
    close_connection is only called if
173
 
    session->ha_data[xxx_engine.slot] is non-zero, so even if you don't need
174
 
    this storage area - set it to something, so that MySQL would know
175
 
    this storage engine was accessed in this connection
176
 
  */
177
 
  virtual int close_connection(Session  *)
178
 
  {
179
 
    return 0;
180
 
  }
181
 
  /*
182
 
    'all' is true if it's a real commit, that makes persistent changes
183
 
    'all' is false if it's not in fact a commit but an end of the
184
 
    statement that is part of the transaction.
185
 
    NOTE 'all' is also false in auto-commit mode where 'end of statement'
186
 
    and 'real commit' mean the same event.
187
 
  */
188
 
  virtual int  commit(Session *, bool)
189
 
  {
190
 
    return 0;
191
 
  }
192
 
 
193
 
  virtual int  rollback(Session *, bool)
194
 
  {
195
 
    return 0;
196
 
  }
197
 
 
198
 
  /*
199
 
    The void * points to an uninitialized storage area of requested size
200
 
    (see savepoint_offset description)
201
 
  */
202
 
  int savepoint_set(Session *session, void *sp)
203
 
  {
204
 
    return savepoint_set_hook(session, (unsigned char *)sp+savepoint_offset);
205
 
  }
206
 
 
207
 
  /*
208
 
    The void * points to a storage area, that was earlier passed
209
 
    to the savepoint_set call
210
 
  */
211
 
  int savepoint_rollback(Session *session, void *sp)
212
 
  {
213
 
     return savepoint_rollback_hook(session,
214
 
                                    (unsigned char *)sp+savepoint_offset);
215
 
  }
216
 
 
217
 
  int savepoint_release(Session *session, void *sp)
218
 
  {
219
 
    return savepoint_release_hook(session,
220
 
                                  (unsigned char *)sp+savepoint_offset);
221
 
  }
222
 
 
223
 
  virtual int  prepare(Session *, bool) { return 0; }
224
 
  virtual int  recover(XID *, uint32_t) { return 0; }
225
 
  virtual int  commit_by_xid(XID *) { return 0; }
226
 
  virtual int  rollback_by_xid(XID *) { return 0; }
227
 
  virtual handler *create(TABLE_SHARE *, MEM_ROOT *)= 0;
228
 
  /* args: path */
229
 
  virtual void drop_database(char*) { }
230
 
  virtual int start_consistent_snapshot(Session *) { return 0; }
231
 
  virtual bool flush_logs() { return false; }
232
 
  virtual bool show_status(Session *, stat_print_fn *, enum ha_stat_type)
233
 
  {
234
 
    return false;
235
 
  }
236
 
 
237
 
  /* args: current_session, tables, cond */
238
 
  virtual int fill_files_table(Session *, TableList *,
239
 
                               Item *) { return 0; }
240
 
  virtual int release_temporary_latches(Session *) { return false; }
241
 
 
242
 
  /* args: current_session, db, name */
243
 
  virtual int table_exists_in_engine(Session*, const char *, const char *);
 
122
    return _2pc;
 
123
  }
 
124
 
 
125
 
 
126
 
 
127
   bool is_enabled() const
 
128
   {
 
129
     return (state == SHOW_OPTION_YES);
 
130
   }
 
131
 
 
132
   std::string get_name() { return name; }
 
133
 
 
134
   /*
 
135
     StorageEngine methods:
 
136
 
 
137
     close_connection is only called if
 
138
     session->ha_data[xxx_engine.slot] is non-zero, so even if you don't need
 
139
     this storage area - set it to something, so that MySQL would know
 
140
     this storage engine was accessed in this connection
 
141
   */
 
142
   virtual int close_connection(Session  *)
 
143
   {
 
144
     return 0;
 
145
   }
 
146
   /*
 
147
     The void * points to an uninitialized storage area of requested size
 
148
     (see savepoint_offset description)
 
149
   */
 
150
   virtual int savepoint_set(Session *, void *)
 
151
   {
 
152
     return 0;
 
153
   }
 
154
 
 
155
   /*
 
156
     The void * points to a storage area, that was earlier passed
 
157
     to the savepoint_set call
 
158
   */
 
159
   virtual int savepoint_rollback(Session *, void *)
 
160
   {
 
161
     return 0;
 
162
   }
 
163
 
 
164
   virtual int savepoint_release(Session *, void *)
 
165
   {
 
166
     return 0;
 
167
   }
 
168
 
 
169
   /*
 
170
     'all' is true if it's a real commit, that makes persistent changes
 
171
     'all' is false if it's not in fact a commit but an end of the
 
172
     statement that is part of the transaction.
 
173
     NOTE 'all' is also false in auto-commit mode where 'end of statement'
 
174
     and 'real commit' mean the same event.
 
175
   */
 
176
   virtual int  commit(Session *, bool)
 
177
   {
 
178
     return 0;
 
179
   }
 
180
 
 
181
   virtual int  rollback(Session *, bool)
 
182
   {
 
183
     return 0;
 
184
   }
 
185
 
 
186
   virtual int  prepare(Session *, bool) { return 0; }
 
187
   virtual int  recover(XID *, uint32_t) { return 0; }
 
188
   virtual int  commit_by_xid(XID *) { return 0; }
 
189
   virtual int  rollback_by_xid(XID *) { return 0; }
 
190
   virtual handler *create(TABLE_SHARE *, MEM_ROOT *)= 0;
 
191
   /* args: path */
 
192
   virtual void drop_database(char*) { }
 
193
   virtual int start_consistent_snapshot(Session *) { return 0; }
 
194
   virtual bool flush_logs() { return false; }
 
195
   virtual bool show_status(Session *, stat_print_fn *, enum ha_stat_type)
 
196
   {
 
197
     return false;
 
198
   }
 
199
 
 
200
   /* args: current_session, tables, cond */
 
201
   virtual int fill_files_table(Session *, TableList *,
 
202
                                Item *) { return 0; }
 
203
   virtual int release_temporary_latches(Session *) { return false; }
 
204
 
 
205
   /* args: current_session, db, name */
 
206
   virtual int table_exists_in_engine(Session*, const char *, const char *);
244
207
};
245
208
 
 
209
 
246
210
/* lookups */
247
211
StorageEngine *ha_default_storage_engine(Session *session);
248
 
StorageEngine *ha_resolve_by_name(Session *session, const LEX_STRING *name);
 
212
plugin_ref ha_resolve_by_name(Session *session, const LEX_STRING *name);
 
213
plugin_ref ha_lock_engine(Session *session, StorageEngine *engine);
249
214
handler *get_new_handler(TABLE_SHARE *share, MEM_ROOT *alloc,
250
215
                         StorageEngine *db_type);
251
 
const std::string ha_resolve_storage_engine_name(const StorageEngine *db_type);
 
216
const char *ha_resolve_storage_engine_name(const StorageEngine *db_type);
 
217
bool ha_check_storage_engine_flag(const StorageEngine *db_type, const engine_flag_bits flag);
 
218
LEX_STRING *ha_storage_engine_name(const StorageEngine *engine);
252
219
 
253
 
#endif /* DRIZZLED_PLUGIN_STORAGE_ENGINE_H */
 
220
#endif /* DRIZZLED_HANDLERTON_H */