MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
partition_syntax.inc
1 ################################################################################
2 # inc/partition_syntax.inc #
3 # #
4 # Purpose: #
5 # Tests around Create partitioned tables syntax #
6 # #
7 #------------------------------------------------------------------------------#
8 # Original Author: mleich #
9 # Original Date: 2006-03-05 #
10 # Change Author: #
11 # Change Date: #
12 # Change: #
13 ################################################################################
14 
15 # FIXME Implement testcases, where it is checked that all create and
16 # alter table statements
17 # - with missing mandatory parameters are rejected
18 # - with optional parameters are accepted
19 # - with wrong combinations of optional parameters are rejected
20 # - ............
21 
22 --echo
23 --echo #========================================================================
24 --echo # 1. Any PRIMARY KEYs or UNIQUE INDEXes must contain the columns used
25 --echo # within the partitioning functions
26 --echo #========================================================================
27 --disable_warnings
28 DROP TABLE IF EXISTS t1;
29 --enable_warnings
30 #
31 --echo #------------------------------------------------------------------------
32 --echo # 1.1 column of partitioning function not included in PRIMARY KEY
33 --echo # PARTITION BY HASH/KEY/LIST/RANGE
34 --echo #------------------------------------------------------------------------
35 #----------- PARTITION BY HASH
36 --error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
37 eval CREATE TABLE t1 (
38 $column_list,
39 PRIMARY KEY (f_int2)
40 )
41 PARTITION BY HASH(f_int1) PARTITIONS 2;
42 --error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
43 eval CREATE TABLE t1 (
44 $column_list,
45 PRIMARY KEY (f_int2)
46 )
47 PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
48 #----------- PARTITION BY KEY
49 --error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
50 eval CREATE TABLE t1 (
51 $column_list,
52 PRIMARY KEY (f_int2)
53 )
54 PARTITION BY KEY(f_int1) PARTITIONS 2;
55 --error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
56 eval CREATE TABLE t1 (
57 $column_list,
58 PRIMARY KEY (f_int2)
59 )
60 PARTITION BY KEY(f_int1,f_int2) PARTITIONS 2;
61 #----------- PARTITION BY LIST
62 --error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
63 eval CREATE TABLE t1 (
64 $column_list,
65 PRIMARY KEY (f_int2)
66 )
67 PARTITION BY LIST(f_int1)
68 (PARTITION part1 VALUES IN (1));
69 --error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
70 eval CREATE TABLE t1 (
71 $column_list,
72 PRIMARY KEY (f_int2)
73 )
74 PARTITION BY LIST(f_int1 + f_int2)
75 (PARTITION part1 VALUES IN (1));
76 #----------- PARTITION BY RANGE
77 --error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
78 eval CREATE TABLE t1 (
79 $column_list,
80 PRIMARY KEY (f_int2)
81 )
82 PARTITION BY RANGE(f_int1)
83 (PARTITION part1 VALUES LESS THAN (1));
84 --error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
85 eval CREATE TABLE t1 (
86 $column_list,
87 PRIMARY KEY (f_int2)
88 )
89 PARTITION BY RANGE(f_int1 + f_int2)
90 (PARTITION part1 VALUES LESS THAN (1));
91 
92 #
93 --echo #------------------------------------------------------------------------
94 --echo # 1.2 column of partitioning function not included in UNIQUE INDEX
95 --echo # PARTITION BY HASH/KEY/LIST/RANGE
96 --echo # Variant a) Without additional PRIMARY KEY
97 --echo # Variant b) With correct additional PRIMARY KEY
98 --echo # Variant 1) one column in partitioning function
99 --echo # Variant 2) two columns in partitioning function
100 --echo #------------------------------------------------------------------------
101 # Note: If the CREATE TABLE statement contains no PRIMARY KEY but
102 # UNIQUE INDEXes the MySQL layer tells the storage to use
103 # the first UNIQUE INDEX as PRIMARY KEY.
104 
105 let $unique_index= UNIQUE INDEX (f_int2);
106 
107 #----------- PARTITION BY HASH
108 let $partition_scheme= PARTITION BY HASH(f_int1) PARTITIONS 2;
109 --source suite/parts/inc/partition_syntax_2.inc
110 let $partition_scheme= PARTITION BY HASH(f_int1 + f_int2) PARTITIONS 2;
111 --source suite/parts/inc/partition_syntax_2.inc
112 #----------- PARTITION BY KEY
113 let $partition_scheme= PARTITION BY KEY(f_int1) PARTITIONS 2;
114 --source suite/parts/inc/partition_syntax_2.inc
115 let $partition_scheme= PARTITION BY KEY(f_int1,f_int2) PARTITIONS 2;
116 --source suite/parts/inc/partition_syntax_2.inc
117 #----------- PARTITION BY LIST
118 let $partition_scheme= PARTITION BY LIST(MOD(f_int1,3))
119  (PARTITION partN VALUES IN (NULL),
120  PARTITION part0 VALUES IN (0),
121  PARTITION part1 VALUES IN (1),
122  PARTITION part2 VALUES IN (2));
123 --source suite/parts/inc/partition_syntax_2.inc
124 let $partition_scheme= PARTITION BY LIST(MOD(f_int1 + f_int2,3))
125  (PARTITION partN VALUES IN (NULL),
126  PARTITION part0 VALUES IN (0),
127  PARTITION part1 VALUES IN (1),
128  PARTITION part2 VALUES IN (2));
129 --source suite/parts/inc/partition_syntax_2.inc
130 #----------- PARTITION BY RANGE
131 let $partition_scheme= PARTITION BY RANGE(f_int1)
132  (PARTITION part1 VALUES LESS THAN (1),
133  PARTITION part2 VALUES LESS THAN (2147483646));
134 --source suite/parts/inc/partition_syntax_2.inc
135 let $partition_scheme= PARTITION BY RANGE(f_int1 + f_int2)
136  (PARTITION part1 VALUES LESS THAN (1),
137  PARTITION part2 VALUES LESS THAN (2147483646));
138 --source suite/parts/inc/partition_syntax_2.inc
139 
140 #
141 --echo #------------------------------------------------------------------------
142 --echo # 1.3 column of subpartitioning function not included in PRIMARY KEY
143 --echo # PARTITION BY RANGE/LIST -- SUBPARTITION BY HASH/KEY
144 --echo #------------------------------------------------------------------------
145 
146 #----------- PARTITION BY RANGE -- SUBPARTITION BY HASH
147 --error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
148 eval CREATE TABLE t1 (
149 $column_list,
150 PRIMARY KEY (f_int2)
151 )
152 PARTITION BY RANGE(f_int2) SUBPARTITION BY HASH(f_int1)
153 (PARTITION part1 VALUES LESS THAN (1)
154  (SUBPARTITION subpart1));
155 #----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
156 --error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
157 eval CREATE TABLE t1 (
158 $column_list,
159 PRIMARY KEY (f_int2)
160 )
161 PARTITION BY RANGE(f_int2) SUBPARTITION BY KEY(f_int1)
162 (PARTITION part1 VALUES LESS THAN (1)
163  (SUBPARTITION subpart1));
164 #----------- PARTITION BY LIST -- SUBPARTITION BY HASH
165 --error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
166 eval CREATE TABLE t1 (
167 $column_list,
168 PRIMARY KEY (f_int2)
169 )
170 PARTITION BY LIST(f_int2) SUBPARTITION BY HASH(f_int1)
171 (PARTITION part1 VALUES IN (1)
172  (SUBPARTITION subpart1));
173 #----------- PARTITION BY LIST -- SUBPARTITION BY KEY
174 --error ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF
175 eval CREATE TABLE t1 (
176 $column_list,
177 PRIMARY KEY (f_int2)
178 )
179 PARTITION BY LIST(f_int2) SUBPARTITION BY KEY(f_int1)
180 (PARTITION part1 VALUES IN (1)
181  (SUBPARTITION subpart1));
182 
183 #
184 --echo #------------------------------------------------------------------------
185 --echo # 1.4 column of subpartitioning function not included in UNIQUE INDEX
186 --echo # PARTITION BY RANGE/LIST -- SUBPARTITION BY HASH/KEY
187 --echo # Variant a) Without additional PRIMARY KEY
188 --echo # Variant b) With correct additional PRIMARY KEY
189 --echo #------------------------------------------------------------------------
190 let $partition_scheme= PARTITION BY RANGE(f_int2)
191 SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 3
192  (PARTITION part1 VALUES LESS THAN (1),
193  PARTITION part2 VALUES LESS THAN (2147483646));
194 --source suite/parts/inc/partition_syntax_2.inc
195 #----------- PARTITION BY RANGE -- SUBPARTITION BY KEY
196 let $partition_scheme= PARTITION BY RANGE(f_int2)
197 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 3
198  (PARTITION part1 VALUES LESS THAN (1),
199  PARTITION part2 VALUES LESS THAN (2147483646));
200 --source suite/parts/inc/partition_syntax_2.inc
201 #----------- PARTITION BY LIST -- SUBPARTITION BY HASH
202 let $partition_scheme= PARTITION BY LIST(MOD(f_int2,3))
203 SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
204  (PARTITION partN VALUES IN (NULL),
205  PARTITION part0 VALUES IN (0),
206  PARTITION part1 VALUES IN (1),
207  PARTITION part2 VALUES IN (2));
208 --source suite/parts/inc/partition_syntax_2.inc
209 #----------- PARTITION BY LIST -- SUBPARTITION BY KEY
210 let $partition_scheme= PARTITION BY LIST(MOD(f_int2,3))
211 SUBPARTITION BY KEY(f_int1) SUBPARTITIONS 2
212  (PARTITION partN VALUES IN (NULL),
213  PARTITION part0 VALUES IN (0),
214  PARTITION part1 VALUES IN (1),
215  PARTITION part2 VALUES IN (2));
216 --source suite/parts/inc/partition_syntax_2.inc
217 
218 --echo
219 --echo #========================================================================
220 --echo # 2 Some properties around subpartitioning
221 --echo #========================================================================
222 --echo #------------------------------------------------------------------------
223 --echo # 2.1 Subpartioned table without subpartitioning rule must be rejected
224 --echo #------------------------------------------------------------------------
225 --disable_warnings
226 DROP TABLE IF EXISTS t1;
227 --enable_warnings
228 # Bug#15961 Partitions: Creation of subpart. table without subpart. rule not rejected
229 --error ER_SUBPARTITION_ERROR
230 eval CREATE TABLE t1 (
231 $column_list
232 )
233 PARTITION BY RANGE(f_int1)
234 ( PARTITION part1 VALUES LESS THAN (1000) (SUBPARTITION subpart11));
235 --echo #------------------------------------------------------------------------
236 --echo # 2.2 Every partition must have the same number of subpartitions.
237 --echo # This is a limitation of MySQL 5.1, which could be removed in
238 --echo # later releases.
239 --echo #------------------------------------------------------------------------
240 --error ER_PARSE_ERROR
241 eval CREATE TABLE t1 (
242 $column_list,
243 PRIMARY KEY (f_int1)
244 )
245 PARTITION BY RANGE(f_int1) SUBPARTITION BY KEY(f_int1)
246 (
247  PARTITION part1 VALUES LESS THAN (0)
248  (SUBPARTITION subpart1),
249  PARTITION part2 VALUES LESS THAN ($max_row_div4)
250  (SUBPARTITION subpart1, SUBPARTITION subpart2));
251 
252 --echo
253 --echo #========================================================================
254 --echo # 3 VALUES clauses
255 --echo #========================================================================
256 --echo #------------------------------------------------------------------------
257 --echo # 3.1 The constants in VALUES IN clauses must differ
258 --echo #------------------------------------------------------------------------
259 --error ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR
260 eval CREATE TABLE t1 (
261 $column_list
262 )
263 PARTITION BY LIST(MOD(f_int1,2))
264 ( PARTITION part1 VALUES IN (-1),
265  PARTITION part2 VALUES IN (0),
266  PARTITION part3 VALUES IN (-1));
267 # constant followed by the same constant
268 --error ER_RANGE_NOT_INCREASING_ERROR
269 CREATE TABLE t1 (f1 BIGINT, f2 BIGINT)
270 PARTITION BY RANGE(f1)
271 (PARTITION part1 VALUES LESS THAN (0),
272 PARTITION part2 VALUES LESS THAN (0),
273 PARTITION part3 VALUES LESS THAN (10000));
274 
275 --echo #------------------------------------------------------------------------
276 --echo # 3.2 The constants in VALUES LESS must be in increasing order
277 --echo #------------------------------------------------------------------------
278 # constant followed somewhere by the smaller constant
279 --error ER_RANGE_NOT_INCREASING_ERROR
280 CREATE TABLE t1 (f1 BIGINT, f2 BIGINT)
281 PARTITION BY RANGE(f1)
282 (PARTITION part1 VALUES LESS THAN (0),
283 PARTITION part2 VALUES LESS THAN (-1),
284 PARTITION part3 VALUES LESS THAN (10000));
285 
286 --echo #------------------------------------------------------------------------
287 --echo # 3.3 LIST partitions must be defined with VALUES IN
288 --echo #------------------------------------------------------------------------
289 --error ER_PARTITION_WRONG_VALUES_ERROR
290 eval CREATE TABLE t1 (
291 $column_list
292 )
293 PARTITION BY LIST(MOD(f_int1,2))
294 ( PARTITION part1 VALUES LESS THAN (-1),
295  PARTITION part2 VALUES LESS THAN (0),
296  PARTITION part3 VALUES LESS THAN (1000));
297 
298 --echo #------------------------------------------------------------------------
299 --echo # 3.4 RANGE partitions must be defined with VALUES LESS THAN
300 --echo #------------------------------------------------------------------------
301 --error ER_PARTITION_WRONG_VALUES_ERROR
302 eval CREATE TABLE t1 (
303 $column_list
304 )
305 PARTITION BY RANGE(f_int1)
306 ( PARTITION part1 VALUES IN (-1),
307  PARTITION part2 VALUES IN (0),
308  PARTITION part3 VALUES IN (1000));
309 
310 --echo #------------------------------------------------------------------------
311 --echo # 3.5 Use of NULL in VALUES clauses
312 --echo #------------------------------------------------------------------------
313 --echo # 3.5.1 NULL in RANGE partitioning clause
314 --echo # 3.5.1.1 VALUE LESS THAN (NULL) is not allowed
315 --error ER_NULL_IN_VALUES_LESS_THAN
316 eval CREATE TABLE t1 (
317 $column_list
318 )
319 PARTITION BY RANGE(f_int1)
320 ( PARTITION part1 VALUES LESS THAN (NULL),
321  PARTITION part2 VALUES LESS THAN (1000));
322 --echo # 3.5.1.2 VALUE LESS THAN (NULL) is not allowed
323 --error ER_NULL_IN_VALUES_LESS_THAN
324 eval CREATE TABLE t1 (
325 $column_list
326 )
327 PARTITION BY RANGE(f_int1)
328 ( PARTITION part1 VALUES LESS THAN (NULL),
329  PARTITION part2 VALUES LESS THAN (1000));
330 --echo # 3.5.2 NULL in LIST partitioning clause
331 --echo # 3.5.2.1 VALUE IN (NULL)
332 eval CREATE TABLE t1 (
333 $column_list
334 )
335 PARTITION BY LIST(MOD(f_int1,2))
336 ( PARTITION part1 VALUES IN (NULL),
337  PARTITION part2 VALUES IN (0),
338  PARTITION part3 VALUES IN (1));
339 DROP TABLE t1;
340 --echo # 3.5.2.2 VALUE IN (NULL)
341 # Attention: It is intended that there is no partition with
342 # VALUES IN (0), because there was a time where NULL was treated as zero
343 eval CREATE TABLE t1 (
344 $column_list
345 )
346 PARTITION BY LIST(MOD(f_int1,2))
347 ( PARTITION part1 VALUES IN (NULL),
348  PARTITION part3 VALUES IN (1));
349 --source suite/parts/inc/partition_layout_check1.inc
350 DROP TABLE t1;
351 --echo # 3.5.3 Reveal that IN (...NULL) is not mapped to IN(0)
352 # Bug#15447: Partitions: NULL is treated as zero
353 # We would get a clash here if such a mapping would be done.
354 eval CREATE TABLE t1 (
355 $column_list
356 )
357 PARTITION BY LIST(MOD(f_int1,2))
358 ( PARTITION part1 VALUES IN (NULL),
359  PARTITION part2 VALUES IN (0),
360  PARTITION part3 VALUES IN (1));
361 --source suite/parts/inc/partition_layout_check1.inc
362 DROP TABLE t1;
363 
364 # FIXME Implement some non integer constant tests
365 
366 
367 --echo
368 --echo #========================================================================
369 --echo # 4. Check assigning the number of partitions and subpartitions
370 --echo # with and without named partitions/subpartitions
371 --echo #========================================================================
372 --disable_warnings
373 DROP TABLE IF EXISTS t1;
374 --enable_warnings
375 --echo #------------------------------------------------------------------------
376 --echo # 4.1 (positive) without partition/subpartition number assignment
377 --echo #------------------------------------------------------------------------
378 --echo # 4.1.1 no partition number, no named partitions
379 eval CREATE TABLE t1 (
380 $column_list
381 )
382 PARTITION BY HASH(f_int1);
383 --source suite/parts/inc/partition_layout_check1.inc
384 DROP TABLE t1;
385 --echo # 4.1.2 no partition number, named partitions
386 eval CREATE TABLE t1 (
387 $column_list
388 )
389 PARTITION BY HASH(f_int1) (PARTITION part1, PARTITION part2);
390 --source suite/parts/inc/partition_layout_check1.inc
391 DROP TABLE t1;
392 # Attention: Several combinations are impossible
393 # If subpartitioning exists
394 # - partitioning algorithm must be RANGE or LIST
395 # This implies the assignment of named partitions.
396 # - subpartitioning algorithm must be HASH or KEY
397 --echo # 4.1.3 variations on no partition/subpartition number, named partitions,
398 --echo # different subpartitions are/are not named
399 #
400 # Partition name -- "properties"
401 # part1 -- first/non last
402 # part2 -- non first/non last
403 # part3 -- non first/ last
404 #
405 # Testpattern:
406 # named subpartitions in
407 # Partition part1 part2 part3
408 # N N N
409 # N N Y
410 # N Y N
411 # N Y Y
412 # Y N N
413 # Y N Y
414 # Y Y N
415 # Y Y Y
416 --disable_query_log
417 let $part01= CREATE TABLE t1 ( ;
418 let $part02= )
419 PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int1);
420 #
421 eval SET @aux = '(PARTITION part1 VALUES LESS THAN ($max_row_div2),';
422 let $part1_N= `SELECT @AUX`;
423 eval SET @aux = '(PARTITION part1 VALUES LESS THAN ($max_row_div2)
424 (SUBPARTITION subpart11 , SUBPARTITION subpart12 ),';
425 let $part1_Y= `SELECT @AUX`;
426 #
427 eval SET @aux = 'PARTITION part2 VALUES LESS THAN ($max_row),';
428 let $part2_N= `SELECT @AUX`;
429 eval SET @aux = 'PARTITION part2 VALUES LESS THAN ($max_row)
430 (SUBPARTITION subpart21 , SUBPARTITION subpart22 ),';
431 let $part2_Y= `SELECT @AUX`;
432 #
433 eval SET @aux = 'PARTITION part3 VALUES LESS THAN $MAX_VALUE)';
434 let $part3_N= `SELECT @AUX`;
435 eval SET @aux = 'PARTITION part3 VALUES LESS THAN $MAX_VALUE
436 (SUBPARTITION subpart31 , SUBPARTITION subpart32 ))';
437 let $part3_Y= `SELECT @AUX`;
438 --enable_query_log
439 
440 eval $part01 $column_list $part02 $part1_N $part2_N $part3_N ;
441 DROP TABLE t1;
442 # Bug#15407 Partitions: crash if subpartition
443 --error ER_PARSE_ERROR
444 eval $part01 $column_list $part02 $part1_N $part2_N $part3_Y ;
445 --error ER_PARSE_ERROR
446 eval $part01 $column_list $part02 $part1_N $part2_Y $part3_N ;
447 --error ER_PARSE_ERROR
448 eval $part01 $column_list $part02 $part1_N $part2_Y $part3_Y ;
449 --error ER_PARSE_ERROR
450 eval $part01 $column_list $part02 $part1_Y $part2_N $part3_N ;
451 --error ER_PARSE_ERROR
452 eval $part01 $column_list $part02 $part1_Y $part2_N $part3_Y ;
453 --error ER_PARSE_ERROR
454 eval $part01 $column_list $part02 $part1_Y $part2_Y $part3_N ;
455 eval $part01 $column_list $part02 $part1_Y $part2_Y $part3_Y ;
456 --source suite/parts/inc/partition_layout_check1.inc
457 DROP TABLE t1;
458 
459 --echo #------------------------------------------------------------------------
460 --echo # 4.2 partition/subpartition numbers good and bad values and notations
461 --echo #------------------------------------------------------------------------
462 --disable_warnings
463 DROP TABLE IF EXISTS t1;
464 --enable_warnings
465 --echo # 4.2.1 partition/subpartition numbers INTEGER notation
466 # mleich: "positive/negative" is my private judgement. It need not to
467 # correspond with the server response.
468 # (positive) number = 2
469 let $part_number= 2;
470 --source suite/parts/inc/partition_syntax_1.inc
471 # (positive) special case number = 1
472 let $part_number= 1;
473 --source suite/parts/inc/partition_syntax_1.inc
474 # (negative) 0 is non sense
475 let $part_number= 0;
476 --source suite/parts/inc/partition_syntax_1.inc
477 # (negative) -1 is non sense
478 let $part_number= -1;
479 --source suite/parts/inc/partition_syntax_1.inc
480 # (negative) 1000000 is too huge
481 let $part_number= 1000000;
482 --source suite/parts/inc/partition_syntax_1.inc
483 
484 --echo # 4.2.2 partition/subpartition numbers DECIMAL notation
485 # (positive) number = 2.0
486 let $part_number= 2.0;
487 --source suite/parts/inc/partition_syntax_1.inc
488 # (negative) -2.0 is non sense
489 let $part_number= -2.0;
490 --source suite/parts/inc/partition_syntax_1.inc
491 # (negative) case number = 0.0 is non sense
492 let $part_number= 0.0;
493 --source suite/parts/inc/partition_syntax_1.inc
494 # Bug#15890 Partitions: Strange interpretation of partition number
495 # (negative) number = 1.6 is non sense
496 let $part_number= 1.6;
497 --source suite/parts/inc/partition_syntax_1.inc
498 # (negative) number is too huge
499 let $part_number= 999999999999999999999999999999.999999999999999999999999999999;
500 --source suite/parts/inc/partition_syntax_1.inc
501 # (negative) number is nearly zero
502 let $part_number= 0.000000000000000000000000000001;
503 --source suite/parts/inc/partition_syntax_1.inc
504 
505 --echo # 4.2.3 partition/subpartition numbers FLOAT notation
506 ##### FLOAT notation
507 # (positive) number = 2.0E+0
508 let $part_number= 2.0E+0;
509 --source suite/parts/inc/partition_syntax_1.inc
510 # Bug#15890 Partitions: Strange interpretation of partition number
511 # (positive) number = 0.2E+1
512 let $part_number= 0.2E+1;
513 --source suite/parts/inc/partition_syntax_1.inc
514 # (negative) -2.0E+0 is non sense
515 let $part_number= -2.0E+0;
516 --source suite/parts/inc/partition_syntax_1.inc
517 # Bug#15890 Partitions: Strange interpretation of partition number
518 # (negative) 0.16E+1 is non sense
519 let $part_number= 0.16E+1;
520 --source suite/parts/inc/partition_syntax_1.inc
521 # (negative) 0.0E+300 is zero
522 let $part_number= 0.0E+300;
523 --source suite/parts/inc/partition_syntax_1.inc
524 # Bug#15890 Partitions: Strange interpretation of partition number
525 # (negative) 1E+300 is too huge
526 let $part_number= 1E+300;
527 --source suite/parts/inc/partition_syntax_1.inc
528 # (negative) 1E-300 is nearly zero
529 let $part_number= 1E-300;
530 --source suite/parts/inc/partition_syntax_1.inc
531 
532 --echo # 4.2.4 partition/subpartition numbers STRING notation
533 ##### STRING notation
534 # (negative?) case number = '2'
535 let $part_number= '2';
536 --source suite/parts/inc/partition_syntax_1.inc
537 # (negative?) case number = '2.0'
538 let $part_number= '2.0';
539 --source suite/parts/inc/partition_syntax_1.inc
540 # (negative?) case number = '0.2E+1'
541 let $part_number= '0.2E+1';
542 --source suite/parts/inc/partition_syntax_1.inc
543 # (negative) Strings starts with digit, but 'A' follows
544 let $part_number= '2A';
545 --source suite/parts/inc/partition_syntax_1.inc
546 # (negative) Strings starts with 'A', but digit follows
547 let $part_number= 'A2';
548 --source suite/parts/inc/partition_syntax_1.inc
549 # (negative) empty string
550 let $part_number= '';
551 --source suite/parts/inc/partition_syntax_1.inc
552 # (negative) string without any digits
553 let $part_number= 'GARBAGE';
554 --source suite/parts/inc/partition_syntax_1.inc
555 
556 --echo # 4.2.5 partition/subpartition numbers other notations
557 # (negative) Strings starts with digit, but 'A' follows
558 let $part_number= 2A;
559 --source suite/parts/inc/partition_syntax_1.inc
560 # (negative) Strings starts with 'A', but digit follows
561 let $part_number= A2;
562 --source suite/parts/inc/partition_syntax_1.inc
563 # (negative) string without any digits
564 let $part_number= GARBAGE;
565 --source suite/parts/inc/partition_syntax_1.inc
566 
567 # (negative?) double quotes
568 let $part_number= "2";
569 --source suite/parts/inc/partition_syntax_1.inc
570 # (negative) Strings starts with digit, but 'A' follows
571 let $part_number= "2A";
572 --source suite/parts/inc/partition_syntax_1.inc
573 # (negative) Strings starts with 'A', but digit follows
574 let $part_number= "A2";
575 --source suite/parts/inc/partition_syntax_1.inc
576 # (negative) string without any digits
577 let $part_number= "GARBAGE";
578 --source suite/parts/inc/partition_syntax_1.inc
579 
580 --echo # 4.2.6 (negative) partition/subpartition numbers per @variables
581 SET @aux = 5;
582 --error ER_PARSE_ERROR
583 eval CREATE TABLE t1 (
584 $column_list
585 )
586 PARTITION BY HASH(f_int1) PARTITIONS @aux;
587 --error ER_PARSE_ERROR
588 eval CREATE TABLE t1 (
589 $column_list
590 )
591 PARTITION BY RANGE(f_int1) SUBPARTITION BY HASH(f_int1)
592 SUBPARTITIONS @aux = 5
593 (PARTITION part1 VALUES LESS THAN ($max_row_div2),
594  PARTITION part2 VALUES LESS THAN $MAX_VALUE);
595 
596 
597 --echo #------------------------------------------------------------------------
598 --echo # 4.3 Mixups of assigned partition/subpartition numbers and names
599 --echo #------------------------------------------------------------------------
600 --echo # 4.3.1 (positive) number of partition/subpartition
601 --echo # = number of named partition/subpartition
602 eval CREATE TABLE t1 (
603 $column_list
604 )
605 PARTITION BY HASH(f_int1) PARTITIONS 2 ( PARTITION part1, PARTITION part2 ) ;
606 --source suite/parts/inc/partition_layout_check1.inc
607 DROP TABLE t1;
608 eval CREATE TABLE t1 (
609 $column_list
610 )
611 PARTITION BY RANGE(f_int1) PARTITIONS 2
612 SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
613 ( PARTITION part1 VALUES LESS THAN (1000)
614  (SUBPARTITION subpart11, SUBPARTITION subpart12),
615  PARTITION part2 VALUES LESS THAN $MAX_VALUE
616  (SUBPARTITION subpart21, SUBPARTITION subpart22)
617 );
618 --source suite/parts/inc/partition_layout_check1.inc
619 DROP TABLE t1;
620 --echo # 4.3.2 (positive) number of partition/subpartition ,
621 --echo # 0 (= no) named partition/subpartition
622 --echo # already checked above
623 --echo # 4.3.3 (negative) number of partitions/subpartitions
624 --echo # > number of named partitions/subpartitions
625 --error ER_PARSE_ERROR
626 eval CREATE TABLE t1 (
627 $column_list
628 )
629 PARTITION BY HASH(f_int1) PARTITIONS 2 ( PARTITION part1 ) ;
630 # Wrong number of named subpartitions in first partition
631 --error ER_PARSE_ERROR
632 eval CREATE TABLE t1 (
633 $column_list
634 )
635 PARTITION BY RANGE(f_int1)
636 SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
637 ( PARTITION part1 VALUES LESS THAN (1000)
638  (SUBPARTITION subpart11 ),
639  PARTITION part2 VALUES LESS THAN $MAX_VALUE
640  (SUBPARTITION subpart21, SUBPARTITION subpart22)
641 );
642 # Wrong number of named subpartitions in non first/non last partition
643 --error ER_PARSE_ERROR
644 eval CREATE TABLE t1 (
645 $column_list
646 )
647 PARTITION BY RANGE(f_int1)
648 SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
649 ( PARTITION part1 VALUES LESS THAN (1000)
650  (SUBPARTITION subpart11, SUBPARTITION subpart12),
651  PARTITION part2 VALUES LESS THAN (2000)
652  (SUBPARTITION subpart21 ),
653  PARTITION part3 VALUES LESS THAN $MAX_VALUE
654  (SUBPARTITION subpart31, SUBPARTITION subpart32)
655 );
656 # Wrong number of named subpartitions in last partition
657 --error ER_PARSE_ERROR
658 eval CREATE TABLE t1 (
659 $column_list
660 )
661 PARTITION BY RANGE(f_int1) PARTITIONS 2
662 SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 2
663 ( PARTITION part1 VALUES LESS THAN (1000)
664  (SUBPARTITION subpart11, SUBPARTITION subpart12),
665  PARTITION part2 VALUES LESS THAN $MAX_VALUE
666  (SUBPARTITION subpart21 )
667 );
668 --echo # 4.3.4 (negative) number of partitions < number of named partitions
669 --error ER_PARSE_ERROR
670 eval CREATE TABLE t1 (
671 $column_list
672 )
673 PARTITION BY HASH(f_int1) PARTITIONS 1 ( PARTITION part1, PARTITION part2 ) ;
674 # Wrong number of named subpartitions in first partition
675 --error ER_PARSE_ERROR
676 eval CREATE TABLE t1 (
677 $column_list
678 )
679 PARTITION BY RANGE(f_int1)
680 SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 1
681 ( PARTITION part1 VALUES LESS THAN (1000)
682  (SUBPARTITION subpart11, SUBPARTITION subpart12),
683  PARTITION part2 VALUES LESS THAN $MAX_VALUE
684  (SUBPARTITION subpart21, SUBPARTITION subpart22)
685 );
686 # Wrong number of named subpartitions in non first/non last partition
687 --error ER_PARSE_ERROR
688 eval CREATE TABLE t1 (
689 $column_list
690 )
691 PARTITION BY RANGE(f_int1)
692 SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 1
693 ( PARTITION part1 VALUES LESS THAN (1000)
694  (SUBPARTITION subpart11, SUBPARTITION subpart12),
695  PARTITION part2 VALUES LESS THAN (2000)
696  (SUBPARTITION subpart21 ),
697  PARTITION part3 VALUES LESS THAN $MAX_VALUE
698  (SUBPARTITION subpart31, SUBPARTITION subpart32)
699 );
700 # Wrong number of named subpartitions in last partition
701 --error ER_PARSE_ERROR
702 eval CREATE TABLE t1 (
703 $column_list
704 )
705 PARTITION BY RANGE(f_int1)
706 SUBPARTITION BY HASH(f_int1) SUBPARTITIONS 1
707 ( PARTITION part1 VALUES LESS THAN (1000)
708  (SUBPARTITION subpart11, SUBPARTITION subpart12),
709  PARTITION part2 VALUES LESS THAN $MAX_VALUE
710  (SUBPARTITION subpart21, SUBPARTITION subpart22)
711 );
712 
713 
714 --echo
715 --echo #========================================================================
716 --echo # 5. Checks of logical partition/subpartition name
717 --echo # file name clashes during CREATE TABLE
718 --echo #========================================================================
719 --disable_warnings
720 DROP TABLE IF EXISTS t1;
721 --enable_warnings
722 
723 --echo #------------------------------------------------------------------------
724 --echo # 5.1 (negative) A partition/subpartition name used more than once
725 --echo #------------------------------------------------------------------------
726 --echo # 5.1.1 duplicate partition name
727 --error ER_SAME_NAME_PARTITION
728 eval CREATE TABLE t1 (
729 $column_list
730 )
731 PARTITION BY HASH(f_int1) (PARTITION part1, PARTITION part1);
732 #
733 --echo # 5.1.2 duplicate subpartition name
734 # Bug#15408 Partitions: subpartition names are not unique
735 --error ER_SAME_NAME_PARTITION
736 eval CREATE TABLE t1 (
737 $column_list
738 )
739 PARTITION BY RANGE(f_int1)
740 SUBPARTITION BY HASH(f_int1)
741 ( PARTITION part1 VALUES LESS THAN (1000)
742  (SUBPARTITION subpart11, SUBPARTITION subpart11)
743 );
744 
745 # FIXME Implement testcases with filename problems
746 # existing file of other table --- partition/subpartition file name
747 # partition/subpartition file name --- file of the same table
748