summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <sergefp@mysql.com>2005-10-28 21:42:01 +0400
committerunknown <sergefp@mysql.com>2005-10-28 21:42:01 +0400
commitd5bb660640c9cb968469f38e2fa5a971782cf254 (patch)
tree206f1d6d385443db713dfe41b564690dda5015e0 /sql
parent61e2ed9c019805f695f7c12ffcb40b6b952086ab (diff)
parent115bf43602424f2bba326efab6d7ec51c66ac4e5 (diff)
downloadmariadb-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.cc12
-rw-r--r--sql/field.h8
-rw-r--r--sql/sql_table.cc4
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;