Commit f0173b7f authored by unknown's avatar unknown

Bug fix, max_heap_table_size variable was not used.


Docs/manual.texi:
  Bug fix with HEAP type tables.
parent 7fa69b8e
...@@ -38935,6 +38935,11 @@ though, so Version 3.23 is not released as a stable version yet. ...@@ -38935,6 +38935,11 @@ though, so Version 3.23 is not released as a stable version yet.
@appendixsubsec Changes in release 3.23.29 @appendixsubsec Changes in release 3.23.29
@itemize @bullet @itemize @bullet
@item @item
Fixed a bug with @code{HEAP} type tables; the variable
@code{max_heap_table_size} wasn't used. Now either @code{MAX_ROWS} or
@code[max_heap_table_size} can be used to limit the size of a @code{HEAP}
type table.
@item
Applied patches for OS2 by @code{Yuri Dario}. Applied patches for OS2 by @code{Yuri Dario}.
@item @item
@code{FLUSH TABLES table_name} didn't always flush table properly to @code{FLUSH TABLES table_name} didn't always flush table properly to
...@@ -33,7 +33,8 @@ const char **ha_heap::bas_ext() const ...@@ -33,7 +33,8 @@ const char **ha_heap::bas_ext() const
int ha_heap::open(const char *name, int mode, uint test_if_locked) int ha_heap::open(const char *name, int mode, uint test_if_locked)
{ {
uint key,part,parts; uint key,part,parts,mem_per_row=0;
ulong max_rows;
HP_KEYDEF *keydef; HP_KEYDEF *keydef;
HP_KEYSEG *seg; HP_KEYSEG *seg;
...@@ -47,6 +48,7 @@ int ha_heap::open(const char *name, int mode, uint test_if_locked) ...@@ -47,6 +48,7 @@ int ha_heap::open(const char *name, int mode, uint test_if_locked)
for (key=0 ; key < table->keys ; key++) for (key=0 ; key < table->keys ; key++)
{ {
KEY *pos=table->key_info+key; KEY *pos=table->key_info+key;
mem_per_row += (pos->key_length + (sizeof(char*) * 2));
keydef[key].keysegs=(uint) pos->key_parts; keydef[key].keysegs=(uint) pos->key_parts;
keydef[key].flag = (pos->flags & HA_NOSAME); keydef[key].flag = (pos->flags & HA_NOSAME);
...@@ -66,9 +68,13 @@ int ha_heap::open(const char *name, int mode, uint test_if_locked) ...@@ -66,9 +68,13 @@ int ha_heap::open(const char *name, int mode, uint test_if_locked)
seg++; seg++;
} }
} }
mem_per_row += MY_ALIGN(table->reclength+1, sizeof(char*));
max_rows = (ulong) (max_heap_table_size / mem_per_row);
file=heap_open(table->path,mode, file=heap_open(table->path,mode,
table->keys,keydef, table->keys,keydef,
table->reclength,table->max_rows, table->reclength,
((table->max_rows < max_rows && table->max_rows) ?
table->max_rows : max_rows),
table->min_rows); table->min_rows);
my_free((gptr) keydef,MYF(0)); my_free((gptr) keydef,MYF(0));
info(HA_STATUS_NO_LOCK | HA_STATUS_CONST | HA_STATUS_VARIABLE); info(HA_STATUS_NO_LOCK | HA_STATUS_CONST | HA_STATUS_VARIABLE);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment