List:Commits« Previous MessageNext Message »
From:Mikael Ronstrom Date:November 20 2009 6:28pm
Subject:bzr push into mysql-5.6-next-mr branch (mikael:2923 to 2924) WL#5137
View as plain text  
 2924 Mikael Ronstrom	2009-11-20 [merge]
      WL#5137, Remove hash calculation from LOCK_open in open_table

    modified:
      include/hash.h
      mysys/hash.c
      sql/sql_base.cc
 2923 Davi Arnaut	2009-11-19 [merge]
      Manual merge of mysql-next-mr-runtime upstream.

    added:
      mysql-test/r/partition_sync.result
      mysql-test/r/rpl_mysqldump_slave.result
      mysql-test/t/partition_sync.test
      mysql-test/t/rpl_mysqldump_slave.test
    modified:
      client/client_priv.h
      client/mysql.cc
      client/mysqladmin.cc
      client/mysqlcheck.c
      client/mysqldump.c
      client/mysqltest.cc
      client/sql_string.cc
      client/sql_string.h
      config/ac-macros/misc.m4
      include/m_string.h
      include/mysql_com.h
      include/violite.h
      libmysql/libmysql.c
      libmysqld/lib_sql.cc
      mysql-test/r/alias.result
      mysql-test/r/delete.result
      mysql-test/r/derived.result
      mysql-test/r/dirty_close.result
      mysql-test/r/func_sapdb.result
      mysql-test/r/func_time.result
      mysql-test/r/mysql.result
      mysql-test/r/sp-error.result
      mysql-test/r/sp.result
      mysql-test/r/trigger.result
      mysql-test/r/type_time.result
      mysql-test/suite/rpl/r/rpl_multi_delete2.result
      mysql-test/suite/rpl/t/rpl_multi_delete2.test
      mysql-test/suite/sys_vars/r/group_concat_max_len_func.result
      mysql-test/t/alias.test
      mysql-test/t/delete.test
      mysql-test/t/derived.test
      mysql-test/t/dirty_close.test
      mysql-test/t/func_sapdb.test
      mysql-test/t/func_time.test
      mysql-test/t/lock_multi.test
      mysql-test/t/mysql.test
      mysql-test/t/shm.test
      mysql-test/t/sp-error.test
      mysql-test/t/sp.test
      mysql-test/t/trigger.test
      mysql-test/t/type_time.test
      mysys/my_alloc.c
      mysys/my_getopt.c
      sql/event_data_objects.cc
      sql/field.cc
      sql/field.h
      sql/ha_partition.cc
      sql/item_cmpfunc.cc
      sql/item_func.cc
      sql/item_subselect.cc
      sql/item_timefunc.cc
      sql/mysql_priv.h
      sql/opt_sum.cc
      sql/share/errmsg.txt
      sql/sp.cc
      sql/sp_head.cc
      sql/sql_cache.cc
      sql/sql_class.h
      sql/sql_insert.cc
      sql/sql_list.h
      sql/sql_parse.cc
      sql/sql_partition.cc
      sql/sql_select.cc
      sql/sql_servers.cc
      sql/sql_show.cc
      sql/sql_string.cc
      sql/sql_string.h
      sql/sql_trigger.cc
      sql/sql_update.cc
      sql/sql_yacc.yy
      sql/table.h
      sql/tztime.cc
      storage/ndb/include/kernel/signaldata/DictTabInfo.hpp
      strings/ctype-bin.c
      strings/ctype-latin1.c
      strings/ctype-mb.c
      strings/ctype-simple.c
      vio/vio.c
      vio/vio_priv.h
      vio/viosocket.c
