Loading mysql-test/r/type_newdecimal.result +13 −5 Original line number Diff line number Diff line Loading @@ -1428,6 +1428,19 @@ f1 20101112000000.000014 101112.000000 drop table t1; select cast(19999999999999999999 as unsigned); 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 select cast(143.481 as decimal(4,1)); cast(143.481 as decimal(4,1)) 143.5 Loading Loading @@ -1455,8 +1468,3 @@ Error 1264 Out of range value for column 'cast(-13.4 as decimal(2,1))' at row 1 select cast(98.6 as decimal(2,0)); cast(98.6 as decimal(2,0)) 99 select cast(19999999999999999999 as unsigned); cast(19999999999999999999 as unsigned) 18446744073709551615 Warnings: Error 1292 Truncated incorrect DECIMAL value: '' mysql-test/t/type_newdecimal.test +16 −5 Original line number Diff line number Diff line Loading @@ -1126,6 +1126,22 @@ insert into t1 values (CAST('10:11:12' AS time)); select * from t1; drop table t1; # # Bug #8663 (cant use bigint as input to CAST) # 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 # # Bug#16172 DECIMAL data type processed incorrectly # Loading @@ -1136,8 +1152,3 @@ select cast(-3.4 as decimal(2,1)); select cast(99.6 as decimal(2,0)); select cast(-13.4 as decimal(2,1)); select cast(98.6 as decimal(2,0)); # Bug #8663 (cant use bigint as input to CAST) # select cast(19999999999999999999 as unsigned); sql/field_conv.cc +9 −0 Original line number Diff line number Diff line Loading @@ -336,6 +336,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 Loading Loading @@ -580,6 +587,8 @@ void (*Copy_field::get_copy_func(Field *to,Field *from))(Copy_field*) if (to->real_type() == MYSQL_TYPE_BIT || from->real_type() == MYSQL_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 Loading
mysql-test/r/type_newdecimal.result +13 −5 Original line number Diff line number Diff line Loading @@ -1428,6 +1428,19 @@ f1 20101112000000.000014 101112.000000 drop table t1; select cast(19999999999999999999 as unsigned); 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 select cast(143.481 as decimal(4,1)); cast(143.481 as decimal(4,1)) 143.5 Loading Loading @@ -1455,8 +1468,3 @@ Error 1264 Out of range value for column 'cast(-13.4 as decimal(2,1))' at row 1 select cast(98.6 as decimal(2,0)); cast(98.6 as decimal(2,0)) 99 select cast(19999999999999999999 as unsigned); cast(19999999999999999999 as unsigned) 18446744073709551615 Warnings: Error 1292 Truncated incorrect DECIMAL value: ''
mysql-test/t/type_newdecimal.test +16 −5 Original line number Diff line number Diff line Loading @@ -1126,6 +1126,22 @@ insert into t1 values (CAST('10:11:12' AS time)); select * from t1; drop table t1; # # Bug #8663 (cant use bigint as input to CAST) # 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 # # Bug#16172 DECIMAL data type processed incorrectly # Loading @@ -1136,8 +1152,3 @@ select cast(-3.4 as decimal(2,1)); select cast(99.6 as decimal(2,0)); select cast(-13.4 as decimal(2,1)); select cast(98.6 as decimal(2,0)); # Bug #8663 (cant use bigint as input to CAST) # select cast(19999999999999999999 as unsigned);
sql/field_conv.cc +9 −0 Original line number Diff line number Diff line Loading @@ -336,6 +336,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 Loading Loading @@ -580,6 +587,8 @@ void (*Copy_field::get_copy_func(Field *to,Field *from))(Copy_field*) if (to->real_type() == MYSQL_TYPE_BIT || from->real_type() == MYSQL_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