~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/xid.h

  • Committer: Monty Taylor
  • Date: 2010-12-26 00:22:34 UTC
  • mto: This revision was merged to the branch mainline in revision 2038.
  • Revision ID: mordred@inaugust.com-20101226002234-2sb62sm2gs0iftuy
Fixing some of the innodb c++ casting issues.

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
 
#pragma once
 
20
#ifndef DRIZZLED_XID_H
 
21
#define DRIZZLED_XID_H
21
22
 
22
23
#include <cstring>
23
24
 
24
 
namespace drizzled {
 
25
namespace drizzled
 
26
{
25
27
 
26
28
extern uint32_t server_id;
27
29
 
36
38
typedef uint64_t my_xid;
37
39
 
38
40
#define DRIZZLE_XIDDATASIZE 128
39
 
#define DRIZZLE_XID_PREFIX "DrizzleXid"
 
41
#define DRIZZLE_XID_PREFIX "MySQLXid"
40
42
#define DRIZZLE_XID_PREFIX_LEN 8 // must be a multiple of 8
41
43
#define DRIZZLE_XID_OFFSET (DRIZZLE_XID_PREFIX_LEN+sizeof(server_id))
42
44
#define DRIZZLE_XID_GTRID_LEN (DRIZZLE_XID_OFFSET+sizeof(my_xid))
43
45
 
44
 
class XID
45
 
{
 
46
class XID {
 
47
 
46
48
public:
 
49
 
47
50
  long formatID;
48
51
  long gtrid_length;
49
52
  long bqual_length;
56
59
  {
57
60
    memset(data, 0, DRIZZLE_XIDDATASIZE);
58
61
  }
 
62
  bool eq(XID *xid);
 
63
  bool eq(long g, long b, const char *d);
 
64
  void set(XID *xid);
 
65
  void set(long f, const char *g, long gl, const char *b, long bl);
59
66
  void set(uint64_t xid);
60
67
  void set(long g, long b, const char *d);
61
 
  bool is_null() const;
62
 
  void set_null();
 
68
  bool is_null();
 
69
  void null();
63
70
  my_xid quick_get_my_xid();
64
71
  my_xid get_my_xid();
65
 
  uint32_t length() const;
 
72
  uint32_t length();
 
73
  unsigned char *key();
 
74
  uint32_t key_length();
66
75
};
67
76
 
68
77
/**
69
 
  struct st_DrizzleXid is binary compatible with the XID structure as
 
78
  struct st_drizzle_xid is binary compatible with the XID structure as
70
79
  in the X/Open CAE Specification, Distributed Transaction Processing:
71
80
  The XA Specification, X/Open Company Ltd., 1991.
72
81
  http://www.opengroup.org/bookstore/catalog/c193.htm
73
82
 
74
83
*/
75
84
 
76
 
class DrizzleXid
77
 
{
 
85
class drizzle_xid {
78
86
public:
79
87
  long formatID;
80
88
  long gtrid_length;
81
89
  long bqual_length;
82
90
  char data[DRIZZLE_XIDDATASIZE];  /* Not \0-terminated */
83
91
 
84
 
  DrizzleXid() :
 
92
  drizzle_xid() :
85
93
    formatID(0),
86
94
    gtrid_length(0),
87
95
    bqual_length(0)
89
97
    memset(data, 0, DRIZZLE_XIDDATASIZE);
90
98
  }
91
99
};
 
100
typedef class drizzle_xid DRIZZLE_XID;
92
101
 
93
102
enum xa_states {XA_NOTR=0, XA_ACTIVE, XA_IDLE, XA_PREPARED};
94
103
extern const char *xa_state_names[];
97
106
#define MIN_XID_LIST_SIZE  128
98
107
#define MAX_XID_LIST_SIZE  (1024*128)
99
108
 
100
 
class XID_STATE
 
109
class XID_STATE 
101
110
{
102
111
public:
103
112
  XID_STATE() :
 
113
    xid(),
104
114
    xa_state(XA_NOTR),
105
115
    in_session(false)
106
116
  {}
107
117
  /* For now, this is only used to catch duplicated external xids */
108
118
  XID  xid;                           // transaction identifier
109
 
  xa_states xa_state;            // used by external XA only
 
119
  enum xa_states xa_state;            // used by external XA only
110
120
  bool in_session;
111
121
};
112
122
 
 
123
bool xid_cache_init(void);
 
124
void xid_cache_free(void);
 
125
XID_STATE *xid_cache_search(XID *xid);
 
126
bool xid_cache_insert(XID *xid, enum xa_states xa_state);
 
127
bool xid_cache_insert(XID_STATE *xid_state);
 
128
void xid_cache_delete(XID_STATE *xid_state);
 
129
 
113
130
} /* namespace drizzled */
114
131
 
 
132
#endif /* DRIZZLED_XID_H */