1--echo #
2--echo # Start of 10.5 tests
3--echo #
4
5--echo #
6--echo # MDEV-20305 Data loss on DOUBLE and DECIMAL conversion to INT
7--echo #
8
9DELIMITER $$;
10CREATE PROCEDURE p1(type VARCHAR(64), val VARCHAR(64))
11BEGIN
12  EXECUTE IMMEDIATE CONCAT('CREATE TABLE t1 (a ', type, ')');
13  SHOW CREATE TABLE t1;
14  EXECUTE IMMEDIATE CONCAT('INSERT INTO t1 VALUES (', val, ')');
15  SELECT
16    a,
17    ~a,
18    a & 18446744073709551615,
19    18446744073709551615 & a,
20    0 | a,
21    a | 0,
22    a << 0,
23    a >> 0,
24    a ^ 1,
25    1 ^ a,
26    BIT_COUNT(a)
27  FROM t1;
28  SHOW WARNINGS;
29  DROP TABLE t1;
30END;
31$$
32DELIMITER ;$$
33
34--vertical_results
35CALL p1('BIGINT UNSIGNED', 18446744073709551615);
36CALL p1('DOUBLE',          18446744073709551615);
37CALL p1('DECIMAL(30,0)',   18446744073709551615);
38
39CALL p1('BIGINT',          -1);
40CALL p1('DOUBLE',          -1);
41CALL p1('DECIMAL(30,0)',   -1);
42
43CALL p1('BIGINT',          -9223372036854775808);
44CALL p1('DOUBLE',          -9223372036854775808);
45CALL p1('DECIMAL(30,0)',   -9223372036854775808);
46--horizontal_results
47
48DROP PROCEDURE p1;
49
50
51SELECT CAST(CAST(18446744073709551615 AS UNSIGNED) AS DECIMAL(32))<<0 AS c1;
52SELECT CAST(CAST(18446744073709551615 AS UNSIGNED) AS DOUBLE)<<0 AS c1;
53
54SELECT COALESCE(CAST(CAST(0xFFFFFFFFFFFFFFFF AS UNSIGNED) AS DECIMAL(32))) << 0 AS c1;
55SELECT COALESCE(CAST(CAST(0xFFFFFFFFFFFFFFFF AS UNSIGNED) AS DOUBLE)) << 0 AS c1;
56
57SELECT 18446744073709551615 ^ 1 AS c1;
58SELECT 18446744073709551615.0 ^ 1 AS c1;
59SELECT 18446744073709551615e0 ^ 1 AS c1;
60
61SELECT LAST_VALUE(18446744073709551615) ^ 1 AS c1;
62SELECT LAST_VALUE(18446744073709551615.0) ^ 1 AS c1;
63SELECT LAST_VALUE(18446744073709551615e0) ^ 1 AS c1;
64
65SELECT 18446744073709551615 & 18446744073709551615 AS c1;
66SELECT 18446744073709551615 & 18446744073709551615.0 AS c1;
67SELECT 18446744073709551615 & 18446744073709551615e0 AS c1;
68SELECT 18446744073709551615.0 & 18446744073709551615 AS c1;
69SELECT 18446744073709551615.0 & 18446744073709551615.0 AS c1;
70SELECT 18446744073709551615.0 & 18446744073709551615e0 AS c1;
71SELECT 18446744073709551615e0 & 18446744073709551615 AS c1;
72SELECT 18446744073709551615e0 & 18446744073709551615.0 AS c1;
73SELECT 18446744073709551615e0 & 18446744073709551615e0 AS c1;
74
75
76SELECT 0 | 18446744073709551615 AS c1;
77SELECT 0 | 18446744073709551615.0 AS c1;
78SELECT 0 | 18446744073709551615e0 AS c1;
79SELECT 18446744073709551615 | 0 AS c1;
80SELECT 18446744073709551615.0 | 0 AS c1;
81SELECT 18446744073709551615e0 | 0 AS c1;
82
83SELECT ~18446744073709551615 AS c1;
84SELECT ~18446744073709551615.0 AS c1;
85SELECT ~18446744073709551615e0 AS c1;
86
87SELECT BIT_COUNT(18446744073709551615) AS c1;
88SELECT BIT_COUNT(18446744073709551615.0) AS c1;
89SELECT BIT_COUNT(18446744073709551615e0) AS c1;
90
91SELECT BIT_COUNT(-9223372036854775808) AS c1;
92SELECT BIT_COUNT(-9223372036854775808.0) AS c1;
93SELECT BIT_COUNT(-9223372036854775808e0) AS c1;
94
95--echo #
96--echo # End of 10.5 tests
97--echo #
98