summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <sergefp@mysql.com>2006-04-04 00:52:14 +0400
committerunknown <sergefp@mysql.com>2006-04-04 00:52:14 +0400
commita26509aeadfbaf91ea64e3f8f85474a7265a38f4 (patch)
tree68a814a0a3776583a50fe92e0ac5e74174b9841e
parent838c7ddcccaf247214f5e39faef17d44c7f20518 (diff)
downloadmariadb-git-a26509aeadfbaf91ea64e3f8f85474a7265a38f4.tar.gz
BUG#18659: In get_part_iter_for_interval_via_walking(), when we need to
obtain partition number, call partition_info->get_part_partition_id() when the table has subpartitions, and get_partition_id() otherwise. (The bug was that we were always doing the latter) mysql-test/r/partition_pruning.result: Testcase for BUG#18659 mysql-test/t/partition_pruning.test: Testcase for BUG#18659
-rw-r--r--mysql-test/r/partition_pruning.result14
-rw-r--r--mysql-test/t/partition_pruning.test14
-rw-r--r--sql/sql_partition.cc6
3 files changed, 33 insertions, 1 deletions
diff --git a/mysql-test/r/partition_pruning.result b/mysql-test/r/partition_pruning.result
index 16dc23cdf42..d520f7735ec 100644
--- a/mysql-test/r/partition_pruning.result
+++ b/mysql-test/r/partition_pruning.result
@@ -583,3 +583,17 @@ explain partitions select * from t1 where a>='a' and a <= 'dddd';
id select_type table partitions type possible_keys key key_len ref rows Extra
1 SIMPLE t1 p1,p2,p3,p4,p5 ALL NULL NULL NULL NULL 5 Using where
drop table t1;
+create table t1 (f_int1 integer) partition by list(abs(mod(f_int1,2)))
+subpartition by hash(f_int1) subpartitions 2
+(
+partition part1 values in (0),
+partition part2 values in (1),
+partition part4 values in (null)
+);
+insert into t1 set f_int1 = null;
+select * from t1 where f_int1 is null;
+f_int1
+NULL
+explain partitions select * from t1 where f_int1 is null;
+id select_type table partitions type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 part4_p2sp0 system NULL NULL NULL NULL 1
diff --git a/mysql-test/t/partition_pruning.test b/mysql-test/t/partition_pruning.test
index 25320e9f80d..63d389f2c06 100644
--- a/mysql-test/t/partition_pruning.test
+++ b/mysql-test/t/partition_pruning.test
@@ -479,5 +479,19 @@ select * from t1 where a>='a' and a <= 'dddd';
explain partitions select * from t1 where a>='a' and a <= 'dddd';
drop table t1;
+# BUG#18659: Assertion failure when subpartitioning is used and partition is
+# "IS NULL"
+create table t1 (f_int1 integer) partition by list(abs(mod(f_int1,2)))
+ subpartition by hash(f_int1) subpartitions 2
+(
+ partition part1 values in (0),
+ partition part2 values in (1),
+ partition part4 values in (null)
+);
+insert into t1 set f_int1 = null;
+
+select * from t1 where f_int1 is null;
+explain partitions select * from t1 where f_int1 is null;
+
# No tests for NULLs in RANGE(monotonic_expr()) - they depend on BUG#15447
# being fixed.
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index c13c8c90103..981b22e0caf 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -5521,7 +5521,11 @@ int get_part_iter_for_interval_via_walking(partition_info *part_info,
else
{
longlong dummy;
- if (!part_info->get_partition_id(part_info, &part_id, &dummy))
+ int res= part_info->is_sub_partitioned() ?
+ part_info->get_part_partition_id(part_info, &part_id,
+ &dummy):
+ part_info->get_partition_id(part_info, &part_id, &dummy);
+ if (!res)
{
init_single_partition_iterator(part_id, part_iter);
return 1; /* Ok, iterator initialized */