diff options
author | unknown <mhansson/martin@linux-st28.site> | 2007-03-22 13:37:27 +0100 |
---|---|---|
committer | unknown <mhansson/martin@linux-st28.site> | 2007-03-22 13:37:27 +0100 |
commit | a9df90a793f00220c226f41993ada3e822988e99 (patch) | |
tree | e1c6381af0d0fcf08d4385f28cca424972680193 /sql/item.cc | |
parent | 2b983572a7763914abeb61b8084e2f54d0de915d (diff) | |
parent | 5b86ad19da5811fe981e5a6768fb7aef206f9a88 (diff) | |
download | mariadb-git-a9df90a793f00220c226f41993ada3e822988e99.tar.gz |
Merge mhansson@bk-internal:/home/bk/mysql-5.0-opt
into linux-st28.site:/home/martin/mysql/src/5.0o-bug24791
sql/item.cc:
Auto merged
Diffstat (limited to 'sql/item.cc')
-rw-r--r-- | sql/item.cc | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/sql/item.cc b/sql/item.cc index 3174274b79f..96fde4eb704 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -6348,8 +6348,6 @@ Item_type_holder::Item_type_holder(THD *thd, Item *item) :Item(thd, item), enum_set_typelib(0), fld_type(get_real_type(item)) { DBUG_ASSERT(item->fixed); - - max_length= display_length(item); maybe_null= item->maybe_null; collation.set(item->collation); get_full_info(item); @@ -6521,11 +6519,17 @@ bool Item_type_holder::join_types(THD *thd, Item *item) { int delta1= max_length_orig - decimals_orig; int delta2= item->max_length - item->decimals; - if (fld_type == MYSQL_TYPE_DECIMAL) - max_length= max(delta1, delta2) + decimals; - else - max_length= min(max(delta1, delta2) + decimals, - (fld_type == MYSQL_TYPE_FLOAT) ? FLT_DIG+6 : DBL_DIG+7); + max_length= max(delta1, delta2) + decimals; + if (fld_type == MYSQL_TYPE_FLOAT && max_length > FLT_DIG + 2) + { + max_length= FLT_DIG + 6; + decimals= NOT_FIXED_DEC; + } + if (fld_type == MYSQL_TYPE_DOUBLE && max_length > DBL_DIG + 2) + { + max_length= DBL_DIG + 7; + decimals= NOT_FIXED_DEC; + } } else max_length= (fld_type == MYSQL_TYPE_FLOAT) ? FLT_DIG+6 : DBL_DIG+7; |