mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 05:52:27 +01:00
34eb10e406
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
73 lines
2.9 KiB
Text
73 lines
2.9 KiB
Text
drop table if exists t1;
|
|
drop database if exists mysqltest;
|
|
CREATE TABLE t1 (a INT, b INT, c INT, d INT);
|
|
INSERT INTO t1 VALUES (1,3,0,NULL),(2,2,0,NULL),(3,4,0,NULL),(4,2,0,NULL);
|
|
SELECT * FROM t1;
|
|
a b c d
|
|
1 3 0 NULL
|
|
2 2 0 NULL
|
|
3 4 0 NULL
|
|
4 2 0 NULL
|
|
UPDATE t1 SET c=LAST_VALUE(@last_a:=a,@last_b:=b,@last_c:=c,1), d=4211 WHERE c=0 ORDER BY b DESC LIMIT 1;
|
|
SELECT @last_a, @last_b, @last_c;
|
|
@last_a @last_b @last_c
|
|
3 4 0
|
|
SELECT * FROM t1;
|
|
a b c d
|
|
1 3 0 NULL
|
|
2 2 0 NULL
|
|
3 4 1 4211
|
|
4 2 0 NULL
|
|
DROP TABLE t1;
|
|
SELECT LAST_VALUE(@last_a:=1,@last_b:=1);
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def LAST_VALUE(@last_a:=1,@last_b:=1) 8 1 1 N 32897 0 63
|
|
LAST_VALUE(@last_a:=1,@last_b:=1)
|
|
1
|
|
select @last_b;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def @last_b 8 20 1 Y 32896 0 63
|
|
@last_b
|
|
1
|
|
SELECT LAST_VALUE(@last_a:=1,@last_b:=1.0);
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def LAST_VALUE(@last_a:=1,@last_b:=1.0) 246 4 3 N 32897 1 63
|
|
LAST_VALUE(@last_a:=1,@last_b:=1.0)
|
|
1.0
|
|
select @last_b;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def @last_b 246 83 3 Y 32896 38 63
|
|
@last_b
|
|
1.0
|
|
SELECT LAST_VALUE(@last_a:=1,@last_b:="hello");
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def LAST_VALUE(@last_a:=1,@last_b:="hello") 253 5 5 N 1 39 8
|
|
LAST_VALUE(@last_a:=1,@last_b:="hello")
|
|
hello
|
|
select @last_b;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def @last_b 250 16777215 5 Y 0 39 8
|
|
@last_b
|
|
hello
|
|
SELECT date(LAST_VALUE(@last_a:=1,@last_b:="2001-02-03"));
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def date(LAST_VALUE(@last_a:=1,@last_b:="2001-02-03")) 10 10 10 Y 128 0 63
|
|
date(LAST_VALUE(@last_a:=1,@last_b:="2001-02-03"))
|
|
2001-02-03
|
|
select @last_b;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def @last_b 250 16777215 10 Y 0 39 8
|
|
@last_b
|
|
2001-02-03
|
|
SELECT LAST_VALUE(@last_a:=1,@last_b:="2001-02-03",NULL);
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def LAST_VALUE(@last_a:=1,@last_b:="2001-02-03",NULL) 6 0 0 Y 32896 0 63
|
|
LAST_VALUE(@last_a:=1,@last_b:="2001-02-03",NULL)
|
|
NULL
|
|
select @last_b;
|
|
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
|
def @last_b 250 16777215 10 Y 0 39 8
|
|
@last_b
|
|
2001-02-03
|
|
SELECT LAST_VALUE();
|
|
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 ')' at line 1
|