This file is indexed.

/usr/lib/mysql-testsuite/r/func_analyse.result is in percona-server-test-5.6 5.6.22-rel71.0-0ubuntu4.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
drop table if exists t1,t2;
create table t1 (i int, j int, empty_string char(10), bool char(1), d date);
insert into t1 values (1,2,"","Y","2002-03-03"), (3,4,"","N","2002-03-04"), (5,6,"","Y","2002-03-04"), (7,8,"","N","2002-03-05");
select count(*) from t1 procedure analyse();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
count(*)	4	4	1	1	0	0	4.0000	0.0000	ENUM('4') NOT NULL
select * from t1 procedure analyse();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t1.i	1	7	1	1	0	0	4.0000	2.2361	ENUM('1','3','5','7') NOT NULL
test.t1.j	2	8	1	1	0	0	5.0000	2.2361	ENUM('2','4','6','8') NOT NULL
test.t1.empty_string			0	0	4	0	0.0000	NULL	CHAR(0) NOT NULL
test.t1.bool	N	Y	1	1	0	0	1.0000	NULL	ENUM('N','Y') NOT NULL
test.t1.d	2002-03-03	2002-03-05	10	10	0	0	10.0000	NULL	ENUM('2002-03-03','2002-03-04','2002-03-05') NOT NULL
select * from t1 procedure analyse(2);
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t1.i	1	7	1	1	0	0	4.0000	2.2361	TINYINT(1) UNSIGNED NOT NULL
test.t1.j	2	8	1	1	0	0	5.0000	2.2361	TINYINT(1) UNSIGNED NOT NULL
test.t1.empty_string			0	0	4	0	0.0000	NULL	CHAR(0) NOT NULL
test.t1.bool	N	Y	1	1	0	0	1.0000	NULL	ENUM('N','Y') NOT NULL
test.t1.d	2002-03-03	2002-03-05	10	10	0	0	10.0000	NULL	ENUM('2002-03-03','2002-03-04','2002-03-05') NOT NULL
create table t2 select * from t1 procedure analyse();
ERROR HY000: Incorrect usage of PROCEDURE and non-SELECT
drop table t1;
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
1	1	1	1	1	0	0	1.0000	0.0000	ENUM('1') NOT NULL
EXPLAIN SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE();
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	PRIMARY	<derived2>	system	NULL	NULL	NULL	NULL	1	NULL
2	DERIVED	NULL	NULL	NULL	NULL	NULL	NULL	NULL	No tables used
EXPLAIN SELECT 1 FROM (SELECT 1) a;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	PRIMARY	<derived2>	system	NULL	NULL	NULL	NULL	1	NULL
2	DERIVED	NULL	NULL	NULL	NULL	NULL	NULL	NULL	No tables used
create table t1 (v varchar(128));
insert into t1 values ('abc'),('abc\'def\\hij\"klm\0opq'),('\''),('\"'),('\\'),('a\0'),('b\''),('c\"'),('d\\'),('\'b'),('\"c'),('\\d'),('a\0\0\0b'),('a\'\'\'\'b'),('a\"\"\"\"b'),('a\\\\\\\\b'),('\'\0\\\"'),('\'\''),('\"\"'),('\\\\'),('The\ZEnd');
select * from t1 procedure analyse();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t1.v	"	\\	1	19	0	0	3.7619	NULL	ENUM('"','""','"c','\'\0\\"','\'','\'\'','\'b','a\0\0\0b','a\0','a""""b','a\'\'\'\'b','abc','abc\'def\\hij"klm\0opq','a\\\\\\\\b','b\'','c"','d\\','The\ZEnd','\\','\\d','\\\\') NOT NULL
drop table t1;
create table t1 (df decimal(5,1));
insert into t1 values(1.1);
insert into t1 values(2.2);
select * from t1 procedure analyse();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t1.df	1.1	2.2	13	13	0	0	1.65000	0.55000	ENUM('1.1','2.2') NOT NULL
drop table t1;
create table t1 (d double);
insert into t1 values (100000);
select * from t1 procedure analyse (1,1);
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t1.d	100000	100000	6	6	0	0	100000	0	MEDIUMINT(6) UNSIGNED NOT NULL
drop table t1;
create table t1 (product varchar(32), country_id int not null, year int,
profit int);
insert into t1  values ( 'Computer', 2,2000, 1200),
( 'TV', 1, 1999, 150),
( 'Calculator', 1, 1999,50),
( 'Computer', 1, 1999,1500),
( 'Computer', 1, 2000,1500),
( 'TV', 1, 2000, 150),
( 'TV', 2, 2000, 100),
( 'TV', 2, 2000, 100),
( 'Calculator', 1, 2000,75),
( 'Calculator', 2, 2000,75),
( 'TV', 1, 1999, 100),
( 'Computer', 1, 1999,1200),
( 'Computer', 2, 2000,1500),
( 'Calculator', 2, 2000,75),
( 'Phone', 3, 2003,10)
;
create table t2 (country_id int primary key, country char(20) not null);
insert into t2 values (1, 'USA'),(2,'India'), (3,'Finland');
select product, sum(profit),avg(profit) from t1 group by product with rollup;
product	sum(profit)	avg(profit)
Calculator	275	68.7500
Computer	6900	1380.0000
Phone	10	10.0000
TV	600	120.0000
NULL	7785	519.0000
select product, sum(profit),avg(profit) from t1 group by product with rollup procedure analyse();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t1.product	Calculator	TV	2	10	0	0	5.4000	NULL	ENUM('Calculator','Computer','Phone','TV') NOT NULL
sum(profit)	10	6900	11	11	0	0	1677.0000	2620.8426	ENUM('10','275','600','6900') NOT NULL
avg(profit)	10.0000	1380.0000	16	16	0	0	339.75000000	521.70417863	ENUM('10.0000','68.7500','120.0000','1380.0000') NOT NULL
drop table t1,t2;
create table t1 (f1 double(10,5), f2 char(10), f3 double(10,5));
insert into t1 values (5.999, "5.9999", 5.99999), (9.555, "9.5555", 9.55555);
select f1 from t1 procedure analyse(1, 1);
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t1.f1	5.99900	9.55500	7	7	0	0	7.77700	1.77800	FLOAT(4,3) NOT NULL
select f2 from t1 procedure analyse(1, 1);
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t1.f2	5.9999	9.5555	6	6	0	0	6.0000	NULL	FLOAT(5,4) UNSIGNED NOT NULL
select f3 from t1 procedure analyse(1, 1);
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t1.f3	5.99999	9.55555	7	7	0	0	7.77777	1.77778	FLOAT(6,5) NOT NULL
drop table t1;
CREATE TABLE t1(a INT,b INT,c INT,d INT,e INT,f INT,g INT,h INT,i INT,j INT,k INT);
INSERT INTO t1 VALUES ();
SELECT * FROM (SELECT * FROM t1) d PROCEDURE ANALYSE();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
d.a	NULL	NULL	0	0	0	1	0.0	0.0	CHAR(0)
d.b	NULL	NULL	0	0	0	1	0.0	0.0	CHAR(0)
d.c	NULL	NULL	0	0	0	1	0.0	0.0	CHAR(0)
d.d	NULL	NULL	0	0	0	1	0.0	0.0	CHAR(0)
d.e	NULL	NULL	0	0	0	1	0.0	0.0	CHAR(0)
d.f	NULL	NULL	0	0	0	1	0.0	0.0	CHAR(0)
d.g	NULL	NULL	0	0	0	1	0.0	0.0	CHAR(0)
d.h	NULL	NULL	0	0	0	1	0.0	0.0	CHAR(0)
d.i	NULL	NULL	0	0	0	1	0.0	0.0	CHAR(0)
d.j	NULL	NULL	0	0	0	1	0.0	0.0	CHAR(0)
d.k	NULL	NULL	0	0	0	1	0.0	0.0	CHAR(0)
DROP TABLE t1;
End of 4.1 tests
#
# Bug #48293: crash with procedure analyse, view with > 10 columns, 
#  having clause...
#
CREATE TABLE t1(a INT, b INT, c INT, d INT, e INT,
f INT, g INT, h INT, i INT, j INT,k INT);
INSERT INTO t1 VALUES (),();
ANALYZE TABLE t1;
CREATE ALGORITHM=TEMPTABLE VIEW v1 AS SELECT * FROM t1;
#should have a derived table
EXPLAIN SELECT * FROM v1;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	PRIMARY	<derived2>	ALL	NULL	NULL	NULL	NULL	2	NULL
2	DERIVED	t1	ALL	NULL	NULL	NULL	NULL	2	NULL
#should not crash
SELECT * FROM v1 PROCEDURE analyse();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
v1.a	NULL	NULL	0	0	0	2	0.0	0.0	CHAR(0)
v1.b	NULL	NULL	0	0	0	2	0.0	0.0	CHAR(0)
v1.c	NULL	NULL	0	0	0	2	0.0	0.0	CHAR(0)
v1.d	NULL	NULL	0	0	0	2	0.0	0.0	CHAR(0)
v1.e	NULL	NULL	0	0	0	2	0.0	0.0	CHAR(0)
v1.f	NULL	NULL	0	0	0	2	0.0	0.0	CHAR(0)
v1.g	NULL	NULL	0	0	0	2	0.0	0.0	CHAR(0)
v1.h	NULL	NULL	0	0	0	2	0.0	0.0	CHAR(0)
v1.i	NULL	NULL	0	0	0	2	0.0	0.0	CHAR(0)
v1.j	NULL	NULL	0	0	0	2	0.0	0.0	CHAR(0)
v1.k	NULL	NULL	0	0	0	2	0.0	0.0	CHAR(0)
#should not crash
SELECT * FROM t1 a, v1, t1 b PROCEDURE analyse();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.a.a	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.a.b	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.a.c	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.a.d	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.a.e	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.a.f	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.a.g	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.a.h	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.a.i	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.a.j	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.a.k	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
v1.a	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
v1.b	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
v1.c	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
v1.d	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
v1.e	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
v1.f	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
v1.g	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
v1.h	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
v1.i	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
v1.j	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
v1.k	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.b.a	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.b.b	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.b.c	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.b.d	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.b.e	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.b.f	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.b.g	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.b.h	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.b.i	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.b.j	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
test.b.k	NULL	NULL	0	0	0	8	0.0	0.0	CHAR(0)
#should not crash
SELECT * FROM (SELECT * FROM t1 having a > 1) x PROCEDURE analyse();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
#should not crash
SELECT * FROM t1 a, (SELECT * FROM t1 having a > 1) x, t1 b PROCEDURE analyse();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
#should not crash
SELECT 1 FROM t1 group by a having a > 1 order by 1 PROCEDURE analyse();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
DROP VIEW v1;
DROP TABLE t1;
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES (1),(2);
# should not crash
CREATE TABLE t2 SELECT 1 FROM t1, t1 t3 GROUP BY t3.a PROCEDURE ANALYSE();
ERROR HY000: Incorrect usage of PROCEDURE and non-SELECT
DROP TABLE t1;
End of 5.0 tests
#
# Bug#11765202: Dbug_violation_helper::~Dbug_violation_helper(): Assertion `!_entered' failed.
#
DROP TABLE IF EXISTS t1;
Warnings:
Note	1051	Unknown table 'test.t1'
CREATE TABLE t1 (a VARCHAR(2) CHARSET UTF8 NOT NULL);
INSERT INTO t1 VALUES ('e'),('e'),('e-');
SELECT * FROM t1 PROCEDURE ANALYSE();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t1.a	e	e-	1	2	0	0	1.3333	NULL	ENUM('e','e-') NOT NULL
DROP TABLE t1;
#
# Bug#11756242  48137: PROCEDURE ANALYSE() LEAKS MEMORY WHEN RETURNING NULL
#
CREATE TABLE t1(f1 INT) ENGINE=MYISAM;
CREATE TABLE t2(f2 INT) ENGINE=INNODB;
INSERT INTO t2 VALUES (1);
SELECT DISTINCTROW f1 FROM t1 NATURAL RIGHT OUTER JOIN t2 PROCEDURE ANALYSE();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t1.f1	NULL	NULL	0	0	0	1	0.0	0.0	CHAR(0)
SELECT * FROM t2 LIMIT 1 PROCEDURE ANALYSE();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t2.f2	1	1	1	1	0	0	1.0000	0.0000	ENUM('1') NOT NULL
DROP TABLE t1, t2;
End of 5.1 tests
#
# Bug #47338 assertion in handler::ha_external_lock
#
drop table if exists t1;
CREATE TEMPORARY TABLE t1 (f2 INT, f1 INT, PRIMARY KEY (f1)) ENGINE = MyISAM;
INSERT t1 ( f1 ) VALUES ( 5 );
INSERT t1 ( f1 ) VALUES ( 6 );
ALTER TABLE t1 ENGINE = MyISAM;
ANALYZE TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	OK
SELECT f1,f2 FROM t1 A WHERE f1 BETWEEN 0 AND 1;
f1	f2
drop table t1;
#
# Bug #13358379   EXPLAIN SELECT ... PROCEDURE ANALYZE CRASHES THE SERVER
#
CREATE TABLE t1 (i INT);
EXPLAIN SELECT * FROM t1 PROCEDURE ANALYSE();
DROP TABLE t1;
#
# WL#6242: Move "PROCEDURE ANALYSE" implementation
#          to select_send-like class
#
# Coverage tests
#

