1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4
* Copyright (C) 2008 Sun Microsystems
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; version 2 of the License.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1
/* Copyright (C) 2006 MySQL AB
3
This program is free software; you can redistribute it and/or modify
4
it under the terms of the GNU General Public License as published by
5
the Free Software Foundation; version 2 of the License.
7
This program is distributed in the hope that it will be useful,
8
but WITHOUT ANY WARRANTY; without even the implied warranty of
9
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
GNU General Public License for more details.
12
You should have received a copy of the GNU General Public License
13
along with this program; if not, write to the Free Software
14
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
20
16
#ifndef RPL_UTILITY_H
21
17
#define RPL_UTILITY_H
23
#include <drizzled/server_includes.h>
20
#error "Don't include this C++ header file from a non-C++ file!"
23
#include "mysql_priv.h"
25
25
class Relay_log_info;
58
58
@param metadata_size Size of the field_metadata array
59
59
@param null_bitmap The bitmap of fields that can be null
61
table_def(field_type *types, uint32_t size, unsigned char *field_metadata,
62
int metadata_size, unsigned char *null_bitmap)
61
table_def(field_type *types, ulong size, uchar *field_metadata,
62
int metadata_size, uchar *null_bitmap)
63
63
: m_size(size), m_type(0), m_field_metadata_size(metadata_size),
64
64
m_field_metadata(0), m_null_bits(0), m_memory(NULL)
66
m_memory= (unsigned char *)my_multi_malloc(MYF(MY_WME),
66
m_memory= (uchar *)my_multi_malloc(MYF(MY_WME),
69
size * sizeof(uint16_t),
69
size * sizeof(uint16),
70
70
&m_null_bits, (size + 7) / 8,
73
memset(m_field_metadata, 0, size * sizeof(uint16_t));
73
bzero(m_field_metadata, size * sizeof(uint16));
76
76
memcpy(m_type, types, size);
102
case DRIZZLE_TYPE_ENUM:
104
case MYSQL_TYPE_ENUM:
105
case MYSQL_TYPE_STRING:
104
uint16_t x= field_metadata[index++] << 8U; // real_type
107
uint16 x= field_metadata[index++] << 8U; // real_type
105
108
x+= field_metadata[index++]; // pack or field length
106
109
m_field_metadata[i]= x;
109
case DRIZZLE_TYPE_VARCHAR:
112
case MYSQL_TYPE_VARCHAR:
112
115
These types store two bytes.
116
119
index= index + 2;
119
case DRIZZLE_TYPE_NEWDECIMAL:
122
case MYSQL_TYPE_NEWDECIMAL:
121
uint16_t x= field_metadata[index++] << 8U; // precision
124
uint16 x= field_metadata[index++] << 8U; // precision
122
125
x+= field_metadata[index++]; // decimals
123
126
m_field_metadata[i]= x;
175
178
corresponding fields to properly extract the data from the binary log
176
179
in the event that the master's field is smaller than the slave.
178
uint16_t field_metadata(uint32_t index) const
181
uint16 field_metadata(uint index) const
180
183
assert(index < m_size);
181
184
if (m_field_metadata_size)
188
191
This function returns whether the field on the master can be null.
189
192
This value is derived from field->maybe_null().
191
bool maybe_null(uint32_t index) const
194
my_bool maybe_null(uint index) const
193
196
assert(index < m_size);
194
197
return ((m_null_bits[(index / 8)] &
202
205
WL#3915) or needs to advance the pointer for the fields in the raw
203
206
data from the master to a specific column.
205
uint32_t calc_field_size(uint32_t col, unsigned char *master_data) const;
208
uint32 calc_field_size(uint col, uchar *master_data) const;
208
211
Decide if the table definition is compatible with a table.
221
224
@retval 1 if the table definition is not compatible with @c table
222
225
@retval 0 if the table definition is compatible with @c table
224
int compatible_with(Relay_log_info const *rli, Table *table) const;
227
int compatible_with(Relay_log_info const *rli, TABLE *table) const;
227
uint32_t m_size; // Number of elements in the types array
230
ulong m_size; // Number of elements in the types array
228
231
field_type *m_type; // Array of type descriptors
229
uint32_t m_field_metadata_size;
230
uint16_t *m_field_metadata;
231
unsigned char *m_null_bits;
232
unsigned char *m_memory;
232
uint m_field_metadata_size;
233
uint16 *m_field_metadata;
236
239
Extend the normal table list with a few new fields needed by the
237
240
slave thread, but nowhere else.
242
struct RPL_TABLE_LIST
242
245
bool m_tabledef_valid;
243
246
table_def m_tabledef;