From c4d53e31b0d7c242ebcaaf354605fa4ebbad0acc Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 24 Jul 2007 18:15:44 +0400 Subject: [PATCH] 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. --- mysql-test/r/create.result | 13 +++++++++++++ mysql-test/t/create.test | 10 ++++++++++ sql/filesort.cc | 3 ++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/create.result b/mysql-test/r/create.result index e692dbf3938..dedd01be340 100644 --- a/mysql-test/r/create.result +++ b/mysql-test/r/create.result @@ -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 diff --git a/mysql-test/t/create.test b/mysql-test/t/create.test index 99f3fea416a..822620aa552 100644 --- a/mysql-test/t/create.test +++ b/mysql-test/t/create.test @@ -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 diff --git a/sql/filesort.cc b/sql/filesort.cc index f8868ed6927..db73ede99b0 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -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++) {