mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
Fix for bug #24558: Increasing decimal column length causes data loss
Altering to a decimal field we get double value then store it that may cause data loss. Fix: use store_decimal() instead.
This commit is contained in:
parent
433d3e6cf7
commit
ffed36222d
3 changed files with 28 additions and 0 deletions
|
@ -1423,3 +1423,11 @@ cast(19999999999999999999 as unsigned)
|
|||
18446744073709551615
|
||||
Warnings:
|
||||
Error 1292 Truncated incorrect DECIMAL value: ''
|
||||
create table t1(a decimal(18));
|
||||
insert into t1 values(123456789012345678);
|
||||
alter table t1 modify column a decimal(19);
|
||||
select * from t1;
|
||||
a
|
||||
123456789012345678
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -1120,3 +1120,14 @@ drop table t1;
|
|||
#
|
||||
select cast(19999999999999999999 as unsigned);
|
||||
|
||||
#
|
||||
# Bug #24558: Increasing decimal column length causes data loss
|
||||
#
|
||||
|
||||
create table t1(a decimal(18));
|
||||
insert into t1 values(123456789012345678);
|
||||
alter table t1 modify column a decimal(19);
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
|
|
@ -337,6 +337,13 @@ static void do_field_real(Copy_field *copy)
|
|||
}
|
||||
|
||||
|
||||
static void do_field_decimal(Copy_field *copy)
|
||||
{
|
||||
my_decimal value;
|
||||
copy->to_field->store_decimal(copy->from_field->val_decimal(&value));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
string copy for single byte characters set when to string is shorter than
|
||||
from string
|
||||
|
@ -581,6 +588,8 @@ void (*Copy_field::get_copy_func(Field *to,Field *from))(Copy_field*)
|
|||
if (to->real_type() == FIELD_TYPE_BIT ||
|
||||
from->real_type() == FIELD_TYPE_BIT)
|
||||
return do_field_int;
|
||||
if (to->result_type() == DECIMAL_RESULT)
|
||||
return do_field_decimal;
|
||||
// Check if identical fields
|
||||
if (from->result_type() == STRING_RESULT)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue