mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-30 04:26:45 +03:00 
			
		
		
		
	handler::get_dup_key used the called handler for the info call, but used table->file handler for errkey. Fixed by using table->file->info instead. mysql-test/r/partition_error.result: Bug#38719: Partitioning returns a different error code for a duplicate key error Added test for verification mysql-test/t/partition_error.test: Bug#38719: Partitioning returns a different error code for a duplicate key error Added test for verification
		
			
				
	
	
		
			844 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			844 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #
 | |
| # Simple test for the erroneos statements using the 
 | |
| # partition storage engine
 | |
| #
 | |
| -- source include/have_partition.inc
 | |
| 
 | |
| --disable_warnings
 | |
| drop table if exists t1;
 | |
| --enable_warnings
 | |
|  
 | |
| #
 | |
| # Bug#38719: Partitioning returns a different error code for a
 | |
| # duplicate key error
 | |
| CREATE TABLE t1 (a INTEGER NOT NULL, PRIMARY KEY (a));
 | |
| -- error ER_DUP_ENTRY
 | |
| INSERT INTO t1 VALUES (1),(1);
 | |
| DROP TABLE t1;
 | |
| CREATE TABLE t1 (a INTEGER NOT NULL, PRIMARY KEY (a))
 | |
| PARTITION BY KEY (a) PARTITIONS 2;
 | |
| -- error ER_DUP_ENTRY
 | |
| INSERT INTO t1 VALUES (1),(1);
 | |
| DROP TABLE t1;
 | |
| 
 | |
| #
 | |
| # Bug#31931: Mix of handlers error message
 | |
| #
 | |
| --error ER_MIX_HANDLER_ERROR
 | |
| CREATE TABLE t1 (a INT)
 | |
| PARTITION BY HASH (a)
 | |
| ( PARTITION p0 ENGINE=MyISAM,
 | |
|   PARTITION p1);
 | |
| --error ER_MIX_HANDLER_ERROR
 | |
| CREATE TABLE t1 (a INT)
 | |
| PARTITION BY LIST (a)
 | |
| SUBPARTITION BY HASH (a)
 | |
| ( PARTITION p0 VALUES IN (0)
 | |
| ( SUBPARTITION s0, SUBPARTITION s1 ENGINE=MyISAM, SUBPARTITION s2),
 | |
|   PARTITION p1 VALUES IN (1)
 | |
| ( SUBPARTITION s3 ENGINE=MyISAM, SUBPARTITION s4, SUBPARTITION s5 ENGINE=MyISAM));
 | |
| 
 | |
| 
 | |
| #
 | |
| # Bug 29368:
 | |
| # Incorrect error, 1467, for syntax error when creating partition
 | |
| --error ER_PARTITION_REQUIRES_VALUES_ERROR
 | |
| CREATE TABLE t1 (
 | |
|   a int
 | |
| )
 | |
| PARTITION BY RANGE (a)
 | |
| (
 | |
|   PARTITION p0 VALUES LESS THAN (1),
 | |
|   PARTITION p1 VALU ES LESS THAN (2)
 | |
| );
 | |
| 
 | |
| #
 | |
| # Partition by key stand-alone error
 | |
| #
 | |
| --error 1064
 | |
| partition by list (a)
 | |
| partitions 3
 | |
| (partition x1 values in (1,2,9,4) tablespace ts1,
 | |
|  partition x2 values in (3, 11, 5, 7) tablespace ts2,
 | |
|  partition x3 values in (16, 8, 5+19, 70-43) tablespace ts3);
 | |
| 
 | |
| #
 | |
| # Partition by key list, number of partitions defined, no partition defined
 | |
| #
 | |
| --error ER_PARTITIONS_MUST_BE_DEFINED_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by list (a)
 | |
| partitions 2;
 | |
| 
 | |
| #
 | |
| # Partition by key list, wrong result type
 | |
| #
 | |
| --error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by list (sin(a))
 | |
| partitions 3
 | |
| (partition x1 values in (1,2,9,4) tablespace ts1,
 | |
|  partition x2 values in (3, 11, 5, 7) tablespace ts2,
 | |
|  partition x3 values in (16, 8, 5+19, 70-43) tablespace ts3);
 | |
| 
 | |
| #
 | |
| # Partition by key, partition function not allowed
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by key (a+2)
 | |
| partitions 3
 | |
| (partition x1 tablespace ts1,
 | |
|  partition x2 tablespace ts2,
 | |
|  partition x3 tablespace ts3);
 | |
