~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/handler.h

Removed server_id from common_includes.
Split xid stuff into its own files.

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
#ifndef DRIZZLED_HANDLER_H
21
21
#define DRIZZLED_HANDLER_H
22
22
 
 
23
#include <drizzled/xid.h>
 
24
 
23
25
/* Definitions for parameters to do with handler-routines */
24
26
 
25
27
#include <storage/myisam/keycache.h>
340
342
#define HA_CREATE_USED_PAGE_CHECKSUM    (1L << 21)
341
343
#define HA_CREATE_USED_BLOCK_SIZE       (1L << 22)
342
344
 
343
 
typedef uint64_t my_xid; // this line is the same as in log_event.h
344
 
#define DRIZZLE_XID_PREFIX "MySQLXid"
345
 
#define DRIZZLE_XID_PREFIX_LEN 8 // must be a multiple of 8
346
 
#define DRIZZLE_XID_OFFSET (DRIZZLE_XID_PREFIX_LEN+sizeof(server_id))
347
 
#define DRIZZLE_XID_GTRID_LEN (DRIZZLE_XID_OFFSET+sizeof(my_xid))
348
 
 
349
 
#define XIDDATASIZE DRIZZLE_XIDDATASIZE
350
345
#define MAXGTRIDSIZE 64
351
346
#define MAXBQUALSIZE 64
352
347
 
357
352
                                      uint32_t key_length,
358
353
                                      uint64_t *engine_data);
359
354
 
360
 
/**
361
 
  struct xid_t is binary compatible with the XID structure as
362
 
  in the X/Open CAE Specification, Distributed Transaction Processing:
363
 
  The XA Specification, X/Open Company Ltd., 1991.
364
 
  http://www.opengroup.org/bookstore/catalog/c193.htm
365
 
 
366
 
  @see DRIZZLE_XID in mysql/plugin.h
367
 
*/
368
 
struct xid_t {
369
 
  long formatID;
370
 
  long gtrid_length;
371
 
  long bqual_length;
372
 
  char data[XIDDATASIZE];  // not \0-terminated !
373
 
 
374
 
  xid_t() {}                                /* Remove gcc warning */  
375
 
  bool eq(struct xid_t *xid)
376
 
  { return eq(xid->gtrid_length, xid->bqual_length, xid->data); }
377
 
  bool eq(long g, long b, const char *d)
378
 
  { return g == gtrid_length && b == bqual_length && !memcmp(d, data, g+b); }
379
 
  void set(struct xid_t *xid)
380
 
  { memcpy(this, xid, xid->length()); }
381
 
  void set(long f, const char *g, long gl, const char *b, long bl)
382
 
  {
383
 
    formatID= f;
384
 
    memcpy(data, g, gtrid_length= gl);
385
 
    memcpy(data+gl, b, bqual_length= bl);
386
 
  }
387
 
  void set(uint64_t xid)
388
 
  {
389
 
    my_xid tmp;
390
 
    formatID= 1;
391
 
    set(DRIZZLE_XID_PREFIX_LEN, 0, DRIZZLE_XID_PREFIX);
392
 
    memcpy(data+DRIZZLE_XID_PREFIX_LEN, &server_id, sizeof(server_id));
393
 
    tmp= xid;
394
 
    memcpy(data+DRIZZLE_XID_OFFSET, &tmp, sizeof(tmp));
395
 
    gtrid_length=DRIZZLE_XID_GTRID_LEN;
396
 
  }
397
 
  void set(long g, long b, const char *d)
398
 
  {
399
 
    formatID= 1;
400
 
    gtrid_length= g;
401
 
    bqual_length= b;
402
 
    memcpy(data, d, g+b);
403
 
  }
404
 
  bool is_null() { return formatID == -1; }
405
 
  void null() { formatID= -1; }
406
 
  my_xid quick_get_my_xid()
407
 
  {
408
 
    my_xid tmp;
409
 
    memcpy(&tmp, data+DRIZZLE_XID_OFFSET, sizeof(tmp));
410
 
    return tmp;
411
 
  }
412
 
  my_xid get_my_xid()
413
 
  {
414
 
    return gtrid_length == DRIZZLE_XID_GTRID_LEN && bqual_length == 0 &&
415
 
           !memcmp(data+DRIZZLE_XID_PREFIX_LEN, &server_id, sizeof(server_id)) &&
416
 
           !memcmp(data, DRIZZLE_XID_PREFIX, DRIZZLE_XID_PREFIX_LEN) ?
417
 
           quick_get_my_xid() : 0;
418
 
  }
419
 
  uint32_t length()
420
 
  {
421
 
    return sizeof(formatID)+sizeof(gtrid_length)+sizeof(bqual_length)+
422
 
           gtrid_length+bqual_length;
423
 
  }
424
 
  unsigned char *key()
425
 
  {
426
 
    return (unsigned char *)&gtrid_length;
427
 
  }
428
 
  uint32_t key_length()
429
 
  {
430
 
    return sizeof(gtrid_length)+sizeof(bqual_length)+gtrid_length+bqual_length;
431
 
  }
432
 
};
433
 
typedef struct xid_t XID;
434
 
 
435
 
/* for recover() handlerton call */
436
 
#define MIN_XID_LIST_SIZE  128
437
 
#define MAX_XID_LIST_SIZE  (1024*128)
438
355
 
439
356
struct handlerton;
440
357