Commit e1d54fc7 authored by Alexey Botchkov's avatar Alexey Botchkov

Bug#55146 Assertion `m_part_spec.start_part == m_part_spec.end_part' in index_read_idx_map

              As we check for the impossible partitions earlier, it's possible that we don't find any
              suitable partitions at all. So this assertion just has to be corrected for this case.
      
per-file comments:
mysql-test/r/partition_innodb.result
Bug#55146      Assertion `m_part_spec.start_part == m_part_spec.end_part' in index_read_idx_map
        test result updated.

mysql-test/t/partition_innodb.test
Bug#55146      Assertion `m_part_spec.start_part == m_part_spec.end_part' in index_read_idx_map
        test case added.

sql/ha_partition.cc
Bug#55146      Assertion `m_part_spec.start_part == m_part_spec.end_part' in index_read_idx_map
        Assertion changed to '>=' as the  prune_partition_set() in the get_partition_set() can
        do start_part= end_part+1 if no possible partitions were found.
parent a5575096
...@@ -387,3 +387,9 @@ a b ...@@ -387,3 +387,9 @@ a b
3 2003-03-03 3 2003-03-03
COMMIT; COMMIT;
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (i1 int NOT NULL primary key, f1 int) ENGINE = InnoDB
PARTITION BY HASH(i1) PARTITIONS 2;
INSERT INTO t1 VALUES (1,1), (2,2);
SELECT * FROM t1 WHERE i1 = ( SELECT i1 FROM t1 WHERE f1=0 LIMIT 1 );
i1 f1
DROP TABLE t1;
...@@ -401,3 +401,16 @@ connection default; ...@@ -401,3 +401,16 @@ connection default;
SELECT * FROM t1; SELECT * FROM t1;
COMMIT; COMMIT;
DROP TABLE t1; DROP TABLE t1;
#
# Bug #55146 Assertion `m_part_spec.start_part == m_part_spec.end_part' in index_read_idx_map
#
CREATE TABLE t1 (i1 int NOT NULL primary key, f1 int) ENGINE = InnoDB
PARTITION BY HASH(i1) PARTITIONS 2;
INSERT INTO t1 VALUES (1,1), (2,2);
SELECT * FROM t1 WHERE i1 = ( SELECT i1 FROM t1 WHERE f1=0 LIMIT 1 );
DROP TABLE t1;
...@@ -4242,8 +4242,12 @@ int ha_partition::index_read_idx_map(uchar *buf, uint index, ...@@ -4242,8 +4242,12 @@ int ha_partition::index_read_idx_map(uchar *buf, uint index,
get_partition_set(table, buf, index, &m_start_key, &m_part_spec); get_partition_set(table, buf, index, &m_start_key, &m_part_spec);
/* How can it be more than one partition with the current use? */ /*
DBUG_ASSERT(m_part_spec.start_part == m_part_spec.end_part); We have either found exactly 1 partition
(in which case start_part == end_part)
or no matching partitions (start_part > end_part)
*/
DBUG_ASSERT(m_part_spec.start_part >= m_part_spec.end_part);
for (part= m_part_spec.start_part; part <= m_part_spec.end_part; part++) for (part= m_part_spec.start_part; part <= m_part_spec.end_part; part++)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment