summaryrefslogtreecommitdiff
path: root/mysql-test/t/type_float.test
diff options
context:
space:
mode:
authorMonty <monty@mariadb.org>2016-06-18 14:28:34 +0300
committerMonty <monty@mariadb.org>2016-06-22 22:04:55 +0300
commit34eb10e4064a7f38fc7d41016a6bcc5443ebe0c3 (patch)
tree45f76f02034419697e5bff5f539b20eaac8f8c8d /mysql-test/t/type_float.test
parente4062d4d203a6be596d3f61dfe4db1b4f91e24aa (diff)
downloadmariadb-git-34eb10e4064a7f38fc7d41016a6bcc5443ebe0c3.tar.gz
MDEV-10138 Support for decimals up to 38 digits
Decimals with float, double and decimal now works the following way: - DECIMAL_NOT_SPECIFIED is used when declaring DECIMALS without a firm number of decimals. It's only used in asserts and my_decimal_int_part. - FLOATING_POINT_DECIMALS (31) is used to mark that a FLOAT or DOUBLE was defined without decimals. This is regarded as a floating point value. - Max decimals allowed for FLOAT and DOUBLE is FLOATING_POINT_DECIMALS-1 - Clients assumes that float and double with decimals >= NOT_FIXED_DEC are floating point values (no decimals) - In the .frm decimals=FLOATING_POINT_DECIMALS are used to define floating point for float and double (31, like before) To ensure compatibility with old clients we do: - When storing float and double, we change NOT_FIXED_DEC to FLOATING_POINT_DECIMALS. - When creating fields from .frm we change for float and double FLOATING_POINT_DEC to NOT_FIXED_DEC - When sending definition for a float/decimal field without decimals to the client as part of a result set we convert NOT_FIXED_DEC to FLOATING_POINT_DECIMALS. - variance() and std() has changed to limit the decimals to FLOATING_POINT_DECIMALS -1 to not get the double converted floating point. (This was to preserve compatiblity) - FLOAT and DOUBLE still have 30 as max number of decimals. Bugs fixed: variance() printed more decimals than we support for double values. New behaviour: - Strings now have 38 decimals instead of 30 when converted to decimal - CREATE ... SELECT with a decimal with > 30 decimals will create a column with a smaller range than before as we are trying to preserve the number of decimals. Other changes - We are now using the obsolete bit FIELDFLAG_LEFT_FULLSCREEN to specify decimals > 31 - NOT_FIXED_DEC is now declared in one place - For clients, NOT_FIXED_DEC is always 31 (to ensure compatibility). On the server NOT_FIXED_DEC is DECIMAL_NOT_SPECIFIED (39) - AUTO_SEC_PART_DIGITS is taken from DECIMAL_NOT_SPECIFIED - DOUBLE conversion functions are now using DECIMAL_NOT_SPECIFIED instead of NOT_FIXED_DEC
Diffstat (limited to 'mysql-test/t/type_float.test')
-rw-r--r--mysql-test/t/type_float.test24
1 files changed, 24 insertions, 0 deletions
diff --git a/mysql-test/t/type_float.test b/mysql-test/t/type_float.test
index ec0256beeef..f54eacf0595 100644
--- a/mysql-test/t/type_float.test
+++ b/mysql-test/t/type_float.test
@@ -510,5 +510,29 @@ SELECT * FROM t1;
DROP TABLE t1,t2;
--echo #
+--echo # Test of using wrong scale
+--echo #
+
+create or replace table t1 (a double(40,30));
+--error ER_TOO_BIG_SCALE 1425
+create or replace table t1 (a double(40,31));
+create or replace table t1 as select 1.01e1;
+show create table t1;
+create or replace table t1 as select truncate(10.000000000001e1, 30) as t;
+show create table t1;
+create or replace table t1 as select truncate(10.000000000001e1, 31) as t;
+show create table t1;
+create or replace table t1 as select truncate(10.000000000001e1, 39) as t;
+show create table t1;
+create or replace table t1 as select truncate(10.000000000001e1, 51) as t;
+show create table t1;
+create or replace table t1 as select truncate(10.000000000001e1, 20)/2 as t;
+show create table t1;
+create or replace table t1 as select truncate(10.000000000001e1, 28)/2 as t;
+show create table t1;
+
+drop table if exists t1;
+
+--echo #
--echo # End of 10.2 tests
--echo #