| 
 | |
| #
 | |
| # Partition by key, no partition name
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by key (a)
 | |
| partitions 3
 | |
| (partition tablespace ts1,
 | |
|  partition x2 tablespace ts2,
 | |
|  partition x3 tablespace ts3);
 | |
| 
 | |
| #
 | |
| # Partition by key, invalid field in field list
 | |
| #
 | |
| --error ER_FIELD_NOT_FOUND_PART_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by key (a,d)
 | |
| partitions 3
 | |
| (partition x1 tablespace ts1,
 | |
|  partition x2 tablespace ts2,
 | |
|  partition x3 tablespace ts3);
 | |
| 
 | |
| let $MYSQLD_DATADIR= `select @@datadir`;
 | |
| select load_file('$MYSQLD_DATADIR/test/t1.par');
 | |
| #
 | |
| # Partition by hash, invalid field in function
 | |
| #
 | |
| --error 1054
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by hash (a + d)
 | |
| partitions 3
 | |
| (partition x1 tablespace ts1,
 | |
|  partition x2 tablespace ts2,
 | |
|  partition x3 tablespace ts3);
 | |
| 
 | |
| #
 | |
| # Partition by hash, invalid result type
 | |
| #
 | |
| --error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by hash (sin(a))
 | |
| partitions 3
 | |
| (partition x1 tablespace ts1,
 | |
|  partition x2 tablespace ts2,
 | |
|  partition x3 tablespace ts3);
 | |
| 
 | |
| #
 | |
| # Partition by key specified 3 partitions but only defined 2 => error
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by key (a)
 | |
| partitions 3
 | |
| (partition x1, partition x2);
 | |
| 
 | |
| #
 | |
| # Partition by key specified 3 partitions but only defined 2 => error
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by hash (rand(a))
 | |
| partitions 2
 | |
| (partition x1, partition x2);
 | |
| 
 | |
| #
 | |
| # Partition by key specified 3 partitions but only defined 2 => error
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by range (rand(a))
 | |
| partitions 2
 | |
| (partition x1 values less than (0), partition x2 values less than (2));
 | |
| 
 | |
| #
 | |
| # Partition by key specified 3 partitions but only defined 2 => error
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by list (rand(a))
 | |
| partitions 2
 | |
| (partition x1 values in (1), partition x2 values in (2));
 | |
| 
 | |
| #
 | |
| # Partition by hash, values less than error
 | |
| #
 | |
| --error ER_PARTITION_WRONG_VALUES_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by hash (a)
 | |
| partitions 2
 | |
| (partition x1 values less than (4),
 | |
|  partition x2 values less than (5));
 | |
| select load_file('$MYSQLD_DATADIR/test/t1.par');
 | |
| 
 | |
| #
 | |
| # Partition by hash, values in error
 | |
| #
 | |
| --error ER_PARTITION_WRONG_VALUES_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by hash (a)
 | |
| partitions 2
 | |
| (partition x1 values in (4),
 | |
|  partition x2 values in (5));
 | |
| select load_file('$MYSQLD_DATADIR/test/t1.par');
 | |
| 
 | |
| #
 | |
| # Partition by hash, values in error
 | |
| #
 | |
| --error ER_PARTITION_WRONG_VALUES_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by hash (a)
 | |
| partitions 2
 | |
| (partition x1 values in (4,6),
 | |
|  partition x2 values in (5,7));
 | |
| select load_file('$MYSQLD_DATADIR/test/t1.par');
 | |
| 
 | |
| #
 | |
| # Subpartition by key, no partitions defined, single field
 | |
| #
 | |
| --error ER_SUBPARTITION_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by key (a)
 | |
| subpartition by key (b);
 | |
| select load_file('$MYSQLD_DATADIR/test/t1.par');
 | |
| 
 | |
| #
 | |
| # Subpartition by key, no partitions defined, list of fields
 | |
| #
 | |
| --error ER_SUBPARTITION_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by key (a)
 | |
| subpartition by key (a, b);
 | |
| select load_file('$MYSQLD_DATADIR/test/t1.par');
 | |
| 
 | |
| #
 | |
| # Subpartition by hash, no partitions defined
 | |
| #
 | |
| --error ER_SUBPARTITION_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by key (a)
 | |
| subpartition by hash (a+b);
 | |
| select load_file('$MYSQLD_DATADIR/test/t1.par');
 | |
| 
 | |
| #
 | |
| # Subpartition by key, no partitions defined, single field
 | |
