Drizzled Public API Documentation

drizzled::Field_decimal Class Reference
Inheritance diagram for drizzled::Field_decimal:
drizzled::Field_num drizzled::Field

Public Types

enum  utype {
  NONE, NEXT_NUMBER, TIMESTAMP_OLD_FIELD, TIMESTAMP_DN_FIELD,
  TIMESTAMP_UN_FIELD, TIMESTAMP_DNUN_FIELD
}
 

Public Member Functions

 Field_decimal (unsigned char *ptr_arg, uint32_t len_arg, unsigned char *null_ptr_arg, unsigned char null_bit_arg, enum utype unireg_check_arg, const char *field_name_arg, uint8_t dec_arg)
 
 Field_decimal (uint32_t len_arg, bool maybe_null_arg, const char *field_name_arg, uint8_t dec_arg, bool unsigned_arg)
 
enum_field_types type () const
 
enum ha_base_keytype key_type () const
 
Item_result result_type () const
 
int reset (void)
 
bool store_value (const type::Decimal *decimal_value)
 
void set_value_on_overflow (type::Decimal *decimal_value, bool sign)
 
int store (const char *to, uint32_t length, const charset_info_st *const charset)
 
int store (double nr)
 
int store (int64_t nr, bool unsigned_val)
 
int store_time (type::Time &ltime, type::timestamp_t t_type)
 
int store_decimal (const type::Decimal *)
 
double val_real (void) const
 
int64_t val_int (void) const
 
type::Decimalval_decimal (type::Decimal *) const
 
Stringval_str (String *, String *) const
 
int cmp (const unsigned char *, const unsigned char *)
 
void sort_string (unsigned char *buff, uint32_t length)
 
bool zero_pack () const
 
uint32_t max_display_length ()
 
uint32_t size_of () const
 
uint32_t pack_length () const
 
uint32_t pack_length_from_metadata (uint32_t field_metadata)
 
uint32_t is_equal (CreateField *new_field)
 
virtual const unsigned char * unpack (unsigned char *to, const unsigned char *from, uint32_t param_data, bool low_byte_first)
 
void make_field (SendField *)
 
uint32_t decimals () const
 
bool eq_def (Field *field)
 
int check_int (const charset_info_st *const cs, const char *str, int length, const char *int_end, int error)
 
bool get_int (const charset_info_st *const cs, const char *from, uint32_t len, int64_t *rnd, uint64_t unsigned_max, int64_t signed_min, int64_t signed_max)
 
TablegetTable ()
 
TablegetTable () const
 
void setTable (Table *table_arg)
 
bool isUnsigned () const
 
uint16_t position () const
 
void setPosition (uint32_t arg)
 
bool hasDefault () const
 
int store_and_check (enum_check_fields check_level, const char *to, uint32_t length, const charset_info_st *const cs)
 
Stringval_str_internal (String *str) const
 
Stringval_str_internal (String *str, const unsigned char *new_ptr)
 
virtual bool str_needs_quotes ()
 
virtual Item_result cmp_type () const
 
virtual Item_result cast_to_int_type () const
 
virtual bool eq (Field *field)
 
virtual bool is_timestamp () const
 
virtual uint32_t pack_length_in_rec () const
 
virtual uint32_t data_length ()
 
virtual uint32_t used_length ()
 
virtual uint32_t sort_length () const
 
virtual uint32_t max_data_length () const
 
virtual void reset_fields ()
 
virtual void set_default ()
 
virtual bool binary () const
 
virtual uint32_t key_length () const
 
virtual enum_field_types real_type () const
 
virtual int cmp_max (const unsigned char *a, const unsigned char *b, uint32_t max_len)
 
int cmp_internal (const unsigned char *str)
 
virtual int cmp_binary (const unsigned char *a, const unsigned char *b, uint32_t max_length=UINT32_MAX)
 
virtual int cmp_offset (uint32_t row_offset)
 
virtual int cmp_binary_offset (uint32_t row_offset)
 
virtual int key_cmp (const unsigned char *a, const unsigned char *b)
 
virtual int key_cmp (const unsigned char *str, uint32_t length)
 
bool is_null (ptrdiff_t row_offset=0) const
 
