Loading mysql-test/r/partition.result +12 −0 Original line number Diff line number Diff line drop table if exists t1, t2; CREATE TABLE t1 ( pk INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (pk) ) /*!50100 PARTITION BY HASH (pk) PARTITIONS 2 */; INSERT INTO t1 VALUES (NULL); INSERT INTO t1 VALUES (NULL); INSERT INTO t1 VALUES (NULL); SELECT * FROM t1 WHERE pk < 0 ORDER BY pk; pk DROP TABLE t1; CREATE TABLE t1 (a INT NOT NULL, KEY(a)) PARTITION BY RANGE(a) (PARTITION p1 VALUES LESS THAN (200), PARTITION pmax VALUES LESS THAN MAXVALUE); Loading mysql-test/t/partition.test +15 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,21 @@ drop table if exists t1, t2; --enable_warnings # # Bug#40954: Crash if range search and order by. # CREATE TABLE t1 ( pk INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (pk) ) /*!50100 PARTITION BY HASH (pk) PARTITIONS 2 */; INSERT INTO t1 VALUES (NULL); INSERT INTO t1 VALUES (NULL); INSERT INTO t1 VALUES (NULL); SELECT * FROM t1 WHERE pk < 0 ORDER BY pk; DROP TABLE t1; # # Bug#40494: Crash MYSQL server crashes on range access with partitioning # and order by Loading sql/ha_partition.cc +2 −1 Original line number Diff line number Diff line Loading @@ -4490,7 +4490,8 @@ int ha_partition::handle_ordered_index_scan(uchar *buf, bool reverse_order) This can only read record to table->record[0], as it was set when the table was being opened. We have to memcpy data ourselves. */ error= file->read_range_first(&m_start_key, end_range, eq_range, TRUE); error= file->read_range_first(m_start_key.key? &m_start_key: NULL, end_range, eq_range, TRUE); memcpy(rec_buf_ptr, table->record[0], m_rec_length); reverse_order= FALSE; break; Loading Loading
mysql-test/r/partition.result +12 −0 Original line number Diff line number Diff line drop table if exists t1, t2; CREATE TABLE t1 ( pk INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (pk) ) /*!50100 PARTITION BY HASH (pk) PARTITIONS 2 */; INSERT INTO t1 VALUES (NULL); INSERT INTO t1 VALUES (NULL); INSERT INTO t1 VALUES (NULL); SELECT * FROM t1 WHERE pk < 0 ORDER BY pk; pk DROP TABLE t1; CREATE TABLE t1 (a INT NOT NULL, KEY(a)) PARTITION BY RANGE(a) (PARTITION p1 VALUES LESS THAN (200), PARTITION pmax VALUES LESS THAN MAXVALUE); Loading
mysql-test/t/partition.test +15 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,21 @@ drop table if exists t1, t2; --enable_warnings # # Bug#40954: Crash if range search and order by. # CREATE TABLE t1 ( pk INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (pk) ) /*!50100 PARTITION BY HASH (pk) PARTITIONS 2 */; INSERT INTO t1 VALUES (NULL); INSERT INTO t1 VALUES (NULL); INSERT INTO t1 VALUES (NULL); SELECT * FROM t1 WHERE pk < 0 ORDER BY pk; DROP TABLE t1; # # Bug#40494: Crash MYSQL server crashes on range access with partitioning # and order by Loading
sql/ha_partition.cc +2 −1 Original line number Diff line number Diff line Loading @@ -4490,7 +4490,8 @@ int ha_partition::handle_ordered_index_scan(uchar *buf, bool reverse_order) This can only read record to table->record[0], as it was set when the table was being opened. We have to memcpy data ourselves. */ error= file->read_range_first(&m_start_key, end_range, eq_range, TRUE); error= file->read_range_first(m_start_key.key? &m_start_key: NULL, end_range, eq_range, TRUE); memcpy(rec_buf_ptr, table->record[0], m_rec_length); reverse_order= FALSE; break; Loading