2678 Gleb Shchepa 2008-06-27 [merge]
auto merge from local tree
modified:
mysql-test/r/group_min_max_innodb.result
mysql-test/t/group_min_max_innodb.test
sql/sql_select.cc
2677 Gleb Shchepa 2008-06-27 [merge]
merge 5.0-bugteam --> 5.1-bugteam
2676 Gleb Shchepa 2008-06-27
backport to 5.1 from 6.0
Bug#35658 (An empty binary value leads to mysqld crash)
Before this fix, the following token
b''
caused the parser to crash when reading the binary value from the empty string.
The crash was caused by:
ptr+= max_length - 1;
because max_length is unsigned and was 0, causing an overflow.
With this fix, an empty binary literal b'' is parsed as a binary value 0,
in Item_bin_string.
modified:
mysql-test/r/varbinary.result
mysql-test/t/varbinary.test
sql/item.cc
=== modified file 'mysql-test/r/group_min_max_innodb.result'
--- a/mysql-test/r/group_min_max_innodb.result 2006-05-22 12:10:02 +0000
+++ b/mysql-test/r/group_min_max_innodb.result 2008-06-27 18:50:53 +0000
@@ -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
=== modified file 'mysql-test/t/group_min_max_innodb.test'
--- a/mysql-test/t/group_min_max_innodb.test 2006-05-22 12:10:02 +0000
+++ b/mysql-test/t/group_min_max_innodb.test 2008-06-27 18:50:53 +0000
@@ -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 pri
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
=== modified file 'sql/sql_select.cc'
--- a/sql/sql_select.cc 2008-06-19 03:08:41 +0000
+++ b/sql/sql_select.cc 2008-06-27 18:54:16 +0000
@@ -13179,6 +13179,8 @@ test_if_skip_sort_order(JOIN_TAB *tab,OR
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]
*/
Thread |
---|
• bzr push into mysql-5.1 branch (gshchepa:2676 to 2678) Bug#35658 | Gleb Shchepa | 27 Jun |