File: filesort.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (213 lines) | stat: -rw-r--r-- 5,786 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
--source include/elide_costs.inc

--echo #
--echo # Bug#24709595 WL#8741: ASSERTION `SORTORDER->NEED_STRXNFRM == 0' FAILED
--echo #

CREATE TABLE t1(
  c VARCHAR(10) CHARACTER SET utf8 DEFAULT NULL
);
CREATE TABLE t2(
  c1 VARCHAR(255) CHARACTER SET utf8 DEFAULT NULL,
  c2 VARCHAR(10) CHARACTER SET utf8 DEFAULT NULL
);

INSERT INTO t1 VALUES('x');
INSERT INTO t2 VALUES('g','if'), ('not','ojgygqcgqi');

SELECT * FROM t2 WHERE (c2) <> (SELECT MAX(c) FROM t1 GROUP BY c1);

DROP TABLE t1, t2;

--echo #
--echo # Bug#29660945: SIG 6 AT TEMPTABLE::HANDLER::POSITION | SRC/HANDLER.CC
--echo #

SET optimizer_switch='block_nested_loop=off';

CREATE TABLE t1 (
  f1 varchar(255),
  f2 varchar(255)
);

INSERT INTO t1 VALUES (NULL,'A');
INSERT INTO t1 VALUES ('A',NULL);

SELECT * FROM t1 AS alias1 JOIN t1 AS alias2 ON alias1.f1=alias2.f2 ORDER BY alias2.f1 LIMIT 50;

DROP TABLE t1;

SET optimizer_switch=DEFAULT;

# Verify that we can sort data with large blobs (larger than the sort buffer).

SET sort_buffer_size=32768;

CREATE TABLE t1 (
  f1 INTEGER,
  f2 LONGBLOB
);

INSERT INTO t1 VALUES ( 2, REPEAT('-', 1048576) );
INSERT INTO t1 VALUES ( 1, REPEAT('x', 1048576) );

--replace_regex /x{1024}/x{1024}/ /-{1024}/-{1024}/
SELECT * FROM t1 ORDER BY f1;

DROP TABLE t1;
SET sort_buffer_size=DEFAULT;

--echo #
--echo # Bug #30687020: ORDER BY DOES NOT WORK FOR A COLUMN WITH A STRING FUNCTION AND UTF8MB4_0900_AI_C
--echo #

CREATE TABLE t1 ( f1 VARCHAR(100) );
INSERT INTO t1 VALUES (''), (NULL), (''), (NULL);
SELECT CONCAT(f1, '') AS dummy FROM t1 ORDER BY dummy;
DROP TABLE t1;

--echo #
--echo # Bug #30791074: WEIGHT_STRING: ASSERTION `0' FAILED. IN TIME_ZONE_UTC::TIME_TO_GMT_SEC
--echo #

CREATE TABLE t1 ( f1 INTEGER );
INSERT INTO t1 VALUES (0), (1), (101);
SELECT * FROM t1 ORDER BY UNIX_TIMESTAMP(f1);
DROP TABLE t1;

--echo #
--echo # Bug #31397840: Wrong result of SELECT DISTINCT JSON_ARRAYAGG
--echo #

SET sql_mode='';
CREATE TABLE t1
  (
     id            INT PRIMARY KEY,
     char_field    CHAR(10)
  );
INSERT INTO t1 VALUES (580801, '580801');
INSERT INTO t1 VALUES (580901, '580901');
INSERT INTO t1 VALUES (581001, '581001');
INSERT INTO t1 VALUES (581101, '581101');

ANALYZE TABLE t1;

let $query = SELECT DISTINCT JSON_ARRAYAGG(char_field), JSON_ARRAYAGG(2) FROM t1 GROUP BY id ORDER BY id;
eval $query;
--replace_regex $elide_metrics
--skip_if_hypergraph  # Uses an index scan instead of a sort.
eval EXPLAIN FORMAT=tree $query;

DROP TABLE t1;
SET sql_mode=DEFAULT;

--echo #
--echo # Bug #31588831: ASSERTION FAILURE IN NEWWEEDOUTACCESSPATHFORTABLES() AT SQL/SQL_EXECUTOR.CC
--echo #

CREATE TABLE t1 (pk INTEGER, f2 INTEGER, PRIMARY KEY (pk));
CREATE TABLE t2 (pk INTEGER, f2 INTEGER, PRIMARY KEY (pk));

INSERT INTO t1 VALUES (1,1), (2,2);
ANALYZE TABLE t1, t2;

