1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-29 08:21:15 +03:00

[MCOL-5205] Fix bug from union type in UNION processing.

This patch fixs the reported JIRA issue MCOL 5205, which consists of a wrong union type from two input Int types. The bug results in wrong unioned answers in CS. The fix includes more INT case discussions. Additionaly, this patch provides detailed unit tests for correctness in UNION processing with Int.

Signed-off-by: Jigao Luo <luojigao@outlook.com>
This commit is contained in:
Jigao Luo
2022-09-09 22:54:35 +02:00
parent e000236af7
commit 6c4af1461f
4 changed files with 1054 additions and 47 deletions

View File

@ -6,21 +6,639 @@ USE mcs_union;
# MCOL-4700 Wrong result of a UNION for INT and INT UNSIGNED
#
CREATE TABLE t1 (a INT, b INT UNSIGNED);
INSERT INTO t1 VALUES (-1,1);
INSERT INTO t1 VALUES (-1, 1), (-1, 1), (-2, 2);
SELECT * FROM (SELECT * FROM t1 UNION SELECT * FROM t1) tu ORDER BY b;
a b
-1 1
-2 2
SELECT * FROM (SELECT a FROM t1 UNION SELECT b FROM t1) tu ORDER BY a;
a
-2
-1
1
2
SELECT * FROM (SELECT b FROM t1 UNION SELECT a FROM t1) tu ORDER BY b;
b
-2
-1
1
2
DROP TABLE t1;
#
# Multiple Columns Union
#
CREATE TABLE t1 (a INT, b INT, c INT);
INSERT INTO t1 VALUES (-1, 1, 0), (-2, 2, 0), (-3, 3, 0), (-4, 4, 0), (-5, 5, 0), (-1, 1, 0), (-2, 2, 0), (-3, 3, 0), (-4, 4, 0), (-5, 5, 0);
SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t1) tu ORDER BY b;
a b c
-1 1 0
-1 1 0
-1 1 0
-1 1 0
-2 2 0
-2 2 0
-2 2 0
-2 2 0
-3 3 0
-3 3 0
-3 3 0
-3 3 0
-4 4 0
-4 4 0
-4 4 0
-4 4 0
-5 5 0
-5 5 0
-5 5 0
-5 5 0
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT b FROM t1) tu ORDER BY a;
a
-5
-5
-4
-4
-3
-3
-2
-2
-1
-1
1
1
2
2
3
3
4
4
5
5
SELECT * FROM (SELECT b FROM t1 UNION ALL SELECT a FROM t1) tu ORDER BY b;
b
-5
-5
-4
-4
-3
-3
-2
-2
-1
-1
1
1
2
2
3
3
4
4
5
5
DROP TABLE t1;
#
# Same Int Type Union
#
CREATE TABLE t1 (a INT UNSIGNED, b INT UNSIGNED);
INSERT INTO t1 VALUES (1, 1), (1, 1), (2, 1), (2, 1), (3, 2), (4, 2), (5, 2);
SELECT * FROM (SELECT a FROM t1 UNION SELECT b FROM t1) tu ORDER BY a;
a
1
2
3
4
5
SELECT * FROM (SELECT b FROM t1 UNION SELECT a FROM t1) tu ORDER BY b;
b
1
2
3
4
5
SELECT * FROM (SELECT * FROM t1 UNION SELECT * FROM t1) tu ORDER BY a;
a b
1 1
2 1
3 2
4 2
5 2
DROP TABLE t1;
CREATE TABLE t1 (a INT, b INT);
INSERT INTO t1 VALUES (-1, -1), (-1, -1), (2, 1), (2, 1), (3, 2), (4, 2), (5, 2);
SELECT * FROM (SELECT a FROM t1 UNION SELECT b FROM t1) tu ORDER BY a;
a
-1
1
2
3
4
5
SELECT * FROM (SELECT b FROM t1 UNION SELECT a FROM t1) tu ORDER BY b;
b
-1
1
2
3
4
5
SELECT * FROM (SELECT * FROM t1 UNION SELECT * FROM t1) tu ORDER BY a;
a b
-1 -1
2 1
3 2
4 2
5 2
DROP TABLE t1;
#
# Signed Int Union
#
CREATE TABLE t1 (a TINYINT);
INSERT INTO t1 VALUES (CAST(0xFFFFFFFFFFFFFF80 AS SIGNED)+2),(-1),(0),(1),(0x7F);
CREATE TABLE t2 (a SMALLINT);
INSERT INTO t2 VALUES (CAST(0xFFFFFFFFFFFF8000 AS SIGNED)+2),(-1),(0),(1),(0x7FFF);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-32766
-126
-1
-1
0
0
1
1
127
32767
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-32766
-126
-1
-1
0
0
1
1
127
32767
DROP TABLE t2;
CREATE TABLE t2 (a MEDIUMINT);
INSERT INTO t2 VALUES (CAST(0xFFFFFFFFFF800000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFF);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-8388606
-126
-1
-1
0
0
1
1
127
8388607
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-8388606
-126
-1
-1
0
0
1
1
127
8388607
DROP TABLE t2;
CREATE TABLE t2 (a INT);
INSERT INTO t2 VALUES (CAST(0xFFFFFFFF80000000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFFFF);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-2147483646
-126
-1
-1
0
0
1
1
127
2147483647
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-2147483646
-126
-1
-1
0
0
1
1
127
2147483647
DROP TABLE t2;
CREATE TABLE t2 (a BIGINT);
INSERT INTO t2 VALUES (CAST(0x8000000000000000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFFFFFFFFFFFF);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-9223372036854775806
-126
-1
-1
0
0
1
1
127
9223372036854775807
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-9223372036854775806
-126
-1
-1
0
0
1
1
127
9223372036854775807
DROP TABLE t1,t2;
CREATE TABLE t1 (a SMALLINT);
INSERT INTO t1 VALUES (CAST(0xFFFFFFFFFFFF8000 AS SIGNED)+2),(-1),(0),(1),(0x7FFF);
CREATE TABLE t2 (a MEDIUMINT);
INSERT INTO t2 VALUES (CAST(0xFFFFFFFFFF800000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFF);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-8388606
-32766
-1
-1
0
0
1
1
32767
8388607
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-8388606
-32766
-1
-1
0
0
1
1
32767
8388607
DROP TABLE t2;
CREATE TABLE t2 (a INT);
INSERT INTO t2 VALUES (CAST(0xFFFFFFFF80000000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFFFF);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-2147483646
-32766
-1
-1
0
0
1
1
32767
2147483647
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-2147483646
-32766
-1
-1
0
0
1
1
32767
2147483647
DROP TABLE t2;
CREATE TABLE t2 (a BIGINT);
INSERT INTO t2 VALUES (CAST(0x8000000000000000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFFFFFFFFFFFF);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-9223372036854775806
-32766
-1
-1
0
0
1
1
32767
9223372036854775807
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-9223372036854775806
-32766
-1
-1
0
0
1
1
32767
9223372036854775807
DROP TABLE t1,t2;
CREATE TABLE t1 (a MEDIUMINT);
INSERT INTO t1 VALUES (CAST(0xFFFFFFFFFF800000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFF);
CREATE TABLE t2 (a INT);
INSERT INTO t2 VALUES (CAST(0xFFFFFFFF80000000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFFFF);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-2147483646
-8388606
-1
-1
0
0
1
1
8388607
2147483647
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-2147483646
-8388606
-1
-1
0
0
1
1
8388607
2147483647
DROP TABLE t2;
CREATE TABLE t2 (a BIGINT);
INSERT INTO t2 VALUES (CAST(0x8000000000000000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFFFFFFFFFFFF);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-9223372036854775806
-8388606
-1
-1
0
0
1
1
8388607
9223372036854775807
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-9223372036854775806
-8388606
-1
-1
0
0
1
1
8388607
9223372036854775807
DROP TABLE t1,t2;
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (CAST(0xFFFFFFFF80000000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFFFF);
CREATE TABLE t2 (a BIGINT);
INSERT INTO t2 VALUES (CAST(0x8000000000000000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFFFFFFFFFFFF);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-9223372036854775806
-2147483646
-1
-1
0
0
1
1
2147483647
9223372036854775807
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-9223372036854775806
-2147483646
-1
-1
0
0
1
1
2147483647
9223372036854775807
DROP TABLE t1,t2;
#
# Unsigned Int Union
#
CREATE TABLE t1 (a TINYINT UNSIGNED);
INSERT INTO t1 VALUES (0),(1),(0xFF-2);
CREATE TABLE t2 (a SMALLINT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFF-2);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
0
0
1
1
253
65533
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
0
0
1
1
253
65533
DROP TABLE t2;
CREATE TABLE t2 (a MEDIUMINT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFFFF-2);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
0
0
1
1
253
16777213
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
0
0
1
1
253
16777213
DROP TABLE t2;
CREATE TABLE t2 (a INT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFFFFFF-2);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
0
0
1
1
253
4294967293
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
0
0
1
1
253
4294967293
DROP TABLE t2;
CREATE TABLE t2 (a BIGINT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFFFFFFFFFFFFFF-2);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
0
0
1
1
253
18446744073709551613
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
0
0
1
1
253
18446744073709551613
DROP TABLE t1,t2;
CREATE TABLE t1 (a SMALLINT UNSIGNED);
INSERT INTO t1 VALUES (0),(1),(0xFFFF-2);
CREATE TABLE t2 (a MEDIUMINT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFFFF-2);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
0
0
1
1
65533
16777213
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
0
0
1
1
65533
16777213
DROP TABLE t2;
CREATE TABLE t2 (a INT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFFFFFF-2);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
0
0
1
1
65533
4294967293
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
0
0
1
1
65533
4294967293
DROP TABLE t2;
CREATE TABLE t2 (a BIGINT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFFFFFFFFFFFFFF-2);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
0
0
1
1
65533
18446744073709551613
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
0
0
1
1
65533
18446744073709551613
DROP TABLE t1,t2;
CREATE TABLE t1 (a MEDIUMINT UNSIGNED);
INSERT INTO t1 VALUES (0),(1),(0xFFFFFF-2);
CREATE TABLE t2 (a INT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFFFFFF-2);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
0
0
1
1
16777213
4294967293
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
0
0
1
1
16777213
4294967293
DROP TABLE t2;
CREATE TABLE t2 (a BIGINT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFFFFFFFFFFFFFF-2);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
0
0
1
1
16777213
18446744073709551613
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
0
0
1
1
16777213
18446744073709551613
DROP TABLE t1,t2;
CREATE TABLE t1 (a INT UNSIGNED);
INSERT INTO t1 VALUES (0),(1),(0xFFFFFFFF-2);
CREATE TABLE t2 (a BIGINT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFFFFFFFFFFFFFF-2);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
0
0
1
1
4294967293
18446744073709551613
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
0
0
1
1
4294967293
18446744073709551613
DROP TABLE t1,t2;
#
# Same Size Different Signedness Int Union
#
CREATE TABLE t1 (a TINYINT);
INSERT INTO t1 VALUES (CAST(0xFFFFFFFFFFFFFF80 AS SIGNED)+2),(-1),(0),(1),(0x7F);
CREATE TABLE t2 (a TINYINT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFF-2);
(SELECT a FROM t1 UNION ALL SELECT a FROM t2) ORDER BY a;
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-126
-1
@ -30,7 +648,7 @@ a
1
127
253
(SELECT a FROM t2 UNION ALL SELECT a FROM t1) ORDER BY a;
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-126
-1
@ -43,9 +661,9 @@ a
DROP TABLE t1,t2;
CREATE TABLE t1 (a SMALLINT);
INSERT INTO t1 VALUES (CAST(0xFFFFFFFFFFFF8000 AS SIGNED)+2),(-1),(0),(1),(0x7FFF);
CREATE TABLE t2 (a INT UNSIGNED);
CREATE TABLE t2 (a SMALLINT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFF-2);
(SELECT a FROM t1 UNION ALL SELECT * FROM t2) ORDER BY a;
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT * FROM t2) tu ORDER BY a;
a
-32766
-1
@ -55,7 +673,7 @@ a
1
32767
65533
(SELECT a FROM t2 UNION ALL SELECT a FROM t1) ORDER BY a;
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-32766
-1
@ -68,9 +686,9 @@ a
DROP TABLE t1,t2;
CREATE TABLE t1 (a MEDIUMINT);
INSERT INTO t1 VALUES (CAST(0xFFFFFFFFFF800000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFF);
CREATE TABLE t2 (a INT UNSIGNED);
CREATE TABLE t2 (a MEDIUMINT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFFFF-2);
(SELECT a FROM t1 UNION ALL SELECT a FROM t2) ORDER BY a;
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-8388606
-1
@ -80,7 +698,7 @@ a
1
8388607
16777213
(SELECT a FROM t2 UNION ALL SELECT a FROM t1) ORDER BY a;
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-8388606
-1
@ -95,7 +713,7 @@ CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (CAST(0xFFFFFFFF80000000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFFFF);
CREATE TABLE t2 (a INT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFFFFFF-2);
(SELECT a FROM t1 UNION ALL SELECT a FROM t2) ORDER BY a;
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-2147483646
-1
@ -105,7 +723,7 @@ a
1
2147483647
4294967293
(SELECT a FROM t2 UNION ALL SELECT a FROM t1) ORDER BY a;
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-2147483646
-1
@ -120,7 +738,7 @@ CREATE TABLE t1 (a BIGINT);
INSERT INTO t1 VALUES (CAST(0x8000000000000000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFFFFFFFFFFFF);
CREATE TABLE t2 (a BIGINT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFFFFFFFFFFFFFF-2);
(SELECT a FROM t1 UNION ALL SELECT a FROM t2) ORDER BY a;
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-9223372036854775806
-1
@ -130,7 +748,7 @@ a
1
9223372036854775807
18446744073709551613
(SELECT a FROM t2 UNION ALL SELECT a FROM t1) ORDER BY a;
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-9223372036854775806
-1
@ -141,4 +759,107 @@ a
9223372036854775807
18446744073709551613
DROP TABLE t1,t2;
#
# Different Size Different Signedness Int Union
#
CREATE TABLE t1 (a TINYINT);
INSERT INTO t1 VALUES (CAST(0xFFFFFFFFFFFFFF80 AS SIGNED)+2),(-1),(0),(1),(0x7F);
CREATE TABLE t2 (a INT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFF-2);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT * FROM t2) tu ORDER BY a;
a
-126
-1
0
0
1
1
127
65533
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-126
-1
0
0
1
1
127
65533
DROP TABLE t1,t2;
CREATE TABLE t1 (a SMALLINT);
INSERT INTO t1 VALUES (CAST(0xFFFFFFFFFFFF8000 AS SIGNED)+2),(-1),(0),(1),(0x7FFF);
CREATE TABLE t2 (a INT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFF-2);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT * FROM t2) tu ORDER BY a;
a
-32766
-1
0
0
1
1
32767
65533
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-32766
-1
0
0
1
1
32767
65533
DROP TABLE t1,t2;
CREATE TABLE t1 (a MEDIUMINT);
INSERT INTO t1 VALUES (CAST(0xFFFFFFFFFF800000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFF);
CREATE TABLE t2 (a INT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFFFF-2);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-8388606
-1
0
0
1
1
8388607
16777213
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-8388606
-1
0
0
1
1
8388607
16777213
DROP TABLE t1,t2;
CREATE TABLE t1 (a BIGINT);
INSERT INTO t1 VALUES (CAST(0x8000000000000000 AS SIGNED)+2),(-1),(0),(1),(0x7FFFFFFFFFFFFFFF);
CREATE TABLE t2 (a INT UNSIGNED);
INSERT INTO t2 VALUES (0),(1),(0xFFFFFF-2);
SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT a FROM t2) tu ORDER BY a;
a
-9223372036854775806
-1
0
0
1
1
16777213
9223372036854775807
SELECT * FROM (SELECT a FROM t2 UNION ALL SELECT a FROM t1) tu ORDER BY a;
a
-9223372036854775806
-1
0
0
1
1
16777213
9223372036854775807
DROP TABLE t1,t2;
DROP DATABASE mcs_union;