documented handlerton structure
This commit is contained in:
parent
88bd301d36
commit
a7401bf7cc
@ -249,14 +249,66 @@ typedef struct xid_t XID;
|
|||||||
#define MIN_XID_LIST_SIZE 128
|
#define MIN_XID_LIST_SIZE 128
|
||||||
#define MAX_XID_LIST_SIZE (1024*128)
|
#define MAX_XID_LIST_SIZE (1024*128)
|
||||||
|
|
||||||
|
/*
|
||||||
|
handlerton is a singleton structure - one instance per storage engine -
|
||||||
|
to provide access to storage engine functionality that works on
|
||||||
|
"global" level (unlike handler class that works on per-table basis)
|
||||||
|
|
||||||
|
usually handlerton instance is defined statically in ha_xxx.cc as
|
||||||
|
|
||||||
|
static handlerton { ... } xxx_hton;
|
||||||
|
|
||||||
|
savepoint_*, prepare, recover, and *_by_xid pointers can be 0.
|
||||||
|
*/
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
each storage engine has it's own memory area (actually a pointer)
|
||||||
|
in the thd, for storing per-connection information.
|
||||||
|
It is accessed as
|
||||||
|
|
||||||
|
thd->ha_data[xxx_hton.slot]
|
||||||
|
|
||||||
|
slot number is initialized by MySQL after xxx_init() is called.
|
||||||
|
*/
|
||||||
uint slot;
|
uint slot;
|
||||||
|
/*
|
||||||
|
to store per-savepoint data storage engine is provided with an area
|
||||||
|
of a requested size (0 is ok here).
|
||||||
|
savepoint_offset must be initialized statically to the size of
|
||||||
|
the needed memory to store per-savepoint information.
|
||||||
|
After xxx_init it is changed to be an offset to savepoint storage
|
||||||
|
area and need not be used by storage engine.
|
||||||
|
see binlog_hton and binlog_savepoint_set/rollback for an example.
|
||||||
|
*/
|
||||||
uint savepoint_offset;
|
uint savepoint_offset;
|
||||||
|
/*
|
||||||
|
handlerton methods:
|
||||||
|
|
||||||
|
close_connection is only called if
|
||||||
|
thd->ha_data[xxx_hton.slot] is non-zero, so even if you don't need
|
||||||
|
this storage area - set it to something, so that MySQL would know
|
||||||
|
this storage engine was accessed in this connection
|
||||||
|
*/
|
||||||
int (*close_connection)(THD *thd);
|
int (*close_connection)(THD *thd);
|
||||||
|
/*
|
||||||
|
sv points to an uninitialized storage area of requested size
|
||||||
|
(see savepoint_offset description)
|
||||||
|
*/
|
||||||
int (*savepoint_set)(THD *thd, void *sv);
|
int (*savepoint_set)(THD *thd, void *sv);
|
||||||
|
/*
|
||||||
|
sv points to a storage area, that was earlier passed
|
||||||
|
to the savepoint_set call
|
||||||
|
*/
|
||||||
int (*savepoint_rollback)(THD *thd, void *sv);
|
int (*savepoint_rollback)(THD *thd, void *sv);
|
||||||
int (*savepoint_release)(THD *thd, void *sv);
|
int (*savepoint_release)(THD *thd, void *sv);
|
||||||
|
/*
|
||||||
|
'all' is true if it's a real commit, that makes persistent changes
|
||||||
|
'all' is false if it's not in fact a commit but an end of the
|
||||||
|
statement that is part of the transaction.
|
||||||
|
NOTE 'all' is also false in auto-commit mode where 'end of statement'
|
||||||
|
and 'real commit' mean the same event.
|
||||||
|
*/
|
||||||
int (*commit)(THD *thd, bool all);
|
int (*commit)(THD *thd, bool all);
|
||||||
int (*rollback)(THD *thd, bool all);
|
int (*rollback)(THD *thd, bool all);
|
||||||
int (*prepare)(THD *thd, bool all);
|
int (*prepare)(THD *thd, bool all);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user