~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/definition/table.cc

  • Committer: Brian Aker
  • Date: 2010-12-16 02:16:37 UTC
  • mto: This revision was merged to the branch mainline in revision 1999.
  • Revision ID: brian@tangent.org-20101216021637-owmmneuy57ddhcn3
uuid type code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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"
79
80
 
80
81
#include "drizzled/definition/cache.h"
81
82
 
264
265
  case message::Table::Field::BLOB:
265
266
    field_type= DRIZZLE_TYPE_BLOB;
266
267
    break;
 
268
  case message::Table::Field::UUID:
 
269
    field_type= DRIZZLE_TYPE_UUID;
 
270
    break;
267
271
  default:
268
272
    assert(0);
269
273
    abort(); // Programming error
306
310
  case DRIZZLE_TYPE_DATETIME:
307
311
  case DRIZZLE_TYPE_DATE:
308
312
  case DRIZZLE_TYPE_ENUM:
 
313
  case DRIZZLE_TYPE_UUID:
309
314
    default_item= new Item_string(default_value->c_str(),
310
315
                                  default_value->length(),
311
316
                                  system_charset_info);
1315
1320
    case DRIZZLE_TYPE_LONGLONG:
1316
1321
      field_length= MAX_BIGINT_WIDTH;
1317
1322
      break;
 
1323
    case DRIZZLE_TYPE_UUID:
 
1324
      field_length= field::Uuid::max_string_length();
 
1325
      break;
1318
1326
    case DRIZZLE_TYPE_NULL:
1319
1327
      abort(); // Programming error
1320
1328
    }
1321
1329
 
 
1330
    assert(enum_field_types_size == 12);
 
1331
 
1322
1332
    Field* f= make_field(record + field_offsets[fieldnr] + data_offset,
1323
 
                                field_length,
1324
 
                                pfield.constraints().is_nullable(),
1325
 
                                null_pos,
1326
 
                                null_bit_pos,
1327
 
                                decimals,
1328
 
                                field_type,
1329
 
                                charset,
1330
 
                                MTYP_TYPENR(unireg_type),
1331
 
                                ((field_type == DRIZZLE_TYPE_ENUM) ?
1332
 
                                 &intervals[interval_nr++]
1333
 
                                 : (TYPELIB*) 0),
1334
 
                                getTableProto()->field(fieldnr).name().c_str());
 
1333
                         field_length,
 
1334
                         pfield.constraints().is_nullable(),
 
1335
                         null_pos,
 
1336
                         null_bit_pos,
 
1337
                         decimals,
 
1338
                         field_type,
 
1339
                         charset,
 
1340
                         MTYP_TYPENR(unireg_type),
 
1341
                         ((field_type == DRIZZLE_TYPE_ENUM) ?  &intervals[interval_nr++] : (TYPELIB*) 0),
 
1342
                         getTableProto()->field(fieldnr).name().c_str());
1335
1343
 
1336
1344
    field[fieldnr]= f;
1337
1345
 
 
1346
    // Insert post make_field code here.
 
1347
    switch (field_type)
 
1348
    {
 
1349
    case DRIZZLE_TYPE_BLOB:
 
1350
    case DRIZZLE_TYPE_VARCHAR:
 
1351
    case DRIZZLE_TYPE_DOUBLE:
 
1352
    case DRIZZLE_TYPE_DECIMAL:
 
1353
    case DRIZZLE_TYPE_TIMESTAMP:
 
1354
    case DRIZZLE_TYPE_DATETIME:
 
1355
    case DRIZZLE_TYPE_DATE:
 
1356
    case DRIZZLE_TYPE_ENUM:
 
1357
    case DRIZZLE_TYPE_LONG:
 
1358
    case DRIZZLE_TYPE_LONGLONG:
 
1359
    case DRIZZLE_TYPE_NULL:
 
1360
    case DRIZZLE_TYPE_UUID:
 
1361
      break;
 
1362
    }
 
1363
 
1338
1364
    // This needs to go, we should be setting the "use" on the field so that
1339
1365
    // it does not reference the share/table.
1340
1366
    table::Shell temp_table(*this); /* Use this so that BLOB DEFAULT '' works */
1364
1390
        return local_error;
1365
1391
      }
1366
1392
    }
1367
 
    else if (f->real_type() == DRIZZLE_TYPE_ENUM &&
1368
 
             (f->flags & NOT_NULL_FLAG))
 
1393
    else if (f->real_type() == DRIZZLE_TYPE_ENUM && (f->flags & NOT_NULL_FLAG))
1369
1394
    {
1370
1395
      f->set_notnull();
1371
1396
      f->store((int64_t) 1, true);
1400
1425
      const char *local_field_name= field[fieldnr]->field_name;
1401
1426
      name_hash.insert(make_pair(local_field_name, &(field[fieldnr])));
1402
1427
    }
1403
 
 
1404
1428
  }
1405
1429
 
1406
1430
  keyinfo= key_info;
1425
1449
    We need to set the unused bits to 1. If the number of bits is a multiple
1426
1450
    of 8 there are no unused bits.
1427
1451
  */
1428
 
 
1429
1452
  if (null_count & 7)
1430
1453
    *(record + null_count / 8)|= ~(((unsigned char) 1 << (null_count & 7)) - 1);
1431
1454
 
1833
1856
  if (timestamp_field)
1834
1857
    outparam.timestamp_field= (Field_timestamp*) outparam.getField(timestamp_field_offset);
1835
1858
 
1836
 
 
1837
1859
  /* Fix key->name and key_part->field */
1838
1860
  if (key_parts)
1839
1861
  {
2024
2046
  case DRIZZLE_TYPE_DATE:
2025
2047
  case DRIZZLE_TYPE_DATETIME:
2026
2048
  case DRIZZLE_TYPE_TIMESTAMP:
 
2049
  case DRIZZLE_TYPE_UUID:
2027
2050
    field_charset= &my_charset_bin;
2028
2051
  default: break;
2029
2052
  }
2072
2095
                                   decimals,
2073
2096
                                   false,
2074
2097
                                   false /* is_unsigned */);
 
2098
  case DRIZZLE_TYPE_UUID:
 
2099
    return new (&mem_root) field::Uuid(ptr,
 
2100
                                       field_length,
 
2101
                                       null_pos,
 
2102
                                       null_bit,
 
2103
                                       field_name);
2075
2104
  case DRIZZLE_TYPE_LONG:
2076
2105
    return new (&mem_root) Field_long(ptr,
2077
2106
                                 field_length,
2116
2145
                                 field_length,
2117
2146
                                 field_name,
2118
2147
                                 field_charset);
2119
 
  default: // Impossible (Wrong version)
2120
 
    break;
2121
2148
  }
2122
 
  return 0;
 
2149
  assert(0);
 
2150
  abort();
2123
2151
}
2124
2152
 
2125
2153