1
/* Copyright (C) 2000-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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
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
18
21
Because of the function new_field() all field classes that have static
19
22
variables must declare the size_of() member function.
22
#ifdef USE_PRAGMA_INTERFACE
23
#pragma interface /* gcc class implementation */
25
#ifndef DRIZZLED_FIELD_H
26
#define DRIZZLED_FIELD_H
28
#include <drizzled/sql_error.h>
29
#include <drizzled/my_decimal.h>
26
31
#define DATETIME_DEC 6
27
32
#define DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE FLOATING_POINT_BUFFER
99
155
bool is_created_from_null_item;
101
Field(uchar *ptr_arg,uint32_t length_arg,uchar *null_ptr_arg,
102
uchar null_bit_arg, utype unireg_check_arg,
157
/* Virtual column data */
158
virtual_column_info *vcol_info;
160
Indication that the field is phycically stored in tables
161
rather than just generated on SQL queries.
162
As of now, false can only be set for generated-only virtual columns.
166
Field(unsigned char *ptr_arg,uint32_t length_arg,unsigned char *null_ptr_arg,
167
unsigned char null_bit_arg, utype unireg_check_arg,
103
168
const char *field_name_arg);
104
169
virtual ~Field() {}
105
170
/* Store functions returns 1 on overflow and -1 on fatal error */
106
virtual int store(const char *to, uint length, const CHARSET_INFO * const cs)=0;
171
virtual int store(const char *to, uint32_t length, const CHARSET_INFO * const cs)=0;
107
172
virtual int store(double nr)=0;
108
173
virtual int store(int64_t nr, bool unsigned_val)=0;
109
174
virtual int store_decimal(const my_decimal *d)=0;
110
virtual int store_time(DRIZZLE_TIME *ltime, timestamp_type t_type);
111
int store(const char *to, uint length, const CHARSET_INFO * const cs,
175
virtual int store_time(DRIZZLE_TIME *ltime, enum enum_drizzle_timestamp_type t_type);
176
int store(const char *to, uint32_t length, const CHARSET_INFO * const cs,
112
177
enum_check_fields check_level);
113
178
virtual double val_real(void)=0;
114
179
virtual int64_t val_int(void)=0;
216
281
virtual uint32_t key_length() const { return pack_length(); }
217
282
virtual enum_field_types type() const =0;
218
283
virtual enum_field_types real_type() const { return type(); }
219
inline int cmp(const uchar *str) { return cmp(ptr,str); }
220
virtual int cmp_max(const uchar *a, const uchar *b,
221
uint max_len __attribute__((unused)))
284
inline int cmp(const unsigned char *str) { return cmp(ptr,str); }
285
virtual int cmp_max(const unsigned char *a, const unsigned char *b,
286
uint32_t max_len __attribute__((unused)))
222
287
{ return cmp(a, b); }
223
virtual int cmp(const uchar *,const uchar *)=0;
224
virtual int cmp_binary(const uchar *a,const uchar *b,
288
virtual int cmp(const unsigned char *,const unsigned char *)=0;
289
virtual int cmp_binary(const unsigned char *a,const unsigned char *b,
225
290
uint32_t __attribute__((unused)) max_length=UINT32_MAX)
226
291
{ return memcmp(a,b,pack_length()); }
227
virtual int cmp_offset(uint row_offset)
292
virtual int cmp_offset(uint32_t row_offset)
228
293
{ return cmp(ptr,ptr+row_offset); }
229
virtual int cmp_binary_offset(uint row_offset)
294
virtual int cmp_binary_offset(uint32_t row_offset)
230
295
{ return cmp_binary(ptr, ptr+row_offset); };
231
virtual int key_cmp(const uchar *a,const uchar *b)
296
virtual int key_cmp(const unsigned char *a,const unsigned char *b)
232
297
{ return cmp(a, b); }
233
virtual int key_cmp(const uchar *str, uint length __attribute__((unused)))
298
virtual int key_cmp(const unsigned char *str, uint32_t length __attribute__((unused)))
234
299
{ return cmp(ptr,str); }
235
virtual uint decimals() const { return 0; }
300
virtual uint32_t decimals() const { return 0; }
237
302
Caller beware: sql_type can change str.Ptr, so check
238
303
ptr() to see if it changed if you are using your own buffer
239
304
in str and restore it with set() if needed
241
306
virtual void sql_type(String &str) const =0;
242
virtual uint size_of() const =0; // For new field
307
virtual uint32_t size_of() const =0; // For new field
243
308
inline bool is_null(my_ptrdiff_t row_offset= 0)
244
309
{ return null_ptr ? (null_ptr[row_offset] & null_bit ? 1 : 0) : table->null_row; }
245
310
inline bool is_real_null(my_ptrdiff_t row_offset= 0)
246
311
{ return null_ptr ? (null_ptr[row_offset] & null_bit ? 1 : 0) : 0; }
247
inline bool is_null_in_record(const uchar *record)
312
inline bool is_null_in_record(const unsigned char *record)
251
return test(record[(uint) (null_ptr -table->record[0])] &
316
return test(record[(uint32_t) (null_ptr -table->record[0])] &
254
319
inline bool is_null_in_record_with_offset(my_ptrdiff_t offset)
304
369
virtual Field *new_field(MEM_ROOT *root, Table *new_table,
306
371
virtual Field *new_key_field(MEM_ROOT *root, Table *new_table,
307
uchar *new_ptr, uchar *new_null_ptr,
372
unsigned char *new_ptr, unsigned char *new_null_ptr,
373
uint32_t new_null_bit);
309
374
Field *clone(MEM_ROOT *mem_root, Table *new_table);
310
inline void move_field(uchar *ptr_arg,uchar *null_ptr_arg,uchar null_bit_arg)
375
inline void move_field(unsigned char *ptr_arg,unsigned char *null_ptr_arg,unsigned char null_bit_arg)
312
377
ptr=ptr_arg; null_ptr=null_ptr_arg; null_bit=null_bit_arg;
314
inline void move_field(uchar *ptr_arg) { ptr=ptr_arg; }
379
inline void move_field(unsigned char *ptr_arg) { ptr=ptr_arg; }
315
380
virtual void move_field_offset(my_ptrdiff_t ptr_diff)
317
ptr=ADD_TO_PTR(ptr,ptr_diff, uchar*);
382
ptr=ADD_TO_PTR(ptr,ptr_diff, unsigned char*);
319
null_ptr=ADD_TO_PTR(null_ptr,ptr_diff,uchar*);
384
null_ptr=ADD_TO_PTR(null_ptr,ptr_diff,unsigned char*);
321
virtual void get_image(uchar *buff, uint length,
386
virtual void get_image(unsigned char *buff, uint32_t length,
322
387
const CHARSET_INFO * const cs __attribute__((unused)))
323
388
{ memcpy(buff,ptr,length); }
324
virtual void set_image(const uchar *buff,uint length,
389
virtual void set_image(const unsigned char *buff,uint32_t length,
325
390
const CHARSET_INFO * const cs __attribute__((unused)))
326
391
{ memcpy(ptr,buff,length); }
352
417
Number of copied bytes (excluding padded zero bytes -- see above).
355
virtual uint get_key_image(uchar *buff, uint length,
420
virtual uint32_t get_key_image(unsigned char *buff, uint32_t length,
356
421
imagetype type __attribute__((unused)))
358
423
get_image(buff, length, &my_charset_bin);
361
virtual void set_key_image(const uchar *buff,uint length)
426
virtual void set_key_image(const unsigned char *buff,uint32_t length)
362
427
{ set_image(buff,length, &my_charset_bin); }
363
inline int64_t val_int_offset(uint row_offset)
428
inline int64_t val_int_offset(uint32_t row_offset)
366
431
int64_t tmp=val_int();
370
inline int64_t val_int(const uchar *new_ptr)
435
inline int64_t val_int(const unsigned char *new_ptr)
437
unsigned char *old_ptr= ptr;
373
438
int64_t return_value;
374
ptr= (uchar*) new_ptr;
439
ptr= (unsigned char*) new_ptr;
375
440
return_value= val_int();
377
442
return return_value;
379
inline String *val_str(String *str, const uchar *new_ptr)
444
inline String *val_str(String *str, const unsigned char *new_ptr)
382
ptr= (uchar*) new_ptr;
446
unsigned char *old_ptr= ptr;
447
ptr= (unsigned char*) new_ptr;
387
452
virtual bool send_binary(Protocol *protocol);
389
virtual uchar *pack(uchar *to, const uchar *from,
390
uint max_length, bool low_byte_first);
392
@overload Field::pack(uchar*, const uchar*, uint, bool)
394
uchar *pack(uchar *to, const uchar *from)
396
uchar *result= this->pack(to, from, UINT_MAX, table->s->db_low_byte_first);
400
virtual const uchar *unpack(uchar* to, const uchar *from,
401
uint param_data, bool low_byte_first);
403
@overload Field::unpack(uchar*, const uchar*, uint, bool)
405
const uchar *unpack(uchar* to, const uchar *from)
407
const uchar *result= unpack(to, from, 0U, table->s->db_low_byte_first);
411
virtual uchar *pack_key(uchar* to, const uchar *from,
412
uint max_length, bool low_byte_first)
414
return pack(to, from, max_length, low_byte_first);
416
virtual uchar *pack_key_from_key_image(uchar* to, const uchar *from,
417
uint max_length, bool low_byte_first)
419
return pack(to, from, max_length, low_byte_first);
421
virtual const uchar *unpack_key(uchar* to, const uchar *from,
422
uint max_length, bool low_byte_first)
454
virtual unsigned char *pack(unsigned char *to, const unsigned char *from,
455
uint32_t max_length, bool low_byte_first);
457
@overload Field::pack(unsigned char*, const unsigned char*, uint32_t, bool)
459
unsigned char *pack(unsigned char *to, const unsigned char *from)
461
unsigned char *result= this->pack(to, from, UINT_MAX, table->s->db_low_byte_first);
465
virtual const unsigned char *unpack(unsigned char* to, const unsigned char *from,
466
uint32_t param_data, bool low_byte_first);
468
@overload Field::unpack(unsigned char*, const unsigned char*, uint32_t, bool)
470
const unsigned char *unpack(unsigned char* to, const unsigned char *from)
472
const unsigned char *result= unpack(to, from, 0U, table->s->db_low_byte_first);
476
virtual unsigned char *pack_key(unsigned char* to, const unsigned char *from,
477
uint32_t max_length, bool low_byte_first)
479
return pack(to, from, max_length, low_byte_first);
481
virtual unsigned char *pack_key_from_key_image(unsigned char* to, const unsigned char *from,
482
uint32_t max_length, bool low_byte_first)
484
return pack(to, from, max_length, low_byte_first);
486
virtual const unsigned char *unpack_key(unsigned char* to, const unsigned char *from,
487
uint32_t max_length, bool low_byte_first)
424
489
return unpack(to, from, max_length, low_byte_first);
426
virtual uint packed_col_length(const uchar *to __attribute__((unused)),
491
virtual uint32_t packed_col_length(const unsigned char *to __attribute__((unused)),
428
493
{ return length;}
429
virtual uint max_packed_col_length(uint max_length)
494
virtual uint32_t max_packed_col_length(uint32_t max_length)
430
495
{ return max_length;}
432
virtual int pack_cmp(const uchar *a,const uchar *b,
433
uint key_length_arg __attribute__((unused)),
497
virtual int pack_cmp(const unsigned char *a,const unsigned char *b,
498
uint32_t key_length_arg __attribute__((unused)),
434
499
bool insert_or_update __attribute__((unused)))
435
500
{ return cmp(a,b); }
436
virtual int pack_cmp(const uchar *b,
437
uint key_length_arg __attribute__((unused)),
501
virtual int pack_cmp(const unsigned char *b,
502
uint32_t key_length_arg __attribute__((unused)),
438
503
bool insert_or_update __attribute__((unused)))
439
504
{ return cmp(ptr,b); }
440
uint offset(uchar *record)
505
uint32_t offset(unsigned char *record)
442
return (uint) (ptr - record);
507
return (uint32_t) (ptr - record);
444
509
void copy_from_tmp(int offset);
445
uint fill_cache_field(struct st_cache_field *copy);
446
virtual bool get_date(DRIZZLE_TIME *ltime,uint fuzzydate);
510
uint32_t fill_cache_field(struct st_cache_field *copy);
511
virtual bool get_date(DRIZZLE_TIME *ltime,uint32_t fuzzydate);
447
512
virtual bool get_time(DRIZZLE_TIME *ltime);
448
513
virtual const CHARSET_INFO *charset(void) const { return &my_charset_bin; }
449
514
virtual const CHARSET_INFO *sort_charset(void) const { return charset(); }
537
602
@returns 0 no bytes written.
539
virtual int do_save_field_metadata(uchar *metadata_ptr __attribute__((unused)))
544
class Field_num :public Field {
547
bool decimal_precision; // Purify cannot handle bit fields & only for decimal type
548
bool unsigned_flag; // Purify cannot handle bit fields
549
Field_num(uchar *ptr_arg,uint32_t len_arg, uchar *null_ptr_arg,
550
uchar null_bit_arg, utype unireg_check_arg,
551
const char *field_name_arg,
552
uint8_t dec_arg, bool zero_arg, bool unsigned_arg);
553
Item_result result_type () const { return REAL_RESULT; }
554
void add_unsigned(String &res) const;
555
friend class Create_field;
556
void make_field(Send_field *);
557
uint decimals() const { return (uint) dec; }
558
uint size_of() const { return sizeof(*this); }
559
bool eq_def(Field *field);
560
int store_decimal(const my_decimal *);
561
my_decimal *val_decimal(my_decimal *);
562
uint is_equal(Create_field *new_field);
563
int check_int(const CHARSET_INFO * const cs, const char *str, int length,
564
const char *int_end, int error);
565
bool get_int(const CHARSET_INFO * const cs, const char *from, uint len,
566
int64_t *rnd, uint64_t unsigned_max,
567
int64_t signed_min, int64_t signed_max);
570
/* base class for all string related classes */
572
class Field_str :public Field {
574
const CHARSET_INFO *field_charset;
575
enum Derivation field_derivation;
577
Field_str(uchar *ptr_arg,uint32_t len_arg, uchar *null_ptr_arg,
578
uchar null_bit_arg, utype unireg_check_arg,
579
const char *field_name_arg, const CHARSET_INFO * const charset);
580
Item_result result_type () const { return STRING_RESULT; }
581
uint decimals() const { return NOT_FIXED_DEC; }
582
int store(double nr);
583
int store(int64_t nr, bool unsigned_val)=0;
584
int store_decimal(const my_decimal *);
585
int store(const char *to,uint length, const CHARSET_INFO * const cs)=0;
586
uint size_of() const { return sizeof(*this); }
587
const CHARSET_INFO *charset(void) const { return field_charset; }
588
void set_charset(const CHARSET_INFO * const charset_arg) { field_charset= charset_arg; }
589
enum Derivation derivation(void) const { return field_derivation; }
590
virtual void set_derivation(enum Derivation derivation_arg)
591
{ field_derivation= derivation_arg; }
592
bool binary() const { return field_charset == &my_charset_bin; }
593
uint32_t max_display_length() { return field_length; }
594
friend class Create_field;
595
my_decimal *val_decimal(my_decimal *);
596
virtual bool str_needs_quotes() { return true; }
597
bool compare_str_field_flags(Create_field *new_field, uint32_t flags);
598
uint is_equal(Create_field *new_field);
602
/* base class for Field_varstring and Field_blob */
604
class Field_longstr :public Field_str
607
int report_if_important_data(const char *ptr, const char *end);
609
Field_longstr(uchar *ptr_arg, uint32_t len_arg, uchar *null_ptr_arg,
610
uchar null_bit_arg, utype unireg_check_arg,
611
const char *field_name_arg, const CHARSET_INFO * const charset_arg)
612
:Field_str(ptr_arg, len_arg, null_ptr_arg, null_bit_arg, unireg_check_arg,
613
field_name_arg, charset_arg)
616
int store_decimal(const my_decimal *d);
617
uint32_t max_data_length() const;
620
/* base class for float and double and decimal (old one) */
621
class Field_real :public Field_num {
625
Field_real(uchar *ptr_arg, uint32_t len_arg, uchar *null_ptr_arg,
626
uchar null_bit_arg, utype unireg_check_arg,
627
const char *field_name_arg,
628
uint8_t dec_arg, bool zero_arg, bool unsigned_arg)
629
:Field_num(ptr_arg, len_arg, null_ptr_arg, null_bit_arg, unireg_check_arg,
630
field_name_arg, dec_arg, zero_arg, unsigned_arg),
631
not_fixed(dec_arg >= NOT_FIXED_DEC)
633
int store_decimal(const my_decimal *);
634
my_decimal *val_decimal(my_decimal *);
635
int truncate(double *nr, double max_length);
636
uint32_t max_display_length() { return field_length; }
637
uint size_of() const { return sizeof(*this); }
638
virtual const uchar *unpack(uchar* to, const uchar *from,
639
uint param_data, bool low_byte_first);
640
virtual uchar *pack(uchar* to, const uchar *from,
641
uint max_length, bool low_byte_first);
645
class Field_tiny :public Field_num {
647
Field_tiny(uchar *ptr_arg, uint32_t len_arg, uchar *null_ptr_arg,
649
enum utype unireg_check_arg, const char *field_name_arg,
650
bool zero_arg, bool unsigned_arg)
651
:Field_num(ptr_arg, len_arg, null_ptr_arg, null_bit_arg,
652
unireg_check_arg, field_name_arg,
653
0, zero_arg,unsigned_arg)
655
enum Item_result result_type () const { return INT_RESULT; }
656
enum_field_types type() const { return DRIZZLE_TYPE_TINY;}
657
enum ha_base_keytype key_type() const
658
{ return unsigned_flag ? HA_KEYTYPE_BINARY : HA_KEYTYPE_INT8; }
659
int store(const char *to,uint length, const CHARSET_INFO * const charset);
660
int store(double nr);
661
int store(int64_t nr, bool unsigned_val);
662
int reset(void) { ptr[0]=0; return 0; }
663
double val_real(void);
664
int64_t val_int(void);
665
String *val_str(String*,String *);
666
bool send_binary(Protocol *protocol);
667
int cmp(const uchar *,const uchar *);
668
void sort_string(uchar *buff,uint length);
669
uint32_t pack_length() const { return 1; }
670
void sql_type(String &str) const;
671
uint32_t max_display_length() { return 4; }
673
virtual uchar *pack(uchar* to, const uchar *from,
674
uint max_length __attribute__((unused)),
675
bool low_byte_first __attribute__((unused)))
681
virtual const uchar *unpack(uchar* to, const uchar *from,
682
uint param_data __attribute__((unused)),
683
bool low_byte_first __attribute__((unused)))
691
class Field_enum :public Field_str {
696
Field_enum(uchar *ptr_arg, uint32_t len_arg, uchar *null_ptr_arg,
698
enum utype unireg_check_arg, const char *field_name_arg,
700
TYPELIB *typelib_arg,
701
const CHARSET_INFO * const charset_arg)
702
:Field_str(ptr_arg, len_arg, null_ptr_arg, null_bit_arg,
703
unireg_check_arg, field_name_arg, charset_arg),
704
packlength(packlength_arg),typelib(typelib_arg)
708
Field *new_field(MEM_ROOT *root, Table *new_table, bool keep_type);
709
enum_field_types type() const { return DRIZZLE_TYPE_ENUM; }
710
enum Item_result cmp_type () const { return INT_RESULT; }
711
enum Item_result cast_to_int_type () const { return INT_RESULT; }
712
enum ha_base_keytype key_type() const;
713
int store(const char *to,uint length, const CHARSET_INFO * const charset);
714
int store(double nr);
715
int store(int64_t nr, bool unsigned_val);
716
double val_real(void);
717
int64_t val_int(void);
718
String *val_str(String*,String *);
719
int cmp(const uchar *,const uchar *);
720
void sort_string(uchar *buff,uint length);
721
uint32_t pack_length() const { return (uint32_t) packlength; }
722
void store_type(uint64_t value);
723
void sql_type(String &str) const;
724
uint size_of() const { return sizeof(*this); }
725
enum_field_types real_type() const { return DRIZZLE_TYPE_ENUM; }
726
uint pack_length_from_metadata(uint field_metadata)
727
{ return (field_metadata & 0x00ff); }
728
uint row_pack_length() { return pack_length(); }
729
virtual bool zero_pack() const { return 0; }
730
bool optimize_range(uint idx __attribute__((unused)),
731
uint part __attribute__((unused)))
733
bool eq_def(Field *field);
734
bool has_charset(void) const { return true; }
735
/* enum and set are sorted as integers */
736
const CHARSET_INFO *sort_charset(void) const { return &my_charset_bin; }
738
int do_save_field_metadata(uchar *first_byte);
604
virtual int do_save_field_metadata(unsigned char *metadata_ptr __attribute__((unused)))
827
705
typedef void Copy_func(Copy_field*);
828
706
Copy_func *get_copy_func(Field *to, Field *from);
830
uchar *from_ptr,*to_ptr;
831
uchar *from_null_ptr,*to_null_ptr;
708
unsigned char *from_ptr,*to_ptr;
709
unsigned char *from_null_ptr,*to_null_ptr;
833
uint from_bit,to_bit;
834
uint from_length,to_length;
711
uint32_t from_bit,to_bit;
712
uint32_t from_length,to_length;
835
713
Field *from_field,*to_field;
836
714
String tmp; // For items
840
718
void set(Field *to,Field *from,bool save); // Field to field
841
void set(uchar *to,Field *from); // Field to string
719
void set(unsigned char *to,Field *from); // Field to string
842
720
void (*do_copy)(Copy_field *);
843
721
void (*do_copy2)(Copy_field *); // Used to handle null values
847
Field *make_field(TABLE_SHARE *share, uchar *ptr, uint32_t field_length,
848
uchar *null_pos, uchar null_bit,
849
uint pack_flag, enum_field_types field_type,
725
Field *make_field(TABLE_SHARE *share, unsigned char *ptr, uint32_t field_length,
726
unsigned char *null_pos, unsigned char null_bit,
727
uint32_t pack_flag, enum_field_types field_type,
850
728
const CHARSET_INFO * cs,
851
729
Field::utype unireg_check,
852
730
TYPELIB *interval, const char *field_name);
853
uint pack_length_to_packflag(uint type);
731
uint32_t pack_length_to_packflag(uint32_t type);
854
732
enum_field_types get_blob_type_from_length(uint32_t length);
855
733
uint32_t calc_pack_length(enum_field_types type,uint32_t length);
856
734
int set_field_to_null(Field *field);
857
735
int set_field_to_null_with_conversions(Field *field, bool no_conversions);
860
check_string_copy_error(Field_str *field,
861
const char *well_formed_error_pos,
862
const char *cannot_convert_error_pos,
864
const CHARSET_INFO * const cs);
739
test_if_important_data(const CHARSET_INFO * const cs,
746
#include <drizzled/field/str.h>
747
#include <drizzled/field/longstr.h>
748
#include <drizzled/field/num.h>
869
749
#include <drizzled/field/blob.h>
750
#include <drizzled/field/enum.h>
870
751
#include <drizzled/field/null.h>
871
752
#include <drizzled/field/date.h>
872
753
#include <drizzled/field/fdecimal.h>
754
#include <drizzled/field/real.h>
873
755
#include <drizzled/field/double.h>
874
#include <drizzled/field/short.h>
875
756
#include <drizzled/field/long.h>
876
757
#include <drizzled/field/int64_t.h>
758
#include <drizzled/field/num.h>
877
759
#include <drizzled/field/timetype.h>
878
760
#include <drizzled/field/timestamp.h>
879
761
#include <drizzled/field/datetime.h>