bool is_real_null (ptrdiff_t row_offset=0) const
 
bool is_null_in_record (const unsigned char *record) const
 
bool is_null_in_record_with_offset (ptrdiff_t offset) const
 
void set_null (ptrdiff_t row_offset=0)
 
void set_notnull (ptrdiff_t row_offset=0)
 
bool maybe_null (void) const
 
bool real_maybe_null (void) const
 
virtual bool optimize_range (uint32_t idx, uint32_t part)
 
virtual bool can_be_compared_as_int64_t () const
 
virtual void free ()
 
virtual Fieldnew_field (memory::Root *, Table *, bool keep_type)
 
virtual Fieldnew_key_field (memory::Root *root, Table *new_table, unsigned char *new_ptr, unsigned char *new_null_ptr, uint32_t new_null_bit)
 
Fieldclone (memory::Root *, Table *)
 
void move_field (unsigned char *ptr_arg, unsigned char *null_ptr_arg, unsigned char null_bit_arg)
 
void move_field (unsigned char *ptr_arg)
 
virtual void move_field_offset (ptrdiff_t ptr_diff)
 
virtual void get_image (unsigned char *buff, uint32_t length, const charset_info_st *const)
 
virtual void get_image (std::basic_string< unsigned char > &buff, uint32_t length, const charset_info_st *const)
 
virtual void set_image (const unsigned char *buff, uint32_t length, const charset_info_st *const)
 
virtual uint32_t get_key_image (unsigned char *buff, uint32_t length)
 
virtual uint32_t get_key_image (std::basic_string< unsigned char > &buff, uint32_t length)
 
virtual void set_key_image (const unsigned char *buff, uint32_t length)
 
int64_t val_int_offset (uint32_t row_offset)
 
int64_t val_int_internal (const unsigned char *new_ptr)
 
virtual unsigned char * pack (unsigned char *to, const unsigned char *from, uint32_t max_length, bool low_byte_first)
 
unsigned char * pack (unsigned char *to, const unsigned char *from)
 
const unsigned char * unpack (unsigned char *to, const unsigned char *from)
 
virtual unsigned char * pack_key (unsigned char *to, const unsigned char *from, uint32_t max_length, bool low_byte_first)
 
virtual const unsigned char * unpack_key (unsigned char *to, const unsigned char *from, uint32_t max_length, bool low_byte_first)
 
virtual uint32_t max_packed_col_length (uint32_t max_length)
 
uint32_t offset (const unsigned char *record)
 
void copy_from_tmp (int offset)
 
uint32_t fill_cache_field (CacheField *copy)
 
virtual bool get_date (type::Time &ltime, uint32_t fuzzydate) const
 
virtual bool get_time (type::Time &ltime) const
 
virtual const charset_info_stcharset (void) const
 
virtual const charset_info_stsort_charset (void) const
 
virtual bool has_charset (void) const
 
virtual void set_charset (const charset_info_st *const)
 
virtual enum Derivation derivation (void) const
 
virtual void set_derivation (enum Derivation)
 
bool set_warning (DRIZZLE_ERROR::enum_warning_level, drizzled::error_t code, int cuted_increment)
 
void set_datetime_warning (DRIZZLE_ERROR::enum_warning_level, drizzled::error_t code, const char *str, uint32_t str_len, type::timestamp_t ts_type, int cuted_increment)
 
void set_datetime_warning (DRIZZLE_ERROR::enum_warning_level, drizzled::error_t code, int64_t nr, type::timestamp_t ts_type, int cuted_increment)
 
void set_datetime_warning (DRIZZLE_ERROR::enum_warning_level, const drizzled::error_t code, double nr, type::timestamp_t ts_type)
 
bool check_overflow (int op_result)
 
int warn_if_overflow (int op_result)
 
void init (Table *table_arg)
 
int64_t convert_decimal2int64_t (const type::Decimal *val, bool unsigned_flag, int *err)
 
uint32_t char_length () const
 
enum column_format_type column_format () const
 
virtual void hash (uint32_t *nr, uint32_t *nr2) const
 
bool isReadSet () const
 
bool isWriteSet ()
 
void setReadSet (bool arg=true)
 
void setWriteSet (bool arg=true)
 

Static Public Member Functions

