Commit 9c031fc2 authored by Alexander Barkov's avatar Alexander Barkov

MDEV-20716 Unify make_table_field() and make_table_field_from_def() for integer and real types

parent 4b5a7674
...@@ -10562,6 +10562,18 @@ Column_definition_attributes::Column_definition_attributes(const Field *field) ...@@ -10562,6 +10562,18 @@ Column_definition_attributes::Column_definition_attributes(const Field *field)
{} {}
Column_definition_attributes::
Column_definition_attributes(const Type_all_attributes &attr)
:length(attr.max_length),
decimals(attr.decimals),
unireg_check(Field::NONE),
interval(attr.get_typelib()),
charset(attr.collation.collation),
srid(0),
pack_flag(attr.unsigned_flag ? 0 : FIELDFLAG_DECIMAL)
{}
/** Create a field suitable for create of table. */ /** Create a field suitable for create of table. */
Column_definition::Column_definition(THD *thd, Field *old_field, Column_definition::Column_definition(THD *thd, Field *old_field,
......
...@@ -4806,6 +4806,7 @@ class Column_definition_attributes ...@@ -4806,6 +4806,7 @@ class Column_definition_attributes
pack_flag(0) pack_flag(0)
{ } { }
Column_definition_attributes(const Field *field); Column_definition_attributes(const Field *field);
Column_definition_attributes(const Type_all_attributes &attr);
Field *make_field(TABLE_SHARE *share, MEM_ROOT *mem_root, Field *make_field(TABLE_SHARE *share, MEM_ROOT *mem_root,
const Record_addr *rec, const Record_addr *rec,
const Type_handler *handler, const Type_handler *handler,
......
...@@ -3459,76 +3459,16 @@ Field *Type_handler::make_and_init_table_field(MEM_ROOT *root, ...@@ -3459,76 +3459,16 @@ Field *Type_handler::make_and_init_table_field(MEM_ROOT *root,
} }
Field *Type_handler_tiny::make_table_field(MEM_ROOT *root, Field *Type_handler_int_result::make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name, const LEX_CSTRING *name,
const Record_addr &addr, const Record_addr &addr,
const Type_all_attributes &attr, const Type_all_attributes &attr,
TABLE_SHARE *share) const TABLE_SHARE *share) const
{ {
DBUG_ASSERT(is_unsigned() == attr.unsigned_flag); DBUG_ASSERT(is_unsigned() == attr.unsigned_flag);
return new (root) Column_definition_attributes dattr(attr);
Field_tiny(addr.ptr(), attr.max_char_length(), return make_table_field_from_def(share, root, name, addr,
addr.null_ptr(), addr.null_bit(), Bit_addr(), &dattr, 0);
Field::NONE, name, 0/*zerofill*/, attr.unsigned_flag);
}
Field *Type_handler_short::make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const
{
DBUG_ASSERT(is_unsigned() == attr.unsigned_flag);
return new (root)
Field_short(addr.ptr(), attr.max_char_length(),
addr.null_ptr(), addr.null_bit(),
Field::NONE, name, 0/*zerofill*/, attr.unsigned_flag);
}
Field *Type_handler_int24::make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const
{
DBUG_ASSERT(is_unsigned() == attr.unsigned_flag);
return new (root)
Field_medium(addr.ptr(), attr.max_char_length(),
addr.null_ptr(), addr.null_bit(),
Field::NONE, name,
0/*zerofill*/, attr.unsigned_flag);
}
Field *Type_handler_long::make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const
{
DBUG_ASSERT(is_unsigned() == attr.unsigned_flag);
return new (root)
Field_long(addr.ptr(), attr.max_char_length(),
addr.null_ptr(), addr.null_bit(),
Field::NONE, name, 0/*zerofill*/, attr.unsigned_flag);
}
Field *Type_handler_longlong::make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const
{
DBUG_ASSERT(is_unsigned() == attr.unsigned_flag);
return new (root)
Field_longlong(addr.ptr(), attr.max_char_length(),
addr.null_ptr(), addr.null_bit(),
Field::NONE, name,
0/*zerofill*/, attr.unsigned_flag);
} }
...@@ -3547,31 +3487,16 @@ Field *Type_handler_vers_trx_id::make_table_field(MEM_ROOT *root, ...@@ -3547,31 +3487,16 @@ Field *Type_handler_vers_trx_id::make_table_field(MEM_ROOT *root,
} }
Field *Type_handler_float::make_table_field(MEM_ROOT *root, Field *
const LEX_CSTRING *name, Type_handler_real_result::make_table_field(MEM_ROOT *root,
const Record_addr &addr, const LEX_CSTRING *name,
const Type_all_attributes &attr, const Record_addr &addr,
TABLE_SHARE *share) const const Type_all_attributes &attr,
{ TABLE_SHARE *share) const
return new (root)
Field_float(addr.ptr(), attr.max_char_length(),
addr.null_ptr(), addr.null_bit(),
Field::NONE, name,
(uint8) attr.decimals, 0/*zerofill*/, attr.unsigned_flag);
}
Field *Type_handler_double::make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const
{ {
return new (root) Column_definition_attributes dattr(attr);
Field_double(addr.ptr(), attr.max_char_length(), return make_table_field_from_def(share, root, name, addr,
addr.null_ptr(), addr.null_bit(), Bit_addr(), &dattr, 0);
Field::NONE, name,
(uint8) attr.decimals, 0/*zerofill*/, attr.unsigned_flag);
} }
...@@ -3590,11 +3515,9 @@ Type_handler_olddecimal::make_table_field(MEM_ROOT *root, ...@@ -3590,11 +3515,9 @@ Type_handler_olddecimal::make_table_field(MEM_ROOT *root,
in make_field() in field.cc, to open old tables with old decimal. in make_field() in field.cc, to open old tables with old decimal.
*/ */
DBUG_ASSERT(0); DBUG_ASSERT(0);
return new (root) Column_definition_attributes dattr(attr);
Field_decimal(addr.ptr(), attr.max_length, return make_table_field_from_def(share, root, name, addr,
addr.null_ptr(), addr.null_bit(), Bit_addr(), &dattr, 0);
Field::NONE, name, (uint8) attr.decimals,
0/*zerofill*/,attr.unsigned_flag);
} }
...@@ -3646,19 +3569,6 @@ Type_handler_newdecimal::make_table_field(MEM_ROOT *root, ...@@ -3646,19 +3569,6 @@ Type_handler_newdecimal::make_table_field(MEM_ROOT *root,
} }
Field *Type_handler_year::make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const
{
return new (root)
Field_year(addr.ptr(), attr.max_length,
addr.null_ptr(), addr.null_bit(),
Field::NONE, name);
}
Field *Type_handler_null::make_table_field(MEM_ROOT *root, Field *Type_handler_null::make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name, const LEX_CSTRING *name,
const Record_addr &addr, const Record_addr &addr,
......
...@@ -4391,6 +4391,11 @@ class Type_handler_real_result: public Type_handler_numeric ...@@ -4391,6 +4391,11 @@ class Type_handler_real_result: public Type_handler_numeric
} }
virtual ~Type_handler_real_result() {} virtual ~Type_handler_real_result() {}
const Type_handler *type_handler_for_comparison() const override; const Type_handler *type_handler_for_comparison() const override;
Field *make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const override;
void Column_definition_reuse_fix_attributes(THD *thd, void Column_definition_reuse_fix_attributes(THD *thd,
Column_definition *c, Column_definition *c,
const Field *field) const Field *field)
...@@ -4751,6 +4756,11 @@ class Type_handler_int_result: public Type_handler_numeric ...@@ -4751,6 +4756,11 @@ class Type_handler_int_result: public Type_handler_numeric
bool subquery_type_allows_materialization(const Item *inner, bool subquery_type_allows_materialization(const Item *inner,
const Item *outer) const override; const Item *outer) const override;
Field *make_num_distinct_aggregator_field(MEM_ROOT *, const Item *) const override; Field *make_num_distinct_aggregator_field(MEM_ROOT *, const Item *) const override;
Field *make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const override;
void make_sort_key(uchar *to, Item *item, const SORT_FIELD_ATTR *sort_field, void make_sort_key(uchar *to, Item *item, const SORT_FIELD_ATTR *sort_field,
Sort_param *param) const override; Sort_param *param) const override;
void void
...@@ -5122,11 +5132,6 @@ class Type_handler_tiny: public Type_handler_general_purpose_int ...@@ -5122,11 +5132,6 @@ class Type_handler_tiny: public Type_handler_general_purpose_int
handler *file, handler *file,
ulonglong table_flags) const override ulonglong table_flags) const override
{ return Column_definition_prepare_stage2_legacy_num(c, MYSQL_TYPE_TINY); } { return Column_definition_prepare_stage2_legacy_num(c, MYSQL_TYPE_TINY); }
Field *make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const override;
Field *make_schema_field(MEM_ROOT *root, Field *make_schema_field(MEM_ROOT *root,
TABLE *table, TABLE *table,
const Record_addr &addr, const Record_addr &addr,
...@@ -5181,11 +5186,6 @@ class Type_handler_short: public Type_handler_general_purpose_int ...@@ -5181,11 +5186,6 @@ class Type_handler_short: public Type_handler_general_purpose_int
handler *file, handler *file,
ulonglong table_flags) const override ulonglong table_flags) const override
{ return Column_definition_prepare_stage2_legacy_num(c, MYSQL_TYPE_SHORT); } { return Column_definition_prepare_stage2_legacy_num(c, MYSQL_TYPE_SHORT); }
Field *make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const override;
Field *make_schema_field(MEM_ROOT *root, Field *make_schema_field(MEM_ROOT *root,
TABLE *table, TABLE *table,
const Record_addr &addr, const Record_addr &addr,
...@@ -5240,11 +5240,6 @@ class Type_handler_long: public Type_handler_general_purpose_int ...@@ -5240,11 +5240,6 @@ class Type_handler_long: public Type_handler_general_purpose_int
handler *file, handler *file,
ulonglong table_flags) const override ulonglong table_flags) const override
{ return Column_definition_prepare_stage2_legacy_num(c, MYSQL_TYPE_LONG); } { return Column_definition_prepare_stage2_legacy_num(c, MYSQL_TYPE_LONG); }
Field *make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const override;
Field *make_schema_field(MEM_ROOT *root, Field *make_schema_field(MEM_ROOT *root,
TABLE *table, TABLE *table,
const Record_addr &addr, const Record_addr &addr,
...@@ -5315,11 +5310,6 @@ class Type_handler_longlong: public Type_handler_general_purpose_int ...@@ -5315,11 +5310,6 @@ class Type_handler_longlong: public Type_handler_general_purpose_int
{ {
return Column_definition_prepare_stage2_legacy_num(c, MYSQL_TYPE_LONGLONG); return Column_definition_prepare_stage2_legacy_num(c, MYSQL_TYPE_LONGLONG);
} }
Field *make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const override;
Field *make_schema_field(MEM_ROOT *root, Field *make_schema_field(MEM_ROOT *root,
TABLE *table, TABLE *table,
const Record_addr &addr, const Record_addr &addr,
...@@ -5386,11 +5376,6 @@ class Type_handler_int24: public Type_handler_general_purpose_int ...@@ -5386,11 +5376,6 @@ class Type_handler_int24: public Type_handler_general_purpose_int
handler *file, handler *file,
ulonglong table_flags) const override ulonglong table_flags) const override
{ return Column_definition_prepare_stage2_legacy_num(c, MYSQL_TYPE_INT24); } { return Column_definition_prepare_stage2_legacy_num(c, MYSQL_TYPE_INT24); }
Field *make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const override;
Field *make_table_field_from_def(TABLE_SHARE *share, Field *make_table_field_from_def(TABLE_SHARE *share,
MEM_ROOT *mem_root, MEM_ROOT *mem_root,
const LEX_CSTRING *name, const LEX_CSTRING *name,
...@@ -5441,11 +5426,6 @@ class Type_handler_year: public Type_handler_int_result ...@@ -5441,11 +5426,6 @@ class Type_handler_year: public Type_handler_int_result
handler *file, handler *file,
ulonglong table_flags) const override ulonglong table_flags) const override
{ return Column_definition_prepare_stage2_legacy_num(c, MYSQL_TYPE_YEAR); } { return Column_definition_prepare_stage2_legacy_num(c, MYSQL_TYPE_YEAR); }
Field *make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const override;
Field *make_table_field_from_def(TABLE_SHARE *share, Field *make_table_field_from_def(TABLE_SHARE *share,
MEM_ROOT *mem_root, MEM_ROOT *mem_root,
const LEX_CSTRING *name, const LEX_CSTRING *name,
...@@ -5557,11 +5537,6 @@ class Type_handler_float: public Type_handler_real_result ...@@ -5557,11 +5537,6 @@ class Type_handler_float: public Type_handler_real_result
handler *file, handler *file,
ulonglong table_flags) const override ulonglong table_flags) const override
{ return Column_definition_prepare_stage2_legacy_real(c, MYSQL_TYPE_FLOAT); } { return Column_definition_prepare_stage2_legacy_real(c, MYSQL_TYPE_FLOAT); }
Field *make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const override;
Field *make_schema_field(MEM_ROOT *root, Field *make_schema_field(MEM_ROOT *root,
TABLE *table, TABLE *table,
const Record_addr &addr, const Record_addr &addr,
...@@ -5617,11 +5592,6 @@ class Type_handler_double: public Type_handler_real_result ...@@ -5617,11 +5592,6 @@ class Type_handler_double: public Type_handler_real_result
handler *file, handler *file,
ulonglong table_flags) const override ulonglong table_flags) const override
{ return Column_definition_prepare_stage2_legacy_real(c, MYSQL_TYPE_DOUBLE); } { return Column_definition_prepare_stage2_legacy_real(c, MYSQL_TYPE_DOUBLE); }
Field *make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE_SHARE *share) const override;
Field *make_schema_field(MEM_ROOT *root, Field *make_schema_field(MEM_ROOT *root,
TABLE *table, TABLE *table,
const Record_addr &addr, const Record_addr &addr,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment