mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Merge svojtovich@bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/svoj/devel/mysql/yassl-mysql-5.0
This commit is contained in:
commit
baae624cdb
6 changed files with 38 additions and 12 deletions
|
@ -143,3 +143,6 @@ select format(col2,6) from t1 where col1=7;
|
|||
format(col2,6)
|
||||
1,234,567,890,123,456.123450
|
||||
drop table t1;
|
||||
select round(150, 2);
|
||||
round(150, 2)
|
||||
150.00
|
||||
|
|
|
@ -896,6 +896,14 @@ create table t1( d1 decimal(18) unsigned, d2 decimal(20) unsigned, d3 decimal (2
|
|||
insert into t1 values(1,-1,-1);
|
||||
ERROR 22003: Out of range value adjusted for column 'd2' at row 1
|
||||
drop table t1;
|
||||
create table t1 (col1 decimal(5,2), col2 numeric(5,2));
|
||||
insert into t1 values (999.999,999.999);
|
||||
ERROR 22003: Out of range value adjusted for column 'col1' at row 1
|
||||
insert into t1 values (-999.999,-999.999);
|
||||
ERROR 22003: Out of range value adjusted for column 'col1' at row 1
|
||||
select * from t1;
|
||||
col1 col2
|
||||
drop table t1;
|
||||
set sql_mode='';
|
||||
set @sav_dpi= @@div_precision_increment;
|
||||
set @@div_precision_increment=15;
|
||||
|
|
|
@ -79,3 +79,8 @@ insert into t1 values(7,1234567890123456.12345);
|
|||
select format(col2,6) from t1 where col1=7;
|
||||
drop table t1;
|
||||
|
||||
|
||||
#
|
||||
# Bug #10083 (round doesn't increase decimals)
|
||||
#
|
||||
select round(150, 2);
|
||||
|
|
|
@ -934,6 +934,13 @@ create table t1( d1 decimal(18) unsigned, d2 decimal(20) unsigned, d3 decimal (2
|
|||
--error 1264
|
||||
insert into t1 values(1,-1,-1);
|
||||
drop table t1;
|
||||
create table t1 (col1 decimal(5,2), col2 numeric(5,2));
|
||||
--error 1264
|
||||
insert into t1 values (999.999,999.999);
|
||||
--error 1264
|
||||
insert into t1 values (-999.999,-999.999);
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
set sql_mode='';
|
||||
|
||||
#
|
||||
|
|
|
@ -1876,7 +1876,8 @@ void Item_func_round::fix_length_and_dec()
|
|||
max_length= float_length(decimals);
|
||||
break;
|
||||
case INT_RESULT:
|
||||
if (truncate || (args[0]->decimal_precision() < DECIMAL_LONGLONG_DIGITS))
|
||||
if ((decimals_to_set==0) &&
|
||||
(truncate || (args[0]->decimal_precision() < DECIMAL_LONGLONG_DIGITS)))
|
||||
{
|
||||
/* Here we can keep INT_RESULT */
|
||||
hybrid_type= INT_RESULT;
|
||||
|
@ -1890,18 +1891,12 @@ void Item_func_round::fix_length_and_dec()
|
|||
hybrid_type= DECIMAL_RESULT;
|
||||
int decimals_delta= args[0]->decimals - decimals_to_set;
|
||||
int precision= args[0]->decimal_precision();
|
||||
if (decimals_delta > 0)
|
||||
{
|
||||
int length_increase= truncate ? 0:1;
|
||||
precision-= decimals_delta - length_increase;
|
||||
decimals= decimals_to_set;
|
||||
}
|
||||
else
|
||||
/* Decimals to set is bigger that the original scale */
|
||||
/* we keep original decimals value */
|
||||
decimals= args[0]->decimals;
|
||||
int length_increase= ((decimals_delta <= 0) || truncate) ? 0:1;
|
||||
|
||||
precision-= decimals_delta - length_increase;
|
||||
decimals= decimals_to_set;
|
||||
max_length= my_decimal_precision_to_length(precision, decimals,
|
||||
unsigned_flag);
|
||||
unsigned_flag);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
|
|
@ -1546,6 +1546,14 @@ decimal_round(decimal_t *from, decimal_t *to, int scale,
|
|||
*buf1=1;
|
||||
to->intg++;
|
||||
}
|
||||
/* Here we check 999.9 -> 1000 case when we need to increase intg */
|
||||
else
|
||||
{
|
||||
int first_dig= to->intg % DIG_PER_DEC1;
|
||||
/* first_dig==0 should be handled above in the 'if' */
|
||||
if (first_dig && (*buf1 >= powers10[first_dig]))
|
||||
to->intg++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue