lp:731124 Loss of precision on DISTINCT

many changes:
* NOT_FIXED_DEC now create hires fields, not old ones.
  As a result, temp tables preserve microseconds (on DISTINCT, GROUP BY)
* I_S tables force decimals=0 on temporal types (backward compatibility)
* Item_func_coalesce calculates decimals for temporal types
* no precision for TIME/DATETIME in CAST means 0, not NOT_FIXED_DEC
* addtime/timediff calculate decimals from arguments (not NOT_FIXED_DEC)

sql/field.h:
  NOT_FIXED_DEC now create hires fields, not old ones
sql/item.h:
  force decimals=0 for I_S tables
sql/item_cmpfunc.cc:
  Item_func_coalesce calculates decimals for temporal types
sql/item_create.cc:
  no precision for TIME/DATETIME in CAST means 0, not NOT_FIXED_DEC
sql/item_timefunc.cc:
  addtime calculates decimals from arguments (not NOT_FIXED_DEC)
sql/item_timefunc.h:
  timediff calculates decimals from arguments (not NOT_FIXED_DEC)
This commit is contained in:
Sergei Golubchik 2011-03-08 19:41:58 +01:00
commit 8b7fd8f577
11 changed files with 64 additions and 32 deletions

View file

@ -37,7 +37,7 @@ Table Create Table
t1 CREATE TABLE `t1` (
`sec_to_time(12345)` time DEFAULT NULL,
`sec_to_time(12345.6789)` time(4) DEFAULT NULL,
`sec_to_time(1234567e-2)` time DEFAULT NULL,
`sec_to_time(1234567e-2)` time(6) DEFAULT NULL,
`now()` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`curtime(0)` time NOT NULL DEFAULT '00:00:00',
`utc_timestamp(1)` datetime(1) NOT NULL DEFAULT '0000-00-00 00:00:00.0',
@ -52,7 +52,7 @@ t1 CREATE TABLE `t1` (
select * from t1;
sec_to_time(12345) 03:25:45
sec_to_time(12345.6789) 03:25:45.6789
sec_to_time(1234567e-2) 03:25:45
sec_to_time(1234567e-2) 03:25:45.670000
now() 2011-01-01 01:01:01
curtime(0) 01:01:01
utc_timestamp(1) 2010-12-31 22:01:01.1