607
class Field_num :public Field {
610
bool decimal_precision; // Purify cannot handle bit fields & only for decimal type
611
bool unsigned_flag; // Purify cannot handle bit fields
612
Field_num(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,
615
uint8_t dec_arg, bool zero_arg, bool unsigned_arg);
616
Item_result result_type () const { return REAL_RESULT; }
617
void add_unsigned(String &res) const;
618
friend class Create_field;
619
void make_field(Send_field *);
620
uint32_t decimals() const { return (uint32_t) dec; }
621
uint32_t size_of() const { return sizeof(*this); }
622
bool eq_def(Field *field);
623
int store_decimal(const my_decimal *);
624
my_decimal *val_decimal(my_decimal *);
625
uint32_t is_equal(Create_field *new_field);
626
int check_int(const CHARSET_INFO * const cs, const char *str, int length,
627
const char *int_end, int error);
628
bool get_int(const CHARSET_INFO * const cs, const char *from, uint32_t len,
629
int64_t *rnd, uint64_t unsigned_max,
630
int64_t signed_min, int64_t signed_max);
633
/* base class for all string related classes */
635
class Field_str :public Field {
637
const CHARSET_INFO *field_charset;
638
enum Derivation field_derivation;
640
Field_str(unsigned char *ptr_arg,uint32_t len_arg, unsigned char *null_ptr_arg,
641
unsigned char null_bit_arg, utype unireg_check_arg,
642
const char *field_name_arg, const CHARSET_INFO * const charset);
643
Item_result result_type () const { return STRING_RESULT; }
644
uint32_t decimals() const { return NOT_FIXED_DEC; }
645
int store(double nr);
646
int store(int64_t nr, bool unsigned_val)=0;
647
int store_decimal(const my_decimal *);
648
int store(const char *to,uint32_t length, const CHARSET_INFO * const cs)=0;
649
uint32_t size_of() const { return sizeof(*this); }
650
const CHARSET_INFO *charset(void) const { return field_charset; }
651
void set_charset(const CHARSET_INFO * const charset_arg) { field_charset= charset_arg; }
652
enum Derivation derivation(void) const { return field_derivation; }
653
virtual void set_derivation(enum Derivation derivation_arg)
654
{ field_derivation= derivation_arg; }
655
bool binary() const { return field_charset == &my_charset_bin; }
656
uint32_t max_display_length() { return field_length; }
657
friend class Create_field;
658
my_decimal *val_decimal(my_decimal *);
659
virtual bool str_needs_quotes() { return true; }
660
bool compare_str_field_flags(Create_field *new_field, uint32_t flags);
661
uint32_t is_equal(Create_field *new_field);
665
/* base class for Field_varstring and Field_blob */
667
class Field_longstr :public Field_str
670
int report_if_important_data(const char *ptr, const char *end);
672
Field_longstr(unsigned char *ptr_arg, uint32_t len_arg, unsigned char *null_ptr_arg,
673
unsigned char null_bit_arg, utype unireg_check_arg,
674
const char *field_name_arg, const CHARSET_INFO * const charset_arg)
675
:Field_str(ptr_arg, len_arg, null_ptr_arg, null_bit_arg, unireg_check_arg,
676
field_name_arg, charset_arg)
679
int store_decimal(const my_decimal *d);
680
uint32_t max_data_length() const;
683
class Field_tiny :public Field_num {
685
Field_tiny(unsigned char *ptr_arg, uint32_t len_arg, unsigned char *null_ptr_arg,
686
unsigned char null_bit_arg,
687
enum utype unireg_check_arg, const char *field_name_arg,
688
bool zero_arg, bool unsigned_arg)
689
:Field_num(ptr_arg, len_arg, null_ptr_arg, null_bit_arg,
690
unireg_check_arg, field_name_arg,
691
0, zero_arg,unsigned_arg)
693
enum Item_result result_type () const { return INT_RESULT; }
694
enum_field_types type() const { return DRIZZLE_TYPE_TINY;}
695
enum ha_base_keytype key_type() const
696
{ return unsigned_flag ? HA_KEYTYPE_BINARY : HA_KEYTYPE_INT8; }
697
int store(const char *to,uint32_t length, const CHARSET_INFO * const charset);
698
int store(double nr);
699
int store(int64_t nr, bool unsigned_val);
700
int reset(void) { ptr[0]=0; return 0; }
701
double val_real(void);
702
int64_t val_int(void);
703
String *val_str(String*,String *);
704
bool send_binary(Protocol *protocol);
705
int cmp(const unsigned char *,const unsigned char *);
706
void sort_string(unsigned char *buff,uint32_t length);
707
uint32_t pack_length() const { return 1; }
708
void sql_type(String &str) const;
709
uint32_t max_display_length() { return 4; }
711
virtual unsigned char *pack(unsigned char* to, const unsigned char *from,
712
uint32_t max_length __attribute__((unused)),
713
bool low_byte_first __attribute__((unused)))
719
virtual const unsigned char *unpack(unsigned char* to, const unsigned char *from,
720
uint32_t param_data __attribute__((unused)),
721
bool low_byte_first __attribute__((unused)))
729
604
Create field class for CREATE TABLE
928
806
#define f_bit_as_char(x) ((x) & FIELDFLAG_TREAT_BIT_AS_CHAR)
929
807
#define f_is_hex_escape(x) ((x) & FIELDFLAG_HEX_ESCAPE)
810
check_string_copy_error(Field_str *field,
811
const char *well_formed_error_pos,
812
const char *cannot_convert_error_pos,
814
const CHARSET_INFO * const cs);
817
class Field_tiny :public Field_num {
819
Field_tiny(unsigned char *ptr_arg, uint32_t len_arg, unsigned char *null_ptr_arg,
820
unsigned char null_bit_arg,
821
enum utype unireg_check_arg, const char *field_name_arg,
822
bool zero_arg, bool unsigned_arg)
823
:Field_num(ptr_arg, len_arg, null_ptr_arg, null_bit_arg,
824
unireg_check_arg, field_name_arg,
825
0, zero_arg,unsigned_arg)
827
enum Item_result result_type () const { return INT_RESULT; }
828
enum_field_types type() const { return DRIZZLE_TYPE_TINY;}
829
enum ha_base_keytype key_type() const
830
{ return unsigned_flag ? HA_KEYTYPE_BINARY : HA_KEYTYPE_INT8; }
831
int store(const char *to,uint32_t length, const CHARSET_INFO * const charset);
832
int store(double nr);
833
int store(int64_t nr, bool unsigned_val);
834
int reset(void) { ptr[0]=0; return 0; }
835
double val_real(void);
836
int64_t val_int(void);
837
String *val_str(String*,String *);
838
bool send_binary(Protocol *protocol);
839
int cmp(const unsigned char *,const unsigned char *);
840
void sort_string(unsigned char *buff,uint32_t length);
841
uint32_t pack_length() const { return 1; }
842
void sql_type(String &str) const;
843
uint32_t max_display_length() { return 4; }
845
virtual unsigned char *pack(unsigned char* to, const unsigned char *from,
846
uint32_t max_length __attribute__((unused)),
847
bool low_byte_first __attribute__((unused)))
853
virtual const unsigned char *unpack(unsigned char* to, const unsigned char *from,
854
uint32_t param_data __attribute__((unused)),
855
bool low_byte_first __attribute__((unused)))