diff options
author | Mikael Ronstrom <mikael@mysql.com> | 2009-10-02 11:31:05 +0200 |
---|---|---|
committer | Mikael Ronstrom <mikael@mysql.com> | 2009-10-02 11:31:05 +0200 |
commit | f1437d6afdc53fce49867781b14675003b4a32c3 (patch) | |
tree | a4e2432ccecf236709f2735f2cd0fe3782123f72 | |
parent | d0627362adee94d0cac63426a045365f8d8109fd (diff) | |
download | mariadb-git-f1437d6afdc53fce49867781b14675003b4a32c3.tar.gz |
BUG#47754, used number of parts instead of number of list values as end part for list partitioning in column list partitioning
-rw-r--r-- | mysql-test/r/partition_column.result | 9 | ||||
-rw-r--r-- | mysql-test/t/partition_column.test | 5 | ||||
-rw-r--r-- | sql/sql_partition.cc | 10 |
3 files changed, 23 insertions, 1 deletions
diff --git a/mysql-test/r/partition_column.result b/mysql-test/r/partition_column.result index 66308321a95..43538cb7c69 100644 --- a/mysql-test/r/partition_column.result +++ b/mysql-test/r/partition_column.result @@ -20,6 +20,15 @@ select * from t1 where a = 2; a b 2 NULL 2 2 +select * from t1 where a > 8; +a b +select * from t1 where a not between 8 and 8; +a b +2 NULL +2 2 +3 NULL +1 NULL +1 1 show create table t1; Table Create Table t1 CREATE TABLE `t1` ( diff --git a/mysql-test/t/partition_column.test b/mysql-test/t/partition_column.test index ff625acdb1d..4edb03405b5 100644 --- a/mysql-test/t/partition_column.test +++ b/mysql-test/t/partition_column.test @@ -14,6 +14,9 @@ partition by list column_list(a,b) column_list(NULL, NULL)), partition p1 values in (column_list(1,1), column_list(2,2)), partition p2 values in (column_list(3, NULL), column_list(NULL, 1))); +# +# BUG#47754 Crash when selecting using NOT BETWEEN for column list partitioning +# insert into t1 values (3, NULL); insert into t1 values (NULL, 1); insert into t1 values (NULL, NULL); @@ -23,6 +26,8 @@ insert into t1 values (1,1); insert into t1 values (2,2); select * from t1 where a = 1; select * from t1 where a = 2; +select * from t1 where a > 8; +select * from t1 where a not between 8 and 8; show create table t1; drop table t1; diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 05b3822ce43..898cf8f07cd 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -6962,7 +6962,15 @@ int get_part_iter_for_interval_cols_via_map(partition_info *part_info, nparts); } if (flags & NO_MAX_RANGE) - part_iter->part_nums.end= part_info->num_parts; + { + if (part_info->part_type == RANGE_PARTITION) + part_iter->part_nums.end= part_info->num_parts; + else /* LIST_PARTITION */ + { + DBUG_ASSERT(part_info->part_type == LIST_PARTITION); + part_iter->part_nums.end= part_info->num_list_values; + } + } else { // Copy from max_value to record |