| #
 | |
| --error ER_SUBPARTITION_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by key (a)
 | |
| subpartition by key (b);
 | |
| select load_file('$MYSQLD_DATADIR/test/t1.par');
 | |
| 
 | |
| #
 | |
| # Subpartition by key, no partitions defined, list of fields
 | |
| #
 | |
| --error ER_SUBPARTITION_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by key (a)
 | |
| subpartition by key (a, b);
 | |
| select load_file('$MYSQLD_DATADIR/test/t1.par');
 | |
| 
 | |
| #
 | |
| # Subpartition by hash, no partitions defined
 | |
| #
 | |
| --error ER_SUBPARTITION_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by key (a)
 | |
| subpartition by hash (a+b);
 | |
| select load_file('$MYSQLD_DATADIR/test/t1.par');
 | |
| 
 | |
| #
 | |
| # Subpartition by hash, no partitions defined, wrong subpartition function
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by key (a)
 | |
| subpartition by hash (rand(a+b));
 | |
| 
 | |
| #
 | |
| # Subpartition by hash, wrong subpartition function
 | |
| #
 | |
| --error ER_SUBPARTITION_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by key (a)
 | |
| subpartition by hash (sin(a+b))
 | |
| (partition x1 (subpartition x11, subpartition x12),
 | |
|  partition x2 (subpartition x21, subpartition x22));
 | |
| select load_file('$MYSQLD_DATADIR/test/t1.par');
 | |
| 
 | |
| #
 | |
| # Subpartition by hash, no partitions defined, wrong subpartition function
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by range (a)
 | |
| subpartition by key (a+b)
 | |
| (partition x1 values less than (1) (subpartition x11, subpartition x12),
 | |
|  partition x2 values less than (2) (subpartition x21, subpartition x22));
 | |
| 
 | |
| #
 | |
| # Subpartition by hash, no partitions defined, wrong subpartition function
 | |
| #
 | |
| --error ER_FIELD_NOT_FOUND_PART_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by range (a)
 | |
| subpartition by key (a,d)
 | |
| (partition x1 values less than (1) (subpartition x11, subpartition x12),
 | |
|  partition x2 values less than (2) (subpartition x21, subpartition x22));
 | |
| select load_file('$MYSQLD_DATADIR/test/t1.par');
 | |
| 
 | |
| #
 | |
| # Subpartition by hash, no partitions defined, wrong subpartition function
 | |
| #
 | |
| --error ER_SUBPARTITION_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by key (a)
 | |
| subpartition by hash (3+4);
 | |
| 
 | |
| #
 | |
| # Subpartition by hash, no partitions defined, wrong subpartition function
 | |
| #
 | |
| --error 1054
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by range (a)
 | |
| subpartition by hash (a+d)
 | |
| (partition x1 values less than (1) (subpartition x11, subpartition x12),
 | |
|  partition x2 values less than (2) (subpartition x21, subpartition x22));
 | |
| 
 | |
| #
 | |
| # Partition by range, no partition => error
 | |
| #
 | |
| --error ER_PARTITIONS_MUST_BE_DEFINED_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by range (a);
 | |
| select load_file('$MYSQLD_DATADIR/test/t1.par');
 | |
| 
 | |
| #
 | |
| # Partition by range, invalid field in function
 | |
| #
 | |
| --error 1054
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by range (a+d)
 | |
| partitions 2
 | |
| (partition x1 values less than (4) tablespace ts1,
 | |
|  partition x2 values less than (8) tablespace ts2);
 | |
| 
 | |
| #
 | |
| # Partition by range, inconsistent partition function and constants
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by range (a)
 | |
| partitions 2
 | |
| (partition x1 values less than (4.0) tablespace ts1,
 | |
|  partition x2 values less than (8) tablespace ts2);
 | |
| 
 | |
| #
 | |
| # Partition by range, constant partition function not allowed
 | |
| #
 | |
| --error ER_CONST_EXPR_IN_PARTITION_FUNC_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by range (3+4)
 | |
| partitions 2
 | |
| (partition x1 values less than (4) tablespace ts1,
 | |
|  partition x2 values less than (8) tablespace ts2);
 | |
| 
 | |
| # 
 | |
| # Partition by range, no values less than definition
 | |
| # 
 | |
| --error ER_PARTITION_REQUIRES_VALUES_ERROR
 | |
