Commit 24922a30 authored by unknown's avatar unknown

a fix (bug #7589: Decimal types are ignored when updating data from another column).


mysql-test/r/union.result:
  a fix (bug #7589: Decimal types are ignored when updating data from another column).
  removed wrong test result (see #13372)
mysql-test/t/union.test:
  a fix (bug #7589: Decimal types are ignored when updating data from another column).
  removed wrong test result (see #13372)
sql/field_conv.cc:
  a fix (bug #7589: Decimal types are ignored when updating data from another column).
  use memcpy() only for identical decimals.
parent 458a4234
...@@ -646,3 +646,12 @@ a ...@@ -646,3 +646,12 @@ a
9999.999 9999.999
0000.000 0000.000
drop table t1; drop table t1;
create table t1(a decimal(10,5), b decimal(10,1));
insert into t1 values(123.12345, 123.12345);
update t1 set b=a;
Warnings:
Warning 1265 Data truncated for column 'b' at row 1
select * from t1;
a b
123.12345 123.1
drop table t1;
...@@ -780,21 +780,6 @@ t1 CREATE TABLE `t1` ( ...@@ -780,21 +780,6 @@ t1 CREATE TABLE `t1` (
`b` longblob `b` longblob
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1,t2; drop table t1,t2;
create table t1 (d decimal(10,1));
create table t2 (d decimal(10,9));
insert into t1 values ("100000000.0");
insert into t2 values ("1.23456780");
create table t3 select * from t2 union select * from t1;
select * from t3;
d
1.234567800
100000000.0
show create table t3;
Table Create Table
t3 CREATE TABLE `t3` (
`d` decimal(10,9) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1,t2,t3;
create table t1 select 1 union select -1; create table t1 select 1 union select -1;
select * from t1; select * from t1;
1 1
......
...@@ -266,4 +266,14 @@ insert into t1 values ('1'),('+1'),('-1'),('0000000001'),('+0000000001'),('-0000 ...@@ -266,4 +266,14 @@ insert into t1 values ('1'),('+1'),('-1'),('0000000001'),('+0000000001'),('-0000
select * from t1; select * from t1;
drop table t1; drop table t1;
#
# Bug #7589: a problem with update from column
#
create table t1(a decimal(10,5), b decimal(10,1));
insert into t1 values(123.12345, 123.12345);
update t1 set b=a;
select * from t1;
drop table t1;
# End of 4.1 tests # End of 4.1 tests
...@@ -425,14 +425,6 @@ create table t1 SELECT b from t2 UNION select tx from t2; ...@@ -425,14 +425,6 @@ create table t1 SELECT b from t2 UNION select tx from t2;
select * from t1; select * from t1;
show create table t1; show create table t1;
drop table t1,t2; drop table t1,t2;
create table t1 (d decimal(10,1));
create table t2 (d decimal(10,9));
insert into t1 values ("100000000.0");
insert into t2 values ("1.23456780");
create table t3 select * from t2 union select * from t1;
select * from t3;
show create table t3;
drop table t1,t2,t3;
create table t1 select 1 union select -1; create table t1 select 1 union select -1;
select * from t1; select * from t1;
show create table t1; show create table t1;
......
...@@ -599,6 +599,9 @@ void field_conv(Field *to,Field *from) ...@@ -599,6 +599,9 @@ void field_conv(Field *to,Field *from)
!(to->flags & UNSIGNED_FLAG && !(from->flags & UNSIGNED_FLAG)) && !(to->flags & UNSIGNED_FLAG && !(from->flags & UNSIGNED_FLAG)) &&
to->real_type() != FIELD_TYPE_ENUM && to->real_type() != FIELD_TYPE_ENUM &&
to->real_type() != FIELD_TYPE_SET && to->real_type() != FIELD_TYPE_SET &&
(to->real_type() != FIELD_TYPE_DECIMAL ||
(to->field_length == from->field_length &&
(((Field_num*) to)->dec == ((Field_num*) from)->dec))) &&
from->charset() == to->charset() && from->charset() == to->charset() &&
to->table->db_low_byte_first == from->table->db_low_byte_first) to->table->db_low_byte_first == from->table->db_low_byte_first)
{ // Identical fields { // Identical fields
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment