1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-24 11:21:21 +03:00

Merge timka@10.100.64.80:/home/timka/mysql/src/4.1-bug-21787

into  dl145s.mysql.com:/data/tkatchaounov/5.0-bug-21787


mysql-test/r/limit.result:
  Auto merged
mysql-test/t/limit.test:
  Auto merged
sql/sql_select.cc:
  Adjust the fix for BUG#21787 for 5.0
This commit is contained in:
unknown
2006-09-01 14:29:27 +02:00
3 changed files with 38 additions and 7 deletions

View File

@@ -8939,11 +8939,6 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
keyinfo->key_length+= key_part_info->length;
}
}
else
{
set_if_smaller(table->s->max_rows, rows_limit);
param->end_write_records= rows_limit;
}
if (distinct && field_count != param->hidden_field_count)
{
@@ -8958,8 +8953,6 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
null_pack_length-=hidden_null_pack_length;
keyinfo->key_parts= ((field_count-param->hidden_field_count)+
test(null_pack_length));
set_if_smaller(table->s->max_rows, rows_limit);
param->end_write_records= rows_limit;
table->distinct= 1;
table->s->keys= 1;
if (blob_count)
@@ -9011,6 +9004,20 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
0 : FIELDFLAG_BINARY;
}
}
/*
Push the LIMIT clause to the temporary table creation, so that we
materialize only up to 'rows_limit' records instead of all result records.
This optimization is not applicable when there is GROUP BY or there is
no GROUP BY, but there are aggregate functions, because both must be
computed for all result rows.
*/
if (!group && !thd->lex->current_select->with_sum_func)
{
set_if_smaller(table->s->max_rows, rows_limit);
param->end_write_records= rows_limit;
}
if (thd->is_fatal_error) // If end of memory
goto err; /* purecov: inspected */
table->s->db_record_offset= 1;