diff options
Diffstat (limited to 'sql/field.h')
-rw-r--r-- | sql/field.h | 147 |
1 files changed, 76 insertions, 71 deletions
diff --git a/sql/field.h b/sql/field.h index 8a5e84edaa1..0f531564116 100644 --- a/sql/field.h +++ b/sql/field.h @@ -2274,7 +2274,7 @@ public: }; -class Field_decimal :public Field_real { +class Field_decimal final :public Field_real { public: Field_decimal(uchar *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, @@ -2320,7 +2320,7 @@ public: /* New decimal/numeric field which use fixed point arithmetic */ -class Field_new_decimal :public Field_num { +class Field_new_decimal final :public Field_num { public: /* The maximum number of decimal digits can be stored */ uint precision; @@ -2550,7 +2550,7 @@ public: }; -class Field_short :public Field_int +class Field_short final :public Field_int { const Type_handler_general_purpose_int *type_handler_priv() const { @@ -2603,7 +2603,7 @@ public: } }; -class Field_medium :public Field_int +class Field_medium final :public Field_int { const Type_handler_general_purpose_int *type_handler_priv() const { @@ -2649,7 +2649,7 @@ public: }; -class Field_long :public Field_int +class Field_long final :public Field_int { const Type_handler_general_purpose_int *type_handler_priv() const { @@ -2812,7 +2812,7 @@ public: }; -class Field_float :public Field_real { +class Field_float final :public Field_real { public: Field_float(uchar *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, @@ -2898,28 +2898,28 @@ public: } const Type_handler *type_handler() const override { return &type_handler_double; } - enum ha_base_keytype key_type() const override { return HA_KEYTYPE_DOUBLE; } - int store(const char *to,size_t length,CHARSET_INFO *charset) override; - int store(double nr) override; - int store(longlong nr, bool unsigned_val) override; - int reset() override { bzero(ptr,sizeof(double)); return 0; } - double val_real() override; - longlong val_int() override { return val_int_from_real(false); } - ulonglong val_uint() override { return (ulonglong) val_int_from_real(true); } - String *val_str(String *, String *) override; - bool send_binary(Protocol *protocol) override; - int cmp(const uchar *,const uchar *) const override; - void sort_string(uchar *buff, uint length) override; - uint32 pack_length() const override { return sizeof(double); } - uint row_pack_length() const override { return pack_length(); } - ulonglong get_max_int_value() const override + enum ha_base_keytype key_type() const override final { return HA_KEYTYPE_DOUBLE; } + int store(const char *to,size_t length,CHARSET_INFO *charset) override final; + int store(double nr) override final; + int store(longlong nr, bool unsigned_val) override final; + int reset() override final { bzero(ptr,sizeof(double)); return 0; } + double val_real() override final; + longlong val_int() override final { return val_int_from_real(false); } + ulonglong val_uint() override final { return (ulonglong) val_int_from_real(true); } + String *val_str(String *, String *) override final; + bool send_binary(Protocol *protocol) override final; + int cmp(const uchar *,const uchar *) const override final; + void sort_string(uchar *buff, uint length) override final; + uint32 pack_length() const override final { return sizeof(double); } + uint row_pack_length() const override final { return pack_length(); } + ulonglong get_max_int_value() const override final { /* We use the maximum as per IEEE754-2008 standard, 2^53 */ return 0x20000000000000ULL; } - Binlog_type_info binlog_type_info() const override; + Binlog_type_info binlog_type_info() const override final; }; @@ -2948,40 +2948,40 @@ public: { return do_field_string; } - int store(const char *to, size_t length, CHARSET_INFO *cs) override + int store(const char *to, size_t length, CHARSET_INFO *cs) override final { null[0]=1; return 0; } - int store(double nr) override { null[0]=1; return 0; } - int store(longlong nr, bool unsigned_val) override { null[0]=1; return 0; } - int store_decimal(const my_decimal *d) override { null[0]=1; return 0; } - int reset() override { return 0; } - double val_real() override { return 0.0;} - longlong val_int() override { return 0;} - bool val_bool() override { return false; } - my_decimal *val_decimal(my_decimal *) override { return 0; } - String *val_str(String *value,String *value2) override + int store(double nr) override final { null[0]=1; return 0; } + int store(longlong nr, bool unsigned_val) override final { null[0]=1; return 0; } + int store_decimal(const my_decimal *d) override final { null[0]=1; return 0; } + int reset() override final { return 0; } + double val_real() override final { return 0.0;} + longlong val_int() override final { return 0;} + bool val_bool() override final { return false; } + my_decimal *val_decimal(my_decimal *) override final { return 0; } + String *val_str(String *value,String *value2) override final { value2->length(0); return value2;} - bool is_equal(const Column_definition &new_field) const override; - int cmp(const uchar *a, const uchar *b) const override { return 0;} - void sort_string(uchar *buff, uint length) override {} - uint32 pack_length() const override { return 0; } - void sql_type(String &str) const override; - uint size_of() const override { return sizeof *this; } - uint32 max_display_length() const override { return 4; } - void move_field_offset(my_ptrdiff_t ptr_diff) override {} + bool is_equal(const Column_definition &new_field) const override final; + int cmp(const uchar *a, const uchar *b) const override final { return 0;} + void sort_string(uchar *buff, uint length) override final {} + uint32 pack_length() const override final { return 0; } + void sql_type(String &str) const override final; + uint size_of() const override final { return sizeof *this; } + uint32 max_display_length() const override final { return 4; } + void move_field_offset(my_ptrdiff_t ptr_diff) override final {} bool can_optimize_keypart_ref(const Item_bool_func *cond, - const Item *item) const override + const Item *item) const override final { return false; } bool can_optimize_group_min_max(const Item_bool_func *cond, - const Item *const_item) const override + const Item *const_item) const override final { return false; } }; -class Field_temporal: public Field { +class Field_temporal :public Field { protected: Item *get_equal_const_item_datetime(THD *thd, const Context &ctx, Item *const_item); @@ -3098,7 +3098,7 @@ public: - DATETIME(1..6) - DATETIME(0..6) - MySQL56 version */ -class Field_temporal_with_date: public Field_temporal { +class Field_temporal_with_date :public Field_temporal { protected: virtual void store_TIME(const MYSQL_TIME *ltime) = 0; void store_datetime(const Datetime &dt) @@ -3305,7 +3305,7 @@ public: /** TIMESTAMP(0..6) - MySQL56 version */ -class Field_timestampf :public Field_timestamp_with_dec { +class Field_timestampf final :public Field_timestamp_with_dec { void store_TIMEVAL(const timeval &tv) override; public: Field_timestampf(uchar *ptr_arg, @@ -3353,7 +3353,7 @@ public: }; -class Field_year :public Field_tiny { +class Field_year final :public Field_tiny { public: Field_year(uchar *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, @@ -3414,7 +3414,7 @@ public: }; -class Field_date_common: public Field_temporal_with_date +class Field_date_common :public Field_temporal_with_date { protected: int store_TIME_with_warning(const Datetime *ltime, const ErrConv *str, @@ -3439,7 +3439,7 @@ public: }; -class Field_date :public Field_date_common +class Field_date final :public Field_date_common { void store_TIME(const MYSQL_TIME *ltime) override; bool get_TIME(MYSQL_TIME *ltime, const uchar *pos, date_mode_t fuzzydate) @@ -3480,7 +3480,7 @@ public: }; -class Field_newdate :public Field_date_common +class Field_newdate final :public Field_date_common { void store_TIME(const MYSQL_TIME *ltime) override; bool get_TIME(MYSQL_TIME *ltime, const uchar *pos, date_mode_t fuzzydate) @@ -3571,7 +3571,7 @@ public: }; -class Field_time0: public Field_time +class Field_time0 final :public Field_time { protected: void store_TIME(const MYSQL_TIME *ltime) override; @@ -3628,7 +3628,7 @@ public: /** TIME(1..6) */ -class Field_time_hires :public Field_time_with_dec { +class Field_time_hires final :public Field_time_with_dec { longlong zero_point; void store_TIME(const MYSQL_TIME *) override; public: @@ -3661,7 +3661,7 @@ public: /** TIME(0..6) - MySQL56 version */ -class Field_timef :public Field_time_with_dec { +class Field_timef final :public Field_time_with_dec { void store_TIME(const MYSQL_TIME *ltime) override; public: Field_timef(uchar *ptr_arg, uchar *null_ptr_arg, uchar null_bit_arg, @@ -3746,7 +3746,11 @@ public: }; -class Field_datetime0 :public Field_datetime +/* + Stored as a 8 byte unsigned int. Should sometimes be change to a 6 byte +*/ + +class Field_datetime0 final :public Field_datetime { void store_TIME(const MYSQL_TIME *ltime) override; bool get_TIME(MYSQL_TIME *ltime, const uchar *pos, date_mode_t fuzzydate) @@ -3808,30 +3812,30 @@ public: { DBUG_ASSERT(dec <= TIME_SECOND_PART_DIGITS); } - uint decimals() const override { return dec; } - enum ha_base_keytype key_type() const override { return HA_KEYTYPE_BINARY; } - void make_send_field(Send_field *field) override; - bool send_binary(Protocol *protocol) override; - uchar *pack(uchar *to, const uchar *from, uint max_length) override + uint decimals() const override final { return dec; } + enum ha_base_keytype key_type() const override final { return HA_KEYTYPE_BINARY; } + void make_send_field(Send_field *field) override final; + bool send_binary(Protocol *protocol) override final; + uchar *pack(uchar *to, const uchar *from, uint max_length) override final { return Field::pack(to, from, max_length); } const uchar *unpack(uchar* to, const uchar *from, const uchar *from_end, - uint param_data) override + uint param_data) override final { return Field::unpack(to, from, from_end, param_data); } - void sort_string(uchar *to, uint length) override + void sort_string(uchar *to, uint length) override final { DBUG_ASSERT(length == pack_length()); memcpy(to, ptr, length); } - double val_real() override; - longlong val_int() override; - String *val_str(String *, String *) override; + double val_real() override final; + longlong val_int() override final; + String *val_str(String *, String *) override final; }; /** DATETIME(1..6) */ -class Field_datetime_hires :public Field_datetime_with_dec { +class Field_datetime_hires final :public Field_datetime_with_dec { void store_TIME(const MYSQL_TIME *ltime) override; bool get_TIME(MYSQL_TIME *ltime, const uchar *pos, date_mode_t fuzzydate) const override; @@ -3861,7 +3865,8 @@ public: /** DATETIME(0..6) - MySQL56 version */ -class Field_datetimef :public Field_datetime_with_dec { + +class Field_datetimef final :public Field_datetime_with_dec { void store_TIME(const MYSQL_TIME *ltime) override; bool get_TIME(MYSQL_TIME *ltime, const uchar *pos, date_mode_t fuzzydate) const override; @@ -3955,7 +3960,7 @@ new_Field_datetime(MEM_ROOT *root, uchar *ptr, uchar *null_ptr, uchar null_bit, unireg_check, field_name, dec); } -class Field_string :public Field_longstr { +class Field_string final :public Field_longstr { class Warn_filter_string: public Warn_filter { public: @@ -4188,7 +4193,7 @@ public: }; -class Field_varstring_compressed: public Field_varstring { +class Field_varstring_compressed final :public Field_varstring { public: Field_varstring_compressed(uchar *ptr_arg, uint32 len_arg, uint length_bytes_arg, @@ -4590,7 +4595,7 @@ public: }; -class Field_blob_compressed: public Field_blob { +class Field_blob_compressed final :public Field_blob { public: Field_blob_compressed(uchar *ptr_arg, uchar *null_ptr_arg, uchar null_bit_arg, enum utype unireg_check_arg, @@ -4756,7 +4761,7 @@ private: }; -class Field_set :public Field_enum { +class Field_set final :public Field_enum { public: Field_set(uchar *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, @@ -5005,7 +5010,7 @@ private: an extended version of Field_bit_as_char and not the other way around. Hence, we should refactor it to fix the hierarchy order. */ -class Field_bit_as_char: public Field_bit { +class Field_bit_as_char final :public Field_bit { public: Field_bit_as_char(uchar *ptr_arg, uint32 len_arg, uchar *null_ptr_arg, uchar null_bit_arg, @@ -5020,7 +5025,7 @@ public: }; -class Field_row: public Field_null +class Field_row final :public Field_null { class Virtual_tmp_table *m_table; public: |