56
61
return elements < 256 ? 1 : 2;
65
* Class representing a Field in a Table
69
* The value stored in the Field object is stored in the
70
* unsigned char pointer member variable called ptr. The
71
* val_xxx() methods retrieve this raw byte value and
72
* convert the byte into the appropriate output (int, decimal, etc).
74
* The store_xxx() methods take various input and convert
75
* the input into the raw bytes stored in the ptr member variable.
61
Field(const Item &); /* Prevent use of these */
79
/* Prevent use of these */
62
81
void operator=(Field &);
64
static void *operator new(size_t size) {return sql_alloc(size); }
65
static void *operator new(size_t size, MEM_ROOT *mem_root)
66
{ return (void*) alloc_root(mem_root, (uint32_t) size); }
68
static void operator delete(void *, size_t)
69
{ TRASH(ptr_arg, size); }
71
unsigned char *ptr; // Position to field in record
72
unsigned char *null_ptr; // Byte where null_bit is
74
Note that you can use table->in_use as replacement for current_session member
75
only inside of val_*() and store() members (e.g. you can't use it in cons)
77
Table *table; // Pointer for table
78
Table *orig_table; // Pointer to original table
79
const char **table_name, *field_name;
81
/* Field is part of the following keys */
82
key_map key_start, part_of_key, part_of_key_not_clustered;
83
key_map part_of_sortkey;
83
unsigned char *ptr; /**< Position to field in record. Stores raw field value */
84
unsigned char *null_ptr; /**< Byte where null_bit is */
87
* Pointer to the Table object containing this Field
89
* @note You can use table->in_use as replacement for current_session member
90
* only inside of val_*() and store() members (e.g. you can't use it in cons)
93
Table *orig_table; /**< Pointer to the original Table. @TODO What is "the original table"? */
94
const char **table_name; /**< Pointer to the name of the table. @TODO This is redundant with Table::table_name. */
95
const char *field_name; /**< Name of the field */
96
LEX_STRING comment; /**< A comment about the field */
98
/** The field is part of the following keys */
101
key_map part_of_key_not_clustered;
102
key_map part_of_sortkey;
85
105
We use three additional unireg types for TIMESTAMP to overcome limitation
86
106
of current binary format of .frm file. We'd like to be able to support
108
132
@see create_tmp_field_from_item
109
133
@see Item_type_holder::get_real_type
112
135
bool is_created_from_null_item;
114
Field(unsigned char *ptr_arg,uint32_t length_arg,unsigned char *null_ptr_arg,
115
unsigned char null_bit_arg, utype unireg_check_arg,
137
static void *operator new(size_t size) {return sql_alloc(size); }
138
static void *operator new(size_t size, MEM_ROOT *mem_root)
139
{ return (void*) alloc_root(mem_root, (uint32_t) size); }
140
static void operator delete(void *, size_t)
141
{ TRASH(ptr_arg, size); }
143
Field(unsigned char *ptr_arg,
145
unsigned char *null_ptr_arg,
146
unsigned char null_bit_arg,
147
utype unireg_check_arg,
116
148
const char *field_name_arg);
117
149
virtual ~Field() {}
118
150
/* Store functions returns 1 on overflow and -1 on fatal error */
119
virtual int store(const char *to, uint32_t length,
151
virtual int store(const char *to,
120
153
const CHARSET_INFO * const cs)=0;
121
154
virtual int store(double nr)=0;
122
155
virtual int store(int64_t nr, bool unsigned_val)=0;
123
156
virtual int store_decimal(const my_decimal *d)=0;
124
int store(const char *to, uint32_t length,
157
int store(const char *to,
125
159
const CHARSET_INFO * const cs,
126
160
enum_check_fields check_level);
127
virtual int store_time(DRIZZLE_TIME *ltime,
128
enum enum_drizzle_timestamp_type t_type);
162
This is called when storing a date in a string.
165
Needs to be changed if/when we want to support different time formats.
167
virtual int store_time(DRIZZLE_TIME *ltime, enum enum_drizzle_timestamp_type t_type);
129
168
virtual double val_real(void)=0;
130
169
virtual int64_t val_int(void)=0;
131
170
virtual my_decimal *val_decimal(my_decimal *);
132
inline String *val_str(String *str) { return val_str(str, str); }
171
inline String *val_str(String *str)
173
return val_str(str, str);
134
176
val_str(buf1, buf2) gets two buffers and should use them as follows:
135
177
if it needs a temp buffer to convert result to string - use buf1
179
235
static Item_result result_merge_type(enum_field_types);
181
237
virtual bool eq(Field *field);
239
* Returns true if the fields are equally defined
242
* true This Field is equally defined to supplied Field
244
* false This Field is NOT equally defined to supplied Field
182
246
virtual bool eq_def(Field *field);
185
pack_length() returns size (in bytes) used to store field data in memory
186
(i.e. it returns the maximum size of the field in a row of the table,
187
which is located in RAM).
249
* Returns size (in bytes) used to store field data in memory
250
* (i.e. it returns the maximum size of the field in a row of the table,
251
* which is located in RAM).
189
253
virtual uint32_t pack_length() const;
192
pack_length_in_rec() returns size (in bytes) used to store field data on
193
storage (i.e. it returns the maximal size of the field in a row of the
194
table, which is located on disk).
256
* Returns size (in bytes) used to store field data on
257
* storage (i.e. it returns the maximal size of the field in a row of the
258
* table, which is located on disk).
196
260
virtual uint32_t pack_length_in_rec() const;
262
Check to see if field size is compatible with destination.
264
This method is used in row-based replication to verify that the slave's
265
field size is less than or equal to the master's field size. The
266
encoded field metadata (from the master or source) is decoded and compared
267
to the size of this field (the slave or destination).
269
@param field_metadata Encoded size in field metadata
271
@retval 0 if this field's size is < the source field's size
272
@retval 1 if this field's size is >= the source field's size
197
274
virtual int compatible_field_size(uint32_t field_metadata);
198
275
virtual uint32_t pack_length_from_metadata(uint32_t field_metadata);
264
341
virtual uint32_t size_of() const =0;
266
bool is_null(my_ptrdiff_t row_offset= 0);
267
bool is_real_null(my_ptrdiff_t row_offset= 0);
343
bool is_null(ptrdiff_t row_offset= 0);
344
bool is_real_null(ptrdiff_t row_offset= 0);
268
345
bool is_null_in_record(const unsigned char *record);
269
bool is_null_in_record_with_offset(my_ptrdiff_t offset);
270
void set_null(my_ptrdiff_t row_offset= 0);
271
void set_notnull(my_ptrdiff_t row_offset= 0);
346
bool is_null_in_record_with_offset(ptrdiff_t offset);
347
void set_null(ptrdiff_t row_offset= 0);
348
void set_notnull(ptrdiff_t row_offset= 0);
272
349
bool maybe_null(void);
273
350
bool real_maybe_null(void);
276
LAST_NULL_BYTE_UNDEF= 0
280
Find the position of the last null byte for the field.
286
Return a pointer to the last byte of the null bytes where the
287
field conceptually is placed.
290
The position of the last null byte relative to the beginning of
291
the record. If the field does not use any bits of the null
292
bytes, the value 0 (LAST_NULL_BYTE_UNDEF) is returned.
294
size_t last_null_byte() const;
296
virtual void make_field(Send_field *);
352
virtual void make_field(SendField *);
297
353
virtual void sort_string(unsigned char *buff,uint32_t length)=0;
298
354
virtual bool optimize_range(uint32_t idx, uint32_t part);
300
This should be true for fields which, when compared with constant
301
items, can be casted to int64_t. In this case we will at 'fix_fields'
302
stage cast the constant items to int64_ts and at the execution stage
303
use field->val_int() for comparison. Used to optimize clauses like
304
'a_column BETWEEN date_const, date_const'.
306
virtual bool can_be_compared_as_int64_t() const { return false; }
356
* Returns true for fields which, when compared with constant
357
* items, can be casted to int64_t. In this case we will at 'fix_fields'
358
* stage cast the constant items to int64_ts and at the execution stage
359
* use field->val_int() for comparison. Used to optimize clauses like
360
* 'a_column BETWEEN date_const AND date_const'.
362
virtual bool can_be_compared_as_int64_t() const
307
366
virtual void free() {}
308
virtual Field *new_field(MEM_ROOT *root, Table *new_table,
367
virtual Field *new_field(MEM_ROOT *root,
310
370
virtual Field *new_key_field(MEM_ROOT *root, Table *new_table,
311
unsigned char *new_ptr, unsigned char *new_null_ptr,
371
unsigned char *new_ptr,
372
unsigned char *new_null_ptr,
312
373
uint32_t new_null_bit);
374
/** This is used to generate a field in Table from TableShare */
313
375
Field *clone(MEM_ROOT *mem_root, Table *new_table);
314
376
inline void move_field(unsigned char *ptr_arg,unsigned char *null_ptr_arg,unsigned char null_bit_arg)
316
ptr=ptr_arg; null_ptr=null_ptr_arg; null_bit=null_bit_arg;
379
null_ptr= null_ptr_arg;
380
null_bit= null_bit_arg;
318
382
inline void move_field(unsigned char *ptr_arg) { ptr=ptr_arg; }
319
virtual void move_field_offset(my_ptrdiff_t ptr_diff)
383
virtual void move_field_offset(ptrdiff_t ptr_diff)
321
ptr=ADD_TO_PTR(ptr,ptr_diff, unsigned char*);
385
ptr= ADD_TO_PTR(ptr,ptr_diff, unsigned char*);
323
null_ptr=ADD_TO_PTR(null_ptr,ptr_diff,unsigned char*);
325
virtual void get_image(unsigned char *buff, uint32_t length,
326
const CHARSET_INFO * const)
327
{ memcpy(buff,ptr,length); }
328
virtual void get_image(std::basic_string<unsigned char> &buff,
330
const CHARSET_INFO * const)
331
{ buff.append(ptr,length); }
332
virtual void set_image(const unsigned char *buff,uint32_t length,
333
const CHARSET_INFO * const)
334
{ memcpy(ptr,buff,length); }
338
Copy a field part into an output buffer.
341
Field::get_key_image()
342
buff [out] output buffer
343
length output buffer size
344
type itMBR for geometry blobs, otherwise itRAW
347
This function makes a copy of field part of size equal to or
348
less than "length" parameter value.
349
For fields of string types (CHAR, VARCHAR, TEXT) the rest of buffer
350
is padded by zero byte.
353
For variable length character fields (i.e. UTF-8) the "length"
354
parameter means a number of output buffer bytes as if all field
355
characters have maximal possible size (mbmaxlen). In the other words,
356
"length" parameter is a number of characters multiplied by
357
field_charset->mbmaxlen.
360
Number of copied bytes (excluding padded zero bytes -- see above).
363
virtual uint32_t get_key_image(unsigned char *buff, uint32_t length, imagetype)
387
null_ptr= ADD_TO_PTR(null_ptr,ptr_diff,unsigned char*);
389
virtual void get_image(unsigned char *buff, uint32_t length, const CHARSET_INFO * const)
391
memcpy(buff,ptr,length);
393
virtual void get_image(std::basic_string<unsigned char> &buff, uint32_t length, const CHARSET_INFO * const)
395
buff.append(ptr,length);
397
virtual void set_image(const unsigned char *buff,uint32_t length, const CHARSET_INFO * const)
399
memcpy(ptr,buff,length);
403
* Copy a field part into an output buffer.
407
* This function makes a copy of field part of size equal to or
408
* less than "length" parameter value.
409
* For fields of string types (VARCHAR, TEXT) the rest of buffer
410
* is padded by zero byte.
412
* @param output buffer
413
* @param output buffer size
417
* For variable length character fields (i.e. UTF-8) the "length"
418
* parameter means a number of output buffer bytes as if all field
419
* characters have maximal possible size (mbmaxlen). In the other words,
420
* "length" parameter is a number of characters multiplied by
421
* field_charset->mbmaxlen.
424
* Number of copied bytes (excluding padded zero bytes -- see above).
426
virtual uint32_t get_key_image(unsigned char *buff, uint32_t length)
365
428
get_image(buff, length, &my_charset_bin);
368
virtual uint32_t get_key_image(std::basic_string<unsigned char> &buff,
369
uint32_t length, imagetype)
431
virtual uint32_t get_key_image(std::basic_string<unsigned char> &buff, uint32_t length)
371
433
get_image(buff, length, &my_charset_bin);
374
436
virtual void set_key_image(const unsigned char *buff,uint32_t length)
375
{ set_image(buff,length, &my_charset_bin); }
438
set_image(buff,length, &my_charset_bin);
376
440
inline int64_t val_int_offset(uint32_t row_offset)
467
Pack the field into a format suitable for storage and transfer.
469
To implement packing functionality, only the virtual function
470
should be overridden. The other functions are just convenience
471
functions and hence should not be overridden.
473
The value of <code>low_byte_first</code> is dependent on how the
474
packed data is going to be used: for local use, e.g., temporary
475
store on disk or in memory, use the native format since that is
476
faster. For data that is going to be transfered to other machines
477
(e.g., when writing data to the binary log), data should always be
478
stored in little-endian format.
480
@note The default method for packing fields just copy the raw bytes
481
of the record into the destination, but never more than
482
<code>max_length</code> characters.
485
Pointer to memory area where representation of field should be put.
488
Pointer to memory area where record representation of field is
492
Maximum length of the field, as given in the column definition. For
493
example, for <code>CHAR(1000)</code>, the <code>max_length</code>
494
is 1000. This information is sometimes needed to decide how to pack
497
@param low_byte_first
498
@c true if integers should be stored little-endian, @c false if
499
native format should be used. Note that for little-endian machines,
500
the value of this flag is a moot point since the native format is
402
503
virtual unsigned char *pack(unsigned char *to,
403
504
const unsigned char *from,
404
505
uint32_t max_length,
407
508
unsigned char *pack(unsigned char *to, const unsigned char *from);
511
Unpack a field from row data.
513
This method is used to unpack a field from a master whose size of
514
the field is less than that of the slave.
516
The <code>param_data</code> parameter is a two-byte integer (stored
517
in the least significant 16 bits of the unsigned integer) usually
518
consisting of two parts: the real type in the most significant byte
519
and a original pack length in the least significant byte.
521
The exact layout of the <code>param_data</code> field is given by
522
the <code>Table_map_log_event::save_field_metadata()</code>.
524
This is the default method for unpacking a field. It just copies
525
the memory block in byte order (of original pack length bytes or
526
length of field, whichever is smaller).
528
@param to Destination of the data
529
@param from Source of the data
530
@param param_data Real type and original pack length of the field
533
@param low_byte_first
534
If this flag is @c true, all composite entities (e.g., lengths)
535
should be unpacked in little-endian format; otherwise, the entities
536
are unpacked in native order.
538
@return New pointer into memory based on from + length of the data
409
540
virtual const unsigned char *unpack(unsigned char* to,
410
541
const unsigned char *from,
411
542
uint32_t param_data,
459
595
virtual const CHARSET_INFO *sort_charset(void) const { return charset(); }
460
596
virtual bool has_charset(void) const { return false; }
461
597
virtual void set_charset(const CHARSET_INFO * const)
463
599
virtual enum Derivation derivation(void) const
464
{ return DERIVATION_IMPLICIT; }
601
return DERIVATION_IMPLICIT;
465
603
virtual void set_derivation(enum Derivation)
467
bool set_warning(DRIZZLE_ERROR::enum_warning_level, unsigned int code,
606
Produce warning or note about data saved into field.
608
@param level - level of message (Note/Warning/Error)
609
@param code - error code of message to be produced
610
@param cuted_increment - whenever we should increase cut fields count or not
613
This function won't produce warning and increase cut fields counter
614
if count_cuted_fields == CHECK_FIELD_IGNORE for current thread.
616
if count_cuted_fields == CHECK_FIELD_IGNORE then we ignore notes.
617
This allows us to avoid notes in optimisation, like convert_constant_item().
620
1 if count_cuted_fields == CHECK_FIELD_IGNORE and error level is not NOTE
624
bool set_warning(DRIZZLE_ERROR::enum_warning_level,
468
626
int cuted_increment);
469
void set_datetime_warning(DRIZZLE_ERROR::enum_warning_level, uint32_t code,
470
const char *str, uint32_t str_len,
471
enum enum_drizzle_timestamp_type ts_type, int cuted_increment);
472
void set_datetime_warning(DRIZZLE_ERROR::enum_warning_level, uint32_t code,
473
int64_t nr, enum enum_drizzle_timestamp_type ts_type,
474
int cuted_increment);
475
void set_datetime_warning(DRIZZLE_ERROR::enum_warning_level, const uint32_t code,
476
double nr, enum enum_drizzle_timestamp_type ts_type);
628
Produce warning or note about datetime string data saved into field.
630
@param level level of message (Note/Warning/Error)
631
@param code error code of message to be produced
632
@param str string value which we tried to save
633
@param str_length length of string which we tried to save
634
@param ts_type type of datetime value (datetime/date/time)
635
@param cuted_increment whenever we should increase cut fields count or not
638
This function will always produce some warning but won't increase cut
639
fields counter if count_cuted_fields ==FIELD_CHECK_IGNORE for current
642
void set_datetime_warning(DRIZZLE_ERROR::enum_warning_level,
646
enum enum_drizzle_timestamp_type ts_type,
647
int cuted_increment);
649
Produce warning or note about integer datetime value saved into field.
651
@param level level of message (Note/Warning/Error)
652
@param code error code of message to be produced
653
@param nr numeric value which we tried to save
654
@param ts_type type of datetime value (datetime/date/time)
655
@param cuted_increment whenever we should increase cut fields count or not
658
This function will always produce some warning but won't increase cut
659
fields counter if count_cuted_fields == FIELD_CHECK_IGNORE for current
662
void set_datetime_warning(DRIZZLE_ERROR::enum_warning_level,
665
enum enum_drizzle_timestamp_type ts_type,
666
int cuted_increment);
668
Produce warning or note about double datetime data saved into field.
670
@param level level of message (Note/Warning/Error)
671
@param code error code of message to be produced
672
@param nr double value which we tried to save
673
@param ts_type type of datetime value (datetime/date/time)
676
This function will always produce some warning but won't increase cut
677
fields counter if count_cuted_fields == FIELD_CHECK_IGNORE for current
680
void set_datetime_warning(DRIZZLE_ERROR::enum_warning_level,
683
enum enum_drizzle_timestamp_type ts_type);
477
684
inline bool check_overflow(int op_result)
479
686
return (op_result == E_DEC_OVERFLOW);
689
Process decimal library return codes and issue warnings for overflow and
692
@param op_result decimal library return code (E_DEC_* see include/decimal.h)
695
E_DEC_OVERFLOW there was overflow
696
E_DEC_TRUNCATED there was truncation
698
0 no error or there was some other error except overflow or truncation
481
700
int warn_if_overflow(int op_result);
482
701
void init(Table *table_arg);
484
703
/* maximum possible display length */
485
704
virtual uint32_t max_display_length()= 0;
487
virtual uint32_t is_equal(Create_field *new_field);
488
/* convert decimal to int64_t with overflow check */
489
int64_t convert_decimal2int64_t(const my_decimal *val, bool unsigned_flag,
706
virtual uint32_t is_equal(CreateField *new_field);
708
Conversion from decimal to int64_t with checking overflow and
709
setting correct value (min/max) in case of overflow.
711
@param val value which have to be converted
712
@param unsigned_flag type of integer in which we convert val
713
@param err variable to pass error code
716
value converted from val
718
int64_t convert_decimal2int64_t(const my_decimal *val,
491
721
/* The max. number of characters */
492
722
inline uint32_t char_length() const
521
750
bool isReadSet();
522
751
bool isWriteSet();
752
void setReadSet(bool arg= true);
753
void setWriteSet(bool arg= true);
526
Primitive for implementing last_null_byte().
532
Primitive for the implementation of the last_null_byte()
533
function. This represents the inheritance interface and can be
534
overridden by subclasses.
536
virtual size_t do_last_null_byte() const;
539
Retrieve the field metadata for fields.
541
This default implementation returns 0 and saves 0 in the metadata_ptr
544
@param metadata_ptr First byte of field metadata
546
@returns 0 no bytes written.
758
Retrieve the field metadata for fields.
760
This default implementation returns 0 and saves 0 in the metadata_ptr
763
@param metadata_ptr First byte of field metadata
765
@returns 0 no bytes written.
548
767
virtual int do_save_field_metadata(unsigned char *)
553
Create field class for CREATE TABLE
773
#include "drizzled/create_field.h"
556
class Create_field :public Sql_alloc
776
* A class for sending field information to a client.
780
* Send_field is basically a stripped-down POD class for
781
* representing basic information about a field...
559
const char *field_name;
560
const char *change; // If done with alter table
561
const char *after; // Put column after this one
562
LEX_STRING comment; // Comment for field
563
Item *def; // Default value
564
enum enum_field_types sql_type;
566
At various stages in execution this can be length of field in bytes or
567
max number of characters.
571
The value of `length' as set by parser: is the number of characters
572
for most of the types, or of bytes for BLOBs or numeric types.
574
uint32_t char_length;
575
uint32_t decimals, flags, pack_length, key_length;
576
Field::utype unireg_check;
577
TYPELIB *interval; // Which interval to use
578
List<String> interval_list;
579
const CHARSET_INFO *charset;
580
Field *field; // For alter table
582
uint8_t interval_id; // For rea_create_table
583
uint32_t offset,pack_flag;
585
Create_field() :after(0) {}
586
Create_field(Field *field, Field *orig_field);
587
/* Used to make a clone of this object for ALTER/CREATE TABLE */
588
Create_field *clone(MEM_ROOT *mem_root) const
589
{ return new (mem_root) Create_field(*this); }
590
void create_length_to_internal_length(void);
592
inline enum column_format_type column_format() const
594
return (enum column_format_type)
595
((flags >> COLUMN_FORMAT_FLAGS) & COLUMN_FORMAT_MASK);
598
/* Init for a tmp table field. To be extended if need be. */
599
void init_for_tmp_table(enum_field_types sql_type_arg,
600
uint32_t max_length, uint32_t decimals,
601
bool maybe_null, bool is_unsigned);
603
bool init(Session *session, char *field_name, enum_field_types type, char *length,
604
char *decimals, uint32_t type_modifier, Item *default_value,
605
Item *on_update_value, LEX_STRING *comment, char *change,
606
List<String> *interval_list, const CHARSET_INFO * const cs,
607
uint32_t uint_geom_type,
608
enum column_format_type column_format);
613
A class for sending info to the client
618
786
const char *db_name;
619
const char *table_name,*org_table_name;
620
const char *col_name,*org_col_name;
787
const char *table_name;
788
const char *org_table_name;
789
const char *col_name;
790
const char *org_col_name;
622
uint32_t charsetnr, flags, decimals;
623
795
enum_field_types type;
629
A class for quick copying data to fields
632
class Copy_field :public Sql_alloc {
800
* A class for quick copying data to fields
802
class CopyField :public Sql_alloc
634
805
Convenience definition of a copy function returned by
637
typedef void Copy_func(Copy_field*);
808
typedef void Copy_func(CopyField*);
638
809
Copy_func *get_copy_func(Field *to, Field *from);
640
unsigned char *from_ptr,*to_ptr;
641
unsigned char *from_null_ptr,*to_null_ptr;
811
unsigned char *from_ptr;
812
unsigned char *to_ptr;
813
unsigned char *from_null_ptr;
814
unsigned char *to_null_ptr;
643
uint32_t from_bit,to_bit;
644
uint32_t from_length,to_length;
645
Field *from_field,*to_field;
818
uint32_t from_length;
646
822
String tmp; // For items
650
826
void set(Field *to,Field *from,bool save); // Field to field
651
827
void set(unsigned char *to,Field *from); // Field to string
652
void (*do_copy)(Copy_field *);
653
void (*do_copy2)(Copy_field *); // Used to handle null values
828
void (*do_copy)(CopyField *);
829
void (*do_copy2)(CopyField *); // Used to handle null values
657
Field *make_field(TableShare *share, MEM_ROOT *root, unsigned char *ptr, uint32_t field_length,
658
unsigned char *null_pos, unsigned char null_bit,
659
uint32_t pack_flag, enum_field_types field_type,
832
Field *make_field(TableShare *share,
835
uint32_t field_length,
837
unsigned char *null_pos,
838
unsigned char null_bit,
840
enum_field_types field_type,
660
841
const CHARSET_INFO * cs,
661
842
Field::utype unireg_check,
662
TYPELIB *interval, const char *field_name);
844
const char *field_name);
664
846
uint32_t pack_length_to_packflag(uint32_t type);
665
enum_field_types get_blob_type_from_length(uint32_t length);
666
847
uint32_t calc_pack_length(enum_field_types type,uint32_t length);
667
848
int set_field_to_null(Field *field);
668
849
int set_field_to_null_with_conversions(Field *field, bool no_conversions);
672
test_if_important_data(const CHARSET_INFO * const cs,
852
* Tests if the given string contains important data:
853
* not spaces for character string, or any data for binary string.
855
* @param pointer to the character set to use
856
* @param String to test
860
* false - If string does not have important data
862
* true - If string has some important data
864
bool test_if_important_data(const CHARSET_INFO * const cs,
677
868
#endif /* DRIZZLED_FIELD_H */