summaryrefslogtreecommitdiff
path: root/sql/filesort.cc
diff options
context:
space:
mode:
authorunknown <kaa@kaamos.(none)>2008-01-10 14:35:11 +0300
committerunknown <kaa@kaamos.(none)>2008-01-10 14:35:11 +0300
commit1748d9b5d0b17ef7826da002bc1cb5cac9177b0c (patch)
tree4464a86a839a427c3f27b161310db83871804609 /sql/filesort.cc
parent9a69f56818f86cddd65fc53ba7858623d1cd6c52 (diff)
parente2693cfc6abb4f2a68c0264e738a8a7de53db611 (diff)
downloadmariadb-git-1748d9b5d0b17ef7826da002bc1cb5cac9177b0c.tar.gz
Merge kaamos.(none):/data/src/opt/mysql-5.0-opt
into kaamos.(none):/data/src/opt/mysql-5.1-opt sql/field.h: Auto merged sql/item_timefunc.cc: Auto merged sql/item_timefunc.h: Auto merged sql/set_var.cc: Auto merged sql/sql_base.cc: Auto merged mysql-test/r/subselect.result: Manual merge. mysql-test/t/subselect.test: Manual merge. sql/filesort.cc: Manual merge.
Diffstat (limited to 'sql/filesort.cc')
-rw-r--r--sql/filesort.cc20
1 files changed, 12 insertions, 8 deletions
diff --git a/sql/filesort.cc b/sql/filesort.cc
index 2e6f0ecaf05..b9de65bb46b 100644
--- a/sql/filesort.cc
+++ b/sql/filesort.cc
@@ -37,7 +37,8 @@ if (my_b_write((file),(uchar*) (from),param->ref_length)) \
static char **make_char_array(char **old_pos, register uint fields,
uint length, myf my_flag);
-static BUFFPEK *read_buffpek_from_file(IO_CACHE *buffer_file, uint count);
+static byte *read_buffpek_from_file(IO_CACHE *buffer_file, uint count,
+ byte *buf);
static ha_rows find_all_keys(SORTPARAM *param,SQL_SELECT *select,
uchar * *sort_keys, IO_CACHE *buffer_file,
IO_CACHE *tempfile,IO_CACHE *indexfile);
@@ -244,9 +245,10 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
}
else
{
- if (!table_sort.buffpek && table_sort.buffpek_len < maxbuffer &&
- !(table_sort.buffpek=
- (uchar *) read_buffpek_from_file(&buffpek_pointers, maxbuffer)))
+ if (!(table_sort.buffpek=
+ (uchar *) read_buffpek_from_file(&buffpek_pointers, maxbuffer,
+ (table_sort.buffpek_len < maxbuffer ?
+ NULL : table_sort.buffpek))))
goto err;
buffpek= (BUFFPEK *) table_sort.buffpek;
table_sort.buffpek_len= maxbuffer;
@@ -374,14 +376,16 @@ static char **make_char_array(char **old_pos, register uint fields,
/* Read 'count' number of buffer pointers into memory */
-static BUFFPEK *read_buffpek_from_file(IO_CACHE *buffpek_pointers, uint count)
+static byte *read_buffpek_from_file(IO_CACHE *buffpek_pointers, uint count,
+ byte *buf)
{
- ulong length;
- BUFFPEK *tmp;
+ ulong length= sizeof(BUFFPEK)*count;
+ byte *tmp= buf;
DBUG_ENTER("read_buffpek_from_file");
if (count > UINT_MAX/sizeof(BUFFPEK))
return 0; /* sizeof(BUFFPEK)*count will overflow */
- tmp=(BUFFPEK*) my_malloc(length=sizeof(BUFFPEK)*count, MYF(MY_WME));
+ if (!tmp)
+ tmp= (byte *)my_malloc(length, MYF(MY_WME));
if (tmp)
{
if (reinit_io_cache(buffpek_pointers,READ_CACHE,0L,0,0) ||