summaryrefslogtreecommitdiff
path: root/sql/item.cc
diff options
context:
space:
mode:
authorunknown <mhansson/martin@linux-st28.site>2007-03-22 13:37:27 +0100
committerunknown <mhansson/martin@linux-st28.site>2007-03-22 13:37:27 +0100
commita9df90a793f00220c226f41993ada3e822988e99 (patch)
treee1c6381af0d0fcf08d4385f28cca424972680193 /sql/item.cc
parent2b983572a7763914abeb61b8084e2f54d0de915d (diff)
parent5b86ad19da5811fe981e5a6768fb7aef206f9a88 (diff)
downloadmariadb-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.cc18
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;