summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <ramil@mysql.com>2005-09-21 14:32:19 +0500
committerunknown <ramil@mysql.com>2005-09-21 14:32:19 +0500
commit24922a3092eb4d89e6b0f8c52ba7a0b29162758e (patch)
treef824a5e5b4454dcc84597a2412aedd6c130ccc61
parent458a4234e4ce764fdc40de8c46bee2a198151fb7 (diff)
downloadmariadb-git-24922a3092eb4d89e6b0f8c52ba7a0b29162758e.tar.gz
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.
-rw-r--r--mysql-test/r/type_decimal.result9
-rw-r--r--mysql-test/r/union.result15
-rw-r--r--mysql-test/t/type_decimal.test10
-rw-r--r--mysql-test/t/union.test8
-rw-r--r--sql/field_conv.cc3
5 files changed, 22 insertions, 23 deletions
diff --git a/mysql-test/r/type_decimal.result b/mysql-test/r/type_decimal.result
index a9dcabd121e..c3b2d5090ef 100644
--- a/mysql-test/r/type_decimal.result
+++ b/mysql-test/r/type_decimal.result
@@ -646,3 +646,12 @@ a
9999.999
0000.000
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;
diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result
index 1b5fa69d713..a3dd2c5c291 100644
--- a/mysql-test/r/union.result
+++ b/mysql-test/r/union.result
@@ -780,21 +780,6 @@ t1 CREATE TABLE `t1` (
`b` longblob
) ENGINE=MyISAM DEFAULT CHARSET=latin1
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;
select * from t1;
1
diff --git a/mysql-test/t/type_decimal.test b/mysql-test/t/type_decimal.test
index a6fd99e8c9a..1f133666910 100644
--- a/mysql-test/t/type_decimal.test
+++ b/mysql-test/t/type_decimal.test
@@ -266,4 +266,14 @@ insert into t1 values ('1'),('+1'),('-1'),('0000000001'),('+0000000001'),('-0000
select * from 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
diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test
index 6acccaeafd5..6a54909536a 100644
--- a/mysql-test/t/union.test
+++ b/mysql-test/t/union.test
@@ -425,14 +425,6 @@ create table t1 SELECT b from t2 UNION select tx from t2;
select * from t1;
show create table t1;
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;
select * from t1;
show create table t1;
diff --git a/sql/field_conv.cc b/sql/field_conv.cc
index 7998dd6d5f8..d61b3735c91 100644
--- a/sql/field_conv.cc
+++ b/sql/field_conv.cc
@@ -599,6 +599,9 @@ void field_conv(Field *to,Field *from)
!(to->flags & UNSIGNED_FLAG && !(from->flags & UNSIGNED_FLAG)) &&
to->real_type() != FIELD_TYPE_ENUM &&
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() &&
to->table->db_low_byte_first == from->table->db_low_byte_first)
{ // Identical fields