mirror of
https://github.com/MariaDB/server.git
synced 2025-01-15 19:42:28 +01:00
merging with mysql-5.0-bugteam
This commit is contained in:
commit
4662631f1d
2 changed files with 30 additions and 8 deletions
|
@ -106,7 +106,7 @@ void my_hash_replace(HASH *hash, HASH_SEARCH_STATE *state, uchar *new_row);
|
|||
my_bool my_hash_check(HASH *hash); /* Only in debug library */
|
||||
|
||||
#define my_hash_clear(H) bzero((char*) (H), sizeof(*(H)))
|
||||
#define my_hash_inited(H) ((H)->array.buffer != 0)
|
||||
#define my_hash_inited(H) ((H)->blength != 0)
|
||||
#define my_hash_init_opt(A,B,C,D,E,F,G,H) \
|
||||
(!my_hash_inited(A) && _my_hash_init(A,0,B,C,D,E,F,G, H CALLER_INFO))
|
||||
|
||||
|
|
36
mysys/hash.c
36
mysys/hash.c
|
@ -45,6 +45,32 @@ static uint calc_hash(const HASH *hash, const uchar *key, size_t length)
|
|||
return nr1;
|
||||
}
|
||||
|
||||
/**
|
||||
@brief Initialize the hash
|
||||
|
||||
@details
|
||||
|
||||
Initialize the hash, by defining and giving valid values for
|
||||
its elements. The failure to allocate memory for the
|
||||
hash->array element will not result in a fatal failure. The
|
||||
dynamic array that is part of the hash will allocate memory
|
||||
as required during insertion.
|
||||
|
||||
@param[in,out] hash The hash that is initialized
|
||||
@param[in] charset The charater set information
|
||||
@param[in] size The hash size
|
||||
@param[in] key_offest The key offset for the hash
|
||||
@param[in] key_length The length of the key used in
|
||||
the hash
|
||||
@param[in] get_key get the key for the hash
|
||||
@param[in] free_element pointer to the function that
|
||||
does cleanup
|
||||
@param[in] CALLER_INFO_PROTO flag that define the behaviour
|
||||
of the hash
|
||||
@return inidicates success or failure of initialization
|
||||
@retval 0 success
|
||||
@retval 1 failure
|
||||
*/
|
||||
my_bool
|
||||
_my_hash_init(HASH *hash, uint growth_size, CHARSET_INFO *charset,
|
||||
ulong size, size_t key_offset, size_t key_length,
|
||||
|
@ -55,12 +81,6 @@ _my_hash_init(HASH *hash, uint growth_size, CHARSET_INFO *charset,
|
|||
DBUG_PRINT("enter",("hash: 0x%lx size: %u", (long) hash, (uint) size));
|
||||
|
||||
hash->records=0;
|
||||
if (my_init_dynamic_array_ci(&hash->array, sizeof(HASH_LINK), size,
|
||||
growth_size))
|
||||
{
|
||||
hash->free=0; /* Allow call to my_hash_free */
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
hash->key_offset=key_offset;
|
||||
hash->key_length=key_length;
|
||||
hash->blength=1;
|
||||
|
@ -68,7 +88,8 @@ _my_hash_init(HASH *hash, uint growth_size, CHARSET_INFO *charset,
|
|||
hash->free=free_element;
|
||||
hash->flags=flags;
|
||||
hash->charset=charset;
|
||||
DBUG_RETURN(0);
|
||||
DBUG_RETURN(my_init_dynamic_array_ci(&hash->array,
|
||||
sizeof(HASH_LINK), size, 0));
|
||||
}
|
||||
|
||||
|
||||
|
@ -114,6 +135,7 @@ void my_hash_free(HASH *hash)
|
|||
my_hash_free_elements(hash);
|
||||
hash->free= 0;
|
||||
delete_dynamic(&hash->array);
|
||||
hash->blength= 0;
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue