23
#include <drizzled/field/int64.h>
22
#include <drizzled/server_includes.h>
23
#include <drizzled/field/int64_t.h>
24
24
#include <drizzled/error.h>
25
25
#include <drizzled/table.h>
26
26
#include <drizzled/session.h>
27
#include "drizzled/internal/my_sys.h"
41
29
/****************************************************************************
42
Field type Int64 int (8 bytes)
43
****************************************************************************/
30
Field type int64_t int (8 bytes)
31
****************************************************************************/
45
int Int64::store(const char *from,uint32_t len, const CHARSET_INFO * const cs)
33
int Field_int64_t::store(const char *from,uint32_t len, const CHARSET_INFO * const cs)
51
ASSERT_COLUMN_MARKED_FOR_WRITE;
53
39
tmp= cs->cset->strntoull10rnd(cs, from, len, false, &end,&error);
54
40
if (error == MY_ERRNO_ERANGE)
56
42
set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
59
else if (getTable()->in_use->count_cuted_fields &&
45
else if (table->in_use->count_cuted_fields &&
60
46
check_int(cs, from, len, end, error))
64
50
#ifdef WORDS_BIGENDIAN
65
if (getTable()->getShare()->db_low_byte_first)
51
if (table->s->db_low_byte_first)
67
53
int8store(ptr,tmp);
113
int Int64::store(int64_t nr, bool )
97
int Field_int64_t::store(int64_t nr, bool )
117
ASSERT_COLUMN_MARKED_FOR_WRITE;
119
101
#ifdef WORDS_BIGENDIAN
120
if (getTable()->getShare()->db_low_byte_first)
102
if (table->s->db_low_byte_first)
122
104
int8store(ptr,nr);
131
double Int64::val_real(void)
113
double Field_int64_t::val_real(void)
135
ASSERT_COLUMN_MARKED_FOR_READ;
137
116
#ifdef WORDS_BIGENDIAN
138
if (getTable()->getShare()->db_low_byte_first)
117
if (table->s->db_low_byte_first)
140
119
j=sint8korr(ptr);
150
int64_t Int64::val_int(void)
129
int64_t Field_int64_t::val_int(void)
154
ASSERT_COLUMN_MARKED_FOR_READ;
156
132
#ifdef WORDS_BIGENDIAN
157
if (getTable()->getShare()->db_low_byte_first)
133
if (table->s->db_low_byte_first)
158
134
j=sint8korr(ptr);
166
String *Int64::val_str(String *val_buffer,
142
String *Field_int64_t::val_str(String *val_buffer,
169
145
const CHARSET_INFO * const cs= &my_charset_bin;
171
uint32_t mlength= max(field_length+1,22*cs->mbmaxlen);
147
uint32_t mlength=cmax(field_length+1,22*cs->mbmaxlen);
172
148
val_buffer->alloc(mlength);
173
149
char *to=(char*) val_buffer->ptr();
176
ASSERT_COLUMN_MARKED_FOR_READ;
178
151
#ifdef WORDS_BIGENDIAN
179
if (getTable()->getShare()->db_low_byte_first)
152
if (table->s->db_low_byte_first)
180
153
j=sint8korr(ptr);
188
161
return val_buffer;
191
int Int64::cmp(const unsigned char *a_ptr, const unsigned char *b_ptr)
164
int Field_int64_t::cmp(const unsigned char *a_ptr, const unsigned char *b_ptr)
194
167
#ifdef WORDS_BIGENDIAN
195
if (getTable()->getShare()->db_low_byte_first)
168
if (table->s->db_low_byte_first)
197
170
a=sint8korr(a_ptr);
198
171
b=sint8korr(b_ptr);
206
179
return (a < b) ? -1 : (a > b) ? 1 : 0;
209
void Int64::sort_string(unsigned char *to,uint32_t )
182
void Field_int64_t::sort_string(unsigned char *to,uint32_t )
211
184
#ifdef WORDS_BIGENDIAN
212
if (!getTable()->getShare()->db_low_byte_first)
185
if (!table->s->db_low_byte_first)
214
187
to[0] = (char) (ptr[0] ^ 128); /* Revers signbit */
238
void Int64::sql_type(String &res) const
211
void Field_int64_t::sql_type(String &res) const
240
213
const CHARSET_INFO * const cs=res.charset();
241
214
res.length(cs->cset->snprintf(cs,(char*) res.ptr(),res.alloced_length(), "bigint"));
245
unsigned char *Int64::pack(unsigned char* to, const unsigned char *from,
218
unsigned char *Field_int64_t::pack(unsigned char* to, const unsigned char *from,
247
220
#ifdef WORDS_BIGENDIAN
255
228
#ifdef WORDS_BIGENDIAN
256
if (getTable()->getShare()->db_low_byte_first)
257
val = sint8korr(from);
229
if (table->s->db_low_byte_first)
230
val = sint8korr(from);
260
233
int64_tget(val, from);
272
const unsigned char *Int64::unpack(unsigned char* to, const unsigned char *from, uint32_t,
245
const unsigned char *Field_int64_t::unpack(unsigned char* to, const unsigned char *from, uint32_t,
273
246
#ifdef WORDS_BIGENDIAN
281
254
#ifdef WORDS_BIGENDIAN