=== modified file 'include/hash.h'
--- a/include/hash.h	2009-10-14 16:37:38 +0000
+++ b/include/hash.h	2009-11-20 18:27:54 +0000
@@ -30,6 +30,7 @@ extern "C" {
 /* flags for hash_init */
 #define HASH_UNIQUE     1       /* hash_insert fails on duplicate key */
 
+typedef uint my_hash_value_type;
 typedef uchar *(*my_hash_get_key)(const uchar *,size_t*,my_bool);
 typedef void (*my_hash_free_key)(void *);
 
@@ -60,8 +61,18 @@ void my_hash_free(HASH *tree);
 void my_hash_reset(HASH *hash);
 uchar *my_hash_element(HASH *hash, ulong idx);
 uchar *my_hash_search(const HASH *info, const uchar *key, size_t length);
+uchar *my_hash_search_using_hash_value(const HASH *info,
+                                       my_hash_value_type hash_value,
+                                       const uchar *key, size_t length);
+my_hash_value_type my_calc_hash(const HASH *info,
+                                const uchar *key, size_t length);
 uchar *my_hash_first(const HASH *info, const uchar *key, size_t length,
                      HASH_SEARCH_STATE *state);
+uchar *my_hash_first_from_hash_value(const HASH *info,
+                                     my_hash_value_type hash_value,
+                                     const uchar *key,
+                                     size_t length,
+                                     HASH_SEARCH_STATE *state);
 uchar *my_hash_next(const HASH *info, const uchar *key, size_t length,
                     HASH_SEARCH_STATE *state);
 my_bool my_hash_insert(HASH *info, const uchar *data);

=== modified file 'mysys/hash.c'
--- a/mysys/hash.c	2009-09-17 15:25:52 +0000
+++ b/mysys/hash.c	2009-11-20 18:27:54 +0000
@@ -33,16 +33,18 @@ typedef struct st_hash_info {
   uchar *data;					/* data for current entry */
 } HASH_LINK;
 
-static uint my_hash_mask(size_t hashnr, size_t buffmax, size_t maxlength);
+static uint my_hash_mask(my_hash_value_type hashnr,
+                         size_t buffmax, size_t maxlength);
 static void movelink(HASH_LINK *array,uint pos,uint next_link,uint newlink);
 static int hashcmp(const HASH *hash, HASH_LINK *pos, const uchar *key,
                    size_t length);
 
-static uint calc_hash(const HASH *hash, const uchar *key, size_t length)
+static my_hash_value_type calc_hash(const HASH *hash,
+                                    const uchar *key, size_t length)
 {
   ulong nr1=1, nr2=4;
   hash->charset->coll->hash_sort(hash->charset,(uchar*) key,length,&nr1,&nr2);
-  return nr1;
+  return (my_hash_value_type)nr1;
 }
 
 /**
@@ -179,7 +181,8 @@ my_hash_key(const HASH *hash, const ucha
 
 	/* Calculate pos according to keys */
 
-static uint my_hash_mask(size_t hashnr, size_t buffmax, size_t maxlength)
+static uint my_hash_mask(my_hash_value_type hashnr, size_t buffmax,
+                         size_t maxlength)
 {
   if ((hashnr & (buffmax-1)) < maxlength) return (hashnr & (buffmax-1));
   return (hashnr & ((buffmax >> 1) -1));
@@ -200,7 +203,7 @@ static
 #if !defined(__USLC__) && !defined(__sgi)
 inline
 #endif
-unsigned int rec_hashnr(HASH *hash,const uchar *record)
+my_hash_value_type rec_hashnr(HASH *hash,const uchar *record)
 {
   size_t length;
   uchar *key= (uchar*) my_hash_key(hash, record, &length, 0);
@@ -214,6 +217,21 @@ uchar* my_hash_search(const HASH *hash, 
   return my_hash_first(hash, key, length, &state);
 }
 
+uchar* my_hash_search_using_hash_value(const HASH *hash, 
+                                       my_hash_value_type hash_value,
+                                       const uchar *key,
+                                       size_t length)
+{
+  HASH_SEARCH_STATE state;
+  return my_hash_first_from_hash_value(hash, hash_value,
+                                       key, length, &state);
+}
+
+my_hash_value_type my_calc_hash(const HASH *hash,
+                                const uchar *key, size_t length)
+{
+  return calc_hash(hash, key, length ? length : hash->key_length);
+}
 /*
   Search after a record based on a key
 
@@ -224,14 +242,25 @@ uchar* my_hash_search(const HASH *hash, 
 uchar* my_hash_first(const HASH *hash, const uchar *key, size_t length,
                      HASH_SEARCH_STATE *current_record)
 {
+  return my_hash_first_from_hash_value(hash,
+                 calc_hash(hash, key, length ? length : hash->key_length),
+                 key, length, current_record);
+}
+                    
+uchar* my_hash_first_from_hash_value(const HASH *hash,
+                                     my_hash_value_type hash_value,
+                                     const uchar *key,
+                                     size_t length,
+                                     HASH_SEARCH_STATE *current_record)
+{
   HASH_LINK *pos;
   uint flag,idx;
-  DBUG_ENTER("my_hash_first");
+  DBUG_ENTER("my_hash_first_from_hash_value");
 
   flag=1;
   if (hash->records)
   {
-    idx= my_hash_mask(calc_hash(hash, key, length ? length : hash->key_length),
+    idx= my_hash_mask(hash_value,
                       hash->blength, hash->records);
     do
     {
@@ -331,7 +360,8 @@ static int hashcmp(const HASH *hash, HAS
 my_bool my_hash_insert(HASH *info, const uchar *record)
 {
   int flag;
-  size_t idx,halfbuff,hash_nr,first_index;
+  size_t idx,halfbuff,first_index;
+  my_hash_value_type hash_nr;
   uchar *UNINIT_VAR(ptr_to_rec),*UNINIT_VAR(ptr_to_rec2);
   HASH_LINK *data,*empty,*UNINIT_VAR(gpos),*UNINIT_VAR(gpos2),*pos;
 
@@ -467,7 +497,8 @@ my_bool my_hash_insert(HASH *info, const
 
 my_bool my_hash_delete(HASH *hash, uchar *record)
 {
-  uint blength,pos2,pos_hashnr,lastpos_hashnr,idx,empty_index;
+  uint blength,pos2,idx,empty_index;
+  my_hash_value_type pos_hashnr, lastpos_hashnr;
   HASH_LINK *data,*lastpos,*gpos,*pos,*pos3,*empty;
   DBUG_ENTER("my_hash_delete");
   if (!hash->records)

=== modified file 'sql/sql_base.cc'
--- a/sql/sql_base.cc	2009-11-06 14:20:27 +0000
+++ b/sql/sql_base.cc	2009-11-20 18:27:54 +0000
@@ -2529,6 +2529,7 @@ TABLE *open_table(THD *thd, TABLE_LIST *
   char	key[MAX_DBKEY_LENGTH];
   uint	key_length;
   char	*alias= table_list->alias;
+  my_hash_value_type hash_value;
   HASH_SEARCH_STATE state;
   DBUG_ENTER("open_table");
 
@@ -2718,6 +2719,7 @@ TABLE *open_table(THD *thd, TABLE_LIST *
     on disk.
   */
 
+  hash_value= my_calc_hash(&open_cache, (uchar*) key, key_length);
   VOID(pthread_mutex_lock(&LOCK_open));
 
   /*
@@ -2760,8 +2762,11 @@ TABLE *open_table(THD *thd, TABLE_LIST *
     an implicit "pending locks queue" - see
     wait_for_locked_table_names for details.
   */
-  for (table= (TABLE*) my_hash_first(&open_cache, (uchar*) key, key_length,
-                                     &state);
+  for (table= (TABLE*) my_hash_first_from_hash_value(&open_cache,
+                                                     hash_value,
+                                                     (uchar*) key,
+                                                     key_length,
+                                                     &state);
        table && table->in_use ;
        table= (TABLE*) my_hash_next(&open_cache, (uchar*) key, key_length,
                                     &state))


Attachment: [text/bzr-bundle] bzr/mikael@mysql.com-20091120182754-d96realeh1jpup9n.bundle
Thread
bzr push into mysql-5.6-next-mr branch (mikael:2923 to 2924) WL#5137Mikael Ronstrom20 Nov