diff options
author | unknown <igor@olga.mysql.com> | 2007-07-07 17:29:19 -0700 |
---|---|---|
committer | unknown <igor@olga.mysql.com> | 2007-07-07 17:29:19 -0700 |
commit | 2e5be55ae946e43f03367db818e80a5a7a21c8c4 (patch) | |
tree | a266ee4367094cee4223e1d5c3b97d27b547f5bb | |
parent | a0336ad7d8f28b8de5a2b01ec285634952692abb (diff) | |
parent | 3561de50b1ef473ef9d82af53809b3fb84fa94c8 (diff) | |
download | mariadb-git-2e5be55ae946e43f03367db818e80a5a7a21c8c4.tar.gz |
Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into olga.mysql.com:/home/igor/dev-opt/mysql-5.1-opt
sql/field.cc:
Auto merged
mysql-test/r/type_newdecimal.result:
Manual merge
sql/item_create.cc:
Manual merge
mysql-test/t/type_newdecimal.test:
Manual merge.
-rw-r--r-- | mysql-test/t/type_newdecimal.test | 33 | ||||
-rw-r--r-- | sql/field.cc | 2 |
2 files changed, 35 insertions, 0 deletions
diff --git a/mysql-test/t/type_newdecimal.test b/mysql-test/t/type_newdecimal.test index e052ecfa82b..b1776d09744 100644 --- a/mysql-test/t/type_newdecimal.test +++ b/mysql-test/t/type_newdecimal.test @@ -1172,6 +1172,39 @@ drop table t1; # SELECT 1.000000000000 * 99.999999999998 / 100 a,1.000000000000 * (99.999999999998 / 100) b; + +# +# Bug #29415: CAST AS DECIMAL(P,S) with too big precision/scale +# + +SELECT CAST(1 AS decimal(65,10)); +--error ER_TOO_BIG_PRECISION +SELECT CAST(1 AS decimal(66,10)); + +SELECT CAST(1 AS decimal(65,30)); +--error ER_TOO_BIG_SCALE +SELECT CAST(1 AS decimal(65,31)); + +CREATE TABLE t1 (a int DEFAULT NULL, b int DEFAULT NULL); +INSERT INTO t1 VALUES (3,30), (1,10), (2,10); +SELECT a+CAST(1 AS decimal(65,30)) AS aa, SUM(b) FROM t1 GROUP BY aa; +--error ER_TOO_BIG_SCALE +SELECT a+CAST(1 AS decimal(65,31)) AS aa, SUM(b) FROM t1 GROUP BY aa; + +DROP TABLE t1; + +# +# Bug #29417: assertion abort for a grouping query with decimal user variable +# + +CREATE TABLE t1 (a int DEFAULT NULL, b int DEFAULT NULL); +INSERT INTO t1 VALUES (3,30), (1,10), (2,10); + +SET @a= CAST(1 AS decimal); +SELECT 1 FROM t1 GROUP BY @b := @a, @b; + +DROP TABLE t1; + --echo End of 5.0 tests # diff --git a/sql/field.cc b/sql/field.cc index 55a93ed46d6..20e5c71b4dc 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -2316,6 +2316,7 @@ Field_new_decimal::Field_new_decimal(uchar *ptr_arg, unireg_check_arg, field_name_arg, dec_arg, zero_arg, unsigned_arg) { precision= my_decimal_length_to_precision(len_arg, dec_arg, unsigned_arg); + set_if_smaller(precision, DECIMAL_MAX_PRECISION); DBUG_ASSERT((precision <= DECIMAL_MAX_PRECISION) && (dec <= DECIMAL_MAX_SCALE)); bin_size= my_decimal_get_binary_size(precision, dec); @@ -2332,6 +2333,7 @@ Field_new_decimal::Field_new_decimal(uint32 len_arg, NONE, name, dec_arg, 0, unsigned_arg) { precision= my_decimal_length_to_precision(len_arg, dec_arg, unsigned_arg); + set_if_smaller(precision, DECIMAL_MAX_PRECISION); DBUG_ASSERT((precision <= DECIMAL_MAX_PRECISION) && (dec <= DECIMAL_MAX_SCALE)); bin_size= my_decimal_get_binary_size(precision, dec); |