| CREATE TABLE t1 ( 
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by range (a)
 | |
| partitions 2
 | |
| (partition x1 values less than (4),
 | |
|  partition x2); 
 | |
| 
 | |
| #
 | |
| # Partition by range, no values in definition allowed
 | |
| #
 | |
| --error ER_PARTITION_WRONG_VALUES_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by range (a)
 | |
| partitions 2
 | |
| (partition x1 values in (4),
 | |
|  partition x2);
 | |
| 
 | |
| #
 | |
| # Partition by range, values in error
 | |
| #
 | |
| --error ER_PARTITION_WRONG_VALUES_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by range (a)
 | |
| partitions 2
 | |
| (partition x1 values in (4),
 | |
|  partition x2 values less than (5));
 | |
| 
 | |
| #
 | |
| # Partition by range, missing parenthesis
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by list (a)
 | |
| partitions 2
 | |
| (partition x1 values less than 4,
 | |
|  partition x2 values less than (5));
 | |
| 
 | |
| #
 | |
| # Partition by range, maxvalue in wrong place
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by range (a)
 | |
| partitions 2
 | |
| (partition x1 values less than maxvalue,
 | |
|  partition x2 values less than (5));
 | |
| 
 | |
| #
 | |
| # Partition by range, maxvalue in several places
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by range (a)
 | |
| partitions 2
 | |
| (partition x1 values less than maxvalue,
 | |
|  partition x2 values less than maxvalue);
 | |
| 
 | |
| #
 | |
| # Partition by range, not increasing ranges
 | |
| #
 | |
| --error ER_RANGE_NOT_INCREASING_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by range (a)
 | |
| partitions 2
 | |
| (partition x1 values less than (4),
 | |
|  partition x2 values less than (3));
 | |
| 
 | |
| #
 | |
| # Partition by range, wrong result type of partition function
 | |
| #
 | |
| --error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by range (sin(a))
 | |
| partitions 2
 | |
| (partition x1 values less than (4),
 | |
|  partition x2 values less than (5));
 | |
| 
 | |
| #
 | |
| # Subpartition by hash, wrong number of subpartitions
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by list (a)
 | |
| subpartition by hash (a+b)
 | |
| subpartitions 3
 | |
| ( partition x1 values in (1,2,4)
 | |
|   ( subpartition x11 nodegroup 0,
 | |
|     subpartition x12 nodegroup 1),
 | |
|   partition x2 values in (3,5,6)
 | |
|   ( subpartition x21 nodegroup 0,
 | |
|     subpartition x22 nodegroup 1)
 | |
| );
 | |
| 
 | |
| #
 | |
| # Subpartition by hash, wrong number of subpartitions
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by list (a)
 | |
| subpartition by hash (a+b)
 | |
| ( partition x1 values in (1)
 | |
|   ( subpartition x11 nodegroup 0,
 | |
|     subpartition xextra,
 | |
|     subpartition x12 nodegroup 1),
 | |
|   partition x2 values in (2)
 | |
|   ( subpartition x21 nodegroup 0,
 | |
|     subpartition x22 nodegroup 1)
 | |
| );
 | |
| 
 | |
| #
 | |
| # Subpartition by list => error
 | |
| #
 | |
| --error 1064 
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by key (a) 
 | |
| subpartition by list (a+b)
 | |
| ( partition x1
 | |
|   ( subpartition x11 engine myisam,
 | |
|     subpartition x12 engine myisam),
 | |
|    partition x2 
 | |
|    ( subpartition x21 engine myisam,
 | |
|      subpartition x22 engine myisam)
 | |
| );
 | |
| 
 | |
| #
 | |
| # Subpartition by list => error
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key (a,b))
 | |
| partition by key (a)
 | |
| subpartition by list (a+b)
 | |
| ( partition x1
 | |
|   ( subpartition x11 engine myisam values in (0),
 | |
|     subpartition x12 engine myisam values in (1)),
 | |
|   partition x2
 | |
|   ( subpartition x21 engine myisam values in (0),
 | |
|     subpartition x22 engine myisam values in (1))
 | |
| );
 | |
| 
 | |
| #
 | |
| # Partition by list, no partition => error
 | |
| #
 | |
| --error ER_PARTITIONS_MUST_BE_DEFINED_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by list (a);
 | |
| 
 | |
| #
 | |
| # Partition by list, constant partition function not allowed
 | |
| #
 | |
| --error ER_CONST_EXPR_IN_PARTITION_FUNC_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by list (3+4)
 | |
| partitions 2 
 | |