# Sets up a filesort on t1 which initially is not part of weedout,
# but gets caught in one anyway later, and thus needs to be sorted by row ID.
--replace_regex $elide_metrics
--skip_if_hypergraph  # Does not support weedout.
EXPLAIN FORMAT=tree SELECT * FROM
  t1
  LEFT JOIN t1 AS table2 ON 119 IN (
    SELECT SUBQUERY1_t2.pk
    FROM t1 AS SUBQUERY1_t1, (t2 AS SUBQUERY1_t2 STRAIGHT_JOIN t1 ON TRUE)
  )
  ORDER BY t1.f2;

DROP TABLE t1, t2;

--echo #
--echo # Bug #32169770: HYPERGRAPH: ASSERTION `M_PART_INFO->IS_PARTITION_USED(M_LAST_PART)' FAILED.
--echo #

# The LONGTEXT is to force a sort by row ID.
# The ... ON FALSE condition is to make sure the Read() call never
# hits the partitioned table, so that it isn't properly initialized
# when filesort wants row IDs.

CREATE TABLE t1 (a LONGTEXT);
INSERT INTO t1 VALUES ('a');
CREATE TABLE t2 (a INTEGER PRIMARY KEY) PARTITION BY key() PARTITIONS 2;
SELECT 1 AS a FROM t1 LEFT JOIN t2 ON FALSE GROUP BY a;
DROP TABLE t1, t2;

--echo #
--echo # Bug #32617876: SIG11 IN SORT_PARAM::MAKE_SORTKEY|SQL/FILESORT.CC WITH HYPERGRAPH
--echo #

CREATE TABLE t1 (
  a LONGBLOB,
  b INTEGER,
  c INTEGER
);

INSERT INTO t1 VALUES (NULL,1,3);
INSERT INTO t1 VALUES (NULL,1,NULL);
ANALYZE TABLE t1;

# Set up a sort by row ID, where a temporary table (belonging to the
# nonmergable derived table) has a NULL-complemented row, but never gets
# properly initialized, and thus does not actually have a row ID.
SELECT *
FROM t1
LEFT JOIN (
  t1 AS t2 JOIN t1 AS t3 ON t2.c = t3.b
  JOIN ( SELECT DISTINCT b FROM t1 ) AS d1
) ON TRUE
ORDER BY t1.c;

DROP TABLE t1;

--echo #
--echo # Bug #32685064: ASSERTION `M_INDEX_CURSOR.IS_POSITIONED()' FAILED WITH HYPERGRAPH
--echo #

CREATE TABLE t1 (a LONGTEXT);
INSERT INTO t1 VALUES ('8');
SELECT 'a' AS f1 FROM t1 WHERE a='8' GROUP BY f1 ORDER BY CONCAT(f1);
DROP TABLE t1;

--echo #
--echo # Bug #33030289 REGRESSION: ASSERTION `REC_SZ <= M_ELEMENT_SIZE' FAILED.
--echo #

CREATE TABLE t(a DECIMAL(55,19) NOT NULL);
INSERT INTO t VALUES(0),(1),(2),(3),(4),(5);
--error ER_GIS_INVALID_DATA
SELECT
(
  SELECT 1 FROM t
  ORDER BY ST_HAUSDORFFDISTANCE(a, ST_ASTEXT(1,'axis-order=lat-long')), a
  LIMIT 1
);
DROP TABLE t;

--echo #
--echo # Bug #32738705: "OUT OF SORT MEMORY ERROR" HAS AN INCONSISTENT RELATIONSHIP WITH THE BUFFER SIZE
--echo #

CREATE TABLE t1 ( a INTEGER, b TEXT );
INSERT INTO t1 VALUES (1, REPEAT('x', 40001));
INSERT INTO t1 VALUES (2, REPEAT('x', 40002));
INSERT INTO t1 VALUES (3, REPEAT('x', 40003));
INSERT INTO t1 VALUES (4, REPEAT('x', 40005));
INSERT INTO t1 VALUES (5, REPEAT('x', 40008));
INSERT INTO t1 VALUES (6, REPEAT('x', 40013));

# Set up a sort with large addons (since b is TEXT and not HUGETEXT,
# it's treated as a packed addon). We can keep one row and then some
# in the sort buffer, but not two, so we need special handling during merging.
SET sort_buffer_size=65536;
SELECT a, LENGTH(b) FROM t1 ORDER BY a DESC;
SET sort_buffer_size=DEFAULT;

DROP TABLE t1;