static void * operator new (size_t size)
 
static void * operator new (size_t size, memory::Root *mem_root)
 
static void operator delete (void *, size_t)
 
static void operator delete (void *, memory::Root *)
 
static bool type_can_have_key_part (enum_field_types)
 
static enum_field_types field_type_merge (enum_field_types, enum_field_types)
 
static Item_result result_merge_type (enum_field_types)
 

Public Attributes

uint32_t precision
 
uint32_t bin_size
 
const uint8_t dec
 
bool decimal_precision
 
bool unsigned_flag
 
unsigned char * ptr
 
unsigned char * null_ptr
 
Tableorig_table
 
const char * field_name
 
str_ref comment
 
key_map key_start
 
key_map part_of_key
 
key_map part_of_key_not_clustered
 
key_map part_of_sortkey
 
utype unireg_check
 
uint32_t field_length
 
uint32_t flags
 
unsigned char null_bit
 
bool is_created_from_null_item
 

Protected Member Functions

void pack_num (uint64_t arg, unsigned char *destination=NULL)
 
void pack_num (uint32_t arg, unsigned char *destination=NULL)
 
uint64_t unpack_num (uint64_t &destination, const unsigned char *arg=NULL) const
 
uint32_t unpack_num (uint32_t &destination, const unsigned char *arg=NULL) const
 

Detailed Description

Definition at line 29 of file decimal.h.

Member Function Documentation

virtual bool drizzled::Field::can_be_compared_as_int64_t ( ) const
inlinevirtualinherited

Returns true for fields which, when compared with constant items, can be casted to int64_t. In this case we will at 'fix_fields' stage cast the constant items to int64_ts and at the execution stage use field->val_int() for comparison. Used to optimize clauses like 'a_column BETWEEN date_const AND date_const'.

Reimplemented in drizzled::field::Int64, drizzled::Field_datetime, drizzled::Field_date, drizzled::field::Size, drizzled::field::Boolean, drizzled::field::Epoch, drizzled::field::Microtime, and drizzled::field::Time.

Definition at line 359 of file field.h.

Referenced by drizzled::Item_field::result_as_int64_t().

int drizzled::Field_num::check_int ( const charset_info_st *const  cs,
const char *  str,
int  length,
const char *  int_end,
int  error 
)
inherited

Test if given number is a int.

Todo:
Make this multi-byte-character safe
Parameters
strString to test
lengthLength of 'str'
int_endPointer to char after last used digit
csCharacter set
Note
This is called after one has called strntoull10rnd() function.
Return values
0OK
1error: empty string or wrong integer.
2error: garbage at the end of string.

Definition at line 80 of file num.cc.

References drizzled::Field::field_name, drizzled::Table::in_use, drizzled::Session::row_count, drizzled::Field::set_warning(), and drizzled::test_if_important_data().

Field * drizzled::Field::clone ( memory::Root root,
Table new_table 
)
inherited

This is used to generate a field in Table from TableShare

Definition at line 1133 of file field.cc.

References drizzled::memory::Root::memdup().

int64_t drizzled::Field::convert_decimal2int64_t ( const type::Decimal val,
bool  unsigned_flag,
int *  err 
)
inherited

Conversion from decimal to int64_t with checking overflow and setting correct value (min/max) in case of overflow.

Parameters
valvalue which have to be converted
unsigned_flagtype of integer in which we convert val
errvariable to pass error code
Returns
value converted from val

Definition at line 1040 of file field.cc.

References drizzled::Field::warn_if_overflow().

Referenced by drizzled::Field_num::store_decimal().

uint32_t drizzled::Field::data_length ( )
virtualinherited

Return the "real size" of the data in memory. For varstrings, this does not include the length bytes.

Definition at line 717 of file field.cc.

References drizzled::Field::pack_length().

bool drizzled::Field_num::eq_def ( Field field)
virtualinherited
Returns
returns 1 if the fields are equally defined

Reimplemented from drizzled::Field.

Definition at line 213 of file num.cc.

References drizzled::Field::eq_def().

enum_field_types drizzled::Field::field_type_merge ( enum_field_types  a,
enum_field_types  b 
)
staticinherited

Return type of which can carry value of both given types in UNION result.

