From dac579336f206daf5adb698e8b5b878f8cd917ff Mon Sep 17 00:00:00 2001 From: unknown <ram@mysql.r18.ru> Date: Thu, 3 Oct 2002 14:55:02 +0500 Subject: [PATCH] Additional key segment (HA_KEYTYPE_END) creation has been moved from handler to hp_create.c BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- BitKeeper/etc/logging_ok | 1 + heap/hp_create.c | 18 +++++++++++------- sql/ha_heap.cc | 13 ------------- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 31c8d0a3253..866b5cfd3c3 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -74,3 +74,4 @@ WAX@sergbook.mysql.com bar@bar.udmsearch.izhnet.ru nick@mysql.com bar@bar.mysql.r18.ru +ram@mysql.r18.ru diff --git a/heap/hp_create.c b/heap/hp_create.c index 4163f5b0217..7eee6eaa64d 100644 --- a/heap/hp_create.c +++ b/heap/hp_create.c @@ -85,15 +85,24 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef, memcpy(share->keydef, keydef, (size_t) (sizeof(keydef[0]) * keys)); for (i= 0, keyinfo= share->keydef; i < keys; i++, keyinfo++) { - uint nsegs= keydef[i].keysegs; + keyinfo->seg= keyseg; + memcpy(keyseg, keydef[i].seg, + (size_t) (sizeof(keyseg[0]) * keydef[i].keysegs)); + keyseg+= keydef[i].keysegs; if (keydef[i].algorithm == HA_KEY_ALG_BTREE) { + /* additional HA_KEYTYPE_END keyseg */ + keyseg->type= HA_KEYTYPE_END; + keyseg->length= sizeof(byte*); + keyseg->flag= 0; + keyseg->null_bit= 0; + keyseg++; + init_tree(&keyinfo->rb_tree, 0, 0, sizeof(byte*), (qsort_cmp2)keys_compare, 1, NULL, NULL); keyinfo->delete_key= hp_rb_delete_key; keyinfo->write_key= hp_rb_write_key; - nsegs++; } else { @@ -102,12 +111,7 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef, keyinfo->delete_key= hp_delete_key; keyinfo->write_key= hp_write_key; } - keyinfo->seg= keyseg; - memcpy(keyseg, keydef[i].seg, - (size_t) (sizeof(keyseg[0]) * nsegs)); - keyseg+= nsegs; } - share->min_records= min_records; share->max_records= max_records; share->data_length= share->index_length= 0; diff --git a/sql/ha_heap.cc b/sql/ha_heap.cc index f56bfe74265..b41ab648f0b 100644 --- a/sql/ha_heap.cc +++ b/sql/ha_heap.cc @@ -243,11 +243,7 @@ int ha_heap::create(const char *name, TABLE *table, HA_CREATE_INFO *create_info) int error; for (key= parts= 0; key < table->keys; key++) - { parts+= table->key_info[key].key_parts; - if (table->key_info[key].algorithm == HA_KEY_ALG_BTREE) - parts++; /* additional HA_KEYTYPE_END keyseg */ - } if (!(keydef= (HP_KEYDEF*) my_malloc(table->keys * sizeof(HP_KEYDEF) + parts * sizeof(HA_KEYSEG), MYF(MY_WME)))) @@ -299,15 +295,6 @@ int ha_heap::create(const char *name, TABLE *table, HA_CREATE_INFO *create_info) seg->null_pos= 0; } } - if (pos->algorithm == HA_KEY_ALG_BTREE) - { - /* additional HA_KEYTYPE_END keyseg */ - seg->type= HA_KEYTYPE_END; - seg->length= sizeof(byte*); - seg->flag= 0; - seg->null_bit= 0; - seg++; - } } mem_per_row+= MY_ALIGN(table->reclength + 1, sizeof(char*)); max_rows= (ulong) (max_heap_table_size / mem_per_row); -- 2.30.9