summaryrefslogtreecommitdiff
path: root/sql/filesort.cc
diff options
context:
space:
mode:
authorunknown <monty@mashka.mysql.fi>2003-03-16 16:30:54 +0200
committerunknown <monty@mashka.mysql.fi>2003-03-16 16:30:54 +0200
commitbfbb0ad69df21854f2db5fb2b9c708b2a576929e (patch)
treef6d63b9728c1157c31c1f74bbe32bc1e50de79b8 /sql/filesort.cc
parentf08688c5ee2aed851f92393b06b1b704ef0dd118 (diff)
parent9681f4a8cd242e3828f211e0bed5235e70ee5f4e (diff)
downloadmariadb-git-bfbb0ad69df21854f2db5fb2b9c708b2a576929e.tar.gz
Merge bk-internal.mysql.com:/home/bk/mysql-4.0
into mashka.mysql.fi:/home/my/mysql-4.0
Diffstat (limited to 'sql/filesort.cc')
-rw-r--r--sql/filesort.cc16
1 files changed, 6 insertions, 10 deletions
diff --git a/sql/filesort.cc b/sql/filesort.cc
index b212e2cb366..86574e4dd57 100644
--- a/sql/filesort.cc
+++ b/sql/filesort.cc
@@ -68,7 +68,7 @@ ha_rows filesort(TABLE *table, SORT_FIELD *sortorder, uint s_length,
ha_rows *examined_rows)
{
int error;
- ulong memavl;
+ ulong memavl, min_sort_memory;
uint maxbuffer;
BUFFPEK *buffpek;
ha_rows records;
@@ -137,7 +137,8 @@ ha_rows filesort(TABLE *table, SORT_FIELD *sortorder, uint s_length,
#endif
memavl= thd->variables.sortbuff_size;
- while (memavl >= MIN_SORT_MEMORY)
+ min_sort_memory= max(MIN_SORT_MEMORY, param.sort_length*MERGEBUFF2);
+ while (memavl >= min_sort_memory)
{
ulong old_memavl;
ulong keys= memavl/(param.sort_length+sizeof(char*));
@@ -146,15 +147,10 @@ ha_rows filesort(TABLE *table, SORT_FIELD *sortorder, uint s_length,
MYF(0))))
break;
old_memavl=memavl;
- if ((memavl=memavl/4*3) < MIN_SORT_MEMORY && old_memavl > MIN_SORT_MEMORY)
- memavl=MIN_SORT_MEMORY;
+ if ((memavl=memavl/4*3) < min_sort_memory && old_memavl > min_sort_memory)
+ memavl= min_sort_memory;
}
- if (memavl < param.sort_length*MERGEBUFF2)
- {
- my_error(ER_OUT_OF_SORTMEMORY,MYF(0));
- goto err;
- }
- if (memavl < MIN_SORT_MEMORY)
+ if (memavl < min_sort_memory)
{
my_error(ER_OUTOFMEMORY,MYF(ME_ERROR+ME_WAITTANG),
thd->variables.sortbuff_size);