CREATE TABLE t1 (a INT);
# Trivial query:
SELECT * FROM t1 PROCEDURE ANALYSE();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
# PROCEDURE ANALYSE in PS:
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);
PREPARE stmt1 FROM "SELECT * FROM t1 PROCEDURE ANALYSE()";
EXECUTE stmt1;
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t1.a	1	5	1	1	0	0	3.0000	1.4142	ENUM('1','2','3','4','5') NOT NULL
EXECUTE stmt1;
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t1.a	1	5	1	1	0	0	3.0000	1.4142	ENUM('1','2','3','4','5') NOT NULL
EXECUTE stmt1;
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t1.a	1	5	1	1	0	0	3.0000	1.4142	ENUM('1','2','3','4','5') NOT NULL
DEALLOCATE PREPARE stmt1;
# PROCEDURE ANALYSE in SP:
CREATE PROCEDURE p1()
BEGIN
SELECT * FROM t1 PROCEDURE ANALYSE();
END;|
CALL p1();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t1.a	1	5	1	1	0	0	3.0000	1.4142	ENUM('1','2','3','4','5') NOT NULL
DROP PROCEDURE p1;
# PROCEDURE ANALYSE in SP cursor:
CREATE PROCEDURE p1()
BEGIN
DECLARE c1, c2, c3, c4, c5, c6, c7, c8, c9, c10 CHAR(20);
DECLARE done INT DEFAULT 0;
DECLARE cur1 CURSOR FOR SELECT * FROM t1 PROCEDURE ANALYSE();
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO c1, c2, c3, c4, c5, c6, c7, c8, c9, c10;
IF done THEN
LEAVE read_loop;
END IF;
END LOOP;
CLOSE cur1;
END;|
CALL p1();
DROP PROCEDURE p1;
# EXPLAIN with or wihtout PROCEDURE ANALYSE should be same:
ANALYZE TABLE t1;
EXPLAIN SELECT * FROM t1, (SELECT * FROM t1) tt1 WHERE t1.a = tt1.a;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	5	Using where
1	PRIMARY	<derived2>	ref	<auto_key0>	<auto_key0>	5	test.t1.a	2	Using index
2	DERIVED	t1	ALL	NULL	NULL	NULL	NULL	5	NULL
EXPLAIN SELECT * FROM t1, (SELECT * FROM t1) tt1 WHERE t1.a = tt1.a PROCEDURE ANALYSE();
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	PRIMARY	t1	ALL	NULL	NULL	NULL	NULL	5	Using where
1	PRIMARY	<derived2>	ref	<auto_key0>	<auto_key0>	5	test.t1.a	2	Using index
2	DERIVED	t1	ALL	NULL	NULL	NULL	NULL	5	NULL
CREATE TABLE t2 (i INT, j INT);
# PROCEDURE ANALYSE ignores ROLLUP rows:
INSERT INTO t2 VALUES (1, 1), (2, 2), (3, 3), (4, 4);
SELECT i, AVG(j) FROM t2 GROUP BY i WITH ROLLUP;
i	AVG(j)
1	1.0000
2	2.0000
3	3.0000
4	4.0000
NULL	2.5000
SELECT i, AVG(j) FROM t2 GROUP BY i WITH ROLLUP PROCEDURE ANALYSE();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t2.i	1	4	1	1	0	0	2.8000	1.1662	ENUM('1','2','3','4') NOT NULL
AVG(j)	1.0000	4.0000	16	16	0	0	2.80000000	1.16619038	ENUM('1.0000','2.0000','3.0000','4.0000') NOT NULL
SELECT i, AVG(j) FROM t2 GROUP BY i PROCEDURE ANALYSE();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t2.i	1	4	1	1	0	0	2.5000	1.1180	ENUM('1','2','3','4') NOT NULL
AVG(j)	1.0000	4.0000	16	16	0	0	2.50000000	1.11803399	ENUM('1.0000','2.0000','3.0000','4.0000') NOT NULL
# LIMIT affects original SELECT output, not PROCEDURE ANALYSE output:
SELECT * FROM t2 LIMIT 1 PROCEDURE ANALYSE();
Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
test.t2.i	1	1	1	1	0	0	1.0000	0.0000	ENUM('1') NOT NULL
test.t2.j	1	1	1	1	0	0	1.0000	0.0000	ENUM('1') NOT NULL
# Wrong usage: CREATE TABLE/VIEW and INSERT from SELECT:
CREATE TABLE t SELECT * FROM t1 PROCEDURE ANALYSE();
ERROR HY000: Incorrect usage of PROCEDURE and non-SELECT
CREATE VIEW v AS SELECT * FROM t1 PROCEDURE ANALYSE();
ERROR HY000: View's SELECT contains a 'PROCEDURE' clause
INSERT INTO t1 SELECT * FROM t1 PROCEDURE ANALYSE();
ERROR HY000: Incorrect usage of PROCEDURE and non-SELECT
# Wrong usage: subquery with PROCEDURE ANALYSE():
SELECT (SELECT * FROM t1 PROCEDURE ANALYSE());
ERROR HY000: Incorrect usage of PROCEDURE and subquery
SELECT (SELECT * FROM t1 PROCEDURE ANALYSE()) PROCEDURE ANALYSE;
ERROR HY000: Incorrect usage of PROCEDURE and subquery
SELECT * FROM (SELECT * FROM t1 PROCEDURE ANALYSE()) tt1;
ERROR HY000: Incorrect usage of PROCEDURE and subquery
SELECT * FROM t1 WHERE a IN (SELECT * FROM t1 PROCEDURE ANALYSE());
ERROR HY000: Incorrect usage of PROCEDURE and subquery
# Wrong usage: SELECT ... INTO
SELECT i INTO @a FROM t1 LIMIT 1 PROCEDURE ANALYSE();
ERROR HY000: Incorrect usage of PROCEDURE and INTO
SELECT * INTO OUTFILE "MYSQLTEST_VARDIR/wl6242.outfile" FROM t1 PROCEDURE ANALYSE();
ERROR HY000: Incorrect usage of PROCEDURE and INTO
SELECT * INTO DUMPFILE "MYSQLTEST_VARDIR/wl6242.dumpfile" FROM t1 PROCEDURE ANALYSE();
ERROR HY000: Incorrect usage of PROCEDURE and INTO
# Wrong usage: UNION:
SELECT * FROM t1 UNION SELECT * FROM t1 PROCEDURE ANALYSE();
ERROR HY000: Incorrect usage of PROCEDURE and subquery
SELECT * FROM t1 PROCEDURE ANALYSE() UNION SELECT * FROM t1;
ERROR HY000: Incorrect usage of UNION and SELECT ... PROCEDURE ANALYSE()
# Wrong 1st parameter:
SELECT * FROM t1 PROCEDURE ANALYSE((SELECT 1));
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT 1))' at line 1
SELECT * FROM t1 PROCEDURE ANALYSE('test');
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''test')' at line 1
SELECT * FROM t1 PROCEDURE ANALYSE(-100);
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-100)' at line 1
SELECT * FROM t1 PROCEDURE ANALYSE(3.1415);
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '3.1415)' at line 1
# Wrong 2nd parameter:
SELECT * FROM t1 PROCEDURE ANALYSE(100, (SELECT 1));
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT 1))' at line 1
SELECT * FROM t1 PROCEDURE ANALYSE(100, 'test');
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''test')' at line 1
SELECT * FROM t1 PROCEDURE ANALYSE(100, -100);
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-100)' at line 1
SELECT * FROM t1 PROCEDURE ANALYSE(100, 3.1415);
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '3.1415)' at line 1
# Wrong parameter count:
SELECT * FROM t1 PROCEDURE ANALYSE(100, 200, 300);
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 300)' at line 1
DROP TABLE t1, t2;
# End of 5.6 tests