mirror of
https://github.com/MariaDB/server.git
synced 2025-05-05 16:59:35 +03:00
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
188 lines
7.1 KiB
Plaintext
188 lines
7.1 KiB
Plaintext
SET @start_global_value = @@global.div_precision_increment;
|
|
SELECT @start_global_value;
|
|
@start_global_value
|
|
4
|
|
SET @start_session_value = @@session.div_precision_increment;
|
|
SELECT @start_session_value;
|
|
@start_session_value
|
|
4
|
|
'#--------------------FN_DYNVARS_027_01-------------------------#'
|
|
SET @@global.div_precision_increment = 100;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect div_precision_increment value: '100'
|
|
SET @@global.div_precision_increment = DEFAULT;
|
|
SELECT @@global.div_precision_increment;
|
|
@@global.div_precision_increment
|
|
4
|
|
SET @@session.div_precision_increment = 200;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect div_precision_increment value: '200'
|
|
SET @@session.div_precision_increment = DEFAULT;
|
|
SELECT @@session.div_precision_increment;
|
|
@@session.div_precision_increment
|
|
4
|
|
'#--------------------FN_DYNVARS_027_02-------------------------#'
|
|
SET @@global.div_precision_increment = @start_global_value;
|
|
SELECT @@global.div_precision_increment = 4;
|
|
@@global.div_precision_increment = 4
|
|
1
|
|
SET @@session.div_precision_increment = @start_session_value;
|
|
SELECT @@session.div_precision_increment = 4;
|
|
@@session.div_precision_increment = 4
|
|
1
|
|
'#--------------------FN_DYNVARS_027_03-------------------------#'
|
|
SET @@global.div_precision_increment = 1;
|
|
SELECT @@global.div_precision_increment;
|
|
@@global.div_precision_increment
|
|
1
|
|
SET @@global.div_precision_increment = 0;
|
|
SELECT @@global.div_precision_increment;
|
|
@@global.div_precision_increment
|
|
0
|
|
SET @@global.div_precision_increment = 10;
|
|
SELECT @@global.div_precision_increment;
|
|
@@global.div_precision_increment
|
|
10
|
|
SET @@global.div_precision_increment = 30;
|
|
SELECT @@global.div_precision_increment;
|
|
@@global.div_precision_increment
|
|
30
|
|
'#--------------------FN_DYNVARS_027_04-------------------------#'
|
|
SET @@session.div_precision_increment = 1;
|
|
SELECT @@session.div_precision_increment;
|
|
@@session.div_precision_increment
|
|
1
|
|
SET @@session.div_precision_increment = 0;
|
|
SELECT @@session.div_precision_increment;
|
|
@@session.div_precision_increment
|
|
0
|
|
SET @@session.div_precision_increment = 7;
|
|
SELECT @@session.div_precision_increment;
|
|
@@session.div_precision_increment
|
|
7
|
|
SET @@session.div_precision_increment = 30;
|
|
SELECT @@session.div_precision_increment;
|
|
@@session.div_precision_increment
|
|
30
|
|
'#------------------FN_DYNVARS_027_05-----------------------#'
|
|
SET @@global.div_precision_increment = 39;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect div_precision_increment value: '39'
|
|
SELECT @@global.div_precision_increment;
|
|
@@global.div_precision_increment
|
|
38
|
|
SET @@global.div_precision_increment = 50;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect div_precision_increment value: '50'
|
|
SELECT @@global.div_precision_increment;
|
|
@@global.div_precision_increment
|
|
38
|
|
SET @@global.div_precision_increment = -1024;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect div_precision_increment value: '-1024'
|
|
SELECT @@global.div_precision_increment;
|
|
@@global.div_precision_increment
|
|
0
|
|
SET @@global.div_precision_increment = 65536;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect div_precision_increment value: '65536'
|
|
SELECT @@global.div_precision_increment;
|
|
@@global.div_precision_increment
|
|
38
|
|
SET @@session.div_precision_increment = 50;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect div_precision_increment value: '50'
|
|
SELECT @@session.div_precision_increment;
|
|
@@session.div_precision_increment
|
|
38
|
|
SET @@session.div_precision_increment = 37;
|
|
SELECT @@session.div_precision_increment;
|
|
@@session.div_precision_increment
|
|
37
|
|
SET @@session.div_precision_increment = -2;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect div_precision_increment value: '-2'
|
|
SELECT @@session.div_precision_increment;
|
|
@@session.div_precision_increment
|
|
0
|
|
SET @@session.div_precision_increment = 65550;
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect div_precision_increment value: '65550'
|
|
SELECT @@session.div_precision_increment;
|
|
@@session.div_precision_increment
|
|
38
|
|
SET @@global.div_precision_increment = 65530.30;
|
|
ERROR 42000: Incorrect argument type to variable 'div_precision_increment'
|
|
SELECT @@global.div_precision_increment;
|
|
@@global.div_precision_increment
|
|
38
|
|
SET @@global.div_precision_increment = OFF;
|
|
ERROR 42000: Incorrect argument type to variable 'div_precision_increment'
|
|
SELECT @@global.div_precision_increment;
|
|
@@global.div_precision_increment
|
|
38
|
|
SET @@session.div_precision_increment = ON;
|
|
ERROR 42000: Incorrect argument type to variable 'div_precision_increment'
|
|
SELECT @@session.div_precision_increment;
|
|
@@session.div_precision_increment
|
|
38
|
|
SET @@session.div_precision_increment = 65530.30;
|
|
ERROR 42000: Incorrect argument type to variable 'div_precision_increment'
|
|
SELECT @@session.div_precision_increment;
|
|
@@session.div_precision_increment
|
|
38
|
|
'#------------------FN_DYNVARS_027_06-----------------------#'
|
|
SELECT @@global.div_precision_increment = VARIABLE_VALUE
|
|
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
|
WHERE VARIABLE_NAME='div_precision_increment';
|
|
@@global.div_precision_increment = VARIABLE_VALUE
|
|
1
|
|
'#------------------FN_DYNVARS_027_07-----------------------#'
|
|
SELECT @@session.div_precision_increment = VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='div_precision_increment';
|
|
@@session.div_precision_increment = VARIABLE_VALUE
|
|
1
|
|
SET @@global.div_precision_increment = TRUE;
|
|
SELECT @@global.div_precision_increment;
|
|
@@global.div_precision_increment
|
|
1
|
|
SET @@global.div_precision_increment = FALSE;
|
|
SELECT @@global.div_precision_increment;
|
|
@@global.div_precision_increment
|
|
0
|
|
'#---------------------FN_DYNVARS_027_08----------------------#'
|
|
SET @@global.div_precision_increment = 0;
|
|
SELECT @@div_precision_increment = @@global.div_precision_increment;
|
|
@@div_precision_increment = @@global.div_precision_increment
|
|
0
|
|
'#---------------------FN_DYNVARS_027_09----------------------#'
|
|
SET @@div_precision_increment = 1;
|
|
SELECT @@div_precision_increment = @@local.div_precision_increment;
|
|
@@div_precision_increment = @@local.div_precision_increment
|
|
1
|
|
SELECT @@local.div_precision_increment = @@session.div_precision_increment;
|
|
@@local.div_precision_increment = @@session.div_precision_increment
|
|
1
|
|
'#---------------------FN_DYNVARS_027_10----------------------#'
|
|
SET div_precision_increment = 1;
|
|
SELECT @@div_precision_increment;
|
|
@@div_precision_increment
|
|
1
|
|
SET local.div_precision_increment = 1;
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'div_precision_increment = 1' at line 1
|
|
SELECT local.div_precision_increment;
|
|
ERROR 42S02: Unknown table 'local' in field list
|
|
SET session.div_precision_increment = 1;
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'div_precision_increment = 1' at line 1
|
|
SELECT session.div_precision_increment;
|
|
ERROR 42S02: Unknown table 'session' in field list
|
|
SELECT div_precision_increment = @@session.div_precision_increment;
|
|
ERROR 42S22: Unknown column 'div_precision_increment' in 'field list'
|
|
SET @@global.div_precision_increment = @start_global_value;
|
|
SELECT @@global.div_precision_increment;
|
|
@@global.div_precision_increment
|
|
4
|
|
SET @@session.div_precision_increment = @start_session_value;
|
|
SELECT @@session.div_precision_increment;
|
|
@@session.div_precision_increment
|
|
4
|