30 #include <drizzled/sql_select.h>
31 #include <drizzled/error.h>
32 #include <drizzled/field/str.h>
33 #include <drizzled/field/num.h>
34 #include <drizzled/field/blob.h>
35 #include <drizzled/field/boolean.h>
36 #include <drizzled/field/enum.h>
37 #include <drizzled/field/null.h>
38 #include <drizzled/field/date.h>
39 #include <drizzled/field/decimal.h>
40 #include <drizzled/field/real.h>
41 #include <drizzled/field/double.h>
42 #include <drizzled/field/int32.h>
43 #include <drizzled/field/int64.h>
44 #include <drizzled/field/num.h>
45 #include <drizzled/field/time.h>
46 #include <drizzled/field/epoch.h>
47 #include <drizzled/field/datetime.h>
48 #include <drizzled/field/microtime.h>
49 #include <drizzled/field/varstring.h>
50 #include <drizzled/field/uuid.h>
51 #include <drizzled/field/ipv6.h>
52 #include <drizzled/time_functions.h>
53 #include <drizzled/internal/m_string.h>
54 #include <drizzled/table.h>
55 #include <drizzled/util/test.h>
56 #include <drizzled/session.h>
57 #include <drizzled/current_session.h>
58 #include <drizzled/display.h>
59 #include <drizzled/typelib.h>
60 #include <drizzled/create_field.h>
68 static enum_field_types
69 field_types_merge_rules [enum_field_types_size][enum_field_types_size]=
82 DRIZZLE_TYPE_LONGLONG,
100 DRIZZLE_TYPE_VARCHAR,
102 DRIZZLE_TYPE_VARCHAR,
104 DRIZZLE_TYPE_VARCHAR,
115 DRIZZLE_TYPE_VARCHAR,
119 DRIZZLE_TYPE_VARCHAR,
121 DRIZZLE_TYPE_VARCHAR,
123 DRIZZLE_TYPE_VARCHAR,
127 DRIZZLE_TYPE_VARCHAR,
133 DRIZZLE_TYPE_VARCHAR,
135 DRIZZLE_TYPE_VARCHAR,
137 DRIZZLE_TYPE_VARCHAR,
139 DRIZZLE_TYPE_VARCHAR,
150 DRIZZLE_TYPE_TIMESTAMP,
152 DRIZZLE_TYPE_LONGLONG,
154 DRIZZLE_TYPE_DATETIME,
158 DRIZZLE_TYPE_VARCHAR,
160 DRIZZLE_TYPE_DECIMAL,
168 DRIZZLE_TYPE_BOOLEAN,
172 DRIZZLE_TYPE_MICROTIME,
174 DRIZZLE_TYPE_VARCHAR,
179 DRIZZLE_TYPE_VARCHAR,
181 DRIZZLE_TYPE_VARCHAR,
183 DRIZZLE_TYPE_TIMESTAMP,
185 DRIZZLE_TYPE_TIMESTAMP,
187 DRIZZLE_TYPE_VARCHAR,
189 DRIZZLE_TYPE_DATETIME,
193 DRIZZLE_TYPE_VARCHAR,
195 DRIZZLE_TYPE_VARCHAR,
197 DRIZZLE_TYPE_VARCHAR,
203 DRIZZLE_TYPE_VARCHAR,
205 DRIZZLE_TYPE_VARCHAR,
207 DRIZZLE_TYPE_VARCHAR,
209 DRIZZLE_TYPE_VARCHAR,
214 DRIZZLE_TYPE_LONGLONG,
218 DRIZZLE_TYPE_LONGLONG,
220 DRIZZLE_TYPE_VARCHAR,
222 DRIZZLE_TYPE_LONGLONG,
224 DRIZZLE_TYPE_VARCHAR,
228 DRIZZLE_TYPE_VARCHAR,
230 DRIZZLE_TYPE_DECIMAL,
231 DRIZZLE_TYPE_VARCHAR,
237 DRIZZLE_TYPE_VARCHAR,
239 DRIZZLE_TYPE_VARCHAR,
241 DRIZZLE_TYPE_VARCHAR,
243 DRIZZLE_TYPE_VARCHAR,
248 DRIZZLE_TYPE_VARCHAR,
250 DRIZZLE_TYPE_VARCHAR,
252 DRIZZLE_TYPE_DATETIME,
254 DRIZZLE_TYPE_DATETIME,
256 DRIZZLE_TYPE_VARCHAR,
258 DRIZZLE_TYPE_DATETIME,
262 DRIZZLE_TYPE_VARCHAR,
264 DRIZZLE_TYPE_VARCHAR,
266 DRIZZLE_TYPE_VARCHAR,
272 DRIZZLE_TYPE_VARCHAR,
274 DRIZZLE_TYPE_VARCHAR,
276 DRIZZLE_TYPE_VARCHAR,
278 DRIZZLE_TYPE_VARCHAR,
283 DRIZZLE_TYPE_VARCHAR,
285 DRIZZLE_TYPE_VARCHAR,
289 DRIZZLE_TYPE_DATETIME,
291 DRIZZLE_TYPE_VARCHAR,
293 DRIZZLE_TYPE_DATETIME,
297 DRIZZLE_TYPE_VARCHAR,
299 DRIZZLE_TYPE_VARCHAR,
301 DRIZZLE_TYPE_VARCHAR,
307 DRIZZLE_TYPE_VARCHAR,
309 DRIZZLE_TYPE_VARCHAR,
311 DRIZZLE_TYPE_VARCHAR,
313 DRIZZLE_TYPE_VARCHAR,
318 DRIZZLE_TYPE_VARCHAR,
320 DRIZZLE_TYPE_VARCHAR,
322 DRIZZLE_TYPE_VARCHAR,
324 DRIZZLE_TYPE_VARCHAR,
326 DRIZZLE_TYPE_VARCHAR,
328 DRIZZLE_TYPE_VARCHAR,
330 DRIZZLE_TYPE_VARCHAR,
332 DRIZZLE_TYPE_VARCHAR,
334 DRIZZLE_TYPE_VARCHAR,
336 DRIZZLE_TYPE_VARCHAR,
342 DRIZZLE_TYPE_VARCHAR,
344 DRIZZLE_TYPE_VARCHAR,
346 DRIZZLE_TYPE_VARCHAR,
348 DRIZZLE_TYPE_VARCHAR,
353 DRIZZLE_TYPE_DECIMAL,
357 DRIZZLE_TYPE_DECIMAL,
359 DRIZZLE_TYPE_VARCHAR,
361 DRIZZLE_TYPE_DECIMAL,
363 DRIZZLE_TYPE_VARCHAR,
365 DRIZZLE_TYPE_VARCHAR,
367 DRIZZLE_TYPE_VARCHAR,
369 DRIZZLE_TYPE_DECIMAL,
371 DRIZZLE_TYPE_VARCHAR,
377 DRIZZLE_TYPE_VARCHAR,
379 DRIZZLE_TYPE_VARCHAR,
381 DRIZZLE_TYPE_VARCHAR,
383 DRIZZLE_TYPE_VARCHAR,
388 DRIZZLE_TYPE_VARCHAR,
390 DRIZZLE_TYPE_VARCHAR,
394 DRIZZLE_TYPE_VARCHAR,
396 DRIZZLE_TYPE_VARCHAR,
398 DRIZZLE_TYPE_VARCHAR,
400 DRIZZLE_TYPE_VARCHAR,
402 DRIZZLE_TYPE_VARCHAR,
404 DRIZZLE_TYPE_VARCHAR,
406 DRIZZLE_TYPE_VARCHAR,
412 DRIZZLE_TYPE_VARCHAR,
414 DRIZZLE_TYPE_VARCHAR,
416 DRIZZLE_TYPE_VARCHAR,
418 DRIZZLE_TYPE_VARCHAR,
447 DRIZZLE_TYPE_VARCHAR,
449 DRIZZLE_TYPE_VARCHAR,
451 DRIZZLE_TYPE_VARCHAR,
453 DRIZZLE_TYPE_VARCHAR,
458 DRIZZLE_TYPE_VARCHAR,
460 DRIZZLE_TYPE_VARCHAR,
464 DRIZZLE_TYPE_VARCHAR,
466 DRIZZLE_TYPE_VARCHAR,
468 DRIZZLE_TYPE_VARCHAR,
470 DRIZZLE_TYPE_VARCHAR,
472 DRIZZLE_TYPE_VARCHAR,
474 DRIZZLE_TYPE_VARCHAR,
476 DRIZZLE_TYPE_VARCHAR,
482 DRIZZLE_TYPE_VARCHAR,
486 DRIZZLE_TYPE_VARCHAR,
488 DRIZZLE_TYPE_VARCHAR,
493 DRIZZLE_TYPE_VARCHAR,
495 DRIZZLE_TYPE_VARCHAR,
497 DRIZZLE_TYPE_BOOLEAN,
499 DRIZZLE_TYPE_VARCHAR,
501 DRIZZLE_TYPE_VARCHAR,
503 DRIZZLE_TYPE_VARCHAR,
505 DRIZZLE_TYPE_VARCHAR,
507 DRIZZLE_TYPE_VARCHAR,
509 DRIZZLE_TYPE_VARCHAR,
511 DRIZZLE_TYPE_VARCHAR,
517 DRIZZLE_TYPE_BOOLEAN,
519 DRIZZLE_TYPE_VARCHAR,
521 DRIZZLE_TYPE_VARCHAR,
523 DRIZZLE_TYPE_VARCHAR,
528 DRIZZLE_TYPE_VARCHAR,
530 DRIZZLE_TYPE_VARCHAR,
534 DRIZZLE_TYPE_VARCHAR,
536 DRIZZLE_TYPE_VARCHAR,
538 DRIZZLE_TYPE_VARCHAR,
540 DRIZZLE_TYPE_VARCHAR,
542 DRIZZLE_TYPE_VARCHAR,
544 DRIZZLE_TYPE_VARCHAR,
546 DRIZZLE_TYPE_VARCHAR,
552 DRIZZLE_TYPE_VARCHAR,
556 DRIZZLE_TYPE_VARCHAR,
558 DRIZZLE_TYPE_VARCHAR,
563 DRIZZLE_TYPE_VARCHAR,
565 DRIZZLE_TYPE_VARCHAR,
567 DRIZZLE_TYPE_MICROTIME,
569 DRIZZLE_TYPE_VARCHAR,
571 DRIZZLE_TYPE_VARCHAR,
573 DRIZZLE_TYPE_VARCHAR,
575 DRIZZLE_TYPE_VARCHAR,
577 DRIZZLE_TYPE_VARCHAR,
579 DRIZZLE_TYPE_VARCHAR,
581 DRIZZLE_TYPE_VARCHAR,
587 DRIZZLE_TYPE_VARCHAR,
591 DRIZZLE_TYPE_MICROTIME,
593 DRIZZLE_TYPE_VARCHAR,
598 DRIZZLE_TYPE_VARCHAR,
600 DRIZZLE_TYPE_VARCHAR,
604 DRIZZLE_TYPE_VARCHAR,
606 DRIZZLE_TYPE_VARCHAR,
608 DRIZZLE_TYPE_VARCHAR,
610 DRIZZLE_TYPE_VARCHAR,
612 DRIZZLE_TYPE_VARCHAR,
614 DRIZZLE_TYPE_VARCHAR,
616 DRIZZLE_TYPE_VARCHAR,
622 DRIZZLE_TYPE_VARCHAR,
626 DRIZZLE_TYPE_MICROTIME,
628 DRIZZLE_TYPE_VARCHAR,
632 static Item_result field_types_result_type [enum_field_types_size]=
672 if (cs != &my_charset_bin)
673 str+= cs->cset->scan(cs, str, strend, MY_SEQ_SPACES);
674 return (str < strend);
677 void *Field::operator
new(
size_t size)
679 return memory::sql_alloc(size);
682 void *Field::operator
new(
size_t size, memory::Root *mem_root)
684 return mem_root->alloc(size);
690 assert(a < enum_field_types_size);
691 assert(b < enum_field_types_size);
692 return field_types_merge_rules[a][b];
697 assert(field_type < enum_field_types_size);
698 return field_types_result_type[field_type];
701 bool Field::eq(
Field *field)
727 uint32_t Field::sort_length()
const
737 int Field::reset(
void)
743 void Field::reset_fields()
746 void Field::set_default()
748 ptrdiff_t l_offset= (ptrdiff_t) (
table->getDefaultValues() -
table->getInsertRecord());
754 table->auto_increment_field_not_null=
false;
757 bool Field::binary()
const
762 bool Field::zero_pack()
const
767 enum ha_base_keytype Field::key_type()
const
769 return HA_KEYTYPE_BINARY;
772 uint32_t Field::key_length()
const
777 enum_field_types Field::real_type()
const
782 int Field::cmp_max(
const unsigned char *a,
const unsigned char *b, uint32_t)
787 int Field::cmp_binary(
const unsigned char *a,
const unsigned char *b, uint32_t)
792 int Field::cmp_offset(uint32_t row_offset)
794 return cmp(
ptr,
ptr+row_offset);
797 int Field::cmp_binary_offset(uint32_t row_offset)
799 return cmp_binary(
ptr,
ptr+row_offset);
802 int Field::key_cmp(
const unsigned char *a,
const unsigned char *b)
807 int Field::key_cmp(
const unsigned char *str, uint32_t)
812 uint32_t Field::decimals()
const
817 bool Field::is_null(ptrdiff_t row_offset)
const
822 bool Field::is_real_null(ptrdiff_t row_offset)
const
827 bool Field::is_null_in_record(
const unsigned char *record)
const
832 bool Field::is_null_in_record_with_offset(ptrdiff_t with_offset)
const
837 void Field::set_null(ptrdiff_t row_offset)
843 void Field::set_notnull(ptrdiff_t row_offset)
849 bool Field::maybe_null(
void)
const
854 bool Field::real_maybe_null(
void)
const
863 case DRIZZLE_TYPE_VARCHAR:
864 case DRIZZLE_TYPE_BLOB:
873 if (op_result == E_DEC_OVERFLOW)
875 set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
876 return E_DEC_OVERFLOW;
878 if (op_result == E_DEC_TRUNCATED)
880 set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1);
881 return E_DEC_TRUNCATED;
886 void Field::init(
Table *table_arg)
894 unsigned char *null_ptr_arg,
895 unsigned char null_bit_arg,
896 utype unireg_check_arg,
897 const char *field_name_arg) :
899 null_ptr(null_ptr_arg),
902 field_name(field_name_arg),
905 part_of_key_not_clustered(0),
907 unireg_check(unireg_check_arg),
908 field_length(length_arg),
909 flags(null_ptr ? 0: NOT_NULL_FLAG),
911 null_bit(null_bit_arg),
912 is_created_from_null_item(false)
916 void Field::hash(uint32_t *nr, uint32_t *nr2)
const
920 *nr^= (*nr << 1) | 1;
925 const charset_info_st *
const cs= charset();
926 cs->coll->hash_sort(cs,
ptr, len, nr, nr2);
930 void Field::copy_from_tmp(
int row_offset)
936 (
unsigned char) ~(uint32_t)
null_bit) |
938 (
unsigned char) null_bit));
942 int Field::store_and_check(enum_check_fields check_level,
945 const charset_info_st *
const cs)
948 enum_check_fields old_check_level=
table->
in_use->count_cuted_fields;
950 int res= store(to, length, cs);
951 table->
in_use->count_cuted_fields= old_check_level;
955 unsigned char *
Field::pack(
unsigned char *to,
const unsigned char *from, uint32_t max_length,
bool)
958 set_if_smaller(length, max_length);
959 memcpy(to, from, length);
963 unsigned char *
Field::pack(
unsigned char *to,
const unsigned char *from)
965 return this->
pack(to, from, UINT32_MAX,
table->getShare()->db_low_byte_first);
969 const unsigned char *from,
979 if (param_data > 255)
981 from_type= (param_data & 0xff00) >> 8U;
982 param_data= param_data & 0x00ff;
985 if ((param_data == 0) ||
986 (length == param_data) ||
987 (from_type != real_type()))
989 memcpy(to, from, length);
993 uint32_t len= (param_data && (param_data < length)) ?
996 memcpy(to, from, param_data > length ? length : len);
1000 const unsigned char *
Field::unpack(
unsigned char* to,
const unsigned char *from)
1002 return unpack(to, from, 0,
table->getShare()->db_low_byte_first);
1005 type::Decimal *Field::val_decimal(type::Decimal *)
const
1013 void Field::make_field(SendField *field)
1017 field->db_name=
orig_table->getShare()->getSchemaName();
1018 field->org_table_name=
orig_table->getShare()->getTableName();
1021 field->org_table_name= field->db_name=
"";
1029 field->table_name=
"";
1030 field->org_col_name=
"";
1033 field->charsetnr= charset()->number;
1035 field->type= type();
1036 field->flags=
table->maybe_null ? (flags & ~NOT_NULL_FLAG) : flags;
1044 ~E_DEC_OVERFLOW & ~E_DEC_TRUNCATED,
1047 i= (val->sign() ? INT64_MIN : INT64_MAX);
1053 uint32_t Field::fill_cache_field(
CacheField *copy)
1059 if (flags & BLOB_FLAG)
1063 copy->length-=
table->getShare()->sizeBlobPtr();
1064 return copy->length;
1074 bool Field::get_date(type::Time <ime, uint32_t fuzzydate)
const
1076 char buff[type::Time::MAX_STRING_LENGTH];
1077 String tmp(buff,
sizeof(buff),&my_charset_bin);
1079 assert(getTable() and getTable()->getSession());
1081 String* res= val_str_internal(&tmp);
1082 return not res or str_to_datetime_with_warn(*getTable()->getSession(), *res, ltime, fuzzydate) <= type::DRIZZLE_TIMESTAMP_ERROR;
1085 bool Field::get_time(type::Time <ime)
const
1087 char buff[type::Time::MAX_STRING_LENGTH];
1088 String tmp(buff,
sizeof(buff),&my_charset_bin);
1090 String* res= val_str_internal(&tmp);
1091 return not res or str_to_time_with_warn(*getTable()->getSession(), *res, ltime);
1098 return store(tmp.ptr(), tmp.length(), &my_charset_bin);
1101 bool Field::optimize_range(uint32_t idx, uint32_t)
1103 return test(
table->index_flags(idx) & HA_READ_RANGE);
1106 Field *Field::new_field(memory::Root *root, Table *new_table,
bool)
1108 Field* tmp= (
Field*) root->memdup(
this,size_of());
1109 if (tmp->table->maybe_null)
1110 tmp->flags&= ~NOT_NULL_FLAG;
1111 tmp->table= new_table;
1112 tmp->key_start.reset();
1113 tmp->part_of_key.reset();
1114 tmp->part_of_sortkey.reset();
1115 tmp->unireg_check= Field::NONE;
1116 tmp->flags&= (NOT_NULL_FLAG | BLOB_FLAG | UNSIGNED_FLAG | BINARY_FLAG | ENUM_FLAG);
1117 tmp->reset_fields();
1121 Field *Field::new_key_field(memory::Root *root, Table *new_table,
1122 unsigned char *new_ptr,
1123 unsigned char *new_null_ptr,
1124 uint32_t new_null_bit)
1126 Field *tmp= new_field(root, new_table,
table == new_table);
1128 tmp->null_ptr= new_null_ptr;
1129 tmp->null_bit= new_null_bit;
1136 tmp->init(new_table);
1137 tmp->move_field_offset((ptrdiff_t) (new_table->getInsertRecord() - new_table->getDefaultValues()));
1141 uint32_t Field::is_equal(
CreateField *new_field_ptr)
1143 return new_field_ptr->
sql_type == real_type();
1148 return real_type() == field->real_type() && charset() == field->charset() &&
pack_length() == field->
pack_length();
1158 if (
typelib->count < from_lib->count)
1161 for (uint32_t i=0 ; i < from_lib->count ; i++)
1163 if (my_strnncoll(field_charset,
1164 (
const unsigned char*)
typelib->type_names[i], strlen(
typelib->type_names[i]),
1165 (
const unsigned char*)from_lib->type_names[i], strlen(from_lib->type_names[i])))
1172 uint32_t calc_pack_length(enum_field_types type,uint32_t length)
1176 case DRIZZLE_TYPE_VARCHAR:
return (length + (length < 256 ? 1: 2));
1177 case DRIZZLE_TYPE_UUID:
return field::Uuid::max_string_length();
1178 case DRIZZLE_TYPE_MICROTIME:
return field::Microtime::max_string_length();
1179 case DRIZZLE_TYPE_TIMESTAMP:
return field::Epoch::max_string_length();
1180 case DRIZZLE_TYPE_BOOLEAN:
return field::Boolean::max_string_length();
1181 case DRIZZLE_TYPE_IPV6:
return field::IPv6::max_string_length();
1182 case DRIZZLE_TYPE_DATE:
1183 case DRIZZLE_TYPE_ENUM:
1184 case DRIZZLE_TYPE_LONG:
return 4;
1185 case DRIZZLE_TYPE_DOUBLE:
return sizeof(double);
1186 case DRIZZLE_TYPE_TIME:
1187 case DRIZZLE_TYPE_DATETIME:
1188 case DRIZZLE_TYPE_LONGLONG:
return 8;
1189 case DRIZZLE_TYPE_NULL:
return 0;
1190 case DRIZZLE_TYPE_BLOB:
return 4 + portable_sizeof_char_ptr;
1191 case DRIZZLE_TYPE_DECIMAL:
1199 uint32_t pack_length_to_packflag(uint32_t type)
1203 case 1:
return 1 << FIELDFLAG_PACK_SHIFT;
1206 case 4:
return f_settype(DRIZZLE_TYPE_LONG);
1207 case 8:
return f_settype(DRIZZLE_TYPE_LONGLONG);
1218 drizzled::error_t code,
1219 int cuted_increment)
1226 if (session->count_cuted_fields)
1229 push_warning_printf(session, level, code, ER(code),
field_name,
1233 return level >= DRIZZLE_ERROR::WARN_LEVEL_WARN;
1238 drizzled::error_t code,
1240 uint32_t str_length,
1241 type::timestamp_t ts_type,
1242 int cuted_increment)
1244 Session *session= (getTable() and getTable()->getSession()) ? getTable()->getSession() : current_session;
1246 if ((session->abortOnWarning() and
1247 level >= DRIZZLE_ERROR::WARN_LEVEL_WARN) ||
1249 make_truncated_value_warning(*session, level,
str_ref(str, str_length), ts_type,
field_name);
1253 drizzled::error_t code,
1255 type::timestamp_t ts_type,
1256 int cuted_increment)
1258 Session *session= (getTable() and getTable()->getSession()) ? getTable()->getSession() : current_session;
1260 if (session->abortOnWarning() or
1263 char str_nr[DECIMAL_LONGLONG_DIGITS];
1264 char *str_end= internal::int64_t10_to_str(nr, str_nr, -10);
1265 make_truncated_value_warning(*session, level,
str_ref(str_nr, (uint32_t) (str_end - str_nr)), ts_type,
field_name);
1270 const drizzled::error_t code,
1272 type::timestamp_t ts_type)
1274 Session *session= (getTable() and getTable()->getSession()) ? getTable()->getSession() : current_session;
1276 if (session->abortOnWarning() or
1280 char str_nr[DBL_DIG + 8];
1281 uint32_t str_len= snprintf(str_nr,
sizeof(str_nr),
"%g", nr);
1282 make_truncated_value_warning(*session, level,
str_ref(str_nr, str_len), ts_type,
field_name);
1286 bool Field::isReadSet()
const
1291 bool Field::isWriteSet()
1296 void Field::setReadSet(
bool arg)
1304 void Field::setWriteSet(
bool arg)
1312 void Field::pack_num(uint64_t arg,
unsigned char *destination)
1314 if (not destination)
1317 int64_tstore(destination, arg);
1320 void Field::pack_num(uint32_t arg,
unsigned char *destination)
1322 if (not destination)
1325 longstore(destination, arg);
1328 uint64_t Field::unpack_num(uint64_t &destination,
const unsigned char *arg)
const
1333 int64_tget(destination, arg);
1338 uint32_t Field::unpack_num(uint32_t &destination,
const unsigned char *arg)
const
1343 longget(destination, arg);
1348 std::ostream& operator<<(std::ostream& output,
const Field &field)
1350 output <<
"Field:(";
1351 output << field.field_name;
1353 output << drizzled::display::type(field.real_type());
1356 if (field.flags & NOT_NULL_FLAG)
1357 output <<
" NOT_NULL";
1359 if (field.flags & PRI_KEY_FLAG)
1360 output <<
", PRIMARY KEY";
1362 if (field.flags & UNIQUE_KEY_FLAG)
1363 output <<
", UNIQUE KEY";
1365 if (field.flags & MULTIPLE_KEY_FLAG)
1366 output <<
", MULTIPLE KEY";
1368 if (field.flags & BLOB_FLAG)
1371 if (field.flags & UNSIGNED_FLAG)
1372 output <<
", UNSIGNED";
1374 if (field.flags & BINARY_FLAG)
1375 output <<
", BINARY";
Field(unsigned char *ptr_arg, uint32_t length_arg, unsigned char *null_ptr_arg, unsigned char null_bit_arg, utype unireg_check_arg, const char *field_name_arg)
This is used as a table name when the table structure is not set up.
virtual uint32_t pack_length() const
virtual int store_time(type::Time <ime, type::timestamp_t t_type)
bool set_warning(DRIZZLE_ERROR::enum_warning_level, drizzled::error_t code, int cuted_increment)
static enum_field_types field_type_merge(enum_field_types, enum_field_types)
virtual uint32_t pack_length_in_rec() const
void * memdup(const void *, size_t)
Duplicate the provided block into memory allocated from within the specified Root.
static Item_result result_merge_type(enum_field_types)
TODO: Rename this file - func.h is stupid.
virtual unsigned char * pack(unsigned char *to, const unsigned char *from, uint32_t max_length, bool low_byte_first)
int64_t convert_decimal2int64_t(const type::Decimal *val, bool unsigned_flag, int *err)
virtual bool eq_def(Field *field)
virtual uint32_t used_length()
virtual uint32_t data_length()
virtual const unsigned char * unpack(unsigned char *to, const unsigned char *from, uint32_t param_data, bool low_byte_first)
int warn_if_overflow(int op_result)
static void store_length(unsigned char *to, uint32_t length, uint32_t pack_length)
Field * next_number_field
bool test_if_important_data(const charset_info_st *const cs, const char *str, const char *strend)
enum_field_types sql_type
static bool type_can_have_key_part(enum_field_types)
Field * clone(memory::Root *, Table *)
void set_datetime_warning(DRIZZLE_ERROR::enum_warning_level, drizzled::error_t code, const char *str, uint32_t str_len, type::timestamp_t ts_type, int cuted_increment)
virtual uint32_t max_data_length() const
bool eq_def(Field *field)