MySQL Lists are EOL. Please join:

List:Internals« Previous MessageNext Message »
From:holyfoot Date:November 3 2005 9:49am
Subject:bk commit into 5.0 tree (holyfoot:1.1955) BUG#14268
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of hf. When hf does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.1955 05/11/03 13:49:37 holyfoot@deer.(none) +3 -0
  Fix for bug #14268 (Bad FLOAT->DECIMAL conversion)

  strings/decimal.c
    1.64 05/11/03 13:47:02 holyfoot@stripped +1 -1
    i think that gives the proper precision

  mysql-test/t/type_newdecimal.test
    1.31 05/11/03 13:47:02 holyfoot@stripped +35 -0
    test case added

  mysql-test/r/type_newdecimal.result
    1.34 05/11/03 13:47:02 holyfoot@stripped +410 -0
    test result updated

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	holyfoot
# Host:	deer.(none)
# Root:	/home/hf/work/mysql-5.0.14268

--- 1.33/mysql-test/r/type_newdecimal.result	Fri Oct 28 22:16:37 2005
+++ 1.34/mysql-test/r/type_newdecimal.result	Thu Nov  3 13:47:02 2005
@@ -1021,3 +1021,413 @@
 NULL
 create table t (d decimal(0,10));
 ERROR 42000: For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column 'd').
