summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <hf@deer.(none)>2005-06-08 14:17:42 +0500
committerunknown <hf@deer.(none)>2005-06-08 14:17:42 +0500
commitb5755ae60b2fac28f450edd64b1e98249d8660d8 (patch)
treea2a4181747d6a7b2b76b097fec6070b3b4b90c2f
parent46b323bcb0f6f5ab6307132bb052ba6ef1306fd5 (diff)
parent3eb21ef361283d52a5bce7c90ce1e62791d48647 (diff)
downloadmariadb-git-b5755ae60b2fac28f450edd64b1e98249d8660d8.tar.gz
Merge abotchkov@bk-internal.mysql.com:/home/bk/mysql-5.0
into deer.(none):/home/hf/work/mysql-5.0.9894
-rw-r--r--mysql-test/r/type_decimal.result12
-rw-r--r--mysql-test/r/type_newdecimal.result20
-rw-r--r--mysql-test/t/type_newdecimal.test21
-rw-r--r--sql/field.cc2
4 files changed, 47 insertions, 8 deletions
diff --git a/mysql-test/r/type_decimal.result b/mysql-test/r/type_decimal.result
index ab57caacc0f..93467d1d7da 100644
--- a/mysql-test/r/type_decimal.result
+++ b/mysql-test/r/type_decimal.result
@@ -414,8 +414,8 @@ Warning 1264 Out of range value adjusted for column 'a' at row 2
Warning 1264 Out of range value adjusted for column 'a' at row 7
select * from t1;
a
-9999999999
-9999999999
+0
+0
1
1
1
@@ -430,8 +430,8 @@ Warning 1264 Out of range value adjusted for column 'a' at row 2
Warning 1264 Out of range value adjusted for column 'a' at row 7
select * from t1;
a
-9999999999
-9999999999
+0000000000
+0000000000
0000000001
0000000001
0000000001
@@ -446,8 +446,8 @@ Warning 1264 Out of range value adjusted for column 'a' at row 2
Warning 1264 Out of range value adjusted for column 'a' at row 7
select * from t1;
a
-9999999999
-9999999999
+0000000000
+0000000000
0000000001
0000000001
0000000001
diff --git a/mysql-test/r/type_newdecimal.result b/mysql-test/r/type_newdecimal.result
index f03f2f5a862..09fbc6b8143 100644
--- a/mysql-test/r/type_newdecimal.result
+++ b/mysql-test/r/type_newdecimal.result
@@ -119,7 +119,7 @@ a
99.99
99.99
99.99
-99.99
+0.00
0.00
0.00
0.00
@@ -891,3 +891,21 @@ NULL
select abs(NULL);
abs(NULL)
NULL
+set @@sql_mode='traditional';
+create table t1( d1 decimal(18) unsigned, d2 decimal(20) unsigned, d3 decimal (22) unsigned);
+insert into t1 values(1,-1,-1);
+ERROR 22003: Out of range value adjusted for column 'd2' at row 1
+drop table t1;
+set @@div_precision_increment=15;
+create table t1 (col1 int, col2 decimal(30,25), col3 numeric(30,25));
+insert into t1 values (1,0.0123456789012345678912345,0.0123456789012345678912345);
+select col2/9999999999 from t1 where col1=1;
+col2/9999999999
+0.000000000001234567890246913578
+select 9999999999/col2 from t1 where col1=1;
+9999999999/col2
+810000007209.000065537105051
+select 77777777/7777777;
+77777777/7777777
+10.000000900000090
+drop table t1;
diff --git a/mysql-test/t/type_newdecimal.test b/mysql-test/t/type_newdecimal.test
index 0f7d20ed977..6bff6c22abc 100644
--- a/mysql-test/t/type_newdecimal.test
+++ b/mysql-test/t/type_newdecimal.test
@@ -925,3 +925,24 @@ DROP TABLE t1;
select abs(10/0);
select abs(NULL);
+
+#
+# Bug #9894 (negative to unsigned column)
+#
+set @@sql_mode='traditional';
+create table t1( d1 decimal(18) unsigned, d2 decimal(20) unsigned, d3 decimal (22) unsigned);
+--error 1264
+insert into t1 values(1,-1,-1);
+drop table t1;
+
+#
+# Bug #8425 (insufficient precision of the division)
+#
+set @@div_precision_increment=15;
+create table t1 (col1 int, col2 decimal(30,25), col3 numeric(30,25));
+insert into t1 values (1,0.0123456789012345678912345,0.0123456789012345678912345);
+select col2/9999999999 from t1 where col1=1;
+select 9999999999/col2 from t1 where col1=1;
+select 77777777/7777777;
+drop table t1;
+
diff --git a/sql/field.cc b/sql/field.cc
index 38fdfe4c3b3..a50190543b5 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -2446,7 +2446,7 @@ int Field_new_decimal::store(longlong nr)
int err;
if ((err= int2my_decimal(E_DEC_FATAL_ERROR & ~E_DEC_OVERFLOW,
- nr, unsigned_flag, &decimal_value)))
+ nr, false, &decimal_value)))
{
if (check_overflow(err))
set_value_on_overflow(&decimal_value, decimal_value.sign());