To increase the test coverage of index reads in the partitioning engine, it is helpful to support step by step index reads, by the SQL HANDLER statements. It is not necessary to fully support SQL HANDLER statements for this testing, changed directions of reads (i.e. calling index_prev after index_next or a previous forward index read) does not need to be supported, since that never is done from the optimizer/executor. This means that when HANDLER t READ inx NEXT/PREV will give an error if the current index direction is different (reverse/forward). Also the partitioning engine will use partition pruning also for subsequent HANDLER calls, like CREATE TABLE t (a int, b int, KEY (a, b)) PARTITION BY HASH (b) PARTITIONS 2; HANDLER t READ a = (1, 2); HANDLER t READ a NEXT; ... Will only return records from the partition that matches b == 2 due to dynamic pruning in the index_read_map() function.
Simply remove the restriction for HA_CAN_SQL_HANDLER and fix index_prev() for HA_ERR_KEY_NOT_FOUND. And then issue HA_ERR_WRONG_COMMAND when direction is changed.
See attached patch (based upon the fix for bug#14495351) for the details and tests.