+CREATE TABLE t1 (
+my_float   FLOAT,
+my_double  DOUBLE,
+my_varchar VARCHAR(50),
+my_decimal DECIMAL(65,30)
+);
+SHOW CREATE TABLE t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `my_float` float default NULL,
+  `my_double` double default NULL,
+  `my_varchar` varchar(50) default NULL,
+  `my_decimal` decimal(65,30) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+INSERT INTO t1 SET my_float = 1.175494345e-32,
+my_double = 1.175494345e-32,
+my_varchar = '1.175494345e-32';
+INSERT INTO t1 SET my_float = 1.175494345e-31,
+my_double = 1.175494345e-31,
+my_varchar = '1.175494345e-31';
+INSERT INTO t1 SET my_float = 1.175494345e-30,
+my_double = 1.175494345e-30,
+my_varchar = '1.175494345e-30';
+INSERT INTO t1 SET my_float = 1.175494345e-29,
+my_double = 1.175494345e-29,
+my_varchar = '1.175494345e-29';
+INSERT INTO t1 SET my_float = 1.175494345e-28,
+my_double = 1.175494345e-28,
+my_varchar = '1.175494345e-28';
+INSERT INTO t1 SET my_float = 1.175494345e-27,
+my_double = 1.175494345e-27,
+my_varchar = '1.175494345e-27';
+INSERT INTO t1 SET my_float = 1.175494345e-26,
+my_double = 1.175494345e-26,
+my_varchar = '1.175494345e-26';
+INSERT INTO t1 SET my_float = 1.175494345e-25,
+my_double = 1.175494345e-25,
+my_varchar = '1.175494345e-25';
+INSERT INTO t1 SET my_float = 1.175494345e-24,
+my_double = 1.175494345e-24,
+my_varchar = '1.175494345e-24';
+INSERT INTO t1 SET my_float = 1.175494345e-23,
+my_double = 1.175494345e-23,
+my_varchar = '1.175494345e-23';
+INSERT INTO t1 SET my_float = 1.175494345e-22,
+my_double = 1.175494345e-22,
+my_varchar = '1.175494345e-22';
+INSERT INTO t1 SET my_float = 1.175494345e-21,
+my_double = 1.175494345e-21,
+my_varchar = '1.175494345e-21';
+INSERT INTO t1 SET my_float = 1.175494345e-20,
+my_double = 1.175494345e-20,
+my_varchar = '1.175494345e-20';
+INSERT INTO t1 SET my_float = 1.175494345e-19,
+my_double = 1.175494345e-19,
+my_varchar = '1.175494345e-19';
+INSERT INTO t1 SET my_float = 1.175494345e-18,
+my_double = 1.175494345e-18,
+my_varchar = '1.175494345e-18';
+INSERT INTO t1 SET my_float = 1.175494345e-17,
+my_double = 1.175494345e-17,
+my_varchar = '1.175494345e-17';
+INSERT INTO t1 SET my_float = 1.175494345e-16,
+my_double = 1.175494345e-16,
+my_varchar = '1.175494345e-16';
+INSERT INTO t1 SET my_float = 1.175494345e-15,
+my_double = 1.175494345e-15,
+my_varchar = '1.175494345e-15';
+INSERT INTO t1 SET my_float = 1.175494345e-14,
+my_double = 1.175494345e-14,
+my_varchar = '1.175494345e-14';
+INSERT INTO t1 SET my_float = 1.175494345e-13,
+my_double = 1.175494345e-13,
+my_varchar = '1.175494345e-13';
+INSERT INTO t1 SET my_float = 1.175494345e-12,
+my_double = 1.175494345e-12,
+my_varchar = '1.175494345e-12';
+INSERT INTO t1 SET my_float = 1.175494345e-11,
+my_double = 1.175494345e-11,
+my_varchar = '1.175494345e-11';
+INSERT INTO t1 SET my_float = 1.175494345e-10,
+my_double = 1.175494345e-10,
+my_varchar = '1.175494345e-10';
+INSERT INTO t1 SET my_float = 1.175494345e-9,
+my_double = 1.175494345e-9,
+my_varchar = '1.175494345e-9';
+INSERT INTO t1 SET my_float = 1.175494345e-8,
+my_double = 1.175494345e-8,
+my_varchar = '1.175494345e-8';
+INSERT INTO t1 SET my_float = 1.175494345e-7,
+my_double = 1.175494345e-7,
+my_varchar = '1.175494345e-7';
+INSERT INTO t1 SET my_float = 1.175494345e-6,
+my_double = 1.175494345e-6,
+my_varchar = '1.175494345e-6';
+INSERT INTO t1 SET my_float = 1.175494345e-5,
+my_double = 1.175494345e-5,
+my_varchar = '1.175494345e-5';
+INSERT INTO t1 SET my_float = 1.175494345e-4,
+my_double = 1.175494345e-4,
+my_varchar = '1.175494345e-4';
+INSERT INTO t1 SET my_float = 1.175494345e-3,
+my_double = 1.175494345e-3,
+my_varchar = '1.175494345e-3';
+INSERT INTO t1 SET my_float = 1.175494345e-2,
+my_double = 1.175494345e-2,
+my_varchar = '1.175494345e-2';
+INSERT INTO t1 SET my_float = 1.175494345e-1,
+my_double = 1.175494345e-1,
+my_varchar = '1.175494345e-1';
+SELECT my_float, my_double, my_varchar FROM t1;
+my_float	my_double	my_varchar
+1.17549e-32	1.175494345e-32	1.175494345e-32
+1.17549e-31	1.175494345e-31	1.175494345e-31
+1.17549e-30	1.175494345e-30	1.175494345e-30
+1.17549e-29	1.175494345e-29	1.175494345e-29
+1.17549e-28	1.175494345e-28	1.175494345e-28
+1.17549e-27	1.175494345e-27	1.175494345e-27
+1.17549e-26	1.175494345e-26	1.175494345e-26
+1.17549e-25	1.175494345e-25	1.175494345e-25
+1.17549e-24	1.175494345e-24	1.175494345e-24
+1.17549e-23	1.175494345e-23	1.175494345e-23
+1.17549e-22	1.175494345e-22	1.175494345e-22
+1.17549e-21	1.175494345e-21	1.175494345e-21
+1.17549e-20	1.175494345e-20	1.175494345e-20
+1.17549e-19	1.175494345e-19	1.175494345e-19
+1.17549e-18	1.175494345e-18	1.175494345e-18
+1.17549e-17	1.175494345e-17	1.175494345e-17
+1.17549e-16	1.175494345e-16	1.175494345e-16
+1.17549e-15	1.175494345e-15	1.175494345e-15
+1.17549e-14	1.175494345e-14	1.175494345e-14
+1.17549e-13	1.175494345e-13	1.175494345e-13
+1.17549e-12	1.175494345e-12	1.175494345e-12
+1.17549e-11	1.175494345e-11	1.175494345e-11
+1.17549e-10	1.175494345e-10	1.175494345e-10
+1.17549e-09	1.175494345e-09	1.175494345e-9
+1.17549e-08	1.175494345e-08	1.175494345e-8
+1.17549e-07	1.175494345e-07	1.175494345e-7
+1.17549e-06	1.175494345e-06	1.175494345e-6
+1.17549e-05	1.175494345e-05	1.175494345e-5
+0.000117549	0.0001175494345	1.175494345e-4
+0.00117549	0.001175494345	1.175494345e-3
+0.0117549	0.01175494345	1.175494345e-2
+0.117549	0.1175494345	1.175494345e-1
+SELECT CAST(my_float   AS DECIMAL(65,30)), my_float FROM t1;
+CAST(my_float   AS DECIMAL(65,30))	my_float
+0.000000000000000000000000000000	1.17549e-32
+0.000000000000000000000000000000	1.17549e-31
+0.000000000000000000000000000001	1.17549e-30
+0.000000000000000000000000000012	1.17549e-29
+0.000000000000000000000000000118	1.17549e-28
+0.000000000000000000000000001175	1.17549e-27
+0.000000000000000000000000011755	1.17549e-26
+0.000000000000000000000000117549	1.17549e-25
+0.000000000000000000000001175494	1.17549e-24
+0.000000000000000000000011754943	1.17549e-23
+0.000000000000000000000117549438	1.17549e-22
+0.000000000000000000001175494332	1.17549e-21
+0.000000000000000000011754943324	1.17549e-20
+0.000000000000000000117549434853	1.17549e-19
+0.000000000000000001175494374380	1.17549e-18
+0.000000000000000011754943743802	1.17549e-17
+0.000000000000000117549432474939	1.17549e-16
+0.000000000000001175494324749389	1.17549e-15
+0.000000000000011754943671010360	1.17549e-14
+0.000000000000117549429933840000	1.17549e-13
+0.000000000001175494380653563000	1.17549e-12
+0.000000000011754943372854760000	1.17549e-11
+0.000000000117549428524377200000	1.17549e-10
+0.000000001175494368510499000000	1.17549e-09
+0.000000011754943685104990000000	1.17549e-08
+0.000000117549433298336200000000	1.17549e-07
+0.000001175494389826781000000000	1.17549e-06
+0.000011754943443520460000000000	1.17549e-05
+0.000117549432616215200000000000	0.000117549
+0.001175494398921728000000000000	0.00117549
+0.011754943057894710000000000000	0.0117549
+0.117549434304237400000000000000	0.117549
+SELECT CAST(my_double  AS DECIMAL(65,30)), my_double FROM t1;
+CAST(my_double  AS DECIMAL(65,30))	my_double
+0.000000000000000000000000000000	1.175494345e-32
+0.000000000000000000000000000000	1.175494345e-31
+0.000000000000000000000000000001	1.175494345e-30
+0.000000000000000000000000000012	1.175494345e-29
+0.000000000000000000000000000118	1.175494345e-28
+0.000000000000000000000000001175	1.175494345e-27
+0.000000000000000000000000011755	1.175494345e-26
+0.000000000000000000000000117549	1.175494345e-25
+0.000000000000000000000001175494	1.175494345e-24
+0.000000000000000000000011754943	1.175494345e-23
+0.000000000000000000000117549435	1.175494345e-22
+0.000000000000000000001175494345	1.175494345e-21
+0.000000000000000000011754943450	1.175494345e-20
+0.000000000000000000117549434500	1.175494345e-19
+0.000000000000000001175494345000	1.175494345e-18
+0.000000000000000011754943450000	1.175494345e-17
+0.000000000000000117549434500000	1.175494345e-16
+0.000000000000001175494345000000	1.175494345e-15
+0.000000000000011754943450000000	1.175494345e-14
+0.000000000000117549434500000000	1.175494345e-13
+0.000000000001175494345000000000	1.175494345e-12
+0.000000000011754943450000000000	1.175494345e-11
+0.000000000117549434500000000000	1.175494345e-10
+0.000000001175494345000000000000	1.175494345e-09
+0.000000011754943450000000000000	1.175494345e-08
+0.000000117549434500000000000000	1.175494345e-07
+0.000001175494345000000000000000	1.175494345e-06
+0.000011754943450000000000000000	1.175494345e-05
+0.000117549434500000000000000000	0.0001175494345
+0.001175494345000000000000000000	0.001175494345
+0.011754943450000000000000000000	0.01175494345
+0.117549434500000000000000000000	0.1175494345
+SELECT CAST(my_varchar AS DECIMAL(65,30)), my_varchar FROM t1;
+CAST(my_varchar AS DECIMAL(65,30))	my_varchar
+0.000000000000000000000000000000	1.175494345e-32
+0.000000000000000000000000000000	1.175494345e-31
+0.000000000000000000000000000001	1.175494345e-30
+0.000000000000000000000000000012	1.175494345e-29
+0.000000000000000000000000000118	1.175494345e-28
+0.000000000000000000000000001175	1.175494345e-27
+0.000000000000000000000000011755	1.175494345e-26
+0.000000000000000000000000117549	1.175494345e-25
+0.000000000000000000000001175494	1.175494345e-24
+0.000000000000000000000011754943	1.175494345e-23
+0.000000000000000000000117549435	1.175494345e-22
+0.000000000000000000001175494345	1.175494345e-21
+0.000000000000000000011754943450	1.175494345e-20
+0.000000000000000000117549434500	1.175494345e-19
+0.000000000000000001175494345000	1.175494345e-18
+0.000000000000000011754943450000	1.175494345e-17
+0.000000000000000117549434500000	1.175494345e-16
+0.000000000000001175494345000000	1.175494345e-15
+0.000000000000011754943450000000	1.175494345e-14
+0.000000000000117549434500000000	1.175494345e-13
+0.000000000001175494345000000000	1.175494345e-12
+0.000000000011754943450000000000	1.175494345e-11
+0.000000000117549434500000000000	1.175494345e-10
+0.000000001175494345000000000000	1.175494345e-9
+0.000000011754943450000000000000	1.175494345e-8
+0.000000117549434500000000000000	1.175494345e-7
+0.000001175494345000000000000000	1.175494345e-6
+0.000011754943450000000000000000	1.175494345e-5
+0.000117549434500000000000000000	1.175494345e-4
+0.001175494345000000000000000000	1.175494345e-3
+0.011754943450000000000000000000	1.175494345e-2
+0.117549434500000000000000000000	1.175494345e-1
+UPDATE t1 SET my_decimal = my_float;
+Warnings:
+Note	1265	Data truncated for column 'my_decimal' at row 1
+Note	1265	Data truncated for column 'my_decimal' at row 2
+Note	1265	Data truncated for column 'my_decimal' at row 3
+Note	1265	Data truncated for column 'my_decimal' at row 4
+Note	1265	Data truncated for column 'my_decimal' at row 5
+Note	1265	Data truncated for column 'my_decimal' at row 6
+Note	1265	Data truncated for column 'my_decimal' at row 7
+Note	1265	Data truncated for column 'my_decimal' at row 8
+Note	1265	Data truncated for column 'my_decimal' at row 9
+Note	1265	Data truncated for column 'my_decimal' at row 10
+Note	1265	Data truncated for column 'my_decimal' at row 11
+Note	1265	Data truncated for column 'my_decimal' at row 12
+Note	1265	Data truncated for column 'my_decimal' at row 13
+Note	1265	Data truncated for column 'my_decimal' at row 14
+Note	1265	Data truncated for column 'my_decimal' at row 15
+Note	1265	Data truncated for column 'my_decimal' at row 16
+Note	1265	Data truncated for column 'my_decimal' at row 17
+Note	1265	Data truncated for column 'my_decimal' at row 19
+Note	1265	Data truncated for column 'my_decimal' at row 20
+Note	1265	Data truncated for column 'my_decimal' at row 21
+Note	1265	Data truncated for column 'my_decimal' at row 22
+Note	1265	Data truncated for column 'my_decimal' at row 23
+Note	1265	Data truncated for column 'my_decimal' at row 26
+Note	1265	Data truncated for column 'my_decimal' at row 27
+Note	1265	Data truncated for column 'my_decimal' at row 30
+Note	1265	Data truncated for column 'my_decimal' at row 31
+Note	1265	Data truncated for column 'my_decimal' at row 32
+SELECT my_decimal, my_float   FROM t1;
+my_decimal	my_float
+0.000000000000000000000000000000	1.17549e-32
+0.000000000000000000000000000000	1.17549e-31
+0.000000000000000000000000000001	1.17549e-30
+0.000000000000000000000000000012	1.17549e-29
+0.000000000000000000000000000118	1.17549e-28
+0.000000000000000000000000001175	1.17549e-27
+0.000000000000000000000000011755	1.17549e-26
+0.000000000000000000000000117549	1.17549e-25
+0.000000000000000000000001175494	1.17549e-24
+0.000000000000000000000011754943	1.17549e-23
+0.000000000000000000000117549438	1.17549e-22
+0.000000000000000000001175494332	1.17549e-21
+0.000000000000000000011754943324	1.17549e-20
+0.000000000000000000117549434853	1.17549e-19
+0.000000000000000001175494374380	1.17549e-18
+0.000000000000000011754943743802	1.17549e-17
+0.000000000000000117549432474939	1.17549e-16
+0.000000000000001175494324749389	1.17549e-15
+0.000000000000011754943671010360	1.17549e-14
+0.000000000000117549429933840000	1.17549e-13
+0.000000000001175494380653563000	1.17549e-12
+0.000000000011754943372854760000	1.17549e-11
+0.000000000117549428524377200000	1.17549e-10
+0.000000001175494368510499000000	1.17549e-09
+0.000000011754943685104990000000	1.17549e-08
+0.000000117549433298336200000000	1.17549e-07
+0.000001175494389826781000000000	1.17549e-06
+0.000011754943443520460000000000	1.17549e-05
+0.000117549432616215200000000000	0.000117549
+0.001175494398921728000000000000	0.00117549
+0.011754943057894710000000000000	0.0117549
+0.117549434304237400000000000000	0.117549
+UPDATE t1 SET my_decimal = my_double;
+Warnings:
+Note	1265	Data truncated for column 'my_decimal' at row 1
+Note	1265	Data truncated for column 'my_decimal' at row 2
+Note	1265	Data truncated for column 'my_decimal' at row 3
+Note	1265	Data truncated for column 'my_decimal' at row 4
+Note	1265	Data truncated for column 'my_decimal' at row 5
+Note	1265	Data truncated for column 'my_decimal' at row 6
+Note	1265	Data truncated for column 'my_decimal' at row 7
+Note	1265	Data truncated for column 'my_decimal' at row 8
+Note	1265	Data truncated for column 'my_decimal' at row 9
+Note	1265	Data truncated for column 'my_decimal' at row 10
+Note	1265	Data truncated for column 'my_decimal' at row 11
+Note	1265	Data truncated for column 'my_decimal' at row 13
+Note	1265	Data truncated for column 'my_decimal' at row 14
+Note	1265	Data truncated for column 'my_decimal' at row 16
+Note	1265	Data truncated for column 'my_decimal' at row 18
+Note	1265	Data truncated for column 'my_decimal' at row 20
+Note	1265	Data truncated for column 'my_decimal' at row 31
+SELECT my_decimal, my_double  FROM t1;
+my_decimal	my_double
+0.000000000000000000000000000000	1.175494345e-32
+0.000000000000000000000000000000	1.175494345e-31
+0.000000000000000000000000000001	1.175494345e-30
+0.000000000000000000000000000012	1.175494345e-29
+0.000000000000000000000000000118	1.175494345e-28
+0.000000000000000000000000001175	1.175494345e-27
+0.000000000000000000000000011755	1.175494345e-26
+0.000000000000000000000000117549	1.175494345e-25
+0.000000000000000000000001175494	1.175494345e-24
+0.000000000000000000000011754943	1.175494345e-23
+0.000000000000000000000117549435	1.175494345e-22
+0.000000000000000000001175494345	1.175494345e-21
+0.000000000000000000011754943450	1.175494345e-20
+0.000000000000000000117549434500	1.175494345e-19
+0.000000000000000001175494345000	1.175494345e-18
+0.000000000000000011754943450000	1.175494345e-17
+0.000000000000000117549434500000	1.175494345e-16
+0.000000000000001175494345000000	1.175494345e-15
+0.000000000000011754943450000000	1.175494345e-14
+0.000000000000117549434500000000	1.175494345e-13
+0.000000000001175494345000000000	1.175494345e-12
+0.000000000011754943450000000000	1.175494345e-11
+0.000000000117549434500000000000	1.175494345e-10
+0.000000001175494345000000000000	1.175494345e-09
+0.000000011754943450000000000000	1.175494345e-08
+0.000000117549434500000000000000	1.175494345e-07
+0.000001175494345000000000000000	1.175494345e-06
+0.000011754943450000000000000000	1.175494345e-05
+0.000117549434500000000000000000	0.0001175494345
+0.001175494345000000000000000000	0.001175494345
+0.011754943450000000000000000000	0.01175494345
+0.117549434500000000000000000000	0.1175494345
+UPDATE t1 SET my_decimal = my_varchar;
+Warnings:
+Note	1265	Data truncated for column 'my_decimal' at row 1
+Note	1265	Data truncated for column 'my_decimal' at row 2
+Note	1265	Data truncated for column 'my_decimal' at row 3
+Note	1265	Data truncated for column 'my_decimal' at row 4
+Note	1265	Data truncated for column 'my_decimal' at row 5
+Note	1265	Data truncated for column 'my_decimal' at row 6
+Note	1265	Data truncated for column 'my_decimal' at row 7
+Note	1265	Data truncated for column 'my_decimal' at row 8
+Note	1265	Data truncated for column 'my_decimal' at row 9
+Note	1265	Data truncated for column 'my_decimal' at row 10
+Note	1265	Data truncated for column 'my_decimal' at row 11
+SELECT my_decimal, my_varchar FROM t1;
+my_decimal	my_varchar
+0.000000000000000000000000000000	1.175494345e-32
+0.000000000000000000000000000000	1.175494345e-31
+0.000000000000000000000000000001	1.175494345e-30
+0.000000000000000000000000000012	1.175494345e-29
+0.000000000000000000000000000118	1.175494345e-28
+0.000000000000000000000000001175	1.175494345e-27
+0.000000000000000000000000011755	1.175494345e-26
+0.000000000000000000000000117549	1.175494345e-25
+0.000000000000000000000001175494	1.175494345e-24
+0.000000000000000000000011754943	1.175494345e-23
+0.000000000000000000000117549435	1.175494345e-22
+0.000000000000000000001175494345	1.175494345e-21
+0.000000000000000000011754943450	1.175494345e-20
+0.000000000000000000117549434500	1.175494345e-19
+0.000000000000000001175494345000	1.175494345e-18
+0.000000000000000011754943450000	1.175494345e-17
+0.000000000000000117549434500000	1.175494345e-16
+0.000000000000001175494345000000	1.175494345e-15
+0.000000000000011754943450000000	1.175494345e-14
+0.000000000000117549434500000000	1.175494345e-13
+0.000000000001175494345000000000	1.175494345e-12
+0.000000000011754943450000000000	1.175494345e-11
+0.000000000117549434500000000000	1.175494345e-10
+0.000000001175494345000000000000	1.175494345e-9
+0.000000011754943450000000000000	1.175494345e-8
+0.000000117549434500000000000000	1.175494345e-7
+0.000001175494345000000000000000	1.175494345e-6
+0.000011754943450000000000000000	1.175494345e-5
+0.000117549434500000000000000000	1.175494345e-4
+0.001175494345000000000000000000	1.175494345e-3
+0.011754943450000000000000000000	1.175494345e-2
+0.117549434500000000000000000000	1.175494345e-1
+DROP TABLE t1;