Parameters
atype for merging
btype for merging
Return values
typeof field

Definition at line 687 of file field.cc.

Referenced by drizzled::Item_type_holder::join_types().

virtual uint32_t drizzled::Field::get_key_image ( unsigned char *  buff,
uint32_t  length 
)
inlinevirtualinherited

Copy a field part into an output buffer.

This function makes a copy of field part of size equal to or less than "length" parameter value. For fields of string types (VARCHAR, TEXT) the rest of buffer is padded by zero byte.

Parameters
outputbuffer
outputbuffer size
Note

For variable length character fields (i.e. UTF-8) the "length" parameter means a number of output buffer bytes as if all field characters have maximal possible size (mbmaxlen). In the other words, "length" parameter is a number of characters multiplied by field_charset->mbmaxlen.

Return values
Numberof copied bytes (excluding padded zero bytes – see above).

Reimplemented in drizzled::Field_blob, and drizzled::Field_varstring.

Definition at line 421 of file field.h.

Referenced by drizzled::matching_cond().

uint32_t drizzled::Field::max_data_length ( ) const
virtualinherited

Get the maximum size of the data in packed format.

Returns
Maximum data length of the field when packed using the Field::pack() function.

Reimplemented in drizzled::Field_blob, and drizzled::Field_str.

Definition at line 732 of file field.cc.

References drizzled::Field::pack_length().

unsigned char * drizzled::Field::pack ( unsigned char *  to,
const unsigned char *  from,
uint32_t  max_length,
bool  low_byte_first 
)
virtualinherited

Pack the field into a format suitable for storage and transfer.

To implement packing functionality, only the virtual function should be overridden. The other functions are just convenience functions and hence should not be overridden.

The value of low_byte_first is dependent on how the packed data is going to be used: for local use, e.g., temporary store on disk or in memory, use the native format since that is faster. For data that is going to be transfered to other machines (e.g., when writing data to the binary log), data should always be stored in little-endian format.

Note
The default method for packing fields just copy the raw bytes of the record into the destination, but never more than max_length characters.
Parameters
toPointer to memory area where representation of field should be put.
fromPointer to memory area where record representation of field is stored.
max_lengthMaximum length of the field, as given in the column definition. For example, for CHAR(1000), the max_length is 1000. This information is sometimes needed to decide how to pack the data.
low_byte_firsttrue if integers should be stored little-endian, false if native format should be used. Note that for little-endian machines, the value of this flag is a moot point since the native format is little-endian.

Reimplemented in drizzled::Field_blob, drizzled::Field_varstring, drizzled::field::Int64, drizzled::field::Int32, drizzled::field::Size, and drizzled::Field_real.

Definition at line 955 of file field.cc.

References drizzled::Field::pack_length().

Referenced by drizzled::SortParam::make_sortkey().

uint32_t drizzled::Field_decimal::pack_length ( ) const
inlinevirtual

Returns size (in bytes) used to store field data in memory (i.e. it returns the maximum size of the field in a row of the table, which is located in RAM).

Reimplemented from drizzled::Field.

Definition at line 81 of file decimal.h.

Referenced by unpack().

uint32_t drizzled::Field_decimal::pack_length_from_metadata ( uint32_t  field_metadata)

Returns the number of bytes field uses in row-based replication row packed size.

This method is used in row-based replication to determine the number of bytes that the field consumes in the row record format. This is used to skip fields in the master that do not exist on the slave.

Parameters
field_metadataEncoded size in field metadata
Returns
The size of the field based on the field metadata.

Definition at line 334 of file decimal.cc.

uint32_t drizzled::Field::pack_length_in_rec ( ) const
virtualinherited

Returns size (in bytes) used to store field data on storage (i.e. it returns the maximal size of the field in a row of the table, which is located on disk).

Definition at line 712 of file field.cc.

References drizzled::Field::pack_length().

Item_result drizzled::Field::result_merge_type ( enum_field_types  field_type)
staticinherited

Detect Item_result by given field type of UNION merge result.

Parameters
field_typegiven field type
Returns
Item_result (type of internal MySQL expression result)

Definition at line 695 of file field.cc.

Referenced by drizzled::Item_type_holder::join_types(), and drizzled::Item_type_holder::result_type().

