547
class Field_num :public Field {
550
bool decimal_precision; // Purify cannot handle bit fields & only for decimal type
551
bool unsigned_flag; // Purify cannot handle bit fields
552
Field_num(unsigned char *ptr_arg,uint32_t len_arg, unsigned char *null_ptr_arg,
553
unsigned char null_bit_arg, utype unireg_check_arg,
554
const char *field_name_arg,
555
uint8_t dec_arg, bool zero_arg, bool unsigned_arg);
556
Item_result result_type () const { return REAL_RESULT; }
557
void add_unsigned(String &res) const;
558
friend class Create_field;
559
void make_field(Send_field *);
560
uint32_t decimals() const { return (uint32_t) dec; }
561
uint32_t size_of() const { return sizeof(*this); }
562
bool eq_def(Field *field);
563
int store_decimal(const my_decimal *);
564
my_decimal *val_decimal(my_decimal *);
565
uint32_t is_equal(Create_field *new_field);
566
int check_int(const CHARSET_INFO * const cs, const char *str, int length,
567
const char *int_end, int error);
568
bool get_int(const CHARSET_INFO * const cs, const char *from, uint32_t len,
569
int64_t *rnd, uint64_t unsigned_max,
570
int64_t signed_min, int64_t signed_max);
573
/* base class for all string related classes */
575
class Field_str :public Field {
577
const CHARSET_INFO *field_charset;
578
enum Derivation field_derivation;
580
Field_str(unsigned char *ptr_arg,uint32_t len_arg, unsigned char *null_ptr_arg,
581
unsigned char null_bit_arg, utype unireg_check_arg,
582
const char *field_name_arg, const CHARSET_INFO * const charset);
583
Item_result result_type () const { return STRING_RESULT; }
584
uint32_t decimals() const { return NOT_FIXED_DEC; }
585
int store(double nr);
586
int store(int64_t nr, bool unsigned_val)=0;
587
int store_decimal(const my_decimal *);
588
int store(const char *to,uint32_t length, const CHARSET_INFO * const cs)=0;
589
uint32_t size_of() const { return sizeof(*this); }
590
const CHARSET_INFO *charset(void) const { return field_charset; }
591
void set_charset(const CHARSET_INFO * const charset_arg) { field_charset= charset_arg; }
592
enum Derivation derivation(void) const { return field_derivation; }
593
virtual void set_derivation(enum Derivation derivation_arg)
594
{ field_derivation= derivation_arg; }
595
bool binary() const { return field_charset == &my_charset_bin; }
596
uint32_t max_display_length() { return field_length; }
597
friend class Create_field;
598
my_decimal *val_decimal(my_decimal *);
599
virtual bool str_needs_quotes() { return true; }
600
bool compare_str_field_flags(Create_field *new_field, uint32_t flags);
601
uint32_t is_equal(Create_field *new_field);
605
/* base class for Field_varstring and Field_blob */
607
class Field_longstr :public Field_str
610
int report_if_important_data(const char *ptr, const char *end);
612
Field_longstr(unsigned char *ptr_arg, uint32_t len_arg, unsigned char *null_ptr_arg,
613
unsigned char null_bit_arg, utype unireg_check_arg,
614
const char *field_name_arg, const CHARSET_INFO * const charset_arg)
615
:Field_str(ptr_arg, len_arg, null_ptr_arg, null_bit_arg, unireg_check_arg,
616
field_name_arg, charset_arg)
619
int store_decimal(const my_decimal *d);
620
uint32_t max_data_length() const;
623
/* base class for float and double and decimal (old one) */
624
class Field_real :public Field_num {
628
Field_real(unsigned char *ptr_arg, uint32_t len_arg, unsigned char *null_ptr_arg,
629
unsigned char null_bit_arg, utype unireg_check_arg,
630
const char *field_name_arg,
631
uint8_t dec_arg, bool zero_arg, bool unsigned_arg)
632
:Field_num(ptr_arg, len_arg, null_ptr_arg, null_bit_arg, unireg_check_arg,
633
field_name_arg, dec_arg, zero_arg, unsigned_arg),
634
not_fixed(dec_arg >= NOT_FIXED_DEC)
636
int store_decimal(const my_decimal *);
637
my_decimal *val_decimal(my_decimal *);
638
int truncate(double *nr, double max_length);
639
uint32_t max_display_length() { return field_length; }
640
uint32_t size_of() const { return sizeof(*this); }
641
virtual const unsigned char *unpack(unsigned char* to, const unsigned char *from,
642
uint32_t param_data, bool low_byte_first);
643
virtual unsigned char *pack(unsigned char* to, const unsigned char *from,
644
uint32_t max_length, bool low_byte_first);
648
class Field_tiny :public Field_num {
650
Field_tiny(unsigned char *ptr_arg, uint32_t len_arg, unsigned char *null_ptr_arg,
651
unsigned char null_bit_arg,
652
enum utype unireg_check_arg, const char *field_name_arg,
653
bool zero_arg, bool unsigned_arg)
654
:Field_num(ptr_arg, len_arg, null_ptr_arg, null_bit_arg,
655
unireg_check_arg, field_name_arg,
656
0, zero_arg,unsigned_arg)
658
enum Item_result result_type () const { return INT_RESULT; }
659
enum_field_types type() const { return DRIZZLE_TYPE_TINY;}
660
enum ha_base_keytype key_type() const
661
{ return unsigned_flag ? HA_KEYTYPE_BINARY : HA_KEYTYPE_INT8; }
662
int store(const char *to,uint32_t length, const CHARSET_INFO * const charset);
663
int store(double nr);
664
int store(int64_t nr, bool unsigned_val);
665
int reset(void) { ptr[0]=0; return 0; }
666
double val_real(void);
667
int64_t val_int(void);
668
String *val_str(String*,String *);
669
bool send_binary(Protocol *protocol);
670
int cmp(const unsigned char *,const unsigned char *);
671
void sort_string(unsigned char *buff,uint32_t length);
672
uint32_t pack_length() const { return 1; }
673
void sql_type(String &str) const;
674
uint32_t max_display_length() { return 4; }
676
virtual unsigned char *pack(unsigned char* to, const unsigned char *from,
677
uint32_t max_length __attribute__((unused)),
678
bool low_byte_first __attribute__((unused)))
684
virtual const unsigned char *unpack(unsigned char* to, const unsigned char *from,
685
uint32_t param_data __attribute__((unused)),
686
bool low_byte_first __attribute__((unused)))
694
609
Create field class for CREATE TABLE