134
134
char tmp_string[MAX_DATE_STRING_REP_LENGTH];
135
135
size_t tmp_string_len;
137
temporal.to_string(tmp_string, &tmp_string_len);
137
tmp_string_len= temporal.to_string(tmp_string, MAX_DATE_STRING_REP_LENGTH);
138
assert(tmp_string_len < MAX_DATE_STRING_REP_LENGTH);
138
139
my_error(ER_INVALID_DATETIME_VALUE, MYF(ME_FATALERROR), tmp_string);
174
175
String *Field_datetime::val_str(String *val_buffer,
177
val_buffer->alloc(field_length);
178
val_buffer->length(field_length);
178
val_buffer->alloc(drizzled::DateTime::MAX_STRING_LENGTH);
179
val_buffer->length(drizzled::DateTime::MAX_STRING_LENGTH);
184
182
#ifdef WORDS_BIGENDIAN
185
183
if (table && table->s->db_low_byte_first)
189
187
int64_tget(tmp,ptr);
192
Avoid problem with slow int64_t arithmetic and sprintf
195
part1=(long) (tmp/INT64_C(1000000));
196
part2=(long) (tmp - (uint64_t) part1*INT64_C(1000000));
198
pos=(char*) val_buffer->ptr() + MAX_DATETIME_WIDTH;
200
*pos--= (char) ('0'+(char) (part2%10)); part2/=10;
201
*pos--= (char) ('0'+(char) (part2%10)); part3= (int) (part2 / 10);
203
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
204
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
206
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
207
*pos--= (char) ('0'+(char) part3);
209
*pos--= (char) ('0'+(char) (part1%10)); part1/=10;
210
*pos--= (char) ('0'+(char) (part1%10)); part1/=10;
212
*pos--= (char) ('0'+(char) (part1%10)); part1/=10;
213
*pos--= (char) ('0'+(char) (part1%10)); part3= (int) (part1/10);
215
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
216
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
217
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
218
*pos=(char) ('0'+(char) part3);
189
drizzled::DateTime dt;
191
/* TODO: add an assert that this succeeds
192
* currently fails due to bug in allowing
193
* ALTER TABLE to add a datetime column that's
194
* not null without a default value.
196
dt.from_int64_t(tmp, false); /* NOTE: this does *NOT* attempt convertion
197
from formats such as 20090101 as
198
the stored value has already been
203
rlen= dt.to_string((char*)val_buffer->ptr(), drizzled::DateTime::MAX_STRING_LENGTH);
204
assert((rlen+1) < drizzled::DateTime::MAX_STRING_LENGTH);
206
val_buffer->length(rlen);
219
208
return val_buffer;