diff options
author | Alexander Barkov <bar@mariadb.com> | 2019-10-01 23:41:03 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2019-10-01 23:41:03 +0400 |
commit | 9c031fc218f633f15f7be13c3c780f3a5760f7f0 (patch) | |
tree | d783f6d96d8126bfb40f6ecc1c7d8becb079f50b | |
parent | 4b5a76741eced5b3c39e8438f45d979136d58a33 (diff) | |
download | mariadb-git-9c031fc218f633f15f7be13c3c780f3a5760f7f0.tar.gz |
MDEV-20716 Unify make_table_field() and make_table_field_from_def() for integer and real types
-rw-r--r-- | sql/field.cc | 12 | ||||
-rw-r--r-- | sql/field.h | 1 | ||||
-rw-r--r-- | sql/sql_type.cc | 122 | ||||
-rw-r--r-- | sql/sql_type.h | 50 |
4 files changed, 39 insertions, 146 deletions
diff --git a/sql/field.cc b/sql/field.cc index 42576b8cb9c..373e8f51e5a 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -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. */ Column_definition::Column_definition(THD *thd, Field *old_field, diff --git a/sql/field.h b/sql/field.h index 27a4f18fa71..775bb4ad596 100644 --- a/sql/field.h +++ b/sql/field.h @@ -4806,6 +4806,7 @@ public: pack_flag(0) { } Column_definition_attributes(const Field *field); + Column_definition_attributes(const Type_all_attributes &attr); Field *make_field(TABLE_SHARE *share, MEM_ROOT *mem_root, const Record_addr *rec, const Type_handler *handler, diff --git a/sql/sql_type.cc b/sql/sql_type.cc index 753223f5f24..05cef27e0da 100644 --- a/sql/sql_type.cc +++ b/sql/sql_type.cc @@ -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 Record_addr &addr, const Type_all_attributes &attr, TABLE_SHARE *share) const { DBUG_ASSERT(is_unsigned() == attr.unsigned_flag); - return new (root) - Field_tiny(addr.ptr(), attr.max_char_length(), - addr.null_ptr(), addr.null_bit(), - 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); + Column_definition_attributes dattr(attr); + return make_table_field_from_def(share, root, name, addr, + Bit_addr(), &dattr, 0); } @@ -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, - const LEX_CSTRING *name, - const Record_addr &addr, - 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 +Field * +Type_handler_real_result::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_double(addr.ptr(), attr.max_char_length(), - addr.null_ptr(), addr.null_bit(), - Field::NONE, name, - (uint8) attr.decimals, 0/*zerofill*/, attr.unsigned_flag); + Column_definition_attributes dattr(attr); + return make_table_field_from_def(share, root, name, addr, + Bit_addr(), &dattr, 0); } @@ -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. */ DBUG_ASSERT(0); - return new (root) - Field_decimal(addr.ptr(), attr.max_length, - addr.null_ptr(), addr.null_bit(), - Field::NONE, name, (uint8) attr.decimals, - 0/*zerofill*/,attr.unsigned_flag); + Column_definition_attributes dattr(attr); + return make_table_field_from_def(share, root, name, addr, + Bit_addr(), &dattr, 0); } @@ -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, const LEX_CSTRING *name, const Record_addr &addr, diff --git a/sql/sql_type.h b/sql/sql_type.h index 998278ad69c..e5929e57225 100644 --- a/sql/sql_type.h +++ b/sql/sql_type.h @@ -4391,6 +4391,11 @@ public: } virtual ~Type_handler_real_result() {} 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, Column_definition *c, const Field *field) @@ -4751,6 +4756,11 @@ public: bool subquery_type_allows_materialization(const Item *inner, const Item *outer) 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, Sort_param *param) const override; void @@ -5122,11 +5132,6 @@ public: handler *file, ulonglong table_flags) const override { 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, TABLE *table, const Record_addr &addr, @@ -5181,11 +5186,6 @@ public: handler *file, ulonglong table_flags) const override { 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, TABLE *table, const Record_addr &addr, @@ -5240,11 +5240,6 @@ public: handler *file, ulonglong table_flags) const override { 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, TABLE *table, const Record_addr &addr, @@ -5315,11 +5310,6 @@ public: { 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, TABLE *table, const Record_addr &addr, @@ -5386,11 +5376,6 @@ public: handler *file, ulonglong table_flags) const override { 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, MEM_ROOT *mem_root, const LEX_CSTRING *name, @@ -5441,11 +5426,6 @@ public: handler *file, ulonglong table_flags) const override { 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, MEM_ROOT *mem_root, const LEX_CSTRING *name, @@ -5557,11 +5537,6 @@ public: handler *file, ulonglong table_flags) const override { 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, TABLE *table, const Record_addr &addr, @@ -5617,11 +5592,6 @@ public: handler *file, ulonglong table_flags) const override { 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, TABLE *table, const Record_addr &addr, |