summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/partition_column.result50
-rw-r--r--mysql-test/t/partition_column.test65
-rw-r--r--sql/sql_partition.cc4
3 files changed, 95 insertions, 24 deletions
diff --git a/mysql-test/r/partition_column.result b/mysql-test/r/partition_column.result
index ddc48b635cf..458343a6b92 100644
--- a/mysql-test/r/partition_column.result
+++ b/mysql-test/r/partition_column.result
@@ -1,4 +1,44 @@
drop table if exists t1;
+CREATE TABLE t1 (a DECIMAL)
+PARTITION BY RANGE COLUMNS (a)
+(PARTITION p0 VALUES LESS THAN (0));
+ERROR HY000: Field 'a' is of a not allowed type for this type of partitioning
+CREATE TABLE t1 (a BLOB)
+PARTITION BY RANGE COLUMNS (a)
+(PARTITION p0 VALUES LESS THAN ("X"));
+ERROR HY000: A BLOB field is not allowed in partition function
+CREATE TABLE t1 (a TEXT)
+PARTITION BY RANGE COLUMNS (a)
+(PARTITION p0 VALUES LESS THAN ("X"));
+ERROR HY000: A BLOB field is not allowed in partition function
+CREATE TABLE t1 (a FLOAT)
+PARTITION BY RANGE COLUMNS (a)
+(PARTITION p0 VALUES LESS THAN (0.0));
+ERROR HY000: Field 'a' is of a not allowed type for this type of partitioning
+CREATE TABLE t1 (a DOUBLE)
+PARTITION BY RANGE COLUMNS (a)
+(PARTITION p0 VALUES LESS THAN (0.0));
+ERROR HY000: Field 'a' is of a not allowed type for this type of partitioning
+CREATE TABLE t1 (d TIMESTAMP)
+PARTITION BY RANGE COLUMNS(d)
+(PARTITION p0 VALUES LESS THAN ('2000-01-01'),
+PARTITION p1 VALUES LESS THAN ('2040-01-01'));
+ERROR HY000: Field 'd' is of a not allowed type for this type of partitioning
+CREATE TABLE t1 (d BIT(1))
+PARTITION BY RANGE COLUMNS(d)
+(PARTITION p0 VALUES LESS THAN (0),
+PARTITION p1 VALUES LESS THAN (1));
+ERROR HY000: Field 'd' is of a not allowed type for this type of partitioning
+CREATE TABLE t1 (d ENUM("YES","NO"))
+PARTITION BY RANGE COLUMNS(d)
+(PARTITION p0 VALUES LESS THAN ("NO"),
+PARTITION p1 VALUES LESS THAN (MAXVALUE));
+ERROR HY000: Field 'd' is of a not allowed type for this type of partitioning
+CREATE TABLE t1 (d SET("Car","MC"))
+PARTITION BY RANGE COLUMNS(d)
+(PARTITION p0 VALUES LESS THAN ("MC"),
+PARTITION p1 VALUES LESS THAN (MAXVALUE));
+ERROR HY000: Field 'd' is of a not allowed type for this type of partitioning
create table t1 (a int, b int)
partition by range columns (a,b)
( partition p0 values less than (maxvalue, 10),
@@ -430,16 +470,6 @@ partition by range columns(d)
( partition p0 values less than ('2000-01-01'),
partition p1 values less than ('2040-01-01'));
ERROR HY000: Partition column values of incorrect type
-create table t1 (d timestamp)
-partition by range columns(d)
-( partition p0 values less than ('2000-01-01'),
-partition p1 values less than ('2040-01-01'));
-ERROR HY000: Field 'd' is of a not allowed type for this type of partitioning
-create table t1 (d bit(1))
-partition by range columns(d)
-( partition p0 values less than (0),
-partition p1 values less than (1));
-ERROR HY000: Field 'd' is of a not allowed type for this type of partitioning
create table t1 (a int, b int)
partition by range columns(a,b)
(partition p0 values less than (maxvalue, 10));
diff --git a/mysql-test/t/partition_column.test b/mysql-test/t/partition_column.test
index a0e944ceb09..d1d2d666a39 100644
--- a/mysql-test/t/partition_column.test
+++ b/mysql-test/t/partition_column.test
@@ -9,6 +9,59 @@ drop table if exists t1;
--enable_warnings
#
+# Bug#51347: assertion with show create table + partition by columns
+# on decimal column
+#
+--error ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD
+CREATE TABLE t1 (a DECIMAL)
+PARTITION BY RANGE COLUMNS (a)
+(PARTITION p0 VALUES LESS THAN (0));
+
+--error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
+CREATE TABLE t1 (a BLOB)
+PARTITION BY RANGE COLUMNS (a)
+(PARTITION p0 VALUES LESS THAN ("X"));
+
+--error ER_BLOB_FIELD_IN_PART_FUNC_ERROR
+CREATE TABLE t1 (a TEXT)
+PARTITION BY RANGE COLUMNS (a)
+(PARTITION p0 VALUES LESS THAN ("X"));
+
+--error ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD
+CREATE TABLE t1 (a FLOAT)
+PARTITION BY RANGE COLUMNS (a)
+(PARTITION p0 VALUES LESS THAN (0.0));
+
+--error ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD
+CREATE TABLE t1 (a DOUBLE)
+PARTITION BY RANGE COLUMNS (a)
+(PARTITION p0 VALUES LESS THAN (0.0));
+
+--error ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD
+CREATE TABLE t1 (d TIMESTAMP)
+PARTITION BY RANGE COLUMNS(d)
+(PARTITION p0 VALUES LESS THAN ('2000-01-01'),
+ PARTITION p1 VALUES LESS THAN ('2040-01-01'));
+
+--error ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD
+CREATE TABLE t1 (d BIT(1))
+PARTITION BY RANGE COLUMNS(d)
+(PARTITION p0 VALUES LESS THAN (0),
+ PARTITION p1 VALUES LESS THAN (1));
+
+--error ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD
+CREATE TABLE t1 (d ENUM("YES","NO"))
+PARTITION BY RANGE COLUMNS(d)
+(PARTITION p0 VALUES LESS THAN ("NO"),
+ PARTITION p1 VALUES LESS THAN (MAXVALUE));
+
+--error ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD
+CREATE TABLE t1 (d SET("Car","MC"))
+PARTITION BY RANGE COLUMNS(d)
+(PARTITION p0 VALUES LESS THAN ("MC"),
+ PARTITION p1 VALUES LESS THAN (MAXVALUE));
+
+#
# BUG#49180, Possible to define empty intervals for column list partitioning
#
--error ER_RANGE_NOT_INCREASING_ERROR
@@ -285,18 +338,6 @@ partition by range columns(d)
( partition p0 values less than ('2000-01-01'),
partition p1 values less than ('2040-01-01'));
---error ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD
-create table t1 (d timestamp)
-partition by range columns(d)
-( partition p0 values less than ('2000-01-01'),
- partition p1 values less than ('2040-01-01'));
-
---error ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD
-create table t1 (d bit(1))
-partition by range columns(d)
-( partition p0 values less than (0),
- partition p1 values less than (1));
-
create table t1 (a int, b int)
partition by range columns(a,b)
(partition p0 values less than (maxvalue, 10));
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index d400e96ce7e..cfb57475b68 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -2128,8 +2128,6 @@ static int check_part_field(enum_field_types sql_type,
}
switch (sql_type)
{
- case MYSQL_TYPE_NEWDECIMAL:
- case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_TINY:
case MYSQL_TYPE_SHORT:
case MYSQL_TYPE_LONG:
@@ -2151,6 +2149,8 @@ static int check_part_field(enum_field_types sql_type,
*result_type= STRING_RESULT;
*need_cs_check= TRUE;
return FALSE;
+ case MYSQL_TYPE_NEWDECIMAL:
+ case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_TIMESTAMP:
case MYSQL_TYPE_NULL:
case MYSQL_TYPE_FLOAT: