diff options
author | Nikita Malyavin <nikitamalyavin@gmail.com> | 2019-07-09 21:20:00 +1000 |
---|---|---|
committer | Nikita Malyavin <nikitamalyavin@gmail.com> | 2019-08-07 20:59:22 +1000 |
commit | e81db2baed85ac981ef15658334f86cb9aba29ff (patch) | |
tree | 814df2419af0185e2a43cd239a9d393a3a07b167 | |
parent | 46553c250808f0cc21e91f7e13439add2903aea0 (diff) | |
download | mariadb-git-e81db2baed85ac981ef15658334f86cb9aba29ff.tar.gz |
Add const qualifiers to Field::cmp, Field::cmp_max and Field::cmp_binarybb-10.5-nikita-consts
-rw-r--r-- | sql/field.cc | 78 | ||||
-rw-r--r-- | sql/field.h | 97 |
2 files changed, 88 insertions, 87 deletions
diff --git a/sql/field.cc b/sql/field.cc index 834d627441d..07f405ef47c 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -3037,7 +3037,7 @@ String *Field_decimal::val_str(String *val_buffer __attribute__((unused)), 5.00 , -1.0, 05, -05, +5 with optional pre/end space */ -int Field_decimal::cmp(const uchar *a_ptr,const uchar *b_ptr) +int Field_decimal::cmp(const uchar *a_ptr,const uchar *b_ptr) const { const uchar *end; int swap=0; @@ -3416,7 +3416,7 @@ my_decimal* Field_new_decimal::val_decimal(my_decimal *decimal_value) } -int Field_new_decimal::cmp(const uchar *a,const uchar*b) +int Field_new_decimal::cmp(const uchar *a,const uchar*b) const { return memcmp(a, b, bin_size); } @@ -3738,7 +3738,7 @@ bool Field_tiny::send_binary(Protocol *protocol) return protocol->store_tiny((longlong) (int8) ptr[0]); } -int Field_tiny::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_tiny::cmp(const uchar *a_ptr, const uchar *b_ptr) const { signed char a,b; a=(signed char) a_ptr[0]; b= (signed char) b_ptr[0]; @@ -3907,7 +3907,7 @@ bool Field_short::send_binary(Protocol *protocol) } -int Field_short::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_short::cmp(const uchar *a_ptr, const uchar *b_ptr) const { short a,b; a=sint2korr(a_ptr); @@ -4100,7 +4100,7 @@ bool Field_medium::send_binary(Protocol *protocol) } -int Field_medium::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_medium::cmp(const uchar *a_ptr, const uchar *b_ptr) const { long a,b; if (unsigned_flag) @@ -4278,7 +4278,7 @@ bool Field_long::send_binary(Protocol *protocol) return protocol->store_long(Field_long::val_int()); } -int Field_long::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_long::cmp(const uchar *a_ptr, const uchar *b_ptr) const { int32 a,b; a=sint4korr(a_ptr); @@ -4424,7 +4424,7 @@ bool Field_longlong::send_binary(Protocol *protocol) } -int Field_longlong::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_longlong::cmp(const uchar *a_ptr, const uchar *b_ptr) const { longlong a,b; a=sint8korr(a_ptr); @@ -4559,7 +4559,7 @@ String *Field_float::val_str(String *val_buffer, } -int Field_float::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_float::cmp(const uchar *a_ptr, const uchar *b_ptr) const { float a,b; float4get(a,a_ptr); @@ -4901,7 +4901,7 @@ bool Field_double::send_binary(Protocol *protocol) } -int Field_double::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_double::cmp(const uchar *a_ptr, const uchar *b_ptr) const { double a,b; float8get(a,a_ptr); @@ -5314,7 +5314,7 @@ bool Field_timestamp::send_binary(Protocol *protocol) } -int Field_timestamp::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_timestamp::cmp(const uchar *a_ptr, const uchar *b_ptr) const { int32 a,b; a=sint4korr(a_ptr); @@ -5510,7 +5510,7 @@ bool Field_timestamp_with_dec::send_binary(Protocol *protocol) } -int Field_timestamp_hires::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_timestamp_hires::cmp(const uchar *a_ptr, const uchar *b_ptr) const { int32 a,b; ulong a_sec_part, b_sec_part; @@ -5960,7 +5960,7 @@ bool Field_time::send_binary(Protocol *protocol) } -int Field_time::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_time::cmp(const uchar *a_ptr, const uchar *b_ptr) const { int32 a,b; a=(int32) sint3korr(a_ptr); @@ -6148,7 +6148,7 @@ bool Field_time_hires::get_date(MYSQL_TIME *ltime, date_mode_t fuzzydate) } -int Field_time_hires::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_time_hires::cmp(const uchar *a_ptr, const uchar *b_ptr) const { ulonglong a=read_bigendian(a_ptr, Field_time_hires::pack_length()); ulonglong b=read_bigendian(b_ptr, Field_time_hires::pack_length()); @@ -6476,7 +6476,7 @@ String *Field_date::val_str(String *val_buffer, } -int Field_date::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_date::cmp(const uchar *a_ptr, const uchar *b_ptr) const { int32 a,b; a=sint4korr(a_ptr); @@ -6580,7 +6580,7 @@ bool Field_newdate::get_TIME(MYSQL_TIME *ltime, const uchar *pos, } -int Field_newdate::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_newdate::cmp(const uchar *a_ptr, const uchar *b_ptr) const { uint32 a,b; a=(uint32) uint3korr(a_ptr); @@ -6765,7 +6765,7 @@ bool Field_datetime::get_TIME(MYSQL_TIME *ltime, const uchar *pos, } -int Field_datetime::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_datetime::cmp(const uchar *a_ptr, const uchar *b_ptr) const { longlong a,b; a=sint8korr(a_ptr); @@ -6867,7 +6867,7 @@ bool Field_datetime_hires::get_TIME(MYSQL_TIME *ltime, const uchar *pos, } -int Field_datetime_hires::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_datetime_hires::cmp(const uchar *a_ptr, const uchar *b_ptr) const { ulonglong a=read_bigendian(a_ptr, Field_datetime_hires::pack_length()); ulonglong b=read_bigendian(b_ptr, Field_datetime_hires::pack_length()); @@ -7258,7 +7258,7 @@ Field_string::compatible_field_size(uint field_metadata, } -int Field_string::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_string::cmp(const uchar *a_ptr, const uchar *b_ptr) const { size_t a_len, b_len; @@ -7612,7 +7612,7 @@ my_decimal *Field_varstring::val_decimal(my_decimal *decimal_value) int Field_varstring::cmp_max(const uchar *a_ptr, const uchar *b_ptr, - uint max_len) + uint max_len) const { uint a_length, b_length; int diff; @@ -7645,7 +7645,7 @@ int Field_varstring::cmp_max(const uchar *a_ptr, const uchar *b_ptr, varstring and blob keys are ALWAYS stored with a 2 byte length prefix */ -int Field_varstring::key_cmp(const uchar *key_ptr, uint max_key_length) +int Field_varstring::key_cmp(const uchar *key_ptr, uint max_key_length) const { size_t length= length_bytes == 1 ? (uint) *ptr : uint2korr(ptr); size_t local_char_length= max_key_length / field_charset->mbmaxlen; @@ -7670,7 +7670,7 @@ int Field_varstring::key_cmp(const uchar *key_ptr, uint max_key_length) (keys are created and compared in key.cc) */ -int Field_varstring::key_cmp(const uchar *a,const uchar *b) +int Field_varstring::key_cmp(const uchar *a,const uchar *b) const { return field_charset->coll->strnncollsp(field_charset, a + HA_KEY_BLOB_LENGTH, @@ -7870,7 +7870,7 @@ void Field_varstring::set_key_image(const uchar *buff,uint length) int Field_varstring::cmp_binary(const uchar *a_ptr, const uchar *b_ptr, - uint32 max_length) + uint32 max_length) const { uint32 a_length,b_length; @@ -8043,7 +8043,7 @@ int Field_longstr::compress(char *to, uint to_length, */ String *Field_longstr::uncompress(String *val_buffer, String *val_ptr, - const uchar *from, uint from_length) + const uchar *from, uint from_length) const { if (from_length) { @@ -8122,7 +8122,7 @@ longlong Field_varstring_compressed::val_int(void) int Field_varstring_compressed::cmp_max(const uchar *a_ptr, const uchar *b_ptr, - uint max_len) + uint max_len) const { String a, b; uint a_length, b_length; @@ -8373,7 +8373,7 @@ my_decimal *Field_blob::val_decimal(my_decimal *decimal_value) int Field_blob::cmp(const uchar *a,uint32 a_length, const uchar *b, - uint32 b_length) + uint32 b_length) const { return field_charset->coll->strnncollsp(field_charset, a, a_length, b, b_length); @@ -8381,7 +8381,7 @@ int Field_blob::cmp(const uchar *a,uint32 a_length, const uchar *b, int Field_blob::cmp_max(const uchar *a_ptr, const uchar *b_ptr, - uint max_length) + uint max_length) const { uchar *blob1,*blob2; memcpy(&blob1, a_ptr+packlength, sizeof(char*)); @@ -8394,7 +8394,7 @@ int Field_blob::cmp_max(const uchar *a_ptr, const uchar *b_ptr, int Field_blob::cmp_binary(const uchar *a_ptr, const uchar *b_ptr, - uint32 max_length) + uint32 max_length) const { char *a,*b; uint diff; @@ -8446,7 +8446,7 @@ void Field_blob::set_key_image(const uchar *buff,uint length) } -int Field_blob::key_cmp(const uchar *key_ptr, uint max_key_length) +int Field_blob::key_cmp(const uchar *key_ptr, uint max_key_length) const { uchar *blob1; size_t blob_length=get_length(ptr); @@ -8461,7 +8461,7 @@ int Field_blob::key_cmp(const uchar *key_ptr, uint max_key_length) uint2korr(key_ptr)); } -int Field_blob::key_cmp(const uchar *a,const uchar *b) +int Field_blob::key_cmp(const uchar *a,const uchar *b) const { return Field_blob::cmp(a+HA_KEY_BLOB_LENGTH, uint2korr(a), b+HA_KEY_BLOB_LENGTH, uint2korr(b)); @@ -8858,9 +8858,13 @@ double Field_enum::val_real(void) longlong Field_enum::val_int(void) { DBUG_ASSERT(marked_for_read()); - return read_lowendian(ptr, packlength); + return val_int(ptr); } +longlong Field_enum::val_int(const uchar *real_ptr) const +{ + return read_lowendian(real_ptr, packlength); +} /** Save the field metadata for enum fields. @@ -8894,14 +8898,10 @@ String *Field_enum::val_str(String *val_buffer __attribute__((unused)), return val_ptr; } -int Field_enum::cmp(const uchar *a_ptr, const uchar *b_ptr) +int Field_enum::cmp(const uchar *a_ptr, const uchar *b_ptr) const { - uchar *old= ptr; - ptr= (uchar*) a_ptr; - ulonglong a=Field_enum::val_int(); - ptr= (uchar*) b_ptr; - ulonglong b=Field_enum::val_int(); - ptr= old; + ulonglong a=Field_enum::val_int(a_ptr); + ulonglong b=Field_enum::val_int(b_ptr); return (a < b) ? -1 : (a > b) ? 1 : 0; } @@ -9542,7 +9542,7 @@ my_decimal *Field_bit::val_decimal(my_decimal *deciaml_value) The a and b pointer must be pointers to the field in a record (not the table->record[0] necessarily) */ -int Field_bit::cmp_max(const uchar *a, const uchar *b, uint max_len) +int Field_bit::cmp_max(const uchar *a, const uchar *b, uint max_len) const { my_ptrdiff_t a_diff= a - ptr; my_ptrdiff_t b_diff= b - ptr; @@ -9560,7 +9560,7 @@ int Field_bit::cmp_max(const uchar *a, const uchar *b, uint max_len) } -int Field_bit::key_cmp(const uchar *str, uint length) +int Field_bit::key_cmp(const uchar *str, uint length) const { if (bit_len) { diff --git a/sql/field.h b/sql/field.h index 978ce734187..18404e5a7bd 100644 --- a/sql/field.h +++ b/sql/field.h @@ -1134,18 +1134,18 @@ public: const Conv_param ¶m) const; inline int cmp(const uchar *str) { return cmp(ptr,str); } - virtual int cmp_max(const uchar *a, const uchar *b, uint max_len) + virtual int cmp_max(const uchar *a, const uchar *b, uint max_len) const { return cmp(a, b); } - virtual int cmp(const uchar *,const uchar *)=0; - virtual int cmp_binary(const uchar *a,const uchar *b, uint32 max_length=~0U) + virtual int cmp(const uchar *,const uchar *) const=0; + virtual int cmp_binary(const uchar *a,const uchar *b, uint32 max_length=~0U) const { return memcmp(a,b,pack_length()); } virtual int cmp_offset(my_ptrdiff_t row_offset) { return cmp(ptr,ptr+row_offset); } virtual int cmp_binary_offset(uint row_offset) { return cmp_binary(ptr, ptr+row_offset); }; - virtual int key_cmp(const uchar *a,const uchar *b) + virtual int key_cmp(const uchar *a,const uchar *b) const { return cmp(a, b); } - virtual int key_cmp(const uchar *str, uint length) + virtual int key_cmp(const uchar *str, uint length) const { return cmp(ptr,str); } /* Update the value m of the 'min_val' field with the current value v @@ -1977,7 +1977,7 @@ protected: uint *out_length, CHARSET_INFO *cs, size_t nchars); String *uncompress(String *val_buffer, String *val_ptr, - const uchar *from, uint from_length); + const uchar *from, uint from_length) const; public: Field_longstr(uchar *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, utype unireg_check_arg, @@ -2092,7 +2092,7 @@ public: double val_real(void); longlong val_int(void); String *val_str(String*,String *); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); void overflow(bool negative); bool zero_pack() const { return 0; } @@ -2182,7 +2182,7 @@ public: { return my_decimal(ptr, precision, dec).to_bool(); } - int cmp(const uchar *, const uchar *); + int cmp(const uchar *, const uchar *) const; void sort_string(uchar *buff, uint length); bool zero_pack() const { return 0; } void sql_type(String &str) const; @@ -2288,7 +2288,7 @@ public: longlong val_int(void); String *val_str(String*,String *); bool send_binary(Protocol *protocol); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); uint32 pack_length() const { return 1; } void sql_type(String &str) const; @@ -2345,7 +2345,7 @@ public: longlong val_int(void); String *val_str(String*,String *); bool send_binary(Protocol *protocol); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); uint32 pack_length() const { return 2; } void sql_type(String &str) const; @@ -2386,7 +2386,7 @@ public: longlong val_int(void); String *val_str(String*,String *); bool send_binary(Protocol *protocol); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); uint32 pack_length() const { return 3; } void sql_type(String &str) const; @@ -2432,7 +2432,7 @@ public: longlong val_int(void); bool send_binary(Protocol *protocol); String *val_str(String*,String *); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); uint32 pack_length() const { return 4; } void sql_type(String &str) const; @@ -2489,7 +2489,7 @@ public: longlong val_int(void); String *val_str(String*,String *); bool send_binary(Protocol *protocol); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); uint32 pack_length() const { return 8; } void sql_type(String &str) const; @@ -2590,7 +2590,7 @@ public: longlong val_int(void); String *val_str(String*,String *); bool send_binary(Protocol *protocol); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); uint32 pack_length() const { return sizeof(float); } uint row_pack_length() const { return pack_length(); } @@ -2655,7 +2655,7 @@ public: ulonglong val_uint(void) { return (ulonglong) val_int_from_real(true); } String *val_str(String*,String *); bool send_binary(Protocol *protocol); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); uint32 pack_length() const { return sizeof(double); } uint row_pack_length() const { return pack_length(); } @@ -2709,7 +2709,7 @@ public: String *val_str(String *value,String *value2) { value2->length(0); return value2;} bool is_equal(const Column_definition &new_field) const; - int cmp(const uchar *a, const uchar *b) { return 0;} + int cmp(const uchar *a, const uchar *b) const { return 0;} void sort_string(uchar *buff, uint length) {} uint32 pack_length() const { return 0; } void sql_type(String &str) const; @@ -2890,7 +2890,7 @@ public: longlong val_int(void); String *val_str(String*,String *); bool send_binary(Protocol *protocol); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); uint32 pack_length() const { return 4; } void sql_type(String &str) const; @@ -3003,7 +3003,7 @@ public: } bool val_native(Native *to); my_time_t get_timestamp(const uchar *pos, ulong *sec_part) const; - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; uint32 pack_length() const { return 4 + sec_part_bytes(dec); } uint size_of() const { return sizeof(*this); } }; @@ -3044,7 +3044,7 @@ public: uint tmp= my_timestamp_binary_length(field_metadata); DBUG_RETURN(tmp); } - int cmp(const uchar *a_ptr,const uchar *b_ptr) + int cmp(const uchar *a_ptr,const uchar *b_ptr) const { return memcmp(a_ptr, b_ptr, pack_length()); } @@ -3167,7 +3167,7 @@ public: longlong val_int(void); String *val_str(String*,String *); bool send_binary(Protocol *protocol); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); uint32 pack_length() const { return 4; } void sql_type(String &str) const; @@ -3205,7 +3205,7 @@ public: longlong val_int(void); String *val_str(String*,String *); bool send_binary(Protocol *protocol); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); uint32 pack_length() const { return 3; } void sql_type(String &str) const; @@ -3269,7 +3269,7 @@ public: String *val_str(String*,String *); bool get_date(MYSQL_TIME *ltime, date_mode_t fuzzydate); bool send_binary(Protocol *protocol); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); uint32 pack_length() const { return 3; } void sql_type(String &str) const; @@ -3329,7 +3329,7 @@ public: } int reset(void); bool get_date(MYSQL_TIME *ltime, date_mode_t fuzzydate); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); uint32 pack_length() const { return Type_handler_time::hires_bytes(dec); } uint size_of() const { return sizeof(*this); } @@ -3377,7 +3377,7 @@ public: DBUG_ASSERT(length == Field_timef::pack_length()); memcpy(to, ptr, length); } - int cmp(const uchar *a_ptr, const uchar *b_ptr) + int cmp(const uchar *a_ptr, const uchar *b_ptr) const { return memcmp(a_ptr, b_ptr, pack_length()); } @@ -3418,7 +3418,7 @@ public: longlong val_int(void); String *val_str(String*,String *); bool send_binary(Protocol *protocol); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); uint32 pack_length() const { return 8; } void sql_type(String &str) const; @@ -3503,7 +3503,7 @@ public: { DBUG_ASSERT(dec); } - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; uint32 pack_length() const { return Type_handler_datetime::hires_bytes(dec); } bool get_date(MYSQL_TIME *ltime, date_mode_t fuzzydate) { return Field_datetime_hires::get_TIME(ltime, ptr, fuzzydate); } @@ -3545,7 +3545,7 @@ public: uint tmp= my_datetime_binary_length(field_metadata); DBUG_RETURN(tmp); } - int cmp(const uchar *a_ptr, const uchar *b_ptr) + int cmp(const uchar *a_ptr, const uchar *b_ptr) const { return memcmp(a_ptr, b_ptr, pack_length()); } @@ -3657,7 +3657,7 @@ public: longlong val_int(void); String *val_str(String*,String *); my_decimal *val_decimal(my_decimal *); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); void update_data_type_statistics(Data_type_statistics *st) const { @@ -3783,8 +3783,8 @@ public: longlong val_int(void); String *val_str(String*,String *); my_decimal *val_decimal(my_decimal *); - int cmp_max(const uchar *, const uchar *, uint max_length); - int cmp(const uchar *a,const uchar *b) + int cmp_max(const uchar *, const uchar *, uint max_length) const; + int cmp(const uchar *a,const uchar *b) const { return cmp_max(a, b, ~0U); } @@ -3795,9 +3795,9 @@ public: virtual uchar *pack(uchar *to, const uchar *from, uint max_length); virtual const uchar *unpack(uchar* to, const uchar *from, const uchar *from_end, uint param_data); - int cmp_binary(const uchar *a,const uchar *b, uint32 max_length=~0U); - int key_cmp(const uchar *,const uchar*); - int key_cmp(const uchar *str, uint length); + int cmp_binary(const uchar *a,const uchar *b, uint32 max_length=~0U) const; + int key_cmp(const uchar *,const uchar*) const; + int key_cmp(const uchar *str, uint length) const; uint packed_col_length(const uchar *to, uint length); uint max_packed_col_length(uint max_length); uint32 data_length(); @@ -3856,14 +3856,14 @@ private: { return (field_length - 1) / field_charset->mbmaxlen; } - int cmp_max(const uchar *a_ptr, const uchar *b_ptr, uint max_len); + int cmp_max(const uchar *a_ptr, const uchar *b_ptr, uint max_len) const; /* Compressed fields can't have keys as two rows may have different compression methods or compression levels. */ - int key_cmp(const uchar *str, uint length) + int key_cmp(const uchar *str, uint length) const { DBUG_ASSERT(0); return 0; } using Field_varstring::key_cmp; }; @@ -4035,13 +4035,13 @@ public: longlong val_int(void); String *val_str(String*,String *); my_decimal *val_decimal(my_decimal *); - int cmp_max(const uchar *, const uchar *, uint max_length); - int cmp(const uchar *a,const uchar *b) + int cmp_max(const uchar *, const uchar *, uint max_length) const; + int cmp(const uchar *a,const uchar *b) const { return cmp_max(a, b, ~0U); } - int cmp(const uchar *a, uint32 a_length, const uchar *b, uint32 b_length); - int cmp_binary(const uchar *a,const uchar *b, uint32 max_length=~0U); - int key_cmp(const uchar *,const uchar*); - int key_cmp(const uchar *str, uint length); + int cmp(const uchar *a, uint32 a_length, const uchar *b, uint32 b_length) const; + int cmp_binary(const uchar *a,const uchar *b, uint32 max_length=~0U) const; + int key_cmp(const uchar *,const uchar*) const; + int key_cmp(const uchar *str, uint length) const; /* Never update the value of min_val for a blob field */ bool update_min(Field *min_val, bool force_update) { return FALSE; } /* Never update the value of max_val for a blob field */ @@ -4219,9 +4219,9 @@ private: { DBUG_ASSERT(0); return 0; } void set_key_image(const uchar *buff, uint length) { DBUG_ASSERT(0); } - int key_cmp(const uchar *a, const uchar *b) + int key_cmp(const uchar *a, const uchar *b) const { DBUG_ASSERT(0); return 0; } - int key_cmp(const uchar *str, uint length) + int key_cmp(const uchar *str, uint length) const { DBUG_ASSERT(0); return 0; } Field *new_key_field(MEM_ROOT *root, TABLE *new_table, uchar *new_ptr, uint32 length, @@ -4232,6 +4232,7 @@ private: class Field_enum :public Field_str { static void do_field_enum(Copy_field *copy_field); + longlong val_int(const uchar *) const; protected: uint packlength; public: @@ -4297,7 +4298,7 @@ public: double val_real(void); longlong val_int(void); String *val_str(String*,String *); - int cmp(const uchar *,const uchar *); + int cmp(const uchar *,const uchar *) const; void sort_string(uchar *buff,uint length); uint32 pack_length() const { return (uint32) packlength; } void store_type(ulonglong value); @@ -4444,7 +4445,7 @@ public: virtual bool str_needs_quotes() { return TRUE; } my_decimal *val_decimal(my_decimal *); bool val_bool() { return val_int() != 0; } - int cmp(const uchar *a, const uchar *b) + virtual int cmp(const uchar *a, const uchar *b) const { DBUG_ASSERT(ptr == a || ptr == b); if (ptr == a) @@ -4454,10 +4455,10 @@ public: } int cmp_binary_offset(uint row_offset) { return cmp_offset(row_offset); } - int cmp_max(const uchar *a, const uchar *b, uint max_length); - int key_cmp(const uchar *a, const uchar *b) + int cmp_max(const uchar *a, const uchar *b, uint max_length) const; + int key_cmp(const uchar *a, const uchar *b) const { return cmp_binary((uchar *) a, (uchar *) b); } - int key_cmp(const uchar *str, uint length); + int key_cmp(const uchar *str, uint length) const; int cmp_offset(my_ptrdiff_t row_offset); bool update_min(Field *min_val, bool force_update) { |