void drizzled::Field::set_datetime_warning ( DRIZZLE_ERROR::enum_warning_level  level,
drizzled::error_t  code,
const char *  str,
uint32_t  str_len,
type::timestamp_t  ts_type,
int  cuted_increment 
)
inherited

Produce warning or note about datetime string data saved into field.

Parameters
levellevel of message (Note/Warning/Error)
codeerror code of message to be produced
strstring value which we tried to save
str_lengthlength of string which we tried to save
ts_typetype of datetime value (datetime/date/time)
cuted_incrementwhenever we should increase cut fields count or not
Note
This function will always produce some warning but won't increase cut fields counter if count_cuted_fields ==FIELD_CHECK_IGNORE for current thread.

Definition at line 1237 of file field.cc.

References drizzled::Field::field_name, and drizzled::Field::set_warning().

Referenced by drizzled::Field_date::store_time().

void drizzled::Field::set_datetime_warning ( DRIZZLE_ERROR::enum_warning_level  level,
drizzled::error_t  code,
int64_t  nr,
type::timestamp_t  ts_type,
int  cuted_increment 
)
inherited

Produce warning or note about integer datetime value saved into field.

Parameters
levellevel of message (Note/Warning/Error)
codeerror code of message to be produced
nrnumeric value which we tried to save
ts_typetype of datetime value (datetime/date/time)
cuted_incrementwhenever we should increase cut fields count or not
Note
This function will always produce some warning but won't increase cut fields counter if count_cuted_fields == FIELD_CHECK_IGNORE for current thread.

Definition at line 1252 of file field.cc.

References drizzled::Field::field_name, and drizzled::Field::set_warning().

void drizzled::Field::set_datetime_warning ( DRIZZLE_ERROR::enum_warning_level  level,
const drizzled::error_t  code,
double  nr,
type::timestamp_t  ts_type 
)
inherited

Produce warning or note about double datetime data saved into field.

Parameters
levellevel of message (Note/Warning/Error)
codeerror code of message to be produced
nrdouble value which we tried to save
ts_typetype of datetime value (datetime/date/time)
Note
This function will always produce some warning but won't increase cut fields counter if count_cuted_fields == FIELD_CHECK_IGNORE for current thread.

Definition at line 1269 of file field.cc.

References drizzled::Field::field_name, and drizzled::Field::set_warning().

void drizzled::Field_decimal::set_value_on_overflow ( type::Decimal decimal_value,
bool  sign 
)

Generate max/min decimal value in case of overflow.

Parameters
decimal_valuebuffer for value
signsign of value which caused overflow

Definition at line 94 of file decimal.cc.

Referenced by store(), and store_value().

bool drizzled::Field::set_warning ( DRIZZLE_ERROR::enum_warning_level  level,
drizzled::error_t  code,
int  cuted_increment 
)
inherited

Produce warning or note about data saved into field.

Parameters
level- level of message (Note/Warning/Error)
code- error code of message to be produced
cuted_increment- whenever we should increase cut fields count or not
Note
This function won't produce warning and increase cut fields counter if count_cuted_fields == CHECK_FIELD_IGNORE for current thread.

if count_cuted_fields == CHECK_FIELD_IGNORE then we ignore notes. This allows us to avoid notes in optimisation, like convert_constant_item().

Return values
1if count_cuted_fields == CHECK_FIELD_IGNORE and error level is not NOTE
0otherwise

Definition at line 1217 of file field.cc.

References drizzled::Session::cuted_fields, drizzled::Field::field_name, drizzled::Table::in_use, drizzled::Session::row_count, and drizzled::Field::table.

Referenced by drizzled::Field_num::check_int(), drizzled::do_cut_string(), drizzled::do_cut_string_complex(), drizzled::Field::set_datetime_warning(), drizzled::set_field_to_null_with_conversions(), drizzled::Field_date::store_time(), and drizzled::Field::warn_if_overflow().

int drizzled::Field_decimal::store ( double  nr)
virtual
Todo:
Fix following when double2_class_decimal when double2decimal will return E_DEC_TRUNCATED always correctly

Implements drizzled::Field.

Definition at line 202 of file decimal.cc.

