1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

MDEV-19593 Split create_schema_table() into virtual methods in Type_handler

This commit is contained in:
Alexander Barkov
2019-05-25 11:40:48 +04:00
parent 0928596a8b
commit ac93d7d674
9 changed files with 750 additions and 468 deletions

View File

@ -81,6 +81,7 @@ struct TABLE;
struct SORT_FIELD_ATTR;
class Vers_history_point;
class Virtual_column_info;
struct ST_FIELD_INFO;
#define my_charset_numeric my_charset_latin1
@ -110,6 +111,34 @@ enum scalar_comparison_op
};
class Data_type_statistics
{
public:
uint m_uneven_bit_length;
uint m_fixed_string_total_length;
uint m_fixed_string_count;
uint m_variable_string_total_length;
uint m_variable_string_count;
uint m_blob_count;
Data_type_statistics()
:m_uneven_bit_length(0),
m_fixed_string_total_length(0),
m_fixed_string_count(0),
m_variable_string_total_length(0),
m_variable_string_count(0),
m_blob_count(0)
{ }
uint string_count() const
{
return m_fixed_string_count + m_variable_string_count;
}
uint string_total_length() const
{
return m_fixed_string_total_length + m_variable_string_total_length;
}
};
class Native: public Binary_string
{
public:
@ -3422,6 +3451,14 @@ public:
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE *table) const;
virtual Field *make_schema_field(TABLE *table,
const Record_addr &addr,
const ST_FIELD_INFO &def,
bool show_field) const
{
DBUG_ASSERT(0);
return NULL;
}
virtual Field *
make_table_field_from_def(TABLE_SHARE *share,
MEM_ROOT *mem_root,
@ -4192,6 +4229,10 @@ public:
}
bool subquery_type_allows_materialization(const Item *inner,
const Item *outer) const;
Field *make_schema_field(TABLE *table,
const Record_addr &addr,
const ST_FIELD_INFO &def,
bool show_field) const;
Field *make_num_distinct_aggregator_field(MEM_ROOT *, const Item *) const;
void make_sort_key(uchar *to, Item *item, const SORT_FIELD_ATTR *sort_field,
Sort_param *param) const;
@ -4759,6 +4800,10 @@ public:
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE *table) const;
Field *make_schema_field(TABLE *table,
const Record_addr &addr,
const ST_FIELD_INFO &def,
bool show_field) const;
Field *make_table_field_from_def(TABLE_SHARE *share,
MEM_ROOT *mem_root,
const LEX_CSTRING *name,
@ -4804,6 +4849,10 @@ public:
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE *table) const;
Field *make_schema_field(TABLE *table,
const Record_addr &addr,
const ST_FIELD_INFO &def,
bool show_field) const;
Field *make_table_field_from_def(TABLE_SHARE *share,
MEM_ROOT *mem_root,
const LEX_CSTRING *name,
@ -4849,6 +4898,10 @@ public:
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE *table) const;
Field *make_schema_field(TABLE *table,
const Record_addr &addr,
const ST_FIELD_INFO &def,
bool show_field) const;
Field *make_table_field_from_def(TABLE_SHARE *share,
MEM_ROOT *mem_root,
const LEX_CSTRING *name,
@ -4909,6 +4962,10 @@ public:
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE *table) const;
Field *make_schema_field(TABLE *table,
const Record_addr &addr,
const ST_FIELD_INFO &def,
bool show_field) const;
Field *make_table_field_from_def(TABLE_SHARE *share,
MEM_ROOT *mem_root,
const LEX_CSTRING *name,
@ -5108,6 +5165,10 @@ public:
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE *table) const;
Field *make_schema_field(TABLE *table,
const Record_addr &addr,
const ST_FIELD_INFO &def,
bool show_field) const;
Field *make_table_field_from_def(TABLE_SHARE *share,
MEM_ROOT *mem_root,
const LEX_CSTRING *name,
@ -5156,6 +5217,10 @@ public:
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE *table) const;
Field *make_schema_field(TABLE *table,
const Record_addr &addr,
const ST_FIELD_INFO &def,
bool show_field) const;
Field *make_table_field_from_def(TABLE_SHARE *share,
MEM_ROOT *mem_root,
const LEX_CSTRING *name,
@ -5188,6 +5253,10 @@ public:
{
return MYSQL_TIMESTAMP_TIME;
}
Field *make_schema_field(TABLE *table,
const Record_addr &addr,
const ST_FIELD_INFO &def,
bool show_field) const;
Item_literal *create_literal_item(THD *thd, const char *str, size_t length,
CHARSET_INFO *cs, bool send_error) const;
Item *create_typecast_item(THD *thd, Item *item,
@ -5353,6 +5422,10 @@ public:
{
return true;
}
Field *make_schema_field(TABLE *table,
const Record_addr &addr,
const ST_FIELD_INFO &def,
bool show_field) const;
Item_literal *create_literal_item(THD *thd, const char *str, size_t length,
CHARSET_INFO *cs, bool send_error) const;
Item *create_typecast_item(THD *thd, Item *item,
@ -5446,6 +5519,10 @@ public:
{
return true;
}
Field *make_schema_field(TABLE *table,
const Record_addr &addr,
const ST_FIELD_INFO &def,
bool show_field) const;
Item *create_typecast_item(THD *thd, Item *item,
const Type_cast_attributes &attr) const;
void Column_definition_implicit_upgrade(Column_definition *c) const;
@ -5817,6 +5894,10 @@ public:
const Record_addr &addr,
const Type_all_attributes &attr,
TABLE *table) const;
Field *make_schema_field(TABLE *table,
const Record_addr &addr,
const ST_FIELD_INFO &def,
bool show_field) const;
Field *make_table_field_from_def(TABLE_SHARE *share,
MEM_ROOT *mem_root,
const LEX_CSTRING *name,
@ -5925,6 +6006,7 @@ class Type_handler_blob_common: public Type_handler_longstr
{
public:
virtual ~Type_handler_blob_common() { }
virtual uint length_bytes() const= 0;
Field *make_conversion_table_field(TABLE *, uint metadata,
const Field *target) const;
const Type_handler *type_handler_for_tmp_table(const Item *item) const
@ -5955,6 +6037,10 @@ public:
Item **items, uint nitems) const;
void Item_param_setup_conversion(THD *thd, Item_param *) const;
Field *make_schema_field(TABLE *table,
const Record_addr &addr,
const ST_FIELD_INFO &def,
bool show_field) const;
Field *make_table_field_from_def(TABLE_SHARE *share,
MEM_ROOT *mem_root,
const LEX_CSTRING *name,
@ -5970,6 +6056,7 @@ class Type_handler_tiny_blob: public Type_handler_blob_common
static const Name m_name_tinyblob;
public:
virtual ~Type_handler_tiny_blob() {}
uint length_bytes() const { return 1; }
const Name name() const { return m_name_tinyblob; }
enum_field_types field_type() const { return MYSQL_TYPE_TINY_BLOB; }
uint32 calc_pack_length(uint32 length) const;
@ -5986,6 +6073,7 @@ class Type_handler_medium_blob: public Type_handler_blob_common
static const Name m_name_mediumblob;
public:
virtual ~Type_handler_medium_blob() {}
uint length_bytes() const { return 3; }
const Name name() const { return m_name_mediumblob; }
enum_field_types field_type() const { return MYSQL_TYPE_MEDIUM_BLOB; }
uint32 calc_pack_length(uint32 length) const;
@ -6002,6 +6090,7 @@ class Type_handler_long_blob: public Type_handler_blob_common
static const Name m_name_longblob;
public:
virtual ~Type_handler_long_blob() {}
uint length_bytes() const { return 4; }
const Name name() const { return m_name_longblob; }
enum_field_types field_type() const { return MYSQL_TYPE_LONG_BLOB; }
uint32 calc_pack_length(uint32 length) const;
@ -6020,6 +6109,7 @@ class Type_handler_blob: public Type_handler_blob_common
static const Name m_name_blob;
public:
virtual ~Type_handler_blob() {}
uint length_bytes() const { return 2; }
const Name name() const { return m_name_blob; }
enum_field_types field_type() const { return MYSQL_TYPE_BLOB; }
uint32 calc_pack_length(uint32 length) const;