~ubuntu-branches/ubuntu/trusty/mysql-5.6/trusty

« back to all changes in this revision

Viewing changes to mysql-test/r/partition_explicit_prune.result

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2014-02-12 11:54:27 UTC
  • Revision ID: package-import@ubuntu.com-20140212115427-oq6tfsqxl1wuwehi
Tags: upstream-5.6.15
ImportĀ upstreamĀ versionĀ 5.6.15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
# Bug#13559657: PARTITION SELECTION DOES NOT WORK WITH VIEWS
 
3
#
 
4
CREATE TABLE t1 (a int)
 
5
ENGINE = InnoDB
 
6
PARTITION BY HASH (a) PARTITIONS 2;
 
7
INSERT INTO t1 VALUES (0), (1), (2), (3);
 
8
CREATE VIEW v1 AS SELECT a FROM t1 PARTITION (p0);
 
9
SHOW CREATE VIEW v1;
 
10
View    Create View     character_set_client    collation_connection
 
11
v1      CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a` from `t1` PARTITION (`p0`)       latin1  latin1_swedish_ci
 
12
FLUSH STATUS;
 
13
SELECT * FROM v1;
 
14
a
 
15
0
 
16
2
 
17
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
18
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
19
VARIABLE_NAME   VARIABLE_VALUE
 
20
HANDLER_COMMIT  1
 
21
HANDLER_EXTERNAL_LOCK   4
 
22
HANDLER_READ_FIRST      1
 
23
HANDLER_READ_KEY        1
 
24
HANDLER_READ_RND_NEXT   3
 
25
HANDLER_WRITE   17
 
26
# 4 locks (1 table, 1 partition lock/unlock)
 
27
FLUSH STATUS;
 
28
SELECT a FROM t1 PARTITION (p0);
 
29
a
 
30
0
 
31
2
 
32
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
33
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
34
VARIABLE_NAME   VARIABLE_VALUE
 
35
HANDLER_COMMIT  1
 
36
HANDLER_EXTERNAL_LOCK   4
 
37
HANDLER_READ_FIRST      1
 
38
HANDLER_READ_KEY        1
 
39
HANDLER_READ_RND_NEXT   3
 
40
HANDLER_WRITE   17
 
41
# 4 locks (1 table, 1 partition lock/unlock)
 
42
FLUSH STATUS;
 
43
INSERT INTO v1 VALUES (10);
 
44
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
45
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
46
VARIABLE_NAME   VARIABLE_VALUE
 
47
HANDLER_COMMIT  1
 
48
HANDLER_EXTERNAL_LOCK   4
 
49
HANDLER_WRITE   18
 
50
# 4 locks (1 table, 1 partition lock/unlock)
 
51
FLUSH STATUS;
 
52
INSERT INTO v1 VALUES (11);
 
53
ERROR HY000: Found a row not matching the given partition set
 
54
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
55
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
56
VARIABLE_NAME   VARIABLE_VALUE
 
57
HANDLER_EXTERNAL_LOCK   2
 
58
HANDLER_WRITE   17
 
59
# 2 locks (1 table, all partitions pruned)
 
60
FLUSH STATUS;
 
61
SELECT * FROM v1;
 
62
a
 
63
0
 
64
10
 
65
2
 
66
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
67
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
68
VARIABLE_NAME   VARIABLE_VALUE
 
69
HANDLER_COMMIT  1
 
70
HANDLER_EXTERNAL_LOCK   4
 
71
HANDLER_READ_FIRST      1
 
72
HANDLER_READ_KEY        1
 
73
HANDLER_READ_RND_NEXT   4
 
74
HANDLER_WRITE   17
 
75
# 4 locks (1 table, 1 partition lock/unlock)
 
76
FLUSH STATUS;
 
77
SELECT a FROM t1 PARTITION (p0);
 
78
a
 
79
0
 
80
10
 
81
2
 
82
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
83
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
84
VARIABLE_NAME   VARIABLE_VALUE
 
85
HANDLER_COMMIT  1
 
86
HANDLER_EXTERNAL_LOCK   4
 
87
HANDLER_READ_FIRST      1
 
88
HANDLER_READ_KEY        1
 
89
HANDLER_READ_RND_NEXT   4
 
90
HANDLER_WRITE   17
 
91
# 4 locks (1 table, 1 partition lock/unlock)
 
92
SELECT * FROM t1;
 
93
a
 
94
0
 
95
1
 
96
10
 
97
2
 
98
3
 
99
DROP VIEW v1;
 
100
CREATE VIEW v1 AS SELECT a FROM t1 PARTITION (p0) WITH CHECK OPTION;
 
101
FLUSH STATUS;
 
102
INSERT INTO v1 VALUES (20);
 
103
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
104
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
105
VARIABLE_NAME   VARIABLE_VALUE
 
106
HANDLER_COMMIT  1
 
107
HANDLER_EXTERNAL_LOCK   4
 
108
HANDLER_WRITE   18
 
109
# 4 locks (1 table, 1 partition lock/unlock)
 
110
FLUSH STATUS;
 
111
INSERT INTO v1 VALUES (21);
 
112
ERROR HY000: Found a row not matching the given partition set
 
113
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
114
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
115
VARIABLE_NAME   VARIABLE_VALUE
 
116
HANDLER_EXTERNAL_LOCK   2
 
117
HANDLER_WRITE   17
 
118
# 2 locks (1 table, all partitions pruned)
 
119
SELECT * FROM v1;
 
120
a
 
121
0
 
122
10
 
123
2
 
124
20
 
125
SELECT * FROM t1;
 
126
a
 
127
0
 
128
1
 
129
10
 
130
2
 
131
20
 
132
3
 
133
DROP VIEW v1;
 
134
CREATE VIEW v1 AS
 
135
SELECT a FROM t1 PARTITION (p0) WHERE a = 30 WITH CHECK OPTION;
 
136
FLUSH STATUS;
 
137
INSERT INTO v1 VALUES (30);
 
138
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
139
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
140
VARIABLE_NAME   VARIABLE_VALUE
 
141
HANDLER_COMMIT  1
 
142
HANDLER_EXTERNAL_LOCK   4
 
143
HANDLER_WRITE   18
 
144
# 4 locks (1 table, 1 partition lock/unlock)
 
145
FLUSH STATUS;
 
146
INSERT INTO v1 VALUES (31);
 
147
ERROR HY000: CHECK OPTION failed 'test.v1'
 
148
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
149
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
150
VARIABLE_NAME   VARIABLE_VALUE
 
151
HANDLER_EXTERNAL_LOCK   2
 
152
HANDLER_WRITE   17
 
153
# 2 locks (1 table, all partitions pruned)
 
154
FLUSH STATUS;
 
155
INSERT INTO v1 VALUES (32);
 
156
ERROR HY000: CHECK OPTION failed 'test.v1'
 
157
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
158
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
159
VARIABLE_NAME   VARIABLE_VALUE
 
160
HANDLER_EXTERNAL_LOCK   4
 
161
HANDLER_ROLLBACK        1
 
162
HANDLER_WRITE   17
 
163
# 4 locks (1 table, 1 partition lock/unlock)
 
164
SELECT * FROM v1;
 
165
a
 
166
30
 
167
SELECT * FROM t1;
 
168
a
 
169
0
 
170
1
 
171
10
 
172
2
 
173
20
 
174
3
 
175
30
 
176
DROP VIEW v1;
 
177
DROP TABLE t1;
 
178
# Original tests for WL#5217
 
179
# Must have InnoDB as engine to get the same statistics results.
 
180
# embedded uses MyISAM as default. CREATE SELECT uses the default engine.
 
181
SET @old_default_storage_engine = @@default_storage_engine;
 
182
SET @@default_storage_engine = 'InnoDB';
 
183
# Test to show if I_S affects HANDLER_ counts
 
184
FLUSH STATUS;
 
185
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
186
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
187
VARIABLE_NAME   VARIABLE_VALUE
 
188
HANDLER_WRITE   17
 
189
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
190
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
191
VARIABLE_NAME   VARIABLE_VALUE
 
192
HANDLER_READ_RND_NEXT   19
 
193
HANDLER_WRITE   35
 
194
# OK, seems to add number of variables processed before HANDLER_WRITE
 
195
# and number of variables + 1 evaluated in the previous call in RND_NEXT
 
196
CREATE TABLE t1
 
197
(a INT NOT NULL,
 
198
b varchar (64),
 
199
INDEX (b,a),
 
200
PRIMARY KEY (a))
 
201
ENGINE = InnoDB
 
202
PARTITION BY RANGE (a)
 
203
SUBPARTITION BY HASH (a) SUBPARTITIONS 2
 
204
(PARTITION pNeg VALUES LESS THAN (0)
 
205
(SUBPARTITION subp0,
 
206
SUBPARTITION subp1),
 
207
PARTITION `p0-9` VALUES LESS THAN (10)
 
208
(SUBPARTITION subp2,
 
209
SUBPARTITION subp3),
 
210
PARTITION `p10-99` VALUES LESS THAN (100)
 
211
(SUBPARTITION subp4,
 
212
SUBPARTITION subp5),
 
213
PARTITION `p100-99999` VALUES LESS THAN (100000)
 
214
(SUBPARTITION subp6,
 
215
SUBPARTITION subp7));
 
216
SHOW CREATE TABLE t1;
 
217
Table   Create Table
 
218
t1      CREATE TABLE `t1` (
 
219
  `a` int(11) NOT NULL,
 
220
  `b` varchar(64) DEFAULT NULL,
 
221
  PRIMARY KEY (`a`),
 
222
  KEY `b` (`b`,`a`)
 
223
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
224
/*!50100 PARTITION BY RANGE (a)
 
225
SUBPARTITION BY HASH (a)
 
226
(PARTITION pNeg VALUES LESS THAN (0)
 
227
 (SUBPARTITION subp0 ENGINE = InnoDB,
 
228
  SUBPARTITION subp1 ENGINE = InnoDB),
 
229
 PARTITION `p0-9` VALUES LESS THAN (10)
 
230
 (SUBPARTITION subp2 ENGINE = InnoDB,
 
231
  SUBPARTITION subp3 ENGINE = InnoDB),
 
232
 PARTITION `p10-99` VALUES LESS THAN (100)
 
233
 (SUBPARTITION subp4 ENGINE = InnoDB,
 
234
  SUBPARTITION subp5 ENGINE = InnoDB),
 
235
 PARTITION `p100-99999` VALUES LESS THAN (100000)
 
236
 (SUBPARTITION subp6 ENGINE = InnoDB,
 
237
  SUBPARTITION subp7 ENGINE = InnoDB)) */
 
238
# First test that the syntax is OK
 
239
SHOW CREATE TABLE t1 PARTITION (subp0);
 
240
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 'PARTITION (subp0)' at line 1
 
241
# Not a correct partition list
 
242
INSERT INTO t1 PARTITION () VALUES (1, "error");
 
243
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 ') VALUES (1, "error")' at line 1
 
244
INSERT INTO t1 PARTITION (pNonExisting) VALUES (1, "error");
 
245
ERROR HY000: Unknown partition 'pNonExisting' in table 't1'
 
246
INSERT INTO t1 PARTITION (pNeg, pNonExisting) VALUES (1, "error");
 
247
ERROR HY000: Unknown partition 'pNonExisting' in table 't1'
 
248
# Duplicate partitions and overlapping partitions and subpartitios is OK
 
249
FLUSH STATUS;
 
250
INSERT INTO t1 PARTITION (pNeg, pNeg) VALUES (-1, "pNeg(-subp1)");
 
251
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
252
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
253
VARIABLE_NAME   VARIABLE_VALUE
 
254
HANDLER_COMMIT  1
 
255
HANDLER_EXTERNAL_LOCK   4
 
256
HANDLER_WRITE   18
 
257
# Should be 1 commit
 
258
# 4 external locks (due to pruning of locks)
 
259
# (1 ha_partition + 1 ha_innobase) x 2 (lock + unlock)
 
260
# and 18 write (1 ha_innobase + 17 internal I_S write)
 
261
INSERT INTO t1 PARTITION (pNeg, subp0) VALUES (-3, "pNeg(-subp1)");
 
262
INSERT INTO t1 PARTITION (pNeg, subp0) VALUES (-2, "(pNeg-)subp0");
 
263
# should be correct
 
264
INSERT INTO t1 PARTITION (`p100-99999`) VALUES (100, "`p100-99999`(-subp6)"), (101, "`p100-99999`(-subp7)"), (1000, "`p100-99999`(-subp6)");
 
265
INSERT INTO t1 PARTITION(`p10-99`,subp3) VALUES (1, "subp3"), (10, "p10-99");
 
266
FLUSH STATUS;
 
267
INSERT INTO t1 PARTITION(subp3) VALUES (3, "subp3");
 
268
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
269
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
270
VARIABLE_NAME   VARIABLE_VALUE
 
271
HANDLER_COMMIT  1
 
272
HANDLER_EXTERNAL_LOCK   4
 
273
HANDLER_WRITE   18
 
274
# Should be 1 commit
 
275
# 4 external locks
 
276
# (1 ha_partition + 1 ha_innobase) x 2 (lock + unlock)
 
277
# and 18 write (1 ha_innobase + 17 internal I_S write)
 
278
FLUSH STATUS;
 
279
LOCK TABLE t1 WRITE;
 
280
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
281
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
282
VARIABLE_NAME   VARIABLE_VALUE
 
283
HANDLER_COMMIT  1
 
284
HANDLER_EXTERNAL_LOCK   9
 
285
HANDLER_WRITE   17
 
286
# should be 1 commit
 
287
# 9 locks (1 ha_partition + 8 ha_innobase)
 
288
# 17 writes (internal I_S)
 
289
INSERT INTO t1 PARTITION(`p0-9`) VALUES (5, "p0-9:subp3");
 
290
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
291
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
292
VARIABLE_NAME   VARIABLE_VALUE
 
293
HANDLER_COMMIT  2
 
294
HANDLER_EXTERNAL_LOCK   9
 
295
HANDLER_READ_RND_NEXT   19
 
296
HANDLER_WRITE   36
 
297
# + 1 commit
 
298
# + 19 rnd next (internal I_S)
 
299
# + 19 write (18 internal I_S + 1 insert)
 
300
UNLOCK TABLES;
 
301
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
302
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
303
VARIABLE_NAME   VARIABLE_VALUE
 
304
HANDLER_COMMIT  2
 
305
HANDLER_EXTERNAL_LOCK   18
 
306
HANDLER_READ_RND_NEXT   38
 
307
HANDLER_WRITE   54
 
308
# + 9 locks (unlocks)
 
309
# + 19 rnd next (internal I_S)
 
310
# + 18 write (internal I_S)
 
311
# Not matching partitions with inserted value
 
312
INSERT INTO t1 PARTITION (pNeg, pNeg) VALUES (1, "error");
 
313
ERROR HY000: Found a row not matching the given partition set
 
314
INSERT INTO t1 PARTITION (pNeg, subp0) VALUES (1, "error");
 
315
ERROR HY000: Found a row not matching the given partition set
 
316
INSERT INTO t1 PARTITION (`p100-99999`) VALUES (1, "error"), (10, "error");
 
317
ERROR HY000: Found a row not matching the given partition set
 
318
INSERT INTO t1 VALUES (1000000, "error"), (9999999, "error");
 
319
ERROR HY000: Table has no partition for value 1000000
 
320
INSERT INTO t1 PARTITION (`p100-99999`) VALUES (1000000, "error"), (9999999, "error");
 
321
ERROR HY000: Table has no partition for value 1000000
 
322
INSERT INTO t1 PARTITION (pNeg, subp4) VALUES (-7, "pNeg(-subp1)"), (-10, "pNeg(-subp0)"), (-1, "pNeg(-subp1)"), (-99, "pNeg(-subp1)");
 
323
Got one of the listed errors
 
324
SELECT * FROM t1 ORDER BY a;
 
325
a       b
 
326
-3      pNeg(-subp1)
 
327
-2      (pNeg-)subp0
 
328
-1      pNeg(-subp1)
 
329
1       subp3
 
330
3       subp3
 
331
5       p0-9:subp3
 
332
10      p10-99
 
333
100     `p100-99999`(-subp6)
 
334
101     `p100-99999`(-subp7)
 
335
1000    `p100-99999`(-subp6)
 
336
ANALYZE TABLE t1;
 
337
Table   Op      Msg_type        Msg_text
 
338
test.t1 analyze status  OK
 
339
SET @save_innodb_stats_on_metadata=@@global.innodb_stats_on_metadata;
 
340
SET @@global.innodb_stats_on_metadata=ON;
 
341
SELECT PARTITION_NAME, SUBPARTITION_NAME, TABLE_ROWS
 
342
FROM INFORMATION_SCHEMA.PARTITIONS
 
343
WHERE TABLE_SCHEMA = 'test'
 
344
AND TABLE_NAME = 't1' ORDER BY SUBPARTITION_NAME;
 
345
PARTITION_NAME  SUBPARTITION_NAME       TABLE_ROWS
 
346
pNeg    subp0   1
 
347
pNeg    subp1   2
 
348
p0-9    subp2   0
 
349
p0-9    subp3   3
 
350
p10-99  subp4   1
 
351
p10-99  subp5   0
 
352
p100-99999      subp6   2
 
353
p100-99999      subp7   1
 
354
SET @@global.innodb_stats_on_metadata=@save_innodb_stats_on_metadata;
 
355
FLUSH STATUS;
 
356
SELECT * FROM t1 PARTITION (pNonexistent);
 
357
ERROR HY000: Unknown partition 'pNonexistent' in table 't1'
 
358
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
359
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
360
VARIABLE_NAME   VARIABLE_VALUE
 
361
HANDLER_WRITE   17
 
362
# should have failed before locking (only 17 internal I_S writes)
 
363
FLUSH STATUS;
 
364
SELECT * FROM t1 PARTITION (subp2);
 
365
a       b
 
366
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
367
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
368
VARIABLE_NAME   VARIABLE_VALUE
 
369
HANDLER_COMMIT  1
 
370
HANDLER_EXTERNAL_LOCK   4
 
371
HANDLER_READ_FIRST      1
 
372
HANDLER_READ_KEY        1
 
373
HANDLER_WRITE   17
 
374
# Should be 1 commit
 
375
# 4 locks (1 ha_partition + 1 ha_innobase) x 2 (lock/unlock)
 
376
# 1 read first (also calls index_read)
 
377
# 2 read key (first from innobase_get_index and second from index first)
 
378
# 17 writes (internal I_S)
 
379
FLUSH STATUS;
 
380
SELECT * FROM t1 PARTITION (subp2,pNeg) AS TableAlias;
 
381
a       b
 
382
-2      (pNeg-)subp0
 
383
-3      pNeg(-subp1)
 
384
-1      pNeg(-subp1)
 
385
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
386
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
387
VARIABLE_NAME   VARIABLE_VALUE
 
388
HANDLER_COMMIT  1
 
389
HANDLER_EXTERNAL_LOCK   8
 
390
HANDLER_READ_FIRST      3
 
391
HANDLER_READ_KEY        3
 
392
HANDLER_READ_NEXT       3
 
393
HANDLER_WRITE   17
 
394
# Should be 1 commit
 
395
# 8 locks (1 ha_partition + 2 + 1 ha_innobase) x 2
 
396
# 3 read first (one for each partition)
 
397
# 6 read key (3 from read first and 3 from innobase_get_index)
 
398
# 3 read next (one next call after each read row)
 
399
# 17 writes (internal I_S)
 
400
FLUSH STATUS;
 
401
LOCK TABLE t1 READ, t1 as TableAlias READ;
 
402
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
403
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
404
VARIABLE_NAME   VARIABLE_VALUE
 
405
HANDLER_COMMIT  1
 
406
HANDLER_EXTERNAL_LOCK   18
 
407
HANDLER_WRITE   17
 
408
# 1 commit
 
409
# 18 locks
 
410
# 18 READ KEY from opening a new partition table instance,
 
411
# (1 innobase_get_index for each index, per partition, 1 x 2 x 8 = 16
 
412
#  + info(HA_STATUS_CONST) call on the partition with the most number
 
413
#  of rows, 2 innobase_get_index for updating both index statistics)
 
414
# 17 writes (internal I_S)
 
415
SELECT * FROM t1 PARTITION (subp3) AS TableAlias;
 
416
a       b
 
417
5       p0-9:subp3
 
418
1       subp3
 
419
3       subp3
 
420
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
421
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
422
VARIABLE_NAME   VARIABLE_VALUE
 
423
HANDLER_COMMIT  2
 
424
HANDLER_EXTERNAL_LOCK   18
 
425
HANDLER_READ_FIRST      1
 
426
HANDLER_READ_KEY        1
 
427
HANDLER_READ_NEXT       3
 
428
HANDLER_READ_RND_NEXT   19
 
429
HANDLER_WRITE   35
 
430
# + 1 commit
 
431
# + 1 read first (read first key from index in one partition)
 
432
# + 2 read key (innobase_get_index from index_init + from index_first)
 
433
# + 3 read next (one after each row)
 
434
# + 19 rnd next (from the last I_S query)
 
435
# + 18 write (internal I_S)
 
436
SELECT COUNT(*) FROM t1 PARTITION (`p10-99`);
 
437
COUNT(*)
 
438
1
 
439
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
440
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
441
VARIABLE_NAME   VARIABLE_VALUE
 
442
HANDLER_COMMIT  3
 
443
HANDLER_EXTERNAL_LOCK   18
 
444
HANDLER_READ_FIRST      3
 
445
HANDLER_READ_KEY        3
 
446
HANDLER_READ_NEXT       4
 
447
HANDLER_READ_RND_NEXT   38
 
448
HANDLER_WRITE   53
 
449
# + 1 commit
 
450
# + 2 read first (one for each subpart)
 
451
# + 4 read key (innobase_get_index from index_init + from index_first)
 
452
# + 1 read next (one after each row)
 
453
# + 19 rnd next (from the last I_S query)
 
454
# + 18 write (internal I_S)
 
455
SELECT * FROM t1 WHERE a = 1000000;
 
456
a       b
 
457
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
458
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
459
VARIABLE_NAME   VARIABLE_VALUE
 
460
HANDLER_COMMIT  3
 
461
HANDLER_EXTERNAL_LOCK   18
 
462
HANDLER_READ_FIRST      3
 
463
HANDLER_READ_KEY        3
 
464
HANDLER_READ_NEXT       4
 
465
HANDLER_READ_RND_NEXT   57
 
466
HANDLER_WRITE   71
 
467
# No matching partition, only internal I_S.
 
468
SELECT * FROM t1 PARTITION (pNeg) WHERE a = 100;
 
469
a       b
 
470
UNLOCK TABLES;
 
471
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
472
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
473
VARIABLE_NAME   VARIABLE_VALUE
 
474
HANDLER_COMMIT  3
 
475
HANDLER_EXTERNAL_LOCK   36
 
476
HANDLER_READ_FIRST      3
 
477
HANDLER_READ_KEY        3
 
478
HANDLER_READ_NEXT       4
 
479
HANDLER_READ_RND_NEXT   76
 
480
HANDLER_WRITE   89
 
481
# + 18 for unlock (same as lock above) (100 is not in pNeg, no match)
 
482
# Test that EXPLAIN PARTITION works
 
483
EXPLAIN PARTITIONS SELECT * FROM t1 PARTITION (pNonexistent);
 
484
ERROR HY000: Unknown partition 'pNonexistent' in table 't1'
 
485
EXPLAIN PARTITIONS SELECT * FROM t1 PARTITION (subp2);
 
486
id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    Extra
 
487
1       SIMPLE  t1      p0-9_subp2      index   NULL    b       71      NULL    2       Using index
 
488
FLUSH STATUS;
 
489
EXPLAIN PARTITIONS SELECT * FROM t1 PARTITION (subp2,pNeg) AS TableAlias;
 
490
id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    Extra
 
491
1       SIMPLE  TableAlias      pNeg_subp0,pNeg_subp1,p0-9_subp2        index   NULL    b       71      NULL    4       Using index
 
492
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
493
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
494
VARIABLE_NAME   VARIABLE_VALUE
 
495
HANDLER_COMMIT  1
 
496
HANDLER_EXTERNAL_LOCK   8
 
497
HANDLER_WRITE   17
 
498
# 8 locks (1 ha_partition + 3 ha_innobase) x 2 (lock/unlock)
 
499
EXPLAIN PARTITIONS SELECT * FROM t1 PARTITION (subp3) AS TableAlias;
 
500
id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    Extra
 
501
1       SIMPLE  TableAlias      p0-9_subp3      index   NULL    b       71      NULL    3       Using index
 
502
EXPLAIN PARTITIONS SELECT COUNT(*) FROM t1 PARTITION (`p10-99`);
 
503
id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    Extra
 
504
1       SIMPLE  t1      p10-99_subp4,p10-99_subp5       index   NULL    PRIMARY 4       NULL    2       Using index
 
505
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = 1000000;
 
506
id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    Extra
 
507
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
508
EXPLAIN PARTITIONS SELECT * FROM t1 PARTITION (pNeg) WHERE a = 100;
 
509
id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    Extra
 
510
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    Impossible WHERE noticed after reading const tables
 
511
# Test how it changes the alias/keywords/reserved words
 
512
SELECT * FROM t1 PARTITION;
 
513
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 '' at line 1
 
514
SELECT * FROM t1 `PARTITION`;
 
515
a       b
 
516
-2      (pNeg-)subp0
 
517
-3      pNeg(-subp1)
 
518
-1      pNeg(-subp1)
 
519
5       p0-9:subp3
 
520
1       subp3
 
521
3       subp3
 
522
10      p10-99
 
523
100     `p100-99999`(-subp6)
 
524
1000    `p100-99999`(-subp6)
 
525
101     `p100-99999`(-subp7)
 
526
SELECT * FROM t1 AS PARTITION;
 
527
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 'PARTITION' at line 1
 
528
SELECT * FROM t1 AS `PARTITION`;
 
529
a       b
 
530
-2      (pNeg-)subp0
 
531
-3      pNeg(-subp1)
 
532
-1      pNeg(-subp1)
 
533
5       p0-9:subp3
 
534
1       subp3
 
535
3       subp3
 
536
10      p10-99
 
537
100     `p100-99999`(-subp6)
 
538
1000    `p100-99999`(-subp6)
 
539
101     `p100-99999`(-subp7)
 
540
#
 
541
# Test REPLACE
 
542
#
 
543
FLUSH STATUS;
 
544
REPLACE INTO t1 PARTITION (subp0) VALUES (-21, 'Should fail!');
 
545
ERROR HY000: Found a row not matching the given partition set
 
546
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
547
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
548
VARIABLE_NAME   VARIABLE_VALUE
 
549
HANDLER_EXTERNAL_LOCK   2
 
550
HANDLER_WRITE   17
 
551
# 2 locks (1 ha_partition) x 2 (lock/unlock), Was 4 locks before WL4443
 
552
# explicit pruning says part_id 0 and implicit pruning says part_id 1
 
553
# so no partition will be locked!
 
554
# 0 rollback (since no locked partition)
 
555
# 17 writes (I_S internal)
 
556
FLUSH STATUS;
 
557
REPLACE INTO t1 PARTITION (subp1) VALUES (-21, 'Insert by REPLACE');
 
558
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
559
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
560
VARIABLE_NAME   VARIABLE_VALUE
 
561
HANDLER_COMMIT  1
 
562
HANDLER_EXTERNAL_LOCK   4
 
563
HANDLER_WRITE   18
 
564
# 1 commit
 
565
# 4 locks (1 ha_partition + 1 ha_innobase) x 2 (lock/unlock)
 
566
# 18 writes (17 I_S internal, 1 ha_innobase)
 
567
SELECT * FROM t1 PARTITION (pNeg);
 
568
a       b
 
569
-2      (pNeg-)subp0
 
570
-21     Insert by REPLACE
 
571
-3      pNeg(-subp1)
 
572
-1      pNeg(-subp1)
 
573
FLUSH STATUS;
 
574
REPLACE INTO t1 PARTITION (subp1) VALUES (-21, 'REPLACEd by REPLACE');
 
575
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
576
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
577
VARIABLE_NAME   VARIABLE_VALUE
 
578
HANDLER_COMMIT  1
 
579
HANDLER_EXTERNAL_LOCK   4
 
580
HANDLER_READ_KEY        1
 
581
HANDLER_UPDATE  1
 
582
HANDLER_WRITE   18
 
583
# 1 commit
 
584
# 4 locks (1 ha_partition + 1 ha_innobase) x 2 (lock/unlock)
 
585
# 2 read key (1 innobase_get_index when init the index + 1 index read
 
586
# to get the position to update)
 
587
# 1 update (updated one row, since there is no delete trigger, update
 
588
# is used instead of delete+insert)
 
589
# 18 write (17 from I_S, 1 for the failed insert)
 
590
SELECT * FROM t1 PARTITION (pNeg);
 
591
a       b
 
592
-2      (pNeg-)subp0
 
593
-3      pNeg(-subp1)
 
594
-1      pNeg(-subp1)
 
595
-21     REPLACEd by REPLACE
 
596
FLUSH STATUS;
 
597
LOCK TABLE t1 WRITE;
 
598
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
599
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
600
VARIABLE_NAME   VARIABLE_VALUE
 
601
HANDLER_COMMIT  1
 
602
HANDLER_EXTERNAL_LOCK   9
 
603
HANDLER_WRITE   17
 
604
# 1 commit
 
605
# 9 locks
 
606
# 17 write (internal I_S)
 
607
DELETE FROM t1 PARTITION(subp1) WHERE b = "REPLACEd by REPLACE";
 
608
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
609
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
610
VARIABLE_NAME   VARIABLE_VALUE
 
611
HANDLER_COMMIT  2
 
612
HANDLER_DELETE  1
 
613
HANDLER_EXTERNAL_LOCK   9
 
614
HANDLER_READ_KEY        1
 
615
HANDLER_READ_NEXT       1
 
616
HANDLER_READ_RND_NEXT   19
 
617
HANDLER_WRITE   35
 
618
# + 1 commit
 
619
# + 1 delete (one row deleted)
 
620
# + 3 read key (1 innodb_get_index in records_in_range,
 
621
#   1 innodb_get_index in index_init, 1 index_read in index_read_first)
 
622
# + 1 read next (search for another row in secondary index)
 
623
# + 19 rnd next (internal I_S)
 
624
# + 18 write (internal I_S)
 
625
REPLACE INTO t1 PARTITION (subp0) VALUES (-21, 'Should fail!');
 
626
ERROR HY000: Found a row not matching the given partition set
 
627
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
628
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
629
VARIABLE_NAME   VARIABLE_VALUE
 
630
HANDLER_COMMIT  2
 
631
HANDLER_DELETE  1
 
632
HANDLER_EXTERNAL_LOCK   9
 
633
HANDLER_READ_KEY        1
 
634
HANDLER_READ_NEXT       1
 
635
HANDLER_READ_RND_NEXT   38
 
636
HANDLER_WRITE   53
 
637
# Failed before start_stmt/execution.
 
638
# + 19 rnd next (internal I_S)
 
639
#   0 rollback (No partition had called start_stmt, all parts pruned)
 
640
# + 18 write (internal I_S)
 
641
REPLACE INTO t1 PARTITION (pNeg) VALUES (-21, 'Insert by REPLACE');
 
642
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
643
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
644
VARIABLE_NAME   VARIABLE_VALUE
 
645
HANDLER_COMMIT  3
 
646
HANDLER_DELETE  1
 
647
HANDLER_EXTERNAL_LOCK   9
 
648
HANDLER_READ_KEY        1
 
649
HANDLER_READ_NEXT       1
 
650
HANDLER_READ_RND_NEXT   57
 
651
HANDLER_WRITE   72
 
652
# + 1 commit
 
653
# + 19 rnd next (internal I_S)
 
654
# + 19 write (18 internal I_S + 1 real write)
 
655
REPLACE INTO t1 PARTITION (subp1) VALUES (-21, 'REPLACEd by REPLACE');
 
656
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
657
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
658
VARIABLE_NAME   VARIABLE_VALUE
 
659
HANDLER_COMMIT  4
 
660
HANDLER_DELETE  1
 
661
HANDLER_EXTERNAL_LOCK   9
 
662
HANDLER_READ_KEY        2
 
663
HANDLER_READ_NEXT       1
 
664
HANDLER_READ_RND_NEXT   76
 
665
HANDLER_UPDATE  1
 
666
HANDLER_WRITE   91
 
667
# + 1 commit
 
668
# + 2 read key (see non locked query)
 
669
# + 19 rnd next (internal I_S)
 
670
# + 1 update (see non locked query)
 
671
# + 19 write (18 internal I_S + 1 failed write)
 
672
SELECT * FROM t1 PARTITION (subp1);
 
673
a       b
 
674
-3      pNeg(-subp1)
 
675
-1      pNeg(-subp1)
 
676
-21     REPLACEd by REPLACE
 
677
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
678
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
679
VARIABLE_NAME   VARIABLE_VALUE
 
680
HANDLER_COMMIT  5
 
681
HANDLER_DELETE  1
 
682
HANDLER_EXTERNAL_LOCK   9
 
683
HANDLER_READ_FIRST      1
 
684
HANDLER_READ_KEY        3
 
685
HANDLER_READ_NEXT       4
 
686
HANDLER_READ_RND_NEXT   95
 
687
HANDLER_UPDATE  1
 
688
HANDLER_WRITE   109
 
689
# + 1 commit
 
690
# + 1 read first 
 
691
# + 2 read key 
 
692
# + 3 read next
 
693
# + 19 rnd next (internal I_S)
 
694
# + 18 write (internal I_S)
 
695
UNLOCK TABLES;
 
696
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
697
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
698
VARIABLE_NAME   VARIABLE_VALUE
 
699
HANDLER_COMMIT  5
 
700
HANDLER_DELETE  1
 
701
HANDLER_EXTERNAL_LOCK   18
 
702
HANDLER_READ_FIRST      1
 
703
HANDLER_READ_KEY        3
 
704
HANDLER_READ_NEXT       4
 
705
HANDLER_READ_RND_NEXT   114
 
706
HANDLER_UPDATE  1
 
707
HANDLER_WRITE   127
 
708
# + 9 locks
 
709
# + 19 rnd next (internal I_S)
 
710
# + 18 write (internal I_S)
 
711
#
 
712
# Test LOAD
 
713
#
 
714
SELECT * FROM t1 PARTITION (pNeg, `p10-99`);
 
715
a       b
 
716
-2      (pNeg-)subp0
 
717
-3      pNeg(-subp1)
 
718
-1      pNeg(-subp1)
 
719
-21     REPLACEd by REPLACE
 
720
10      p10-99
 
721
FLUSH STATUS;
 
722
SELECT * FROM t1 PARTITION (pNeg, `p10-99`) INTO OUTFILE 'loadtest.txt';
 
723
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
724
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
725
VARIABLE_NAME   VARIABLE_VALUE
 
726
HANDLER_COMMIT  1
 
727
HANDLER_EXTERNAL_LOCK   10
 
728
HANDLER_READ_FIRST      4
 
729
HANDLER_READ_KEY        4
 
730
HANDLER_READ_NEXT       5
 
731
HANDLER_WRITE   17
 
732
# 1 commit
 
733
# 10 locks (1 ha_partition + 4 ha_innobase) x 2 (lock/unlock)
 
734
# 4 read first (for reading the first row in 4 partitions)
 
735
# 8 read key (4 from read first + 4 for index init)
 
736
# 5 read next (one after each row)
 
737
# 17 write (internal I_S)
 
738
FLUSH STATUS;
 
739
ALTER TABLE t1 TRUNCATE PARTITION pNeg, `p10-99`;
 
740
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
741
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
742
VARIABLE_NAME   VARIABLE_VALUE
 
743
HANDLER_COMMIT  1
 
744
HANDLER_EXTERNAL_LOCK   10
 
745
HANDLER_WRITE   17
 
746
# 10 locks (table + 4 partition) x (lock + unlock)
 
747
SELECT * FROM t1 PARTITION (pNeg, `p10-99`);
 
748
a       b
 
749
FLUSH STATUS;
 
750
LOAD DATA INFILE 'loadtest.txt' INTO TABLE t1 PARTITION (pNeg);
 
751
ERROR HY000: Found a row not matching the given partition set
 
752
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
753
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
754
VARIABLE_NAME   VARIABLE_VALUE
 
755
HANDLER_EXTERNAL_LOCK   6
 
756
HANDLER_ROLLBACK        1
 
757
HANDLER_WRITE   21
 
758
# 6 locks (1 ha_partition + 2 ha_innobase) x 2 (lock+unlock)
 
759
# 1 rollback
 
760
SELECT * FROM t1 PARTITION (pNeg, `p10-99`);
 
761
a       b
 
762
FLUSH STATUS;
 
763
LOAD DATA INFILE 'loadtest.txt' INTO TABLE t1 PARTITION (pNeg, subp4, subp5);
 
764
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
765
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
766
VARIABLE_NAME   VARIABLE_VALUE
 
767
HANDLER_COMMIT  1
 
768
HANDLER_EXTERNAL_LOCK   10
 
769
HANDLER_WRITE   22
 
770
# 10 lock (1 ha_partition + 4 ha_innobase) x 2 (lock + unlock)
 
771
ALTER TABLE t1 TRUNCATE PARTITION pNeg, `p10-99`;
 
772
FLUSH STATUS;
 
773
LOCK TABLE t1 WRITE;
 
774
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
775
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
776
VARIABLE_NAME   VARIABLE_VALUE
 
777
HANDLER_COMMIT  1
 
778
HANDLER_EXTERNAL_LOCK   9
 
779
HANDLER_WRITE   17
 
780
# 9 locks
 
781
# 18 read key (ALTER forces table to be closed, see above for open)
 
782
LOAD DATA INFILE 'loadtest.txt' INTO TABLE t1 PARTITION (pNeg, `p10-99`);
 
783
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
784
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
785
VARIABLE_NAME   VARIABLE_VALUE
 
786
HANDLER_COMMIT  2
 
787
HANDLER_EXTERNAL_LOCK   9
 
788
HANDLER_READ_RND_NEXT   19
 
789
HANDLER_WRITE   40
 
790
# + 23 write (18 internal I_S + 5 rows)
 
791
UNLOCK TABLES;
 
792
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
793
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
794
VARIABLE_NAME   VARIABLE_VALUE
 
795
HANDLER_COMMIT  2
 
796
HANDLER_EXTERNAL_LOCK   18
 
797
HANDLER_READ_RND_NEXT   38
 
798
HANDLER_WRITE   58
 
799
# + 9 locks
 
800
#
 
801
# Test UPDATE
 
802
#
 
803
FLUSH STATUS;
 
804
UPDATE t1 PARTITION(subp0) SET b = concat(b, ', Updated');
 
805
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
806
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
807
VARIABLE_NAME   VARIABLE_VALUE
 
808
HANDLER_COMMIT  1
 
809
HANDLER_EXTERNAL_LOCK   4
 
810
HANDLER_READ_FIRST      1
 
811
HANDLER_READ_KEY        1
 
812
HANDLER_READ_RND_NEXT   2
 
813
HANDLER_UPDATE  1
 
814
HANDLER_WRITE   17
 
815
# 1 commit
 
816
# 4 lock (1 ha_partition + 1 ha_innobase) x 2 (lock + unlock)
 
817
# 1 read first (read first row, called from first rnd_next)
 
818
# 2 read key (innobase_get_index from rnd_init +
 
819
#             read next row from second rnd_next)
 
820
# 1 update (update the row)
 
821
EXPLAIN PARTITIONS UPDATE t1 PARTITION(subp0) SET b = concat(b, ', Updated');
 
822
id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    Extra
 
823
1       SIMPLE  t1      pNeg_subp0      index   NULL    PRIMARY 4       NULL    2       NULL
 
824
SELECT * FROM t1 PARTITION (subp0) ORDER BY a;
 
825
a       b
 
826
-2      (pNeg-)subp0, Updated
 
827
FLUSH STATUS;
 
828
UPDATE t1 PARTITION(subp0) SET b = concat(b, ', Updated2') WHERE a = -2;
 
829
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
830
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
831
VARIABLE_NAME   VARIABLE_VALUE
 
832
HANDLER_COMMIT  1
 
833
HANDLER_EXTERNAL_LOCK   4
 
834
HANDLER_READ_KEY        1
 
835
HANDLER_UPDATE  1
 
836
HANDLER_WRITE   17
 
837
# 1 commit
 
838
# 4 lock
 
839
# 1 read key
 
840
# 1 update
 
841
EXPLAIN PARTITIONS UPDATE t1 PARTITION(subp0) SET b = concat(b, ', Updated2') WHERE a = -2;
 
842
id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    Extra
 
843
1       SIMPLE  t1      pNeg_subp0      range   PRIMARY PRIMARY 4       const   1       Using where
 
844
FLUSH STATUS;
 
845
UPDATE t1 PARTITION(subp0) SET a = -4, b = concat(b, ', Updated from a = -2')
 
846
WHERE a = -2;
 
847
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
848
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
849
VARIABLE_NAME   VARIABLE_VALUE
 
850
HANDLER_COMMIT  1
 
851
HANDLER_EXTERNAL_LOCK   4
 
852
HANDLER_READ_KEY        2
 
853
HANDLER_READ_RND        1
 
854
HANDLER_UPDATE  1
 
855
HANDLER_WRITE   17
 
856
# 1 commit
 
857
# 4 lock
 
858
# 2 read key - (2 index read)
 
859
# 1 read rnd - rnd_pos
 
860
# 1 update
 
861
EXPLAIN PARTITIONS UPDATE t1 PARTITION(subp0) SET a = -4, b = concat(b, ', Updated from a = -2');
 
862
id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    Extra
 
863
1       SIMPLE  t1      pNeg_subp0      index   NULL    PRIMARY 4       NULL    2       Using temporary
 
864
FLUSH STATUS;
 
865
UPDATE t1 PARTITION(subp0) SET b = concat(b, ', Updated2') WHERE a = 100;
 
866
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
867
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
868
VARIABLE_NAME   VARIABLE_VALUE
 
869
HANDLER_WRITE   17
 
870
# Nothing, since impossible PARTITION+WHERE clause.
 
871
EXPLAIN PARTITIONS UPDATE t1 PARTITION(subp0) SET b = concat(b, ', Updated2') WHERE a = 100;
 
872
id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    Extra
 
873
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    No matching rows after partition pruning
 
874
FLUSH STATUS;
 
875
UPDATE t1 PARTITION(subp0) SET a = -2, b = concat(b, ', Updated from a = 100')
 
876
WHERE a = 100;
 
877
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
878
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
879
VARIABLE_NAME   VARIABLE_VALUE
 
880
HANDLER_WRITE   17
 
881
# Nothing, since impossible PARTITION+WHERE clause.
 
882
EXPLAIN PARTITIONS UPDATE t1 PARTITION(subp0)
 
883
SET a = -2, b = concat(b, ', Updated from a = 100') WHERE a = 100;
 
884
id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    Extra
 
885
1       SIMPLE  NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    No matching rows after partition pruning
 
886
FLUSH STATUS;
 
887
UPDATE t1 PARTITION(`p100-99999`) SET a = -2, b = concat(b, ', Updated from a = 100')
 
888
WHERE a = 100;
 
889
ERROR HY000: Found a row not matching the given partition set
 
890
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
891
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
892
VARIABLE_NAME   VARIABLE_VALUE
 
893
HANDLER_EXTERNAL_LOCK   6
 
894
HANDLER_READ_KEY        2
 
895
HANDLER_READ_RND        1
 
896
HANDLER_ROLLBACK        1
 
897
HANDLER_WRITE   17
 
898
# 6 lock
 
899
# 4 read key (1 index init + 1 index read + 1 rnd init + 1 rnd pos)
 
900
# 1 read rnd (rnd pos)
 
901
# 1 rollback
 
902
FLUSH STATUS;
 
903
UPDATE t1 PARTITION(`p100-99999`, pNeg) SET a = -4, b = concat(b, ', Updated from a = 100')
 
904
WHERE a = 100;
 
905
Got one of the listed errors
 
906
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
907
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
908
VARIABLE_NAME   VARIABLE_VALUE
 
909
HANDLER_EXTERNAL_LOCK   10
 
910
HANDLER_READ_KEY        2
 
911
HANDLER_READ_RND        1
 
912
HANDLER_ROLLBACK        1
 
913
HANDLER_WRITE   18
 
914
# 10 locks
 
915
# 4 read key
 
916
# 1 read rnd
 
917
# 1 rollback
 
918
# 18 write (17 internal I_S + 1 failed insert)
 
919
FLUSH STATUS;
 
920
UPDATE t1 PARTITION(`p100-99999`, pNeg) SET a = -222, b = concat(b, ', Updated from a = 100')
 
921
WHERE a = 100;
 
922
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
923
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
924
VARIABLE_NAME   VARIABLE_VALUE
 
925
HANDLER_COMMIT  1
 
926
HANDLER_DELETE  1
 
927
HANDLER_EXTERNAL_LOCK   10
 
928
HANDLER_READ_KEY        2
 
929
HANDLER_READ_RND        1
 
930
HANDLER_WRITE   18
 
931
# 1 commit
 
932
# 1 delete
 
933
# 4 read key
 
934
# 1 read rnd
 
935
# 18 write (17 internal I_S + 1 insert)
 
936
SELECT * FROM t1 ORDER BY a;
 
937
a       b
 
938
-222    `p100-99999`(-subp6), Updated from a = 100
 
939
-21     REPLACEd by REPLACE
 
940
-4      (pNeg-)subp0, Updated, Updated2, Updated from a = -2
 
941
-3      pNeg(-subp1)
 
942
-1      pNeg(-subp1)
 
943
1       subp3
 
944
3       subp3
 
945
5       p0-9:subp3
 
946
10      p10-99
 
947
101     `p100-99999`(-subp7)
 
948
1000    `p100-99999`(-subp6)
 
949
# Test of non matching partition (i.e ER_NO_PARTITION_FOUND)
 
950
FLUSH STATUS;
 
951
UPDATE t1 SET b = concat(b, ', Updated2') WHERE a = 1000000;
 
952
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
953
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
954
VARIABLE_NAME   VARIABLE_VALUE
 
955
HANDLER_WRITE   17
 
956
# Nothing (no matching partition found)
 
957
FLUSH STATUS;
 
958
UPDATE t1 PARTITION (pNeg) SET b = concat(b, ', Updated2') WHERE a = 1000000;
 
959
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
960
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
961
VARIABLE_NAME   VARIABLE_VALUE
 
962
HANDLER_WRITE   17
 
963
# Nothing (no matching partition found)
 
964
FLUSH STATUS;
 
965
LOCK TABLE t1 WRITE;
 
966
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
967
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
968
VARIABLE_NAME   VARIABLE_VALUE
 
969
HANDLER_COMMIT  1
 
970
HANDLER_EXTERNAL_LOCK   9
 
971
HANDLER_WRITE   17
 
972
# 9 locks
 
973
UPDATE t1 PARTITION (subp7) SET b = concat(b, ', Updated to 103'), a = 103 WHERE a = 101;
 
974
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
975
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
976
VARIABLE_NAME   VARIABLE_VALUE
 
977
HANDLER_COMMIT  2
 
978
HANDLER_EXTERNAL_LOCK   9
 
979
HANDLER_READ_KEY        2
 
980
HANDLER_READ_RND        1
 
981
HANDLER_READ_RND_NEXT   19
 
982
HANDLER_UPDATE  1
 
983
HANDLER_WRITE   35
 
984
# + 4 read key
 
985
# + 1 read rnd
 
986
# + 1 update
 
987
UPDATE t1 PARTITION (`p100-99999`) SET b = concat(b, ', Updated to 110'), a = 110 WHERE a = 103;
 
988
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
989
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
990
VARIABLE_NAME   VARIABLE_VALUE
 
991
HANDLER_COMMIT  3
 
992
HANDLER_DELETE  1
 
993
HANDLER_EXTERNAL_LOCK   9
 
994
HANDLER_READ_KEY        4
 
995
HANDLER_READ_RND        2
 
996
HANDLER_READ_RND_NEXT   38
 
997
HANDLER_UPDATE  1
 
998
HANDLER_WRITE   54
 
999
# + 1 delete
 
1000
# + 4 read key
 
1001
# + 1 read rnd
 
1002
# + 19 write (18 internal I_S + 1 insert)
 
1003
UNLOCK TABLES;
 
1004
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1005
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1006
VARIABLE_NAME   VARIABLE_VALUE
 
1007
HANDLER_COMMIT  3
 
1008
HANDLER_DELETE  1
 
1009
HANDLER_EXTERNAL_LOCK   18
 
1010
HANDLER_READ_KEY        4
 
1011
HANDLER_READ_RND        2
 
1012
HANDLER_READ_RND_NEXT   57
 
1013
HANDLER_UPDATE  1
 
1014
HANDLER_WRITE   72
 
1015
+ 9 locks
 
1016
#
 
1017
# Test DELETE
 
1018
#
 
1019
SELECT * FROM t1 ORDER BY b, a;
 
1020
a       b
 
1021
-4      (pNeg-)subp0, Updated, Updated2, Updated from a = -2
 
1022
5       p0-9:subp3
 
1023
10      p10-99
 
1024
-3      pNeg(-subp1)
 
1025
-1      pNeg(-subp1)
 
1026
-21     REPLACEd by REPLACE
 
1027
1       subp3
 
1028
3       subp3
 
1029
1000    `p100-99999`(-subp6)
 
1030
-222    `p100-99999`(-subp6), Updated from a = 100
 
1031
110     `p100-99999`(-subp7), Updated to 103, Updated to 110
 
1032
FLUSH STATUS;
 
1033
DELETE FROM t1 PARTITION (pNeg) WHERE a = -1;
 
1034
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1035
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1036
VARIABLE_NAME   VARIABLE_VALUE
 
1037
HANDLER_COMMIT  1
 
1038
HANDLER_DELETE  1
 
1039
HANDLER_EXTERNAL_LOCK   4
 
1040
HANDLER_READ_KEY        1
 
1041
HANDLER_WRITE   17
 
1042
# 1 delete
 
1043
# 4 locks (pruning works!).
 
1044
# 1 read key (index read)
 
1045
FLUSH STATUS;
 
1046
DELETE FROM t1 PARTITION (subp1) WHERE b like '%subp1%';
 
1047
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1048
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1049
VARIABLE_NAME   VARIABLE_VALUE
 
1050
HANDLER_COMMIT  1
 
1051
HANDLER_DELETE  1
 
1052
HANDLER_EXTERNAL_LOCK   4
 
1053
HANDLER_READ_FIRST      1
 
1054
HANDLER_READ_KEY        1
 
1055
HANDLER_READ_RND_NEXT   3
 
1056
HANDLER_WRITE   17
 
1057
# 1 delete
 
1058
# 4 locks
 
1059
# 1 read first
 
1060
# 2 read key
 
1061
# 3 read rnd
 
1062
FLUSH STATUS;
 
1063
LOCK TABLE t1 WRITE;
 
1064
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1065
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1066
VARIABLE_NAME   VARIABLE_VALUE
 
1067
HANDLER_COMMIT  1
 
1068
HANDLER_EXTERNAL_LOCK   9
 
1069
HANDLER_WRITE   17
 
1070
# 9 locks
 
1071
DELETE FROM t1 PARTITION (subp1) WHERE b = 'p0-9:subp3';
 
1072
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1073
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1074
VARIABLE_NAME   VARIABLE_VALUE
 
1075
HANDLER_COMMIT  2
 
1076
HANDLER_EXTERNAL_LOCK   9
 
1077
HANDLER_READ_KEY        1
 
1078
HANDLER_READ_RND_NEXT   19
 
1079
HANDLER_WRITE   35
 
1080
# + 3 read key (1 innodb_get_index in records_in_range
 
1081
#               + 1 innobase_get_index in index_init + 1 index read)
 
1082
DELETE FROM t1 PARTITION (`p0-9`) WHERE b = 'p0-9:subp3';
 
1083
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1084
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1085
VARIABLE_NAME   VARIABLE_VALUE
 
1086
HANDLER_COMMIT  3
 
1087
HANDLER_DELETE  1
 
1088
HANDLER_EXTERNAL_LOCK   9
 
1089
HANDLER_READ_KEY        3
 
1090
HANDLER_READ_NEXT       1
 
1091
HANDLER_READ_RND_NEXT   38
 
1092
HANDLER_WRITE   53
 
1093
# + 1 delete
 
1094
# + 6 read key (same as above, but for two subpartitions)
 
1095
# + 1 read next (read next after found row)
 
1096
UNLOCK TABLES;
 
1097
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1098
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1099
VARIABLE_NAME   VARIABLE_VALUE
 
1100
HANDLER_COMMIT  3
 
1101
HANDLER_DELETE  1
 
1102
HANDLER_EXTERNAL_LOCK   18
 
1103
HANDLER_READ_KEY        3
 
1104
HANDLER_READ_NEXT       1
 
1105
HANDLER_READ_RND_NEXT   57
 
1106
HANDLER_WRITE   71
 
1107
# + 9 locks
 
1108
# Test multi-table DELETE
 
1109
# Can be expressed in two different ways.
 
1110
CREATE TABLE t2 LIKE t1;
 
1111
FLUSH STATUS;
 
1112
INSERT INTO t2 PARTITION (`p10-99`, subp3, `p100-99999`) SELECT * FROM t1 PARTITION (subp3, `p10-99`, `p100-99999`);
 
1113
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1114
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1115
VARIABLE_NAME   VARIABLE_VALUE
 
1116
HANDLER_COMMIT  1
 
1117
HANDLER_EXTERNAL_LOCK   24
 
1118
HANDLER_READ_FIRST      5
 
1119
HANDLER_READ_KEY        5
 
1120
HANDLER_READ_NEXT       5
 
1121
HANDLER_WRITE   22
 
1122
# 24 locks (2 table, 5 + 5 subpartitions lock/unlock)
 
1123
FLUSH STATUS;
 
1124
ALTER TABLE t2 TRUNCATE PARTITION `p10-99`, `p0-9`, `p100-99999`;
 
1125
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1126
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1127
VARIABLE_NAME   VARIABLE_VALUE
 
1128
HANDLER_COMMIT  1
 
1129
HANDLER_EXTERNAL_LOCK   14
 
1130
HANDLER_WRITE   17
 
1131
# 14 locks (1 table, 6 subpartitions lock/unlock)
 
1132
FLUSH STATUS;
 
1133
INSERT INTO t2 PARTITION (subp3) SELECT * FROM t1 PARTITION (subp3, `p10-99`, `p100-99999`);
 
1134
ERROR HY000: Found a row not matching the given partition set
 
1135
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1136
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1137
VARIABLE_NAME   VARIABLE_VALUE
 
1138
HANDLER_EXTERNAL_LOCK   16
 
1139
HANDLER_READ_FIRST      2
 
1140
HANDLER_READ_KEY        2
 
1141
HANDLER_READ_NEXT       2
 
1142
HANDLER_ROLLBACK        1
 
1143
HANDLER_WRITE   19
 
1144
# 16 locks (2 tables, 1 + 5 subpartitions lock/unlock)
 
1145
FLUSH STATUS;
 
1146
INSERT IGNORE INTO t2 PARTITION (subp3) SELECT * FROM t1 PARTITION (subp3, `p10-99`, `p100-99999`);
 
1147
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1148
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1149
VARIABLE_NAME   VARIABLE_VALUE
 
1150
HANDLER_COMMIT  1
 
1151
HANDLER_EXTERNAL_LOCK   16
 
1152
HANDLER_READ_FIRST      5
 
1153
HANDLER_READ_KEY        5
 
1154
HANDLER_READ_NEXT       5
 
1155
HANDLER_WRITE   19
 
1156
# 16 locks (2 tables, 1 + 5 subpartitions lock/unlock)
 
1157
TRUNCATE TABLE t2;
 
1158
FLUSH STATUS;
 
1159
INSERT INTO t2 SELECT * FROM t1 PARTITION (subp3, `p10-99`, `p100-99999`);
 
1160
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1161
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1162
VARIABLE_NAME   VARIABLE_VALUE
 
1163
HANDLER_COMMIT  1
 
1164
HANDLER_EXTERNAL_LOCK   30
 
1165
HANDLER_READ_FIRST      5
 
1166
HANDLER_READ_KEY        5
 
1167
HANDLER_READ_NEXT       5
 
1168
HANDLER_WRITE   22
 
1169
# 30 locks (2 table, 8 + 5 subpartitions lock/unlock)
 
1170
FLUSH STATUS;
 
1171
CREATE TABLE t3 SELECT * FROM t1 PARTITION (pNeg,subp3,`p100-99999`);
 
1172
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1173
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1174
VARIABLE_NAME   VARIABLE_VALUE
 
1175
HANDLER_COMMIT  1
 
1176
HANDLER_EXTERNAL_LOCK   14
 
1177
HANDLER_READ_FIRST      5
 
1178
HANDLER_READ_KEY        5
 
1179
HANDLER_READ_NEXT       7
 
1180
HANDLER_WRITE   24
 
1181
# 14 locks (2 table, 5 subpartitions lock/unlock)
 
1182
SHOW CREATE TABLE t1;
 
1183
Table   Create Table
 
1184
t1      CREATE TABLE `t1` (
 
1185
  `a` int(11) NOT NULL,
 
1186
  `b` varchar(64) DEFAULT NULL,
 
1187
  PRIMARY KEY (`a`),
 
1188
  KEY `b` (`b`,`a`)
 
1189
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
1190
/*!50100 PARTITION BY RANGE (a)
 
1191
SUBPARTITION BY HASH (a)
 
1192
(PARTITION pNeg VALUES LESS THAN (0)
 
1193
 (SUBPARTITION subp0 ENGINE = InnoDB,
 
1194
  SUBPARTITION subp1 ENGINE = InnoDB),
 
1195
 PARTITION `p0-9` VALUES LESS THAN (10)
 
1196
 (SUBPARTITION subp2 ENGINE = InnoDB,
 
1197
  SUBPARTITION subp3 ENGINE = InnoDB),
 
1198
 PARTITION `p10-99` VALUES LESS THAN (100)
 
1199
 (SUBPARTITION subp4 ENGINE = InnoDB,
 
1200
  SUBPARTITION subp5 ENGINE = InnoDB),
 
1201
 PARTITION `p100-99999` VALUES LESS THAN (100000)
 
1202
 (SUBPARTITION subp6 ENGINE = InnoDB,
 
1203
  SUBPARTITION subp7 ENGINE = InnoDB)) */
 
1204
SELECT * FROM t1;
 
1205
a       b
 
1206
-4      (pNeg-)subp0, Updated, Updated2, Updated from a = -2
 
1207
-222    `p100-99999`(-subp6), Updated from a = 100
 
1208
-21     REPLACEd by REPLACE
 
1209
1       subp3
 
1210
3       subp3
 
1211
10      p10-99
 
1212
1000    `p100-99999`(-subp6)
 
1213
110     `p100-99999`(-subp7), Updated to 103, Updated to 110
 
1214
SHOW CREATE TABLE t2;
 
1215
Table   Create Table
 
1216
t2      CREATE TABLE `t2` (
 
1217
  `a` int(11) NOT NULL,
 
1218
  `b` varchar(64) DEFAULT NULL,
 
1219
  PRIMARY KEY (`a`),
 
1220
  KEY `b` (`b`,`a`)
 
1221
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
1222
/*!50100 PARTITION BY RANGE (a)
 
1223
SUBPARTITION BY HASH (a)
 
1224
(PARTITION pNeg VALUES LESS THAN (0)
 
1225
 (SUBPARTITION subp0 ENGINE = InnoDB,
 
1226
  SUBPARTITION subp1 ENGINE = InnoDB),
 
1227
 PARTITION `p0-9` VALUES LESS THAN (10)
 
1228
 (SUBPARTITION subp2 ENGINE = InnoDB,
 
1229
  SUBPARTITION subp3 ENGINE = InnoDB),
 
1230
 PARTITION `p10-99` VALUES LESS THAN (100)
 
1231
 (SUBPARTITION subp4 ENGINE = InnoDB,
 
1232
  SUBPARTITION subp5 ENGINE = InnoDB),
 
1233
 PARTITION `p100-99999` VALUES LESS THAN (100000)
 
1234
 (SUBPARTITION subp6 ENGINE = InnoDB,
 
1235
  SUBPARTITION subp7 ENGINE = InnoDB)) */
 
1236
SELECT * FROM t2;
 
1237
a       b
 
1238
1       subp3
 
1239
3       subp3
 
1240
10      p10-99
 
1241
1000    `p100-99999`(-subp6)
 
1242
110     `p100-99999`(-subp7), Updated to 103, Updated to 110
 
1243
SHOW CREATE TABLE t3;
 
1244
Table   Create Table
 
1245
t3      CREATE TABLE `t3` (
 
1246
  `a` int(11) NOT NULL,
 
1247
  `b` varchar(64) DEFAULT NULL
 
1248
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
1249
SELECT * FROM t3;
 
1250
a       b
 
1251
-4      (pNeg-)subp0, Updated, Updated2, Updated from a = -2
 
1252
-222    `p100-99999`(-subp6), Updated from a = 100
 
1253
-21     REPLACEd by REPLACE
 
1254
1       subp3
 
1255
3       subp3
 
1256
1000    `p100-99999`(-subp6)
 
1257
110     `p100-99999`(-subp7), Updated to 103, Updated to 110
 
1258
FLUSH STATUS;
 
1259
DELETE t1 PARTITION (pNeg), t3 FROM t1, t3
 
1260
WHERE t1.a = t3.a AND t3.b = 'subp3';
 
1261
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 'PARTITION (pNeg), t3 FROM t1, t3
 
1262
WHERE t1.a = t3.a AND t3.b = 'subp3'' at line 1
 
1263
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1264
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1265
VARIABLE_NAME   VARIABLE_VALUE
 
1266
HANDLER_WRITE   17
 
1267
# Multi table delete without any matching rows
 
1268
FLUSH STATUS;
 
1269
DELETE t1, t2 FROM t1 PARTITION (pNeg), t3, t2 PARTITION (subp3)
 
1270
WHERE t1.a = t3.a AND t3.b = 'subp3' AND t3.a = t2.a;
 
1271
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1272
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1273
VARIABLE_NAME   VARIABLE_VALUE
 
1274
HANDLER_COMMIT  1
 
1275
HANDLER_EXTERNAL_LOCK   12
 
1276
HANDLER_READ_FIRST      1
 
1277
HANDLER_READ_KEY        1
 
1278
HANDLER_READ_RND_NEXT   3
 
1279
HANDLER_WRITE   17
 
1280
# 12 locks (3 in t1, 1 in t3, 2 in t2) x 2 (lock + unlock)
 
1281
# 1 read first (first rnd_next in t2)
 
1282
# 4 read key (1 innodb_get_index in rnd_init in t2 + index read in t2
 
1283
#             + 2 innodb_get_index in index_init in t1)
 
1284
# 3 read rnd next (3 rnd next in t2, 2 rows + 1 empty) 
 
1285
# Multi table delete matching all rows in subp3 (2 rows in per table)
 
1286
FLUSH STATUS;
 
1287
DELETE FROM t2, t3 USING t2 PARTITION (`p0-9`), t3, t1 PARTITION (subp3)
 
1288
WHERE t1.a = t3.a AND t3.b = 'subp3' AND t2.a = t1.a;
 
1289
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1290
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1291
VARIABLE_NAME   VARIABLE_VALUE
 
1292
HANDLER_COMMIT  1
 
1293
HANDLER_DELETE  4
 
1294
HANDLER_EXTERNAL_LOCK   12
 
1295
HANDLER_READ_FIRST      3
 
1296
HANDLER_READ_KEY        9
 
1297
HANDLER_READ_NEXT       2
 
1298
HANDLER_READ_RND        4
 
1299
HANDLER_READ_RND_NEXT   16
 
1300
HANDLER_WRITE   17
 
1301
# 4 delete (2 in t2 + 2 in t3)
 
1302
# 12 locks (3 in t2, 1 in t3, 2 in t1) x 2 (lock + unlock)
 
1303
# 3 read first (1 in t1 + 1 in t3 + 1 in t3, for second row in t1)
 
1304
# 17 read key (1 index_init in t1 + 1 read first in t1 + 
 
1305
#              2 index_init in t2 + 1 index read in t2 +
 
1306
#              1 index_init in t3 + 1 index read in t3 +
 
1307
#              1 index read in t2 +
 
1308
#              1 index_init in t3 + 1 index read in t3 +
 
1309
#              2 index_init in t2 + 2 index read in t2 (from rnd_pos)
 
1310
#              1 index_init in t3 + 2 index read in t3 (from rnd_pos))
 
1311
# 2 read next (1 in t1 + 1 in t1, second row)
 
1312
# 4 read rnd (position on 4 found rows to delete)
 
1313
# 16 rnd next (8 in t3 + 8 in t3, for second row)
 
1314
SELECT * FROM t1 ORDER BY a;
 
1315
a       b
 
1316
-222    `p100-99999`(-subp6), Updated from a = 100
 
1317
-21     REPLACEd by REPLACE
 
1318
-4      (pNeg-)subp0, Updated, Updated2, Updated from a = -2
 
1319
1       subp3
 
1320
3       subp3
 
1321
10      p10-99
 
1322
110     `p100-99999`(-subp7), Updated to 103, Updated to 110
 
1323
1000    `p100-99999`(-subp6)
 
1324
SELECT * FROM t2 ORDER BY a;
 
1325
a       b
 
1326
10      p10-99
 
1327
110     `p100-99999`(-subp7), Updated to 103, Updated to 110
 
1328
1000    `p100-99999`(-subp6)
 
1329
SELECT * FROM t3 ORDER BY a;
 
1330
a       b
 
1331
-222    `p100-99999`(-subp6), Updated from a = 100
 
1332
-21     REPLACEd by REPLACE
 
1333
-4      (pNeg-)subp0, Updated, Updated2, Updated from a = -2
 
1334
110     `p100-99999`(-subp7), Updated to 103, Updated to 110
 
1335
1000    `p100-99999`(-subp6)
 
1336
# Test TRUNCATE TABLE (should fail, since one should use
 
1337
# ALTER TABLE ... TRUNCATE PARTITION instead)
 
1338
TRUNCATE TABLE t1 PARTITION(`p10-99`);
 
1339
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 'PARTITION(`p10-99`)' at line 1
 
1340
# Test of locking in TRUNCATE PARTITION
 
1341
# Note that it does not support truncating subpartitions
 
1342
FLUSH STATUS;
 
1343
ALTER TABLE t1 TRUNCATE PARTITION pNeg;
 
1344
SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
 
1345
WHERE VARIABLE_NAME LIKE 'HANDLER_%' AND VARIABLE_VALUE > 0;
 
1346
VARIABLE_NAME   VARIABLE_VALUE
 
1347
HANDLER_COMMIT  1
 
1348
HANDLER_EXTERNAL_LOCK   6
 
1349
HANDLER_WRITE   17
 
1350
# 6 locks (lock/unlock two subpartitions + table)
 
1351
# Test on non partitioned table
 
1352
SELECT * FROM t3 PARTITION (pNeg);
 
1353
ERROR HY000: PARTITION () clause on non partitioned table
 
1354
DROP TABLE t1, t2, t3;
 
1355
# Test from superseeded WL# 2682
 
1356
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
 
1357
CREATE TABLE `t1` (
 
1358
`id` int(11) default NULL
 
1359
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
1360
PARTITION BY RANGE (id) (
 
1361
PARTITION p0 VALUES LESS THAN (6) ENGINE = MyISAM,
 
1362
PARTITION p1 VALUES LESS THAN (11) ENGINE = MyISAM,
 
1363
PARTITION p2 VALUES LESS THAN (16) ENGINE = MyISAM,
 
1364
PARTITION p3 VALUES LESS THAN (21) ENGINE = MyISAM);
 
1365
INSERT INTO `t1` VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10),
 
1366
(11), (12), (13), (14), (15), (16), (17), (18), (19), (20);
 
1367
SELECT * FROM t1;
 
1368
id
 
1369
1
 
1370
2
 
1371
3
 
1372
4
 
1373
5
 
1374
6
 
1375
7
 
1376
8
 
1377
9
 
1378
10
 
1379
11
 
1380
12
 
1381
13
 
1382
14
 
1383
15
 
1384
16
 
1385
17
 
1386
18
 
1387
19
 
1388
20
 
1389
SELECT * FROM t1 PARTITION (p0);
 
1390
id
 
1391
1
 
1392
2
 
1393
3
 
1394
4
 
1395
5
 
1396
SELECT * FROM t1 PARTITION (p1);
 
1397
id
 
1398
6
 
1399
7
 
1400
8
 
1401
9
 
1402
10
 
1403
SELECT * FROM t1 PARTITION (p2);
 
1404
id
 
1405
11
 
1406
12
 
1407
13
 
1408
14
 
1409
15
 
1410
SELECT * FROM t1 PARTITION (p3);
 
1411
id
 
1412
16
 
1413
17
 
1414
18
 
1415
19
 
1416
20
 
1417
SELECT * FROM t1 PARTITION (p3) WHERE id = 2;
 
1418
id
 
1419
SELECT * FROM t1 PARTITION (foo);
 
1420
ERROR HY000: Unknown partition 'foo' in table 't1'
 
1421
CREATE TABLE `t2` (
 
1422
`id` int(11) NOT NULL DEFAULT 0,
 
1423
PRIMARY KEY (`id`)
 
1424
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
1425
PARTITION BY RANGE (id) (
 
1426
PARTITION p0 VALUES LESS THAN (6) ENGINE = MyISAM,
 
1427
PARTITION p1 VALUES LESS THAN (11) ENGINE = MyISAM,
 
1428
PARTITION p2 VALUES LESS THAN (16) ENGINE = MyISAM,
 
1429
PARTITION p3 VALUES LESS THAN (21) ENGINE = MyISAM);
 
1430
INSERT INTO `t2` VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10),
 
1431
(11), (12), (13), (14), (15), (16), (17), (18), (19), (20);
 
1432
SELECT * FROM t2;
 
1433
id
 
1434
1
 
1435
2
 
1436
3
 
1437
4
 
1438
5
 
1439
6
 
1440
7
 
1441
8
 
1442
9
 
1443
10
 
1444
11
 
1445
12
 
1446
13
 
1447
14
 
1448
15
 
1449
16
 
1450
17
 
1451
18
 
1452
19
 
1453
20
 
1454
SELECT * FROM t2 PARTITION (p0);
 
1455
id
 
1456
1
 
1457
2
 
1458
3
 
1459
4
 
1460
5
 
1461
SELECT * FROM t2 PARTITION (p1);
 
1462
id
 
1463
6
 
1464
7
 
1465
8
 
1466
9
 
1467
10
 
1468
SELECT * FROM t2 PARTITION (p2);
 
1469
id
 
1470
11
 
1471
12
 
1472
13
 
1473
14
 
1474
15
 
1475
SELECT * FROM t2 PARTITION (p3);
 
1476
id
 
1477
16
 
1478
17
 
1479
18
 
1480
19
 
1481
20
 
1482
SELECT * FROM t2 PARTITION (p3) ORDER BY id;
 
1483
id
 
1484
16
 
1485
17
 
1486
18
 
1487
19
 
1488
20
 
1489
SELECT * FROM t2 PARTITION (p3) WHERE id = 2;
 
1490
id
 
1491
SELECT * FROM t2 PARTITION (foo);
 
1492
ERROR HY000: Unknown partition 'foo' in table 't2'
 
1493
CREATE TABLE `t3` (
 
1494
`id` int(32) default NULL,
 
1495
`name` varchar(32) default NULL
 
1496
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
 
1497
PARTITION BY LIST (id) (
 
1498
PARTITION p0 VALUES IN (1,3,5,7),
 
1499
PARTITION p1 VALUES IN (0,2,4,6,8),
 
1500
PARTITION p2 VALUES IN (9,10,11,12,13)
 
1501
);
 
1502
INSERT INTO `t3` VALUES (1,'first'), (3,'third'),(5,'fifth'),(7,'seventh'),(0,'zilch'),(2,'second'),(4,'fourth'),(6,'sixth'),(8,'eighth'),(9,'ninth'),(10,'tenth'),(11,'eleventh'),(12,'twelfth'),(13,'thirteenth');
 
1503
SELECT * FROM `t3`;
 
1504
id      name
 
1505
1       first
 
1506
3       third
 
1507
5       fifth
 
1508
7       seventh
 
1509
0       zilch
 
1510
2       second
 
1511
4       fourth
 
1512
6       sixth
 
1513
8       eighth
 
1514
9       ninth
 
1515
10      tenth
 
1516
11      eleventh
 
1517
12      twelfth
 
1518
13      thirteenth
 
1519
SELECT * FROM `t3` PARTITION (p0);
 
1520
id      name
 
1521
1       first
 
1522
3       third
 
1523
5       fifth
 
1524
7       seventh
 
1525
SELECT * FROM `t3` PARTITION (p1);
 
1526
id      name
 
1527
0       zilch
 
1528
2       second
 
1529
4       fourth
 
1530
6       sixth
 
1531
8       eighth
 
1532
SELECT * FROM `t3` PARTITION (p2);
 
1533
id      name
 
1534
9       ninth
 
1535
10      tenth
 
1536
11      eleventh
 
1537
12      twelfth
 
1538
13      thirteenth
 
1539
SELECT * FROM `t3` PARTITION (p2) ORDER BY id;
 
1540
id      name
 
1541
9       ninth
 
1542
10      tenth
 
1543
11      eleventh
 
1544
12      twelfth
 
1545
13      thirteenth
 
1546
DROP TABLE IF EXISTS `t4`;
 
1547
Warnings:
 
1548
Note    1051    Unknown table 'test.t4'
 
1549
CREATE TABLE `t4` (
 
1550
`id` int(32) default NULL
 
1551
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PARTITION BY HASH (id) ;
 
1552
INSERT INTO `t4` SELECT * FROM `t2`;
 
1553
INSERT INTO `t4` SELECT * FROM `t2` ORDER BY id;
 
1554
CREATE TABLE `t5` (
 
1555
id int(32),
 
1556
name varchar(64),
 
1557
purchased date)
 
1558
PARTITION BY RANGE( YEAR(purchased) )
 
1559
SUBPARTITION BY HASH( TO_DAYS(purchased) ) (
 
1560
PARTITION p0 VALUES LESS THAN (1990) (
 
1561
SUBPARTITION s0,
 
1562
SUBPARTITION s1
 
1563
),
 
1564
PARTITION p1 VALUES LESS THAN (2000) (
 
1565
SUBPARTITION s2,
 
1566
SUBPARTITION s3
 
1567
),
 
1568
PARTITION p2 VALUES LESS THAN MAXVALUE (
 
1569
SUBPARTITION s4,
 
1570
SUBPARTITION s5
 
1571
)
 
1572
);
 
1573
INSERT INTO `t5` VALUES (1, 'aaaaaaa', '2006-01-05 00:00:00');
 
1574
INSERT INTO `t5` VALUES (2, 'bbbbbbb', '2005-08-05 00:00:00');
 
1575
INSERT INTO `t5` VALUES (3, 'ccccccc', '1985-08-07 00:00:00');
 
1576
INSERT INTO `t5` VALUES (4, 'ddddddd', '2000-01-01 00:00:00');
 
1577
INSERT INTO `t5` VALUES (5, 'eeeeeee', '1999-12-01 00:00:00');
 
1578
INSERT INTO `t5` VALUES (6, 'fffffff', '2003-11-12 00:00:00');
 
1579
INSERT INTO `t5` VALUES (7, 'ggggggg', '1990-01-05 00:00:00');
 
1580
INSERT INTO `t5` VALUES (8, 'hhhhhhh', '1978-01-05 00:00:00');
 
1581
INSERT INTO `t5` VALUES (9, 'iiiiiii', '1979-01-05 00:00:00');
 
1582
INSERT INTO `t5` VALUES (10, 'jjjjjjj', '1992-01-05 00:00:00');
 
1583
INSERT INTO `t5` VALUES (11, 'kkkkkkk', '1993-01-05 00:00:00');
 
1584
INSERT INTO `t5` VALUES (12, 'mmmmmmm', '1994-01-05 00:00:00');
 
1585
INSERT INTO `t5` VALUES (13, 'nnnnnnn', '1989-01-05 00:00:00');
 
1586
INSERT INTO `t5` VALUES (14, 'ooooooo', '1983-12-05 00:00:00');
 
1587
INSERT INTO `t5` VALUES (15, 'ppppppp', '1986-06-05 00:00:00');
 
1588
INSERT INTO `t5` VALUES (16, 'qqqqqqq', '1974-04-11 00:00:00');
 
1589
INSERT INTO `t5` VALUES (17, 'qqqqqqq', '1960-03-15 00:00:00');
 
1590
INSERT INTO `t5` VALUES (18, 'sssssss', '1950-09-23 00:00:00');
 
1591
INSERT INTO `t5` VALUES (19, 'ttttttt', '1999-08-02 00:00:00');
 
1592
INSERT INTO `t5` VALUES (20, 'uuuuuuu', '1994-05-28 00:00:00');
 
1593
SELECT * FROM `t5`;
 
1594
id      name    purchased
 
1595
8       hhhhhhh 1978-01-05
 
1596
13      nnnnnnn 1989-01-05
 
1597
14      ooooooo 1983-12-05
 
1598
18      sssssss 1950-09-23
 
1599
3       ccccccc 1985-08-07
 
1600
9       iiiiiii 1979-01-05
 
1601
15      ppppppp 1986-06-05
 
1602
16      qqqqqqq 1974-04-11
 
1603
17      qqqqqqq 1960-03-15
 
1604
5       eeeeeee 1999-12-01
 
1605
12      mmmmmmm 1994-01-05
 
1606
7       ggggggg 1990-01-05
 
1607
10      jjjjjjj 1992-01-05
 
1608
11      kkkkkkk 1993-01-05
 
1609
19      ttttttt 1999-08-02
 
1610
20      uuuuuuu 1994-05-28
 
1611
2       bbbbbbb 2005-08-05
 
1612
6       fffffff 2003-11-12
 
1613
1       aaaaaaa 2006-01-05
 
1614
4       ddddddd 2000-01-01
 
1615
SELECT * FROM `t5` PARTITION(p0) ORDER BY id;
 
1616
id      name    purchased
 
1617
3       ccccccc 1985-08-07
 
1618
8       hhhhhhh 1978-01-05
 
1619
9       iiiiiii 1979-01-05
 
1620
13      nnnnnnn 1989-01-05
 
1621
14      ooooooo 1983-12-05
 
1622
15      ppppppp 1986-06-05
 
1623
16      qqqqqqq 1974-04-11
 
1624
17      qqqqqqq 1960-03-15
 
1625
18      sssssss 1950-09-23
 
1626
SELECT * FROM `t5` PARTITION(s0) ORDER BY id;
 
1627
id      name    purchased
 
1628
8       hhhhhhh 1978-01-05
 
1629
13      nnnnnnn 1989-01-05
 
1630
14      ooooooo 1983-12-05
 
1631
18      sssssss 1950-09-23
 
1632
SELECT * FROM `t5` PARTITION(s1) ORDER BY id;
 
1633
id      name    purchased
 
1634
3       ccccccc 1985-08-07
 
1635
9       iiiiiii 1979-01-05
 
1636
15      ppppppp 1986-06-05
 
1637
16      qqqqqqq 1974-04-11
 
1638
17      qqqqqqq 1960-03-15
 
1639
SELECT * FROM `t5` PARTITION(p1) ORDER BY id;
 
1640
id      name    purchased
 
1641
5       eeeeeee 1999-12-01
 
1642
7       ggggggg 1990-01-05
 
1643
10      jjjjjjj 1992-01-05
 
1644
11      kkkkkkk 1993-01-05
 
1645
12      mmmmmmm 1994-01-05
 
1646
19      ttttttt 1999-08-02
 
1647
20      uuuuuuu 1994-05-28
 
1648
SELECT * FROM `t5` PARTITION(s2) ORDER BY id;
 
1649
id      name    purchased
 
1650
5       eeeeeee 1999-12-01
 
1651
12      mmmmmmm 1994-01-05
 
1652
SELECT * FROM `t5` PARTITION(s3) ORDER BY id;
 
1653
id      name    purchased
 
1654
7       ggggggg 1990-01-05
 
1655
10      jjjjjjj 1992-01-05
 
1656
11      kkkkkkk 1993-01-05
 
1657
19      ttttttt 1999-08-02
 
1658
20      uuuuuuu 1994-05-28
 
1659
SELECT * FROM `t5` PARTITION(p2) ORDER BY id;
 
1660
id      name    purchased
 
1661
1       aaaaaaa 2006-01-05
 
1662
2       bbbbbbb 2005-08-05
 
1663
4       ddddddd 2000-01-01
 
1664
6       fffffff 2003-11-12
 
1665
SELECT * FROM `t5` PARTITION(s4) ORDER BY id;
 
1666
id      name    purchased
 
1667
2       bbbbbbb 2005-08-05
 
1668
6       fffffff 2003-11-12
 
1669
SELECT * FROM `t5` PARTITION(s5) ORDER BY id;
 
1670
id      name    purchased
 
1671
1       aaaaaaa 2006-01-05
 
1672
4       ddddddd 2000-01-01
 
1673
drop table t1,t2,t3,t4,t5;
 
1674
create table t1 (a int) partition by hash(a) partitions 3;
 
1675
insert into t1 values(1),(2),(3);
 
1676
explain partitions select * from t1 where a=1;
 
1677
id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    Extra
 
1678
1       SIMPLE  t1      p1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1679
explain partitions select * from t1 partition (p1) where a=1;
 
1680
id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    Extra
 
1681
1       SIMPLE  t1      p1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1682
explain partitions select * from t1 partition (p1) where a=1 or a=2;
 
1683
id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    Extra
 
1684
1       SIMPLE  t1      p1      ALL     NULL    NULL    NULL    NULL    2       Using where
 
1685
explain partitions select * from t1 partition (p2) where a=1;
 
1686
id      select_type     table   partitions      type    possible_keys   key     key_len ref     rows    Extra
 
1687
1       SIMPLE  t1      NULL    ALL     NULL    NULL    NULL    NULL    0       Using where
 
1688
drop table t1;
 
1689
#
 
1690
# Bug#59864: Crash if table empty: DELETE FROM t2 PARTITION (subp3).
 
1691
#
 
1692
CREATE TABLE t1
 
1693
(a INT NOT NULL,
 
1694
b varchar (64),
 
1695
INDEX (b,a),
 
1696
PRIMARY KEY (a))
 
1697
PARTITION BY RANGE (a)
 
1698
SUBPARTITION BY HASH (a) SUBPARTITIONS 3
 
1699
(PARTITION pNeg VALUES LESS THAN (0)
 
1700
(SUBPARTITION subp0,
 
1701
SUBPARTITION subp1,
 
1702
SUBPARTITION subp2),
 
1703
PARTITION `p0-29` VALUES LESS THAN (30)
 
1704
(SUBPARTITION subp3,
 
1705
SUBPARTITION subp4,
 
1706
SUBPARTITION subp5),
 
1707
PARTITION `p30-299` VALUES LESS THAN (300)
 
1708
(SUBPARTITION subp6,
 
1709
SUBPARTITION subp7,
 
1710
SUBPARTITION subp8),
 
1711
PARTITION `p300-2999` VALUES LESS THAN (3000)
 
1712
(SUBPARTITION subp9,
 
1713
SUBPARTITION subp10,
 
1714
SUBPARTITION subp11),
 
1715
PARTITION `p3000-299999` VALUES LESS THAN (300000)
 
1716
(SUBPARTITION subp12,
 
1717
SUBPARTITION subp13,
 
1718
SUBPARTITION subp14));
 
1719
SHOW CREATE TABLE t1;
 
1720
Table   Create Table
 
1721
t1      CREATE TABLE `t1` (
 
1722
  `a` int(11) NOT NULL,
 
1723
  `b` varchar(64) DEFAULT NULL,
 
1724
  PRIMARY KEY (`a`),
 
1725
  KEY `b` (`b`,`a`)
 
1726
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 
1727
/*!50100 PARTITION BY RANGE (a)
 
1728
SUBPARTITION BY HASH (a)
 
1729
(PARTITION pNeg VALUES LESS THAN (0)
 
1730
 (SUBPARTITION subp0 ENGINE = InnoDB,
 
1731
  SUBPARTITION subp1 ENGINE = InnoDB,
 
1732
  SUBPARTITION subp2 ENGINE = InnoDB),
 
1733
 PARTITION `p0-29` VALUES LESS THAN (30)
 
1734
 (SUBPARTITION subp3 ENGINE = InnoDB,
 
1735
  SUBPARTITION subp4 ENGINE = InnoDB,
 
1736
  SUBPARTITION subp5 ENGINE = InnoDB),
 
1737
 PARTITION `p30-299` VALUES LESS THAN (300)
 
1738
 (SUBPARTITION subp6 ENGINE = InnoDB,
 
1739
  SUBPARTITION subp7 ENGINE = InnoDB,
 
1740
  SUBPARTITION subp8 ENGINE = InnoDB),
 
1741
 PARTITION `p300-2999` VALUES LESS THAN (3000)
 
1742
 (SUBPARTITION subp9 ENGINE = InnoDB,
 
1743
  SUBPARTITION subp10 ENGINE = InnoDB,
 
1744
  SUBPARTITION subp11 ENGINE = InnoDB),
 
1745
 PARTITION `p3000-299999` VALUES LESS THAN (300000)
 
1746
 (SUBPARTITION subp12 ENGINE = InnoDB,
 
1747
  SUBPARTITION subp13 ENGINE = InnoDB,
 
1748
  SUBPARTITION subp14 ENGINE = InnoDB)) */
 
1749
INSERT INTO t1 VALUES (-9, "negative nine"), (-8, "-8"), (-7, "-7"), (-6, "-6"), (-5, "-5"), (-4, "-4"), (-3, "-3"), (-2, "-2"), (-1, "-1");
 
1750
INSERT INTO t1 VALUES (9, "nine"), (8, "8"), (7, "7"), (6, "6"), (5, "5"), (4, "4"), (3, "3"), (2, "2"), (1, "1");
 
1751
INSERT INTO t1 VALUES (39, "Thirty nine"), (38, "38"), (37, "37"), (36, "36"), (35, "35"), (34, "34"), (33, "33"), (32, "32"), (31, "31");
 
1752
INSERT INTO t1 VALUES (339, "Three hundred thirty nine"), (338, "338"), (337, "337"), (336, "336"), (335, "335"), (334, "334"), (333, "333"), (332, "332"), (331, "331");
 
1753
INSERT INTO t1 VALUES (3339, "Three thousand three hundred thirty nine"), (3338, "3338"), (3337, "3337"), (3336, "3336"), (3335, "3335"), (3334, "3334"), (3333, "3333"), (3332, "3332"), (3331, "3331");
 
1754
SELECT * FROM t1;
 
1755
a       b
 
1756
-1      -1
 
1757
-2      -2
 
1758
-3      -3
 
1759
-4      -4
 
1760
-5      -5
 
1761
-6      -6
 
1762
-7      -7
 
1763
-8      -8
 
1764
-9      negative nine
 
1765
1       1
 
1766
2       2
 
1767
3       3
 
1768
31      31
 
1769
32      32
 
1770
33      33
 
1771
331     331
 
1772
332     332
 
1773
333     333
 
1774
3331    3331
 
1775
3332    3332
 
1776
3333    3333
 
1777
3334    3334
 
1778
3335    3335
 
1779
3336    3336
 
1780
3337    3337
 
1781
3338    3338
 
1782
3339    Three thousand three hundred thirty nine
 
1783
334     334
 
1784
335     335
 
1785
336     336
 
1786
337     337
 
1787
338     338
 
1788
339     Three hundred thirty nine
 
1789
34      34
 
1790
35      35
 
1791
36      36
 
1792
37      37
 
1793
38      38
 
1794
39      Thirty nine
 
1795
4       4
 
1796
5       5
 
1797
6       6
 
1798
7       7
 
1799
8       8
 
1800
9       nine
 
1801
SELECT * FROM t1 PARTITION (subp3);
 
1802
a       b
 
1803
3       3
 
1804
6       6
 
1805
9       nine
 
1806
DELETE FROM t1 PARTITION (subp3);
 
1807
SELECT * FROM t1;
 
1808
a       b
 
1809
-1      -1
 
1810
-2      -2
 
1811
-3      -3
 
1812
-4      -4
 
1813
-5      -5
 
1814
-6      -6
 
1815
-7      -7
 
1816
-8      -8
 
1817
-9      negative nine
 
1818
1       1
 
1819
2       2
 
1820
31      31
 
1821
32      32
 
1822
33      33
 
1823
331     331
 
1824
332     332
 
1825
333     333
 
1826
3331    3331
 
1827
3332    3332
 
1828
3333    3333
 
1829
3334    3334
 
1830
3335    3335
 
1831
3336    3336
 
1832
3337    3337
 
1833
3338    3338
 
1834
3339    Three thousand three hundred thirty nine
 
1835
334     334
 
1836
335     335
 
1837
336     336
 
1838
337     337
 
1839
338     338
 
1840
339     Three hundred thirty nine
 
1841
34      34
 
1842
35      35
 
1843
36      36
 
1844
37      37
 
1845
38      38
 
1846
39      Thirty nine
 
1847
4       4
 
1848
5       5
 
1849
7       7
 
1850
8       8
 
1851
SELECT * FROM t1 PARTITION (subp3);
 
1852
a       b
 
1853
DELETE FROM t1 PARTITION (`p0-29`);
 
1854
SELECT * FROM t1;
 
1855
a       b
 
1856
-1      -1
 
1857
-2      -2
 
1858
-3      -3
 
1859
-4      -4
 
1860
-5      -5
 
1861
-6      -6
 
1862
-7      -7
 
1863
-8      -8
 
1864
-9      negative nine
 
1865
31      31
 
1866
32      32
 
1867
33      33
 
1868
331     331
 
1869
332     332
 
1870
333     333
 
1871
3331    3331
 
1872
3332    3332
 
1873
3333    3333
 
1874
3334    3334
 
1875
3335    3335
 
1876
3336    3336
 
1877
3337    3337
 
1878
3338    3338
 
1879
3339    Three thousand three hundred thirty nine
 
1880
334     334
 
1881
335     335
 
1882
336     336
 
1883
337     337
 
1884
338     338
 
1885
339     Three hundred thirty nine
 
1886
34      34
 
1887
35      35
 
1888
36      36
 
1889
37      37
 
1890
38      38
 
1891
39      Thirty nine
 
1892
SELECT * FROM t1 PARTITION (`p0-29`);
 
1893
a       b
 
1894
ALTER TABLE t1 PARTITION BY HASH (a) PARTITIONS 3;
 
1895
DELETE FROM t1 PARTITION (p2);
 
1896
SELECT * FROM t1;
 
1897
a       b
 
1898
-1      -1
 
1899
-3      -3
 
1900
-4      -4
 
1901
-6      -6
 
1902
-7      -7
 
1903
-9      negative nine
 
1904
31      31
 
1905
33      33
 
1906
331     331
 
1907
333     333
 
1908
3331    3331
 
1909
3333    3333
 
1910
3334    3334
 
1911
3336    3336
 
1912
3337    3337
 
1913
3339    Three thousand three hundred thirty nine
 
1914
334     334
 
1915
336     336
 
1916
337     337
 
1917
339     Three hundred thirty nine
 
1918
34      34
 
1919
36      36
 
1920
37      37
 
1921
39      Thirty nine
 
1922
SELECT * FROM t1 PARTITION (p2);
 
1923
a       b
 
1924
DROP TABLE t1;
 
1925
#
 
1926
# Test explicit partition selection on a non partitioned temp table
 
1927
#
 
1928
CREATE TEMPORARY TABLE t1 (a INT);
 
1929
SELECT * FROM t1 PARTITION(pNonexisting);
 
1930
ERROR HY000: PARTITION () clause on non partitioned table
 
1931
DROP TEMPORARY TABLE t1;
 
1932
#
 
1933
# Test CREATE LIKE does not take PARTITION clause
 
1934
#
 
1935
CREATE TABLE t1 (a INT) PARTITION BY HASH (a) PARTITIONS 3;
 
1936
CREATE TABLE t2 LIKE t1 PARTITION (p0, p2);
 
1937
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 'PARTITION (p0, p2)' at line 1
 
1938
DROP TABLE t1;
 
1939
SET @@default_storage_engine = @old_default_storage_engine;