diff options
Diffstat (limited to 'sql')
-rw-r--r-- | sql/sql_select.cc | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 7f194b85ab8..315211f63c5 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -4900,12 +4900,24 @@ end_send(JOIN *join, JOIN_TAB *join_tab __attribute__((unused)), JOIN_TAB *jt=join->join_tab; if ((join->tables == 1) && !join->tmp_table && !join->sort_and_group && !join->send_group_parts && !join->having && !jt->select_cond && + !(jt->select && jt->select->quick) && !(jt->table->file->table_flags() & HA_NOT_EXACT_COUNT)) { /* Join over all rows in table; Return number of found rows */ + TABLE *table=jt->table; + join->select_options ^= OPTION_FOUND_ROWS; - jt->table->file->info(HA_STATUS_VARIABLE); - join->send_records = jt->table->file->records; + if (table->record_pointers || + (table->io_cache && my_b_inited(table->io_cache))) + { + /* Using filesort */ + join->send_records= table->found_records; + } + else + { + table->file->info(HA_STATUS_VARIABLE); + join->send_records = table->file->records; + } } else { |