null+****@clear*****
null+****@clear*****
2012年 3月 18日 (日) 18:16:48 JST
Kouhei Sutou 2012-03-18 18:16:48 +0900 (Sun, 18 Mar 2012) New Revision: bc8399fc00cc6af55cb3bdb3b4eb2694b72b1756 Log: multiple column key: get float value in caller Modified files: ha_mroonga.cc ha_mroonga.h Modified: ha_mroonga.cc (+11 -9) =================================================================== --- ha_mroonga.cc 2012-03-18 18:02:26 +0900 (b64405f) +++ ha_mroonga.cc 2012-03-18 18:16:48 +0900 (26989f3) @@ -8844,16 +8844,14 @@ int ha_mroonga::storage_encode_key(Field *field, const uchar *key, DBUG_RETURN(error); } -uint ha_mroonga::storage_encode_multiple_column_key_float(const uchar *key, +void ha_mroonga::storage_encode_multiple_column_key_float(float value, + uint data_size, uchar *buffer, bool decode) { MRN_DBUG_ENTER_METHOD(); - uint data_size = 4; - float float_value = 0.0; - float4get(float_value, key); int n_bits = (data_size * 8 - 1); - int int_value = *((int *)(&float_value)); + int int_value = *((int *)(&value)); if (!decode) int_value ^= ((int_value >> n_bits) | (1 << n_bits)); mrn_byte_order_host_to_network(buffer, &int_value, data_size); @@ -8862,7 +8860,7 @@ uint ha_mroonga::storage_encode_multiple_column_key_float(const uchar *key, *((int *)buffer) = int_value ^ (((int_value ^ (1 << n_bits)) >> n_bits) | (1 << n_bits)); } - DBUG_RETURN(data_size); + DBUG_VOID_RETURN; } uint ha_mroonga::storage_encode_multiple_column_key_double(const uchar *key, @@ -8944,9 +8942,13 @@ int ha_mroonga::storage_encode_multiple_column_key(KEY *key_info, break; case MYSQL_TYPE_FLOAT: data_type = TYPE_FLOAT; - data_size = storage_encode_multiple_column_key_float(current_key, - current_buffer, - decode); + data_size = 4; + { + float value; + float4get(value, current_key); + storage_encode_multiple_column_key_float(value, data_size, + current_buffer, decode); + } break; case MYSQL_TYPE_DOUBLE: data_type = TYPE_DOUBLE; Modified: ha_mroonga.h (+2 -1) =================================================================== --- ha_mroonga.h 2012-03-18 18:02:26 +0900 (848ffa7) +++ ha_mroonga.h 2012-03-18 18:16:48 +0900 (97ffcd8) @@ -533,7 +533,8 @@ private: uchar *buf, uint *size); #endif int storage_encode_key(Field *field, const uchar *key, uchar *buf, uint *size); - uint storage_encode_multiple_column_key_float(const uchar *key, + void storage_encode_multiple_column_key_float(float vlaue, + uint data_size, uchar *buffer, bool decode); uint storage_encode_multiple_column_key_double(const uchar *key,