Commit aefbea7d authored by Mattias Jonsson's avatar Mattias Jonsson

Post push fix for bug#11766249 bug#59316

Partitions can have different ref_length (position data length).
Removed DBUG_ASSERT which crashed debug builds when using
MAX_ROWS on some partitions.
parent c08c4e1f
...@@ -79,3 +79,12 @@ a ...@@ -79,3 +79,12 @@ a
DROP TABLE t1; DROP TABLE t1;
# Should not be any files left here # Should not be any files left here
# End of bug#30102 test. # End of bug#30102 test.
# Test of post-push fix for bug#11766249/59316
CREATE TABLE t1 (a INT, b VARCHAR(255), PRIMARY KEY (a))
ENGINE = MyISAM
PARTITION BY RANGE (a)
(PARTITION p0 VALUES LESS THAN (0) MAX_ROWS=100,
PARTITION p1 VALUES LESS THAN (100) MAX_ROWS=100,
PARTITION pMax VALUES LESS THAN MAXVALUE);
INSERT INTO t1 VALUES (1, "Partition p1, first row");
DROP TABLE t1;
-- source include/have_partition.inc -- source include/have_partition.inc
-- source include/not_embedded.inc
--disable_warnings --disable_warnings
DROP TABLE IF EXISTS t1, t2; DROP TABLE IF EXISTS t1, t2;
--enable_warnings --enable_warnings
...@@ -51,3 +50,13 @@ DROP TABLE t1; ...@@ -51,3 +50,13 @@ DROP TABLE t1;
--list_files $MYSQLD_DATADIR/test t1* --list_files $MYSQLD_DATADIR/test t1*
--list_files $MYSQLD_DATADIR/test t2* --list_files $MYSQLD_DATADIR/test t2*
--echo # End of bug#30102 test. --echo # End of bug#30102 test.
--echo # Test of post-push fix for bug#11766249/59316
CREATE TABLE t1 (a INT, b VARCHAR(255), PRIMARY KEY (a))
ENGINE = MyISAM
PARTITION BY RANGE (a)
(PARTITION p0 VALUES LESS THAN (0) MAX_ROWS=100,
PARTITION p1 VALUES LESS THAN (100) MAX_ROWS=100,
PARTITION pMax VALUES LESS THAN MAXVALUE);
INSERT INTO t1 VALUES (1, "Partition p1, first row");
DROP TABLE t1;
...@@ -2697,7 +2697,7 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked) ...@@ -2697,7 +2697,7 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
(PARTITION_ENABLED_TABLE_FLAGS)); (PARTITION_ENABLED_TABLE_FLAGS));
while (*(++file)) while (*(++file))
{ {
DBUG_ASSERT(ref_length >= (*file)->ref_length); /* MyISAM can have smaller ref_length for partitions with MAX_ROWS set */
set_if_bigger(ref_length, ((*file)->ref_length)); set_if_bigger(ref_length, ((*file)->ref_length));
/* /*
Verify that all partitions have the same set of table flags. Verify that all partitions have the same set of table flags.
...@@ -3957,12 +3957,15 @@ end_dont_reset_start_part: ...@@ -3957,12 +3957,15 @@ end_dont_reset_start_part:
void ha_partition::position(const uchar *record) void ha_partition::position(const uchar *record)
{ {
handler *file= m_file[m_last_part]; handler *file= m_file[m_last_part];
uint pad_length;
DBUG_ENTER("ha_partition::position"); DBUG_ENTER("ha_partition::position");
file->position(record); file->position(record);
int2store(ref, m_last_part); int2store(ref, m_last_part);
memcpy((ref + PARTITION_BYTES_IN_POS), file->ref, memcpy((ref + PARTITION_BYTES_IN_POS), file->ref, file->ref_length);
(ref_length - PARTITION_BYTES_IN_POS)); pad_length= m_ref_length - PARTITION_BYTES_IN_POS - file->ref_length;
if (pad_length)
memset((ref + PARTITION_BYTES_IN_POS + file->ref_length), 0, pad_length);
#ifdef SUPPORTING_PARTITION_OVER_DIFFERENT_ENGINES #ifdef SUPPORTING_PARTITION_OVER_DIFFERENT_ENGINES
#ifdef HAVE_purify #ifdef HAVE_purify
......
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