Commit fd1a43b0 authored by evgen@moonbone.local's avatar evgen@moonbone.local
Browse files

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.
parent 33518801
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -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
+10 −0
Original line number Diff line number Diff line
@@ -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
+2 −1
Original line number Diff line number Diff line
@@ -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++)
  {