37
37
#include "drizzled/field/decimal.h"
38
38
#include "drizzled/field/real.h"
39
39
#include "drizzled/field/double.h"
40
#include "drizzled/field/int32.h"
41
#include "drizzled/field/int64.h"
40
#include "drizzled/field/long.h"
41
#include "drizzled/field/int64_t.h"
42
42
#include "drizzled/field/num.h"
43
43
#include "drizzled/field/timestamp.h"
44
44
#include "drizzled/field/datetime.h"
45
45
#include "drizzled/field/varstring.h"
46
#include "drizzled/field/uuid.h"
47
46
#include "drizzled/temporal.h"
48
#include "drizzled/item/string.h"
50
48
#include <algorithm>
92
if (flags & ENUM_FLAG)
90
if (flags & (ENUM_FLAG | SET_FLAG))
93
91
interval= ((Field_enum*) old_field)->typelib;
97
95
char_length= length;
99
if (!(flags & (NO_DEFAULT_VALUE_FLAG)) &&
100
!(flags & AUTO_INCREMENT_FLAG) &&
97
if (!(flags & (NO_DEFAULT_VALUE_FLAG )) &&
101
98
old_field->ptr && orig_field &&
102
99
(sql_type != DRIZZLE_TYPE_TIMESTAMP || /* set def only if */
103
old_field->getTable()->timestamp_field != old_field || /* timestamp field */
100
old_field->table->timestamp_field != old_field || /* timestamp field */
104
101
unireg_check == Field::TIMESTAMP_UN_FIELD)) /* has default val */
108
105
/* Get the value from default_values */
109
diff= (ptrdiff_t) (orig_field->getTable()->getDefaultValues() - orig_field->getTable()->getInsertRecord());
106
diff= (ptrdiff_t) (orig_field->table->s->default_values - orig_field->table->record[0]);
110
107
orig_field->move_field_offset(diff); // Points now at default_values
111
108
if (! orig_field->is_real_null())
113
110
char buff[MAX_FIELD_WIDTH], *pos;
114
111
String tmp(buff, sizeof(buff), charset), *res;
115
res= orig_field->val_str_internal(&tmp);
112
res= orig_field->val_str(&tmp);
116
113
pos= (char*) memory::sql_strmake(res->ptr(), res->length());
117
114
def= new Item_string(pos, res->length(), charset);
119
orig_field->move_field_offset(-diff); // Back to getInsertRecord()
116
orig_field->move_field_offset(-diff); // Back to record[0]
351
349
case DRIZZLE_TYPE_DATE:
352
350
length= Date::MAX_STRING_LENGTH;
354
case DRIZZLE_TYPE_UUID:
355
length= field::Uuid::max_string_length();
357
352
case DRIZZLE_TYPE_DATETIME:
358
353
length= DateTime::MAX_STRING_LENGTH;
360
355
case DRIZZLE_TYPE_ENUM:
362
357
/* Should be safe. */
358
pack_length= get_enum_pack_length(fld_interval_list->elements);
365
360
List_iterator<String> it(*fld_interval_list);