[Groonga-mysql-commit] mroonga/mroonga [master] multiple column key: get double value in caller

Back to archive index

null+****@clear***** null+****@clear*****
2012年 3月 18日 (日) 18:19:08 JST


Kouhei Sutou	2012-03-18 18:19:08 +0900 (Sun, 18 Mar 2012)

  New Revision: 163518c483c79d34e9401eb3d70399966c50dd85

  Log:
    multiple column key: get double value in caller

  Modified files:
    ha_mroonga.cc
    ha_mroonga.h

  Modified: ha_mroonga.cc (+11 -10)
===================================================================
--- ha_mroonga.cc    2012-03-18 18:18:48 +0900 (26989f3)
+++ ha_mroonga.cc    2012-03-18 18:19:08 +0900 (27b6160)
@@ -8863,17 +8863,14 @@ void ha_mroonga::storage_encode_multiple_column_key_float(float value,
   DBUG_VOID_RETURN;
 }
 
-uint ha_mroonga::storage_encode_multiple_column_key_double(const uchar *key,
+void ha_mroonga::storage_encode_multiple_column_key_double(double value,
+                                                           uint data_size,
                                                            uchar *buffer,
                                                            bool decode)
 {
   MRN_DBUG_ENTER_METHOD();
-  uint data_size = 8;
-  double double_value = 0.0;
-  float8get(double_value, key);
   int n_bits = (data_size * 8 - 1);
-  volatile long long int *long_long_value_pointer =
-    (long long int *)(&double_value);
+  volatile long long int *long_long_value_pointer = (long long int *)(&value);
   volatile long long int long_long_value = *long_long_value_pointer;
   if (!decode)
      long_long_value ^= ((long_long_value >> n_bits) | (1LL << n_bits));
@@ -8884,7 +8881,7 @@ uint ha_mroonga::storage_encode_multiple_column_key_double(const uchar *key,
       long_long_value ^ (((long_long_value ^ (1LL << n_bits)) >> n_bits) |
                           (1LL << n_bits));
   }
-  DBUG_RETURN(data_size);
+  DBUG_VOID_RETURN;
 }
 
 int ha_mroonga::storage_encode_multiple_column_key(KEY *key_info,
@@ -8952,9 +8949,13 @@ int ha_mroonga::storage_encode_multiple_column_key(KEY *key_info,
       break;
     case MYSQL_TYPE_DOUBLE:
       data_type = TYPE_DOUBLE;
-      data_size = storage_encode_multiple_column_key_double(current_key,
-                                                            current_buffer,
-                                                            decode);
+      data_size = 8;
+      {
+        double value;
+        float8get(value, current_key);
+        storage_encode_multiple_column_key_double(value, data_size,
+                                                  current_buffer, decode);
+      }
       break;
     case MYSQL_TYPE_NULL:
       data_type = TYPE_NUMBER;

  Modified: ha_mroonga.h (+2 -1)
===================================================================
--- ha_mroonga.h    2012-03-18 18:18:48 +0900 (274c4f7)
+++ ha_mroonga.h    2012-03-18 18:19:08 +0900 (bb5d48b)
@@ -537,7 +537,8 @@ private:
                                                 uint data_size,
                                                 uchar *buffer,
                                                 bool decode);
-  uint storage_encode_multiple_column_key_double(const uchar *key,
+  void storage_encode_multiple_column_key_double(double value,
+                                                 uint data_size,
                                                  uchar *buffer,
                                                  bool decode);
   int storage_encode_multiple_column_key(KEY *key_info,




Groonga-mysql-commit メーリングリストの案内
Back to archive index