There should be new flag in table_flags() to show that a handler do not support rnd_pos - that is cannot read arbitrary row based on "position". Only full table scans (or index accesses if max_keys() is non-zero) are supported. rnd_pos() is now a requirement for filesort to work. So if the handler does not set HA_RND_POS flag (as usual we prefer positive flags to negative, like HA_NO_RND_POS) and MySQL needs it for filesort - that is it is not handled via addon field (see filesort.cc) - MySQL should internally create a temp table, copy the table's content there (applying WHERE clause) an then sort the table. Additiona notes: MySQL also require rnd_pos() in the following situations: - Multi-table-updates - Multi-table-deletes - QUICK_ROR_INTERSECT_SELECT (ie search with AND on different keys) - QUICK_ROR_UNION_SELECT (search with OR on different keys) - On duplicate keys, if handler->table_flags & HA_DUPP_POS - UPDATE ... ORDER BY, DELETE ... ORDER BY If the handler doesn't support RND_POS, we need to give an error in case of multi-table-updates/deletes. We also need to disable the above optiomizations. .
Add new Storage Engine flag - HA_CAN_RND_POS filesort should use "addon_field" optimization if tis flag is set