23 #include <drizzled/field/int64.h>
24 #include <drizzled/error.h>
25 #include <drizzled/table.h>
26 #include <drizzled/session.h>
27 #include <drizzled/internal/my_sys.h>
42 int Int64::store(
const char *from,uint32_t len,
const charset_info_st *
const cs)
47 ASSERT_COLUMN_MARKED_FOR_WRITE;
49 uint64_t tmp= cs->cset->strntoull10rnd(cs, from, len,
false, &end,&error);
52 set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
55 else if (getTable()->in_use->count_cuted_fields && check_int(cs, from, len, end, error))
64 int64_tstore(ptr,tmp);
70 int Int64::store(
double nr)
75 ASSERT_COLUMN_MARKED_FOR_WRITE;
79 if (nr <= (
double) INT64_MIN)
82 error= (nr < (double) INT64_MIN);
84 else if (nr >= (
double) (uint64_t) INT64_MAX)
87 error= (nr > (double) INT64_MAX);
95 set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
97 int64_tstore(ptr, res);
103 int Int64::store(int64_t nr,
bool arg)
107 ASSERT_COLUMN_MARKED_FOR_WRITE;
110 set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
114 int64_tstore(ptr,nr);
120 double Int64::val_real()
const
124 ASSERT_COLUMN_MARKED_FOR_READ;
133 int64_t Int64::val_int()
const
137 ASSERT_COLUMN_MARKED_FOR_READ;
145 String *Int64::val_str(String *val_buffer, String *)
const
147 const charset_info_st *
const cs= &my_charset_bin;
149 uint32_t mlength= max(field_length+1,22*cs->mbmaxlen);
150 val_buffer->alloc(mlength);
151 char *to=(
char*) val_buffer->ptr();
154 ASSERT_COLUMN_MARKED_FOR_READ;
158 length=(uint32_t) (cs->cset->int64_t10_to_str)(cs,to,mlength, -10, j);
159 val_buffer->length(length);
164 int Int64::cmp(
const unsigned char *a_ptr,
const unsigned char *b_ptr)
171 return (a < b) ? -1 : (a > b) ? 1 : 0;
174 void Int64::sort_string(
unsigned char *to,uint32_t )
176 #ifdef WORDS_BIGENDIAN
178 to[0] = (char) (ptr[0] ^ 128);
189 to[0] = (char) (ptr[7] ^ 128);
201 unsigned char *Int64::pack(
unsigned char* to,
const unsigned char *from, uint32_t,
bool)
205 int64_tget(val, from);
206 int64_tstore(to, val);
208 return to +
sizeof(val);
212 const unsigned char *Int64::unpack(
unsigned char* to,
const unsigned char *from, uint32_t,
bool)
216 int64_tget(val, from);
217 int64_tstore(to, val);
219 return from +
sizeof(val);
TODO: Rename this file - func.h is stupid.