--- 1.30/mysql-test/t/type_newdecimal.test	Tue Oct 11 21:16:46 2005
+++ 1.31/mysql-test/t/type_newdecimal.test	Thu Nov  3 13:47:02 2005
@@ -1050,3 +1050,38 @@
 #
 --error 1427
 create table t (d decimal(0,10));
+
+#
+# Bug #14268 (bad FLOAT->DECIMAL conversion)
+#
+
+CREATE TABLE t1 (
+   my_float   FLOAT,
+   my_double  DOUBLE,
+   my_varchar VARCHAR(50),
+   my_decimal DECIMAL(65,30)
+);
+SHOW CREATE TABLE t1;
+
+let $max_power= 32;
+while ($max_power)
+{
+   eval INSERT INTO t1 SET my_float = 1.175494345e-$max_power,
+                           my_double = 1.175494345e-$max_power,
+                           my_varchar = '1.175494345e-$max_power';
+   dec $max_power;
+}
+SELECT my_float, my_double, my_varchar FROM t1;
+
+SELECT CAST(my_float   AS DECIMAL(65,30)), my_float FROM t1;
+SELECT CAST(my_double  AS DECIMAL(65,30)), my_double FROM t1;
+SELECT CAST(my_varchar AS DECIMAL(65,30)), my_varchar FROM t1;
+
+UPDATE t1 SET my_decimal = my_float;
+SELECT my_decimal, my_float   FROM t1;
+UPDATE t1 SET my_decimal = my_double;
+SELECT my_decimal, my_double  FROM t1;
+UPDATE t1 SET my_decimal = my_varchar;
+SELECT my_decimal, my_varchar FROM t1;
+
+DROP TABLE t1;

--- 1.63/strings/decimal.c	Sat Oct  8 04:48:58 2005
+++ 1.64/strings/decimal.c	Thu Nov  3 13:47:02 2005
@@ -973,7 +973,7 @@
 {
   /* TODO: fix it, when we'll have dtoa */
   char s[400], *end;
-  sprintf(s, "%f", from);
+  sprintf(s, "%.16G", from);
   end= strend(s);
   return string2decimal(s, to, &end);
 }
Thread
bk commit into 5.0 tree (holyfoot:1.1955) BUG#14268holyfoot3 Nov