18
18
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
#ifndef DRIZZLED_FIELD_BLOB_H
22
#define DRIZZLED_FIELD_BLOB_H
24
#include <drizzled/field/str.h>
26
#include "drizzled/global_charset_info.h"
21
#ifndef DRIZZLE_SERVER_FIELD_BLOB
22
#define DRIZZLE_SERVER_FIELD_BLOB
24
#include <drizzled/field/longstr.h>
34
* Class representing a BLOB data type column
36
class Field_blob :public Field_str {
28
class Field_blob :public Field_longstr {
38
30
uint32_t packlength;
39
31
String value; // For temporaries
46
38
using Field::val_int;
47
39
using Field::val_str;
49
Field_blob(unsigned char *ptr_arg,
50
unsigned char *null_ptr_arg,
51
unsigned char null_bit_arg,
52
const char *field_name_arg,
54
uint32_t blob_pack_length,
55
const CHARSET_INFO * const cs);
56
Field_blob(uint32_t len_arg,
58
const char *field_name_arg,
42
Field_blob(unsigned char *ptr_arg, unsigned char *null_ptr_arg, unsigned char null_bit_arg,
43
enum utype unireg_check_arg, const char *field_name_arg,
44
TABLE_SHARE *share, uint32_t blob_pack_length, const CHARSET_INFO * const cs);
45
Field_blob(uint32_t len_arg, bool maybe_null_arg, const char *field_name_arg,
59
46
const CHARSET_INFO * const cs)
60
:Field_str((unsigned char*) NULL,
62
maybe_null_arg ? (unsigned char *) "": 0,
47
:Field_longstr((unsigned char*) 0, len_arg, maybe_null_arg ? (unsigned char*) "": 0, 0,
48
NONE, field_name_arg, cs),
70
Field_blob(uint32_t len_arg,
72
const char *field_name_arg,
73
const CHARSET_INFO * const cs,
75
:Field_str((unsigned char*) NULL,
77
maybe_null_arg ? (unsigned char*) "": 0,
53
Field_blob(uint32_t len_arg, bool maybe_null_arg, const char *field_name_arg,
54
const CHARSET_INFO * const cs, bool set_packlength)
55
:Field_longstr((unsigned char*) 0,len_arg, maybe_null_arg ? (unsigned char*) "": 0, 0,
56
NONE, field_name_arg, cs)
84
60
if (set_packlength)
86
62
uint32_t l_char_length= len_arg/cs->mbmaxlen;
92
68
Field_blob(uint32_t packlength_arg)
93
:Field_str((unsigned char*) 0,
99
packlength(packlength_arg)
69
:Field_longstr((unsigned char*) 0, 0, (unsigned char*) "", 0, NONE, "temp", system_charset_info),
70
packlength(packlength_arg) {}
101
71
enum_field_types type() const { return DRIZZLE_TYPE_BLOB;}
102
72
enum ha_base_keytype key_type() const
103
73
{ return binary() ? HA_KEYTYPE_VARBINARY2 : HA_KEYTYPE_VARTEXT2; }
180
151
memcpy(ptr,length,packlength);
181
152
memcpy(ptr+packlength,&data,sizeof(char*));
183
void set_ptr_offset(ptrdiff_t ptr_diff, uint32_t length, unsigned char *data)
154
void set_ptr_offset(my_ptrdiff_t ptr_diff, uint32_t length, unsigned char *data)
185
156
unsigned char *ptr_ofs= ADD_TO_PTR(ptr,ptr_diff,unsigned char*);
186
157
store_length(ptr_ofs, packlength, length);
191
162
set_ptr_offset(0, length, data);
193
uint32_t get_key_image(unsigned char *buff,uint32_t length);
194
uint32_t get_key_image(std::basic_string<unsigned char> &buff, uint32_t length);
164
uint32_t get_key_image(unsigned char *buff,uint32_t length, imagetype type);
165
uint32_t get_key_image(std::basic_string<unsigned char> &buff,
166
uint32_t length, imagetype type);
195
167
void set_key_image(const unsigned char *buff,uint32_t length);
196
168
void sql_type(String &str) const;
197
169
inline bool copy()
220
192
bool has_charset(void) const
221
193
{ return charset() == &my_charset_bin ? false : true; }
222
194
uint32_t max_display_length();
195
uint32_t is_equal(Create_field *new_field);
199
int do_save_field_metadata(unsigned char *first_byte);
225
} /* namespace drizzled */
227
#endif /* DRIZZLED_FIELD_BLOB_H */