1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

Fixed bug #36632: SELECT DISTINCT from a simple view on an

InnoDB table, where all selected columns
                  belong to the same unique index key, returns
                  incorrect results

Server executes some queries via QUICK_GROUP_MIN_MAX_SELECT
(MIN/MAX optimization for queries with GROUP BY or DISTINCT
clause) and that optimization implies loose index scan, so all
grouping is done by the QUICK_GROUP_MIN_MAX_SELECT::get_next
method.

The server does not set the precomputed_group_by flag for some
QUICK_GROUP_MIN_MAX_SELECT queries and duplicates grouping by
call to the end_send_group function.

Fix: when the test_if_skip_sort_order function selects loose 
index scan as a best way to satisfy an ORDER BY/GROUP BY type
of query, the precomputed_group_by flag has been set to use 
end_send/end_write functions instead of end_send_group/
end_write_group functions.


mysql-test/r/group_min_max_innodb.result:
  Fixed bug #36632: SELECT DISTINCT from a simple view on an
                    InnoDB table, where all selected columns
                    belong to the same unique index key, returns
                    incorrect results
mysql-test/t/group_min_max_innodb.test:
  Fixed bug #36632: SELECT DISTINCT from a simple view on an
                    InnoDB table, where all selected columns
                    belong to the same unique index key, returns
                    incorrect results
sql/sql_select.cc:
  Fixed bug #36632: SELECT DISTINCT from a simple view on an
                    InnoDB table, where all selected columns
                    belong to the same unique index key, returns
                    incorrect results
This commit is contained in:
Gleb Shchepa
2008-06-27 23:50:53 +05:00
parent fb8f32d077
commit a8067140e8
3 changed files with 50 additions and 0 deletions

View File

@ -13177,6 +13177,8 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
tab->ref.key= -1;
tab->ref.key_parts=0; // Don't use ref key.
tab->read_first_record= join_init_read_record;
if (tab->is_using_loose_index_scan())
join->tmp_table_param.precomputed_group_by= TRUE;
/*
TODO: update the number of records in join->best_positions[tablenr]
*/