null+****@clear*****
null+****@clear*****
2012年 2月 22日 (水) 22:55:01 JST
Kouhei Sutou 2012-02-22 22:55:01 +0900 (Wed, 22 Feb 2012)
New Revision: 25d886815616bf6a2c8cc2f7898b9f64916b332d
Log:
[mariadb] support no fractional second TIME.
Modified files:
ha_mroonga.cc
Modified: ha_mroonga.cc (+30 -12)
===================================================================
--- ha_mroonga.cc 2012-02-22 22:18:35 +0900 (7aa0798)
+++ ha_mroonga.cc 2012-02-22 22:55:01 +0900 (881c9f2)
@@ -8520,19 +8520,37 @@ int ha_mroonga::storage_encode_key_time(Field *field, const uchar *key,
int error = 0;
long long int time;
#ifdef MRN_MARIADB_P
- // TODO: remove me when MariaDB becomes based on MySQL 5.6.
- // This implementation may be costful.
- Field_time_hires *time_hires_field = (Field_time_hires *)field;
- Field_time_hires unpacker((uchar *)key,
- (uchar *)(key - 1),
- time_hires_field->null_bit,
- time_hires_field->unireg_check,
- time_hires_field->field_name,
- time_hires_field->decimals(),
- time_hires_field->charset());
MYSQL_TIME mysql_time;
- uint fuzzy_date = 0;
- unpacker.get_date(&mysql_time, fuzzy_date);
+ if (field->decimals() == 0) {
+ long long int packed_time = sint3korr(key);
+ mysql_time.neg = false;
+ if (packed_time < 0) {
+ mysql_time.neg = true;
+ packed_time = -packed_time;
+ }
+ mysql_time.year = 0;
+ mysql_time.month = 0;
+ mysql_time.day = 0;
+ mysql_time.hour = (int)(packed_time / 10000);
+ long long int minute_part = packed_time - mysql_time.hour * 10000;
+ mysql_time.minute = (int)(minute_part / 100);
+ mysql_time.second = (int)(minute_part % 100);
+ mysql_time.second_part = 0;
+ mysql_time.time_type = MYSQL_TIMESTAMP_TIME;
+ } else {
+ // TODO: remove me when MariaDB becomes based on MySQL 5.6.
+ // This implementation may be costful.
+ Field_time_hires *time_hires_field = (Field_time_hires *)field;
+ Field_time_hires unpacker((uchar *)key,
+ (uchar *)(key - 1),
+ time_hires_field->null_bit,
+ time_hires_field->unireg_check,
+ time_hires_field->field_name,
+ time_hires_field->decimals(),
+ time_hires_field->charset());
+ uint fuzzy_date = 0;
+ unpacker.get_date(&mysql_time, fuzzy_date);
+ }
time = mrn_mysql_time_to_grn_time(&mysql_time);
#else
int mysql_time = (int)sint3korr(key);