37
36
#include "drizzled/field/decimal.h"
38
37
#include "drizzled/field/real.h"
39
38
#include "drizzled/field/double.h"
40
#include "drizzled/field/int32.h"
41
#include "drizzled/field/int64.h"
39
#include "drizzled/field/long.h"
40
#include "drizzled/field/int64_t.h"
42
41
#include "drizzled/field/num.h"
43
42
#include "drizzled/field/timestamp.h"
44
43
#include "drizzled/field/datetime.h"
45
44
#include "drizzled/field/varstring.h"
46
#include "drizzled/field/uuid.h"
47
45
#include "drizzled/time_functions.h"
48
46
#include "drizzled/internal/m_string.h"
50
#include "drizzled/display.h"
429
374
void *Field::operator new(size_t size, memory::Root *mem_root)
431
return mem_root->alloc_root(static_cast<uint32_t>(size));
376
return alloc_root(mem_root, static_cast<uint32_t>(size));
434
379
enum_field_types Field::field_type_merge(enum_field_types a,
435
380
enum_field_types b)
437
assert(a < enum_field_types_size);
438
assert(b < enum_field_types_size);
382
assert(a <= DRIZZLE_TYPE_MAX);
383
assert(b <= DRIZZLE_TYPE_MAX);
439
384
return field_types_merge_rules[a][b];
442
387
Item_result Field::result_merge_type(enum_field_types field_type)
444
assert(field_type < enum_field_types_size);
389
assert(field_type <= DRIZZLE_TYPE_MAX);
445
390
return field_types_result_type[field_type];
771
717
void Field::make_field(SendField *field)
773
if (orig_table && orig_table->getShare()->getSchemaName() && *orig_table->getShare()->getSchemaName())
719
if (orig_table && orig_table->s->getSchemaName() && *orig_table->s->getSchemaName())
775
field->db_name= orig_table->getShare()->getSchemaName();
776
field->org_table_name= orig_table->getShare()->getTableName();
721
field->db_name= orig_table->s->getSchemaName();
722
field->org_table_name= orig_table->s->table_name.str;
779
725
field->org_table_name= field->db_name= "";
782
field->table_name= orig_table->getAlias();
728
field->table_name= orig_table->alias;
783
729
field->org_col_name= field_name;
835
781
String tmp(buff,sizeof(buff),&my_charset_bin),*res;
836
if (!(res=val_str_internal(&tmp)) || str_to_datetime_with_warn(res->ptr(), res->length(),
837
ltime, fuzzydate) <= DRIZZLE_TIMESTAMP_ERROR)
782
if (!(res=val_str(&tmp)) ||
783
str_to_datetime_with_warn(res->ptr(), res->length(),
784
ltime, fuzzydate) <= DRIZZLE_TIMESTAMP_ERROR)
903
844
Field *Field::clone(memory::Root *root, Table *new_table)
906
if ((tmp= (Field*) root->memdup_root((char*) this,size_of())))
847
if ((tmp= (Field*) memdup_root(root,(char*) this,size_of())))
908
849
tmp->init(new_table);
909
tmp->move_field_offset((ptrdiff_t) (new_table->getInsertRecord() -
910
new_table->getDefaultValues()));
850
tmp->move_field_offset((ptrdiff_t) (new_table->record[0] -
851
new_table->s->default_values));
950
891
case DRIZZLE_TYPE_VARCHAR: return (length + (length < 256 ? 1: 2));
951
case DRIZZLE_TYPE_UUID: return field::Uuid::max_string_length();
952
case DRIZZLE_TYPE_DATE:
953
case DRIZZLE_TYPE_ENUM:
892
case DRIZZLE_TYPE_DATE: return 3;
893
case DRIZZLE_TYPE_TIMESTAMP:
954
894
case DRIZZLE_TYPE_LONG: return 4;
955
895
case DRIZZLE_TYPE_DOUBLE: return sizeof(double);
956
896
case DRIZZLE_TYPE_DATETIME:
957
case DRIZZLE_TYPE_TIMESTAMP:
958
897
case DRIZZLE_TYPE_LONGLONG: return 8; /* Don't crash if no int64_t */
959
898
case DRIZZLE_TYPE_NULL: return 0;
960
899
case DRIZZLE_TYPE_BLOB: return 4 + portable_sizeof_char_ptr;
900
case DRIZZLE_TYPE_ENUM:
961
901
case DRIZZLE_TYPE_DECIMAL:
970
908
uint32_t pack_length_to_packflag(uint32_t type)
973
911
case 1: return 1 << FIELDFLAG_PACK_SHIFT;
974
912
case 2: assert(1);
975
913
case 3: assert(1);
976
case 4: return f_settype(DRIZZLE_TYPE_LONG);
977
case 8: return f_settype(DRIZZLE_TYPE_LONGLONG);
914
case 4: return f_settype((uint32_t) DRIZZLE_TYPE_LONG);
915
case 8: return f_settype((uint32_t) DRIZZLE_TYPE_LONGLONG);
979
917
return 0; // This shouldn't happen
920
Field *make_field(TableShare *share,
923
uint32_t field_length,
925
unsigned char *null_pos,
926
unsigned char null_bit,
928
enum_field_types field_type,
929
const CHARSET_INFO * field_charset,
930
Field::utype unireg_check,
932
const char *field_name)
935
root= current_mem_root();
944
null_bit= ((unsigned char) 1) << null_bit;
949
case DRIZZLE_TYPE_DATE:
950
case DRIZZLE_TYPE_DATETIME:
951
case DRIZZLE_TYPE_TIMESTAMP:
952
field_charset= &my_charset_bin;
956
if (field_type == DRIZZLE_TYPE_VARCHAR ||
957
field_type == DRIZZLE_TYPE_BLOB ||
958
field_type == DRIZZLE_TYPE_ENUM)
960
if (field_type == DRIZZLE_TYPE_VARCHAR)
961
return new (root) Field_varstring(ptr,field_length,
962
HA_VARCHAR_PACKLENGTH(field_length),
968
if (field_type == DRIZZLE_TYPE_BLOB)
970
return new (root) Field_blob(ptr,
975
calc_pack_length(DRIZZLE_TYPE_LONG, 0),
981
return new (root) Field_enum(ptr,
986
get_enum_pack_length(interval->count),
994
case DRIZZLE_TYPE_DECIMAL:
995
return new (root) Field_decimal(ptr,
1003
false /* is_unsigned */);
1004
case DRIZZLE_TYPE_DOUBLE:
1005
return new (root) Field_double(ptr,
1013
false /* is_unsigned */);
1014
case DRIZZLE_TYPE_LONG:
1015
return new (root) Field_long(ptr,
1022
false /* is_unsigned */);
1023
case DRIZZLE_TYPE_LONGLONG:
1024
return new (root) Field_int64_t(ptr,
1031
false /* is_unsigned */);
1032
case DRIZZLE_TYPE_TIMESTAMP:
1033
return new (root) Field_timestamp(ptr,
1041
case DRIZZLE_TYPE_DATE:
1042
return new (root) Field_date(ptr,
1047
case DRIZZLE_TYPE_DATETIME:
1048
return new (root) Field_datetime(ptr,
1053
case DRIZZLE_TYPE_NULL:
1054
return new (root) Field_null(ptr,
1058
default: // Impossible (Wrong version)
982
1064
/*****************************************************************************
983
1065
Warning handling
984
1066
*****************************************************************************/