summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.com>2019-10-01 23:41:03 +0400
committerAlexander Barkov <bar@mariadb.com>2019-10-01 23:41:03 +0400
commit9c031fc218f633f15f7be13c3c780f3a5760f7f0 (patch)
treed783f6d96d8126bfb40f6ecc1c7d8becb079f50b
parent4b5a76741eced5b3c39e8438f45d979136d58a33 (diff)
downloadmariadb-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.cc12
-rw-r--r--sql/field.h1
-rw-r--r--sql/sql_type.cc122
-rw-r--r--sql/sql_type.h50
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,