98
118
session->ha_data[xxx_engine.slot]
100
120
slot number is initialized by MySQL after xxx_init() is called.
103
std::bitset<HTON_BIT_SIZE> flags; /* global handler flags */
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.
113
uint32_t savepoint_offset;
114
uint32_t license; /* Flag for Engine License */
116
StorageEngine(const std::string &name_arg, bool support_2pc= false)
117
: name(name_arg), _2pc(support_2pc), savepoint_offset(0) {}
118
virtual ~StorageEngine() {}
124
StorageEngine(const std::string &name_arg,
125
const std::bitset<HTON_BIT_SIZE> &flags_arg= HTON_NO_FLAGS,
126
size_t savepoint_offset_arg= 0,
127
bool support_2pc= false);
129
virtual ~StorageEngine();
127
bool is_enabled() const
129
return (state == SHOW_OPTION_YES);
132
std::string get_name() { return name; }
135
StorageEngine methods:
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
142
virtual int close_connection(Session *)
147
The void * points to an uninitialized storage area of requested size
148
(see savepoint_offset description)
150
virtual int savepoint_set(Session *, void *)
156
The void * points to a storage area, that was earlier passed
157
to the savepoint_set call
159
virtual int savepoint_rollback(Session *, void *)
164
virtual int savepoint_release(Session *, void *)
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.
176
virtual int commit(Session *, bool)
181
virtual int rollback(Session *, bool)
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;
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)
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; }
205
/* args: current_session, db, name */
206
virtual int table_exists_in_engine(Session*, const char *, const char *);
133
return two_phase_commit;
137
bool is_enabled() const
142
bool is_user_selectable() const
144
return not flags.test(HTON_BIT_NOT_USER_SELECTABLE);
147
bool check_flag(const engine_flag_bits flag) const
149
return flags.test(flag);
152
void enable() { enabled= true; }
153
void disable() { enabled= false; }
155
std::string get_name() { return name; }
158
StorageEngine methods:
160
close_connection is only called if
161
session->ha_data[xxx_engine.slot] is non-zero, so even if you don't need
162
this storage area - set it to something, so that MySQL would know
163
this storage engine was accessed in this connection
165
virtual int close_connection(Session *)
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.
176
virtual int commit(Session *, bool)
181
virtual int rollback(Session *, bool)
187
The void * points to an uninitialized storage area of requested size
188
(see savepoint_offset description)
190
int savepoint_set(Session *session, void *sp)
192
return savepoint_set_hook(session, (unsigned char *)sp+savepoint_offset);
196
The void * points to a storage area, that was earlier passed
197
to the savepoint_set call
199
int savepoint_rollback(Session *session, void *sp)
201
return savepoint_rollback_hook(session,
202
(unsigned char *)sp+savepoint_offset);
205
int savepoint_release(Session *session, void *sp)
207
return savepoint_release_hook(session,
208
(unsigned char *)sp+savepoint_offset);
211
virtual int prepare(Session *, bool) { return 0; }
212
virtual int recover(XID *, uint32_t) { return 0; }
213
virtual int commit_by_xid(XID *) { return 0; }
214
virtual int rollback_by_xid(XID *) { return 0; }
215
virtual handler *create(TABLE_SHARE *, MEM_ROOT *)= 0;
217
virtual void drop_database(char*) { }
218
virtual int start_consistent_snapshot(Session *) { return 0; }
219
virtual bool flush_logs() { return false; }
220
virtual bool show_status(Session *, stat_print_fn *, enum ha_stat_type)
225
/* args: current_session, tables, cond */
226
virtual int fill_files_table(Session *, TableList *,
227
Item *) { return 0; }
228
virtual int release_temporary_latches(Session *) { return false; }
230
/* args: current_session, db, name */
231
virtual int table_exists_in_engine(Session*, const char *, const char *);
211
235
StorageEngine *ha_default_storage_engine(Session *session);
212
236
plugin_ref ha_resolve_by_name(Session *session, const LEX_STRING *name);