diff --git a/mysql-test/r/group_min_max_innodb.result b/mysql-test/r/group_min_max_innodb.result index ae4b9d4d5dd..6607e1babf6 100644 --- a/mysql-test/r/group_min_max_innodb.result +++ b/mysql-test/r/group_min_max_innodb.result @@ -1,3 +1,5 @@ +drop view if exists v1; +drop table if exists t1,t4; create table t4 ( pk_col int auto_increment primary key, a1 char(64), a2 char(64), b char(16), c char(16) not null, d char(16), dummy char(64) default ' ' ) engine=innodb; @@ -70,3 +72,25 @@ explain select distinct f1, f2 from t1; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range NULL PRIMARY 5 NULL 3 Using index for group-by; Using temporary drop table t1; +create table t1(pk int primary key) engine=innodb; +create view v1 as select pk from t1 where pk < 20; +insert into t1 values (1), (2), (3), (4); +select distinct pk from v1; +pk +1 +2 +3 +4 +insert into t1 values (5), (6), (7); +select distinct pk from v1; +pk +1 +2 +3 +4 +5 +6 +7 +drop view v1; +drop table t1; +End of 5.1 tests diff --git a/mysql-test/t/group_min_max_innodb.test b/mysql-test/t/group_min_max_innodb.test index ea2a603a8a4..643b4f7d55e 100644 --- a/mysql-test/t/group_min_max_innodb.test +++ b/mysql-test/t/group_min_max_innodb.test @@ -6,6 +6,11 @@ --source include/have_innodb.inc +--disable_warnings +drop view if exists v1; +drop table if exists t1,t4; +--enable_warnings + # # Bug #12672: primary key implcitly included in every innodb index # @@ -93,3 +98,22 @@ alter table t1 drop primary key, add primary key (f2, f1); explain select distinct f1 a, f1 b from t1; explain select distinct f1, f2 from t1; drop table t1; + + +# +# Bug #36632: Select distinct from a simple view on an InnoDB table +# returns incorrect results +# +create table t1(pk int primary key) engine=innodb; +create view v1 as select pk from t1 where pk < 20; + +insert into t1 values (1), (2), (3), (4); +select distinct pk from v1; + +insert into t1 values (5), (6), (7); +select distinct pk from v1; + +drop view v1; +drop table t1; + +--echo End of 5.1 tests diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 2ef7aa13dd8..8cdcf12ef90 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -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] */