summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Ronstrom <mikael@mysql.com>2009-10-02 11:31:05 +0200
committerMikael Ronstrom <mikael@mysql.com>2009-10-02 11:31:05 +0200
commitf1437d6afdc53fce49867781b14675003b4a32c3 (patch)
treea4e2432ccecf236709f2735f2cd0fe3782123f72
parentd0627362adee94d0cac63426a045365f8d8109fd (diff)
downloadmariadb-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.result9
-rw-r--r--mysql-test/t/partition_column.test5
-rw-r--r--sql/sql_partition.cc10
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