23 #include <drizzled/field/num.h>
24 #include <drizzled/error.h>
25 #include <drizzled/table.h>
26 #include <drizzled/session.h>
27 #include <drizzled/internal/my_sys.h>
28 #include <drizzled/util/test.h>
29 #include <drizzled/create_field.h>
38 unsigned char *null_ptr_arg,
39 unsigned char null_bit_arg,
40 utype unireg_check_arg,
41 const char *field_name_arg,
52 decimal_precision(zero_arg),
53 unsigned_flag(unsigned_arg)
81 const char *int_end,
int error)
84 if (str == int_end || error == EDOM)
87 String tmp(buff, (uint32_t)
sizeof(buff), system_charset_info);
88 tmp.copy(str, length, system_charset_info);
89 push_warning_printf(getTable()->in_use, DRIZZLE_ERROR::WARN_LEVEL_WARN,
90 ER_TRUNCATED_WRONG_VALUE_FOR_FIELD,
91 ER(ER_TRUNCATED_WRONG_VALUE_FOR_FIELD),
99 set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1);
128 bool Field_num::get_int(
const charset_info_st *
const cs,
const char *from, uint32_t len,
129 int64_t *rnd, uint64_t ,
130 int64_t signed_min, int64_t signed_max)
135 *rnd= (int64_t) cs->cset->strntoull10rnd(cs, from, len,
false, &end, &error);
136 if (*rnd < signed_min)
141 else if (*rnd > signed_max)
147 if (getTable()->in_use->count_cuted_fields &&
154 set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
176 return test(err | store(i,
false));
195 assert(result_type() == INT_RESULT);
197 int64_t nr= val_int();
198 int2_class_decimal(E_DEC_FATAL_ERROR, nr,
false, decimal_value);
199 return decimal_value;
203 void Field_num::make_field(
SendField *field)
205 Field::make_field(field);
206 field->decimals= dec;
219 if (dec != from_num->dec)
224 uint32_t Field_num::is_equal(
CreateField *new_field_ptr)
226 return ((new_field_ptr->
sql_type == real_type()) &&
227 ((new_field_ptr->flags & UNSIGNED_FLAG) == (uint32_t) (flags & UNSIGNED_FLAG)) &&
228 ((new_field_ptr->flags & AUTO_INCREMENT_FLAG) == (uint32_t) (flags & AUTO_INCREMENT_FLAG)) &&
229 (new_field_ptr->
length <= max_display_length()));
bool set_warning(DRIZZLE_ERROR::enum_warning_level, drizzled::error_t code, int cuted_increment)
TODO: Rename this file - func.h is stupid.
int check_int(const charset_info_st *const cs, const char *str, int length, const char *int_end, int error)
int64_t convert_decimal2int64_t(const type::Decimal *val, bool unsigned_flag, int *err)
virtual bool eq_def(Field *field)
type::Decimal * val_decimal(type::Decimal *) const
bool eq_def(Field *field)
int store_decimal(const type::Decimal *)
bool test_if_important_data(const charset_info_st *const cs, const char *str, const char *strend)
enum_field_types sql_type
Field_num(unsigned char *ptr_arg, uint32_t len_arg, unsigned char *null_ptr_arg, unsigned char null_bit_arg, utype unireg_check_arg, const char *field_name_arg, uint8_t dec_arg, bool zero_arg, bool unsigned_arg)