mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-20696 Remove Column_definition::key_length
This commit is contained in:
@ -10205,13 +10205,11 @@ void Column_definition::create_length_to_internal_length_bit()
|
||||
{
|
||||
if (f_bit_as_char(pack_flag))
|
||||
{
|
||||
key_length= pack_length= ((length + 7) & ~7) / 8;
|
||||
pack_length= ((length + 7) & ~7) / 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
pack_length= (uint) length / 8;
|
||||
/* We need one extra byte to store the bits we save among the null bits */
|
||||
key_length= pack_length + MY_TEST(length & 7);
|
||||
}
|
||||
}
|
||||
|
||||
@ -10220,7 +10218,7 @@ void Column_definition::create_length_to_internal_length_newdecimal()
|
||||
{
|
||||
DBUG_ASSERT(length < UINT_MAX32);
|
||||
uint prec= get_decimal_precision((uint)length, decimals, flags & UNSIGNED_FLAG);
|
||||
key_length= pack_length= my_decimal_get_binary_size(prec, decimals);
|
||||
pack_length= my_decimal_get_binary_size(prec, decimals);
|
||||
}
|
||||
|
||||
|
||||
@ -10572,7 +10570,6 @@ Column_definition::Column_definition(THD *thd, Field *old_field,
|
||||
field_name= old_field->field_name;
|
||||
flags= old_field->flags;
|
||||
pack_length=old_field->pack_length();
|
||||
key_length= old_field->key_length();
|
||||
set_handler(old_field->type_handler());
|
||||
comment= old_field->comment;
|
||||
decimals= old_field->decimals();
|
||||
@ -10657,7 +10654,6 @@ Column_definition::redefine_stage1_common(const Column_definition *dup_field,
|
||||
schema->default_table_charset;
|
||||
length= dup_field->char_length;
|
||||
pack_length= dup_field->pack_length;
|
||||
key_length= dup_field->key_length;
|
||||
decimals= dup_field->decimals;
|
||||
unireg_check= dup_field->unireg_check;
|
||||
flags= dup_field->flags;
|
||||
|
11
sql/field.h
11
sql/field.h
@ -4887,7 +4887,7 @@ public:
|
||||
for most of the types, or of bytes for BLOBs or numeric types.
|
||||
*/
|
||||
uint32 char_length;
|
||||
uint decimals, flags, pack_length, key_length;
|
||||
uint decimals, flags, pack_length;
|
||||
List<String> interval_list;
|
||||
engine_option_value *option_list;
|
||||
|
||||
@ -4911,7 +4911,7 @@ public:
|
||||
compression_method_ptr(0),
|
||||
comment(null_clex_str),
|
||||
on_update(NULL), invisible(VISIBLE), char_length(0), decimals(0),
|
||||
flags(0), pack_length(0), key_length(0),
|
||||
flags(0), pack_length(0),
|
||||
option_list(NULL),
|
||||
vcol_info(0), default_value(0), check_constraint(0),
|
||||
versioning(VERSIONING_NOT_SET), period(NULL)
|
||||
@ -4924,11 +4924,11 @@ public:
|
||||
void create_length_to_internal_length_null()
|
||||
{
|
||||
DBUG_ASSERT(length == 0);
|
||||
key_length= pack_length= 0;
|
||||
pack_length= 0;
|
||||
}
|
||||
void create_length_to_internal_length_simple()
|
||||
{
|
||||
key_length= pack_length= type_handler()->calc_pack_length((uint32) length);
|
||||
pack_length= type_handler()->calc_pack_length((uint32) length);
|
||||
}
|
||||
void create_length_to_internal_length_string()
|
||||
{
|
||||
@ -4936,14 +4936,12 @@ public:
|
||||
if (real_field_type() == MYSQL_TYPE_VARCHAR && compression_method())
|
||||
length++;
|
||||
set_if_smaller(length, UINT_MAX32);
|
||||
key_length= (uint) length;
|
||||
pack_length= type_handler()->calc_pack_length((uint32) length);
|
||||
}
|
||||
void create_length_to_internal_length_typelib()
|
||||
{
|
||||
/* Pack_length already calculated in sql_parse.cc */
|
||||
length*= charset->mbmaxlen;
|
||||
key_length= pack_length;
|
||||
}
|
||||
bool vers_sys_field() const
|
||||
{
|
||||
@ -5073,7 +5071,6 @@ public:
|
||||
decimals= other.decimals;
|
||||
flags= other.flags;
|
||||
pack_length= other.pack_length;
|
||||
key_length= other.key_length;
|
||||
unireg_check= other.unireg_check;
|
||||
interval= other.interval;
|
||||
charset= other.charset;
|
||||
|
@ -4054,7 +4054,8 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
|
||||
key_part_info->fieldnr= field;
|
||||
key_part_info->offset= (uint16) sql_field->offset;
|
||||
key_part_info->key_type=sql_field->pack_flag;
|
||||
uint key_part_length= sql_field->key_length;
|
||||
uint key_part_length= sql_field->type_handler()->
|
||||
calc_key_length(*sql_field);
|
||||
|
||||
if (column->length)
|
||||
{
|
||||
@ -4159,7 +4160,8 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
|
||||
key_info->flags|= HA_PACK_KEY;
|
||||
}
|
||||
/* Check if the key segment is partial, set the key flag accordingly */
|
||||
if (key_part_length != sql_field->key_length &&
|
||||
if (key_part_length != sql_field->type_handler()->
|
||||
calc_key_length(*sql_field) &&
|
||||
key_part_length != sql_field->type_handler()->max_octet_length())
|
||||
key_info->flags|= HA_KEY_HAS_PART_KEY_SEG;
|
||||
|
||||
@ -4500,7 +4502,7 @@ bool Column_definition::prepare_blob_field(THD *thd)
|
||||
set_handler(Type_handler::blob_type_handler((uint) length));
|
||||
pack_length= type_handler()->calc_pack_length(0);
|
||||
}
|
||||
length= key_length= 0;
|
||||
length= 0;
|
||||
}
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
@ -2920,15 +2920,6 @@ bool Type_handler_bit::
|
||||
|
||||
/*************************************************************************/
|
||||
|
||||
void Type_handler_blob_common::
|
||||
Column_definition_reuse_fix_attributes(THD *thd,
|
||||
Column_definition *def,
|
||||
const Field *field) const
|
||||
{
|
||||
DBUG_ASSERT(def->key_length == 0);
|
||||
}
|
||||
|
||||
|
||||
void Type_handler_typelib::
|
||||
Column_definition_reuse_fix_attributes(THD *thd,
|
||||
Column_definition *def,
|
||||
@ -3407,6 +3398,49 @@ uint32 Type_handler_enum::calc_pack_length(uint32 length) const
|
||||
}
|
||||
|
||||
|
||||
/*************************************************************************/
|
||||
uint Type_handler::calc_key_length(const Column_definition &def) const
|
||||
{
|
||||
DBUG_ASSERT(def.pack_length == calc_pack_length((uint32) def.length));
|
||||
return def.pack_length;
|
||||
}
|
||||
|
||||
uint Type_handler_bit::calc_key_length(const Column_definition &def) const
|
||||
{
|
||||
if (f_bit_as_char(def.pack_flag))
|
||||
return def.pack_length;
|
||||
/* We need one extra byte to store the bits we save among the null bits */
|
||||
return def.pack_length + MY_TEST(def.length & 7);
|
||||
}
|
||||
|
||||
uint Type_handler_newdecimal::calc_key_length(const Column_definition &def) const
|
||||
{
|
||||
return def.pack_length;
|
||||
}
|
||||
|
||||
uint
|
||||
Type_handler_string_result::calc_key_length(const Column_definition &def) const
|
||||
{
|
||||
return (uint) def.length;
|
||||
}
|
||||
|
||||
uint Type_handler_enum::calc_key_length(const Column_definition &def) const
|
||||
{
|
||||
DBUG_ASSERT(def.interval);
|
||||
return get_enum_pack_length(def.interval->count);
|
||||
}
|
||||
|
||||
uint Type_handler_set::calc_key_length(const Column_definition &def) const
|
||||
{
|
||||
DBUG_ASSERT(def.interval);
|
||||
return get_set_pack_length(def.interval->count);
|
||||
}
|
||||
|
||||
uint Type_handler_blob_common::calc_key_length(const Column_definition &def) const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
Field *Type_handler::make_and_init_table_field(MEM_ROOT *root,
|
||||
const LEX_CSTRING *name,
|
||||
|
@ -3645,6 +3645,7 @@ public:
|
||||
|
||||
virtual uint32 max_display_length(const Item *item) const= 0;
|
||||
virtual uint32 calc_pack_length(uint32 length) const= 0;
|
||||
virtual uint calc_key_length(const Column_definition &def) const;
|
||||
virtual void Item_update_null_value(Item *item) const= 0;
|
||||
virtual bool Item_save_in_value(THD *thd, Item *item, st_value *value) const= 0;
|
||||
virtual void Item_param_setup_conversion(THD *thd, Item_param *) const {}
|
||||
@ -4870,6 +4871,7 @@ public:
|
||||
const Type_std_attributes *item,
|
||||
SORT_FIELD_ATTR *attr) const override;
|
||||
bool union_element_finalize(const Item * item) const override;
|
||||
uint calc_key_length(const Column_definition &def) const override;
|
||||
bool Column_definition_prepare_stage1(THD *thd,
|
||||
MEM_ROOT *mem_root,
|
||||
Column_definition *c,
|
||||
@ -5405,6 +5407,7 @@ public:
|
||||
uint32 max_display_length(const Item *item) const override;
|
||||
uint32 max_display_length_for_field(const Conv_source &src) const override;
|
||||
uint32 calc_pack_length(uint32 length) const override { return length / 8; }
|
||||
uint calc_key_length(const Column_definition &def) const override;
|
||||
bool Item_send(Item *item, Protocol *protocol, st_value *buf) const override
|
||||
{
|
||||
return Item_send_str(item, protocol, buf);
|
||||
@ -6218,6 +6221,7 @@ public:
|
||||
enum_field_types field_type() const override { return MYSQL_TYPE_NEWDECIMAL; }
|
||||
uint32 max_display_length_for_field(const Conv_source &src) const override;
|
||||
uint32 calc_pack_length(uint32 length) const override;
|
||||
uint calc_key_length(const Column_definition &def) const override;
|
||||
void show_binlog_type(const Conv_source &src, const Field &, String *str)
|
||||
const override;
|
||||
Field *make_conversion_table_field(MEM_ROOT *root,
|
||||
@ -6501,11 +6505,8 @@ public:
|
||||
return false; // Materialization does not work with BLOB columns
|
||||
}
|
||||
bool is_param_long_data_type() const override { return true; }
|
||||
uint calc_key_length(const Column_definition &def) const override;
|
||||
bool Column_definition_fix_attributes(Column_definition *c) const override;
|
||||
void Column_definition_reuse_fix_attributes(THD *thd,
|
||||
Column_definition *c,
|
||||
const Field *field) const
|
||||
override;
|
||||
bool Column_definition_prepare_stage2(Column_definition *c,
|
||||
handler *file,
|
||||
ulonglong table_flags) const override;
|
||||
@ -6690,6 +6691,7 @@ public:
|
||||
return MYSQL_TYPE_ENUM;
|
||||
}
|
||||
uint32 calc_pack_length(uint32 length) const override;
|
||||
uint calc_key_length(const Column_definition &def) const override;
|
||||
Field *make_conversion_table_field(MEM_ROOT *root,
|
||||
TABLE *table, uint metadata,
|
||||
const Field *target)
|
||||
@ -6729,6 +6731,7 @@ public:
|
||||
return MYSQL_TYPE_SET;
|
||||
}
|
||||
uint32 calc_pack_length(uint32 length) const override;
|
||||
uint calc_key_length(const Column_definition &def) const override;
|
||||
Field *make_conversion_table_field(MEM_ROOT *root,
|
||||
TABLE *table, uint metadata,
|
||||
const Field *target)
|
||||
|
Reference in New Issue
Block a user