~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/definition/table.cc

  • Committer: Brian Aker
  • Date: 2011-01-04 04:05:27 UTC
  • mto: (2057.2.1 clean)
  • mto: This revision was merged to the branch mainline in revision 2064.
  • Revision ID: brian@tangent.org-20110104040527-w2xglgjmlet2hy1p
First pass on micro timestamp.

Show diffs side-by-side

added added

removed removed

Lines of Context:
78
78
#include "drizzled/field/time.h"
79
79
#include "drizzled/field/epoch.h"
80
80
#include "drizzled/field/datetime.h"
 
81
#include "drizzled/field/microtime.h"
81
82
#include "drizzled/field/varstring.h"
82
83
#include "drizzled/field/uuid.h"
83
84
 
321
322
  case DRIZZLE_TYPE_DATE:
322
323
  case DRIZZLE_TYPE_ENUM:
323
324
  case DRIZZLE_TYPE_UUID:
 
325
  case DRIZZLE_TYPE_MICROTIME:
324
326
  case DRIZZLE_TYPE_BOOLEAN:
325
327
    default_item= new Item_string(default_value->c_str(),
326
328
                                  default_value->length(),
1316
1318
      }
1317
1319
      break;
1318
1320
    case DRIZZLE_TYPE_LONGLONG:
1319
 
      field_length= MAX_BIGINT_WIDTH;
 
1321
      {
 
1322
        uint32_t sign_len= pfield.constraints().is_unsigned() ? 0 : 1;
 
1323
        field_length= MAX_BIGINT_WIDTH+sign_len;
 
1324
      }
1320
1325
      break;
1321
1326
    case DRIZZLE_TYPE_UUID:
1322
1327
      field_length= field::Uuid::max_string_length();
1324
1329
    case DRIZZLE_TYPE_BOOLEAN:
1325
1330
      field_length= field::Boolean::max_string_length();
1326
1331
      break;
 
1332
    case DRIZZLE_TYPE_MICROTIME:
 
1333
      field_length= field::Microtime::max_string_length();
 
1334
      break;
1327
1335
    case DRIZZLE_TYPE_TIMESTAMP:
1328
1336
      field_length= field::Epoch::max_string_length();
1329
1337
      break;
1334
1342
      abort(); // Programming error
1335
1343
    }
1336
1344
 
1337
 
    assert(enum_field_types_size == 14);
1338
 
 
1339
1345
    Field* f= make_field(pfield,
1340
1346
                         record + field_offsets[fieldnr] + data_offset,
1341
1347
                         field_length,
1361
1367
    case DRIZZLE_TYPE_TIMESTAMP:
1362
1368
    case DRIZZLE_TYPE_TIME:
1363
1369
    case DRIZZLE_TYPE_DATETIME:
 
1370
    case DRIZZLE_TYPE_MICROTIME:
1364
1371
    case DRIZZLE_TYPE_DATE:
1365
1372
    case DRIZZLE_TYPE_ENUM:
1366
1373
    case DRIZZLE_TYPE_LONG:
1416
1423
 
1417
1424
    f->setPosition(fieldnr);
1418
1425
    f->comment= comment;
1419
 
    if (! default_value &&
1420
 
        ! (f->unireg_check==Field::NEXT_NUMBER) &&
 
1426
    if (not default_value &&
 
1427
        not (f->unireg_check==Field::NEXT_NUMBER) &&
1421
1428
        (f->flags & NOT_NULL_FLAG) &&
1422
 
        (f->real_type() != DRIZZLE_TYPE_TIMESTAMP))
 
1429
        (not f->is_timestamp()))
1423
1430
    {
1424
1431
      f->flags|= NO_DEFAULT_VALUE_FLAG;
1425
1432
    }
2082
2089
  {
2083
2090
  case DRIZZLE_TYPE_DATE:
2084
2091
  case DRIZZLE_TYPE_DATETIME:
2085
 
  case DRIZZLE_TYPE_TIMESTAMP:
2086
2092
  case DRIZZLE_TYPE_UUID:
2087
2093
    field_charset= &my_charset_bin;
2088
2094
  default: break;
2171
2177
                                          unireg_check,
2172
2178
                                          field_name);
2173
2179
    }
 
2180
  case DRIZZLE_TYPE_MICROTIME:
 
2181
    return new (&mem_root) field::Microtime(ptr,
 
2182
                                            null_pos,
 
2183
                                            null_bit,
 
2184
                                            unireg_check,
 
2185
                                            field_name,
 
2186
                                            this);
2174
2187
  case DRIZZLE_TYPE_TIMESTAMP:
2175
2188
    return new (&mem_root) field::Epoch(ptr,
2176
 
                                        field_length,
2177
2189
                                        null_pos,
2178
2190
                                        null_bit,
2179
2191
                                        unireg_check,
2180
2192
                                        field_name,
2181
 
                                        this,
2182
 
                                        field_charset);
 
2193
                                        this);
2183
2194
  case DRIZZLE_TYPE_TIME:
2184
2195
    return new (&mem_root) field::Time(ptr,
2185
2196
                                       field_length,