From 775010a40dd4bbfe37e92df185dac3080e7b52ff Mon Sep 17 00:00:00 2001
From: "ramil@mysql.com" <>
Date: Tue, 19 Apr 2005 14:44:54 +0500
Subject: [PATCH] A fix (bug #9837: round(1, 6) delivers wrong value in create
 table context).

---
 mysql-test/r/func_math.result | 11 +++++++++++
 mysql-test/t/func_math.test   | 13 +++++++++++++
 sql/item_func.cc              |  2 ++
 3 files changed, 26 insertions(+)

diff --git a/mysql-test/r/func_math.result b/mysql-test/r/func_math.result
index 3a28cccfac..9cb1e4a56d 100644
--- a/mysql-test/r/func_math.result
+++ b/mysql-test/r/func_math.result
@@ -1,3 +1,4 @@
+drop table if exists t1;
 select floor(5.5),floor(-5.5);
 floor(5.5)	floor(-5.5)
 5	-6
@@ -126,3 +127,13 @@ Warnings:
 Note	1003	select degrees(pi()) AS `degrees(pi())`,radians(360) AS `radians(360)`
 select rand(rand);
 ERROR 42S22: Unknown column 'rand' in 'field list'
+create table t1 select round(1, 6);
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `round(1, 6)` double(7,6) NOT NULL default '0.000000'
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+select * from t1;
+round(1, 6)
+1.000000
+drop table t1;
diff --git a/mysql-test/t/func_math.test b/mysql-test/t/func_math.test
index 668aefc2d8..4c24dae8c5 100644
--- a/mysql-test/t/func_math.test
+++ b/mysql-test/t/func_math.test
@@ -2,6 +2,10 @@
 # Test of math functions
 #
 
+--disable_warnings                                                              
+drop table if exists t1;                                                        
+--enable_warnings                                                               
+
 select floor(5.5),floor(-5.5);
 explain extended select floor(5.5),floor(-5.5);
 select ceiling(5.5),ceiling(-5.5);
@@ -58,3 +62,12 @@ explain extended select degrees(pi()),radians(360);
 
 --error 1054
 select rand(rand);
+
+#
+# Bug #9837: problem with round()
+#
+
+create table t1 select round(1, 6);
+show create table t1;
+select * from t1;
+drop table t1;
diff --git a/sql/item_func.cc b/sql/item_func.cc
index eb6e395c26..2b38584fe2 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -1072,6 +1072,8 @@ void Item_func_round::fix_length_and_dec()
       decimals=0;
     else
       decimals=min(tmp,NOT_FIXED_DEC);
+    if ((tmp= decimals - args[0]->decimals) > 0)
+      max_length+= tmp;
   }
 }
 
-- 
2.30.9