48
48
typedef struct st_HA_KEYSEG /* Key-portion */
50
const CHARSET_INFO *charset;
51
uint32_t start; /* Start of key in record */
52
uint32_t null_pos; /* position to NULL indicator */
53
uint16_t bit_pos; /* Position to bit part */
55
uint16_t length; /* Keylength */
56
uint8_t type; /* Type of key (for sort) */
58
uint8_t null_bit; /* bitmask to test for NULL */
59
uint8_t bit_start,bit_end; /* if bit field */
60
uint8_t bit_length; /* Length of bit part */
50
CHARSET_INFO *charset;
51
uint32 start; /* Start of key in record */
52
uint32 null_pos; /* position to NULL indicator */
53
uint16 bit_pos; /* Position to bit part */
55
uint16 length; /* Keylength */
56
uint8 type; /* Type of key (for sort) */
58
uint8 null_bit; /* bitmask to test for NULL */
59
uint8 bit_start,bit_end; /* if bit field */
60
uint8 bit_length; /* Length of bit part */
63
63
#define get_key_length(length,key) \
64
{ if (*(unsigned char*) (key) != 255) \
65
length= (uint) *(unsigned char*) ((key)++); \
64
{ if (*(uchar*) (key) != 255) \
65
length= (uint) *(uchar*) ((key)++); \
67
67
{ length= mi_uint2korr((key)+1); (key)+=3; } \
70
70
#define get_key_length_rdonly(length,key) \
71
{ if (*(unsigned char*) (key) != 255) \
72
length= ((uint) *(unsigned char*) ((key))); \
71
{ if (*(uchar*) (key) != 255) \
72
length= ((uint) *(uchar*) ((key))); \
74
74
{ length= mi_uint2korr((key)+1); } \
77
77
#define get_key_pack_length(length,length_pack,key) \
78
{ if (*(unsigned char*) (key) != 255) \
79
{ length= (uint) *(unsigned char*) ((key)++); length_pack= 1; }\
78
{ if (*(uchar*) (key) != 255) \
79
{ length= (uint) *(uchar*) ((key)++); length_pack= 1; }\
81
81
{ length=mi_uint2korr((key)+1); (key)+= 3; length_pack= 3; } \
91
91
#define size_to_store_key_length(length) ((length) < 255 ? 1 : 3)
93
93
#define get_rec_bits(bit_ptr, bit_ofs, bit_len) \
94
(((((uint16_t) (bit_ptr)[1] << 8) | (uint16_t) (bit_ptr)[0]) >> (bit_ofs)) & \
94
(((((uint16) (bit_ptr)[1] << 8) | (uint16) (bit_ptr)[0]) >> (bit_ofs)) & \
95
95
((1 << (bit_len)) - 1))
97
97
#define set_rec_bits(bits, bit_ptr, bit_ofs, bit_len) \
106
106
#define clr_rec_bits(bit_ptr, bit_ofs, bit_len) \
107
107
set_rec_bits(0, bit_ptr, bit_ofs, bit_len)
109
extern int ha_compare_text(const CHARSET_INFO * const, unsigned char *, uint, unsigned char *, uint, bool, bool);
109
extern int ha_compare_text(CHARSET_INFO *, uchar *, uint, uchar *, uint ,
111
extern HA_KEYSEG *ha_find_null(HA_KEYSEG *keyseg, unsigned char *a);
112
extern HA_KEYSEG *ha_find_null(HA_KEYSEG *keyseg, uchar *a);
112
113
extern void my_handler_error_register(void);
113
114
extern void my_handler_error_unregister(void);
114
extern int ha_key_cmp(HA_KEYSEG *keyseg, unsigned char *a,unsigned char *b,
115
uint32_t key_length,uint32_t nextflag,uint32_t *diff_length);
115
extern int ha_key_cmp(HA_KEYSEG *keyseg, uchar *a,uchar *b,
116
uint key_length,uint nextflag,uint *diff_length);
118
119
Inside an in-memory data record, memory pointers to pieces of the