| (partition x1 values in (4) tablespace ts1,
 | |
|  partition x2 values in (8) tablespace ts2);
 | |
| 
 | |
| #
 | |
| # Partition by list, invalid field in function
 | |
| #
 | |
| --error 1054
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by list (a+d)
 | |
| partitions 2
 | |
| (partition x1 values in (4) tablespace ts1,
 | |
|  partition x2 values in (8) tablespace ts2);
 | |
| 
 | |
| # 
 | |
| # Partition by list, no values in definition
 | |
| # 
 | |
| --error ER_PARTITION_REQUIRES_VALUES_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by list (a)
 | |
| partitions 2
 | |
| (partition x1 values in (4),
 | |
|  partition x2);
 | |
| 
 | |
| #
 | |
| # Partition by list, values less than error
 | |
| #
 | |
| --error ER_PARTITION_WRONG_VALUES_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by list (a)
 | |
| partitions 2
 | |
| (partition x1 values in (4),
 | |
|  partition x2 values less than (5));
 | |
| 
 | |
| #
 | |
| # Partition by list, no values in definition
 | |
| #
 | |
| --error ER_PARTITION_REQUIRES_VALUES_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by list (a)
 | |
| partitions 2
 | |
| (partition x1 values in (4,6),
 | |
|  partition x2);
 | |
| 
 | |
| #
 | |
| # Partition by list, duplicate values
 | |
| #
 | |
| --error ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by list (a)
 | |
| partitions 2
 | |
| (partition x1 values in (4, 12+9),
 | |
|  partition x2 values in (3, 21));
 | |
| 
 | |
| #
 | |
| # Partition by list, wrong constant result type (not INT)
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by list (a)
 | |
| partitions 2
 | |
| (partition x1 values in (4.0, 12+8),
 | |
|  partition x2 values in (3, 21));
 | |
| 
 | |
| #
 | |
| # Partition by list, missing parenthesis
 | |
| #
 | |
| --error 1064
 | |
| CREATE TABLE t1 (
 | |
| a int not null,
 | |
| b int not null,
 | |
| c int not null,
 | |
| primary key(a,b))
 | |
| partition by list (a)
 | |
| partitions 2
 | |
| (partition x1 values in 4,
 | |
|  partition x2 values in (5));
 | |
| 
 | |
| #
 | |
| # Bug #13439: Crash when LESS THAN (non-literal)
 | |
| #
 | |
| --error 1054
 | |
| CREATE TABLE t1 (a int)
 | |
| PARTITION BY RANGE (a)
 | |
| (PARTITION p0 VALUES LESS THAN (x1));
 | |
| 
 | |
| #
 | |
| # No partition for the given value
 | |
| #
 | |
| CREATE TABLE t1(a int)
 | |
|   PARTITION BY RANGE (a) (PARTITION p1 VALUES LESS THAN(5));
 | |
| --error ER_NO_PARTITION_FOR_GIVEN_VALUE
 | |
| insert into t1 values (10);
 | |
| drop table t1;
 | |
| 
 | |
| --error ER_PARTITION_CONST_DOMAIN_ERROR
 | |
| create table t1 (a bigint unsigned)
 | |
| partition by range (a)
 | |
| (partition p0 values less than (-1));
 | |
| #
 | |
| # Bug 18198 Partitions: Verify that erroneus partition functions doesn't work
 | |
| #
 | |
| -- error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED
 | |
| create table t1 (v varchar(12))
 | |
| partition by range (ascii(v))
 | |
| (partition p0 values less than (10));
 | |
| #drop table t1;
 | |
| 
 | |
| -- error 1064
 | |
| create table t1 (a int)
 | |
| partition by hash (rand(a));
 | |
| -- error 1064
 | |
| create table t1 (a int)
 | |
| partition by hash(CURTIME() + a);
 | |
| -- error 1064
 | |
| create table t1 (a int)
 | |
| partition by hash (NOW()+a);
 | |
| -- error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED
 | |
| create table t1 (a int)
 | |
| partition by hash (extract(hour from convert_tz(a, '+00:00', '+00:00')));
 | |
| -- error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED
 | |
| create table t1 (a int)
 | |
| partition by range (a + (select count(*) from t1))
 | |
| (partition p1 values less than (1));
 | |
| -- error ER_PARTITION_FUNCTION_IS_NOT_ALLOWED
 | |
| create table t1 (a char(10))
 | |
| partition by hash (extractvalue(a,'a'));
 | |
| 
 | |
| 
 |