References drizzled::Session::got_warning, drizzled::Table::in_use, set_value_on_overflow(), store_value(), and drizzled::Field::warn_if_overflow().

int drizzled::Field_decimal::store_time ( type::Time ltime,
type::timestamp_t  t_type 
)
virtual

This is called when storing a date in a string.

Note
Needs to be changed if/when we want to support different time formats.

Reimplemented from drizzled::Field.

Definition at line 255 of file decimal.cc.

References store_value().

bool drizzled::Field_decimal::store_value ( const type::Decimal decimal_value)

Store decimal value in the binary buffer.

Checks if decimal_value fits into field size. If it does, stores the decimal in the buffer using binary format. Otherwise sets maximal number that can be stored in the field.

Parameters
decimal_valuetype::Decimal
Return values
0ok
1error

Definition at line 120 of file decimal.cc.

References drizzled::Field::ptr, set_value_on_overflow(), and drizzled::Field::warn_if_overflow().

Referenced by store(), and store_time().

bool drizzled::Field::type_can_have_key_part ( enum_field_types  type)
staticinherited

Check whether a field type can be partially indexed by a key.

This is a static method, rather than a virtual function, because we need to check the type of a non-Field in alter_table().

Parameters
typefield type
Return values
trueType can have a prefixed key
falseType can not have a prefixed key

Definition at line 859 of file field.cc.

Referenced by drizzled::prepare_alter_table().

const unsigned char * drizzled::Field_decimal::unpack ( unsigned char *  to,
const unsigned char *  from,
uint32_t  param_data,
bool  low_byte_first 
)
virtual

Unpack a decimal field from row data.

This method is used to unpack a decimal or numeric field from a master whose size of the field is less than that of the slave.

Parameters
toDestination of the data
fromSource of the data
param_dataPrecision (upper) and decimal (lower) values
Returns
New pointer into memory based on from + length of the data

Reimplemented from drizzled::Field.

Definition at line 369 of file decimal.cc.

References drizzled::bin2decimal(), drizzled::decimal2bin(), pack_length(), and drizzled::Field::unpack().

uint32_t drizzled::Field::used_length ( )
virtualinherited

Returns the number of bytes actually used to store the data of the field. So for a varstring it includes both lenght byte(s) and string data, and anything after data_length() bytes are unused.

Reimplemented in drizzled::Field_varstring.

Definition at line 722 of file field.cc.

References drizzled::Field::pack_length().

int drizzled::Field::warn_if_overflow ( int  op_result)
inherited

Process decimal library return codes and issue warnings for overflow and truncation.

Parameters
op_resultdecimal library return code (E_DEC_* see include/decimal.h)
Return values
E_DEC_OVERFLOWthere was overflow E_DEC_TRUNCATED there was truncation
0no error or there was some other error except overflow or truncation

Definition at line 871 of file field.cc.

References drizzled::Field::set_warning().

Referenced by drizzled::Field::convert_decimal2int64_t(), store(), and store_value().

Member Data Documentation

str_ref drizzled::Field::comment
inherited

A comment about the field

Definition at line 103 of file field.h.

Referenced by drizzled::CreateField::CreateField().

uint32_t drizzled::Field::field_length
inherited
bool drizzled::Field::is_created_from_null_item
inherited

If true, this field was created in create_tmp_field_from_item from a NULL value. This means that the type of the field is just a guess, and the type may be freely coerced to another type.

See Also
create_tmp_field_from_item
Item_type_holder::get_real_type

Definition at line 161 of file field.h.

Referenced by drizzled::create_tmp_field_from_item(), and drizzled::Item_type_holder::get_real_type().

key_map drizzled::Field::key_start
inherited

The field is part of the following keys

Definition at line 106 of file field.h.

Referenced by drizzled::make_join_statistics(), and drizzled::update_const_equal_items().

unsigned char drizzled::Field::null_bit
inherited
unsigned char* drizzled::Field::null_ptr
inherited
Table* drizzled::Field::orig_table
inherited

Pointer to the original Table. What is "the original table"?

Definition at line 101 of file field.h.

Referenced by drizzled::change_to_use_tmp_fields(), and drizzled::create_tmp_field_from_field().


The documentation for this class was generated from the following files: