1
/* -*- mode: c++; c-basic-offset: 2; i/dent-tabs-mode: nil; -*-
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
2
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4
4
* Copyright (C) 2010 Brian Aker
70
70
#include "drizzled/field/decimal.h"
71
71
#include "drizzled/field/real.h"
72
72
#include "drizzled/field/double.h"
73
#include "drizzled/field/int32.h"
74
#include "drizzled/field/int64.h"
73
#include "drizzled/field/long.h"
74
#include "drizzled/field/int64_t.h"
75
75
#include "drizzled/field/num.h"
76
76
#include "drizzled/field/timestamp.h"
77
77
#include "drizzled/field/datetime.h"
78
78
#include "drizzled/field/varstring.h"
79
#include "drizzled/field/uuid.h"
81
80
#include "drizzled/definition/cache.h"
265
264
case message::Table::Field::BLOB:
266
265
field_type= DRIZZLE_TYPE_BLOB;
268
case message::Table::Field::UUID:
269
field_type= DRIZZLE_TYPE_UUID;
273
abort(); // Programming error
268
field_type= DRIZZLE_TYPE_LONG; /* Set value to kill GCC warning */
276
272
return field_type;
304
300
default_value->length());
306
302
case DRIZZLE_TYPE_NULL:
309
304
case DRIZZLE_TYPE_TIMESTAMP:
310
305
case DRIZZLE_TYPE_DATETIME:
311
306
case DRIZZLE_TYPE_DATE:
312
307
case DRIZZLE_TYPE_ENUM:
313
case DRIZZLE_TYPE_UUID:
314
308
default_item= new Item_string(default_value->c_str(),
315
309
default_value->length(),
316
310
system_charset_info);
1135
1132
unireg_type= Field::TIMESTAMP_DN_FIELD;
1139
assert(0); // Invalid update value.
1135
assert(1); // Invalid update value.
1143
1137
else if (pfield.has_options() &&
1144
1138
pfield.options().has_update_expression() &&
1315
1310
case DRIZZLE_TYPE_LONGLONG:
1316
1311
field_length= MAX_BIGINT_WIDTH;
1318
case DRIZZLE_TYPE_UUID:
1319
field_length= field::Uuid::max_string_length();
1321
1313
case DRIZZLE_TYPE_NULL:
1322
1314
abort(); // Programming error
1325
assert(enum_field_types_size == 12);
1327
1317
Field* f= make_field(record + field_offsets[fieldnr] + data_offset,
1329
pfield.constraints().is_nullable(),
1335
MTYP_TYPENR(unireg_type),
1336
((field_type == DRIZZLE_TYPE_ENUM) ? &intervals[interval_nr++] : (TYPELIB*) 0),
1337
getTableProto()->field(fieldnr).name().c_str());
1319
pfield.constraints().is_nullable(),
1325
MTYP_TYPENR(unireg_type),
1326
((field_type == DRIZZLE_TYPE_ENUM) ?
1327
&intervals[interval_nr++]
1329
getTableProto()->field(fieldnr).name().c_str());
1339
1331
field[fieldnr]= f;
1341
// Insert post make_field code here.
1344
case DRIZZLE_TYPE_BLOB:
1345
case DRIZZLE_TYPE_VARCHAR:
1346
case DRIZZLE_TYPE_DOUBLE:
1347
case DRIZZLE_TYPE_DECIMAL:
1348
case DRIZZLE_TYPE_TIMESTAMP:
1349
case DRIZZLE_TYPE_DATETIME:
1350
case DRIZZLE_TYPE_DATE:
1351
case DRIZZLE_TYPE_ENUM:
1352
case DRIZZLE_TYPE_LONG:
1353
case DRIZZLE_TYPE_LONGLONG:
1354
case DRIZZLE_TYPE_NULL:
1355
case DRIZZLE_TYPE_UUID:
1359
1333
// This needs to go, we should be setting the "use" on the field so that
1360
1334
// it does not reference the share/table.
1361
1335
table::Shell temp_table(*this); /* Use this so that BLOB DEFAULT '' works */
1385
1359
return local_error;
1388
else if (f->real_type() == DRIZZLE_TYPE_ENUM && (f->flags & NOT_NULL_FLAG))
1362
else if (f->real_type() == DRIZZLE_TYPE_ENUM &&
1363
(f->flags & NOT_NULL_FLAG))
1390
1365
f->set_notnull();
1391
1366
f->store((int64_t) 1, true);
1412
1387
if (f->unireg_check == Field::NEXT_NUMBER)
1413
1388
found_next_number_field= &(field[fieldnr]);
1390
if (timestamp_field == f)
1391
timestamp_field_offset= fieldnr;
1415
1393
if (use_hash) /* supposedly this never fails... but comments lie */
1417
1395
const char *local_field_name= field[fieldnr]->field_name;
1418
1396
name_hash.insert(make_pair(local_field_name, &(field[fieldnr])));
1422
1401
keyinfo= key_info;
1845
1826
outparam.found_next_number_field=
1846
1827
outparam.getField(positionFields(found_next_number_field));
1847
1828
if (timestamp_field)
1848
outparam.timestamp_field= (Field_timestamp*) outparam.getField(timestamp_field->position());
1829
outparam.timestamp_field= (Field_timestamp*) outparam.getField(timestamp_field_offset);
1850
1832
/* Fix key->name and key_part->field */
2088
2069
false /* is_unsigned */);
2089
case DRIZZLE_TYPE_UUID:
2090
return new (&mem_root) field::Uuid(ptr,
2095
2070
case DRIZZLE_TYPE_LONG:
2096
return new (&mem_root) field::Int32(ptr,
2071
return new (&mem_root) Field_long(ptr,
2078
false /* is_unsigned */);
2102
2079
case DRIZZLE_TYPE_LONGLONG:
2103
return new (&mem_root) field::Int64(ptr,
2080
return new (&mem_root) Field_int64_t(ptr,
2087
false /* is_unsigned */);
2109
2088
case DRIZZLE_TYPE_TIMESTAMP:
2110
2089
return new (&mem_root) Field_timestamp(ptr,