null+****@clear*****
null+****@clear*****
2012年 1月 31日 (火) 17:39:52 JST
Kouhei Sutou 2012-01-31 17:39:52 +0900 (Tue, 31 Jan 2012)
New Revision: 98f8bd50400d6bf7ead69fa79ab9d1d202ec0dc4
Log:
[mysql56] support Field_timestamp::get_timestamp().
Modified files:
ha_mroonga.cc
ha_mroonga.h
Modified: ha_mroonga.cc (+25 -3)
===================================================================
--- ha_mroonga.cc 2012-01-31 17:03:20 +0900 (3ea0e50)
+++ ha_mroonga.cc 2012-01-31 17:39:52 +0900 (b1ef7b0)
@@ -6926,14 +6926,36 @@ int ha_mroonga::generic_store_bulk_float(Field *field, grn_obj *buf)
DBUG_RETURN(error);
}
+long long int ha_mroonga::get_grn_time_from_timestamp_field(Field_timestamp *field)
+{
+ MRN_DBUG_ENTER_METHOD();
+ long long int grn_time = 0;
+#ifdef MRN_FIELD_TIMESTAMP_GET_TIMESTAMP_USE_TIMEVAL
+ int warnings = 0;
+ struct timeval time_value;
+ if (field->get_timestamp(&time_value, &warnings)) {
+ // XXX: Should we report warnings or MySQL does?
+ } else {
+ grn_time = GRN_TIME_PACK(time_value.tv_sec, time_value.tv_usec);
+ }
+#elif defined(MRN_FIELD_TIMESTAMP_GET_TIMESTAMP_USE_MY_TIME_T)
+ unsigned long long int micro_seconds;
+ my_time_t seconds = field->get_timestamp(µ_seconds);
+ grn_time = GRN_TIME_PACK(seconds, micro_seconds);
+#else
+ my_bool is_null_value;
+ long seconds = field->get_timestamp(&is_null_value);
+ grn_time = GRN_TIME_PACK(seconds, 0);
+#endif
+ DBUG_RETURN(grn_time);
+}
+
int ha_mroonga::generic_store_bulk_timestamp(Field *field, grn_obj *buf)
{
MRN_DBUG_ENTER_METHOD();
int error = 0;
- my_bool is_null_value;
Field_timestamp *timestamp_field = (Field_timestamp *)field;
- long seconds = timestamp_field->get_timestamp(&is_null_value);
- long long int time = GRN_TIME_PACK(seconds, 0);
+ long long int time = get_grn_time_from_timestamp_field(timestamp_field);
grn_obj_reinit(ctx, buf, GRN_DB_TIME, 0);
GRN_TIME_SET(ctx, buf, time);
DBUG_RETURN(error);
Modified: ha_mroonga.h (+10 -0)
===================================================================
--- ha_mroonga.h 2012-01-31 17:03:20 +0900 (4e6c8ff)
+++ ha_mroonga.h 2012-01-31 17:39:52 +0900 (8266976)
@@ -106,6 +106,14 @@ extern "C" {
# define MRN_HAVE_HA_EXTRA_PREPARE_FOR_FORCED_CLOSE
#endif
+#if MYSQL_VERSION_ID >= 50604
+# define MRN_FIELD_TIMESTAMP_GET_TIMESTAMP_USE_TIMEVAL
+#elif defined(MRN_MARIADB_P)
+# define MRN_FIELD_TIMESTAMP_GET_TIMESTAMP_USE_MY_TIME_T
+#else
+# define MRN_FIELD_TIMESTAMP_GET_TIMESTAMP_USE_LONG
+#endif
+
class ha_mroonga;
/* structs */
@@ -402,6 +410,8 @@ private:
longlong *limit,
grn_obj *target_table, grn_obj *score_column);
+ long long int get_grn_time_from_timestamp_field(Field_timestamp *field);
+
int generic_store_bulk_string(Field *field, grn_obj *buf);
int generic_store_bulk_integer(Field *field, grn_obj *buf);
int generic_store_bulk_float(Field *field, grn_obj *buf);