diff options
author | unknown <sergefp@mysql.com> | 2005-10-28 21:42:01 +0400 |
---|---|---|
committer | unknown <sergefp@mysql.com> | 2005-10-28 21:42:01 +0400 |
commit | d5bb660640c9cb968469f38e2fa5a971782cf254 (patch) | |
tree | 206f1d6d385443db713dfe41b564690dda5015e0 /sql | |
parent | 61e2ed9c019805f695f7c12ffcb40b6b952086ab (diff) | |
parent | 115bf43602424f2bba326efab6d7ec51c66ac4e5 (diff) | |
download | mariadb-git-d5bb660640c9cb968469f38e2fa5a971782cf254.tar.gz |
Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/home/psergey/mysql-4.1-bug14139
Diffstat (limited to 'sql')
-rw-r--r-- | sql/field.cc | 12 | ||||
-rw-r--r-- | sql/field.h | 8 | ||||
-rw-r--r-- | sql/sql_table.cc | 4 |
3 files changed, 22 insertions, 2 deletions
diff --git a/sql/field.cc b/sql/field.cc index 6d2f92e27ea..35dfa4cac18 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -6511,8 +6511,20 @@ bool Field_num::eq_def(Field *field) ** Handling of field and create_field *****************************************************************************/ +/* + Convert create_field::length from number of characters to number of bytes + + SYNOPSIS + create_field::create_length_to_internal_length() + + DESCRIPTION + Convert create_field::length from number of characters to number of bytes, + save original value in chars_length. +*/ + void create_field::create_length_to_internal_length(void) { + chars_length= length; switch (sql_type) { case MYSQL_TYPE_TINY_BLOB: case MYSQL_TYPE_MEDIUM_BLOB: diff --git a/sql/field.h b/sql/field.h index ba963418c7a..04f1bd68c7a 100644 --- a/sql/field.h +++ b/sql/field.h @@ -1180,7 +1180,15 @@ public: LEX_STRING comment; // Comment for field Item *def; // Default value enum enum_field_types sql_type; + /* + At various stages in execution this can be length of field in bytes or + max number of characters. + */ uint32 length; + /* + The value of 'length' before a call to create_length_to_internal_length + */ + uint32 chars_length; uint decimals,flags,pack_length; Field::utype unireg_check; TYPELIB *interval; // Which interval to use diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 01126043764..dcbc2018b49 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -643,8 +643,8 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, sql_field->charset= (dup_field->charset ? dup_field->charset : create_info->default_table_charset); - sql_field->length= dup_field->length; - sql_field->pack_length= dup_field->pack_length; + sql_field->length= dup_field->chars_length; + sql_field->pack_length= dup_field->pack_length; sql_field->create_length_to_internal_length(); sql_field->decimals= dup_field->decimals; sql_field->flags= dup_field->flags; |