Bug#15130: CREATE .. SELECT was denied to use advantages of the SQL_BIG_RESULT.
When the SQL_BIG_RESULT flag is specified SELECT should store items from the select list in the filesort data and use them when sending to a client. The get_addon_fields function is responsible for creating necessary structures for that. But this function was allowed to do so only for SELECT and INSERT .. SELECT queries. This makes the SQL_BIG_RESULT useless for the CREATE .. SELECT queries. Now the get_addon_fields allows storing select list items in the filesort data for the CREATE .. SELECT queries. mysql-test/t/create.test: Added a test case for the bug#15130: CREATE .. SELECT was denied to use advantages of the SQL_BIG_RESULT. mysql-test/r/create.result: Added a test case for the bug#15130: CREATE .. SELECT was denied to use advantages of the SQL_BIG_RESULT. sql/filesort.cc: Bug#15130: CREATE .. SELECT was denied to use advantages of the SQL_BIG_RESULT. Now the get_addon_fields allows storing select list items in the filesort data for the CREATE .. SELECT queries.
This commit is contained in:
parent
c29002a5b6
commit
c4d53e31b0
@ -1503,4 +1503,17 @@ t1 CREATE TABLE `t1` (
|
||||
`c17` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1(f1 int,f2 int);
|
||||
insert into t1 value(1,1),(1,2),(1,3),(2,1),(2,2),(2,3);
|
||||
flush status;
|
||||
create table t2 select sql_big_result f1,count(f2) from t1 group by f1;
|
||||
show status like 'handler_read%';
|
||||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 0
|
||||
Handler_read_next 0
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
Handler_read_rnd_next 7
|
||||
drop table t1,t2;
|
||||
End of 5.0 tests
|
||||
|
@ -1119,4 +1119,14 @@ show create table t1;
|
||||
drop table t1;
|
||||
|
||||
|
||||
#
|
||||
# Bug#15130:CREATE .. SELECT was denied to use advantages of the SQL_BIG_RESULT.
|
||||
#
|
||||
create table t1(f1 int,f2 int);
|
||||
insert into t1 value(1,1),(1,2),(1,3),(2,1),(2,2),(2,3);
|
||||
flush status;
|
||||
create table t2 select sql_big_result f1,count(f2) from t1 group by f1;
|
||||
show status like 'handler_read%';
|
||||
drop table t1,t2;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -1430,7 +1430,8 @@ get_addon_fields(THD *thd, Field **ptabfield, uint sortlength, uint *plength)
|
||||
doesn't work for alter table
|
||||
*/
|
||||
if (thd->lex->sql_command != SQLCOM_SELECT &&
|
||||
thd->lex->sql_command != SQLCOM_INSERT_SELECT)
|
||||
thd->lex->sql_command != SQLCOM_INSERT_SELECT &&
|
||||
thd->lex->sql_command != SQLCOM_CREATE_TABLE)
|
||||
return 0;
|
||||
for (pfield= ptabfield; (field= *pfield) ; pfield++)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user