diff options
author | jani@prima.mysql.com <> | 2000-12-07 14:26:29 +0200 |
---|---|---|
committer | jani@prima.mysql.com <> | 2000-12-07 14:26:29 +0200 |
commit | 110a5f2d3a9d8ce50341d4966c946c71a7b4a005 (patch) | |
tree | 5130319d9e6329278b6e116968f57fda32df3ab8 /sql | |
parent | 87d9388e52a128427481064e21373f8460d6b24f (diff) | |
parent | 16a833a2a9d6d7d0de865047efbae1744c758b18 (diff) | |
download | mariadb-git-110a5f2d3a9d8ce50341d4966c946c71a7b4a005.tar.gz |
Merge
Diffstat (limited to 'sql')
-rw-r--r-- | sql/ha_heap.cc | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/sql/ha_heap.cc b/sql/ha_heap.cc index b4b0c4b677e..0a8f55bc5bb 100644 --- a/sql/ha_heap.cc +++ b/sql/ha_heap.cc @@ -33,7 +33,8 @@ const char **ha_heap::bas_ext() const 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_KEYSEG *seg; @@ -47,7 +48,8 @@ int ha_heap::open(const char *name, int mode, uint test_if_locked) for (key=0 ; key < table->keys ; 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].flag = (pos->flags & HA_NOSAME); keydef[key].seg=seg; @@ -66,9 +68,13 @@ int ha_heap::open(const char *name, int mode, uint test_if_locked) 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, 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); my_free((gptr) keydef,MYF(0)); info(HA_STATUS_NO_LOCK | HA_STATUS_CONST | HA_STATUS_VARIABLE); |