summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/my_sys.h18
-rw-r--r--include/my_time.h33
-rw-r--r--include/mysql.h.pp2
-rw-r--r--include/mysql_com.h2
4 files changed, 42 insertions, 13 deletions
diff --git a/include/my_sys.h b/include/my_sys.h
index 3a240cfc118..f86b7839baf 100644
--- a/include/my_sys.h
+++ b/include/my_sys.h
@@ -894,11 +894,21 @@ extern ulong crc32(ulong crc, const uchar *buf, uint len);
extern uint my_set_max_open_files(uint files);
void my_free_open_file_info(void);
-extern time_t my_time(myf flags);
+typedef struct {ulonglong val;} my_hrtime_t;
+typedef struct {ulonglong val;} my_timediff_t;
+void my_time_init();
+extern my_hrtime_t my_hrtime();
+void my_diff_and_hrtime(my_timediff_t *interval, my_hrtime_t *timestamp);
extern ulonglong my_getsystime(void);
-extern ulonglong my_micro_time();
-extern ulonglong my_micro_time_and_time(time_t *time_arg);
-time_t my_time_possible_from_micro(ulonglong microtime);
+
+#define my_micro_time() (my_getsystime()/10)
+#define hrtime_to_time(X) ((time_t)((X).val/1000000))
+#define hrtime_from_time(X) ((ulonglong)((X)*1000000ULL))
+#define hrtime_to_double(X) ((X).val/1e6)
+#define hrtime_sec_part(X) ((X).val%1000000)
+#define my_time(X) hrtime_to_time(my_hrtime())
+#define my_micro_and_hrtime(X,Y) my_diff_and_hrtime(X,Y)
+
extern my_bool my_gethwaddr(uchar *to);
extern int my_getncpus();
diff --git a/include/my_time.h b/include/my_time.h
index 58995f1bf62..7d059a03710 100644
--- a/include/my_time.h
+++ b/include/my_time.h
@@ -55,6 +55,7 @@ typedef long my_time_t;
/* Flags to str_to_datetime */
#define TIME_FUZZY_DATE 1
#define TIME_DATETIME_ONLY 2
+#define TIME_TIME_ONLY 4
/* Must be same as MODE_NO_ZERO_IN_DATE */
#define TIME_NO_ZERO_IN_DATE (65536L*2*2*2*2*2*2*2)
/* Must be same as MODE_NO_ZERO_DATE */
@@ -68,8 +69,9 @@ typedef long my_time_t;
#define TIME_MAX_HOUR 838
#define TIME_MAX_MINUTE 59
#define TIME_MAX_SECOND 59
+#define TIME_MAX_SECOND_PART 999999
#define TIME_MAX_VALUE (TIME_MAX_HOUR*10000 + TIME_MAX_MINUTE*100 + \
- TIME_MAX_SECOND)
+ TIME_MAX_SECOND + TIME_MAX_SECOND_PART/1e6)
#define TIME_MAX_VALUE_SECONDS (TIME_MAX_HOUR * 3600L + \
TIME_MAX_MINUTE * 60L + TIME_MAX_SECOND)
@@ -80,14 +82,15 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time,
uint flags, int *was_cut);
longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res,
uint flags, int *was_cut);
+int number_to_time(double nr, MYSQL_TIME *ltime, int *was_cut);
ulonglong TIME_to_ulonglong_datetime(const MYSQL_TIME *);
ulonglong TIME_to_ulonglong_date(const MYSQL_TIME *);
ulonglong TIME_to_ulonglong_time(const MYSQL_TIME *);
ulonglong TIME_to_ulonglong(const MYSQL_TIME *);
+double TIME_to_double(const MYSQL_TIME *my_time);
-
-my_bool str_to_time(const char *str,uint length, MYSQL_TIME *l_time,
- int *warning);
+longlong pack_time(MYSQL_TIME *my_time);
+MYSQL_TIME *unpack_time(longlong packed, MYSQL_TIME *my_time);
int check_time_range(struct st_mysql_time *, int *warning);
@@ -136,11 +139,27 @@ void set_zero_time(MYSQL_TIME *tm, enum enum_mysql_timestamp_type time_type);
sent using binary protocol fit in this buffer.
*/
#define MAX_DATE_STRING_REP_LENGTH 30
+#define MAX_SEC_PART_VALUE 999999
+#define MAX_SEC_PART_DIGITS 6
+#define AUTO_SEC_PART_DIGITS 31 /* same as NOT_FIXED_DEC */
-int my_time_to_str(const MYSQL_TIME *l_time, char *to);
+int my_time_to_str(const MYSQL_TIME *l_time, char *to, int digits);
int my_date_to_str(const MYSQL_TIME *l_time, char *to);
-int my_datetime_to_str(const MYSQL_TIME *l_time, char *to);
-int my_TIME_to_str(const MYSQL_TIME *l_time, char *to);
+int my_datetime_to_str(const MYSQL_TIME *l_time, char *to, int digits);
+int my_TIME_to_str(const MYSQL_TIME *l_time, char *to, int digits);
+
+static inline longlong sec_part_shift(longlong second_part, int digits)
+{
+ return second_part / log_10_int[MAX_SEC_PART_DIGITS - digits];
+}
+static inline longlong sec_part_unshift(longlong second_part, int digits)
+{
+ return second_part * log_10_int[MAX_SEC_PART_DIGITS - digits];
+}
+static inline ulong sec_part_truncate(ulong second_part, int digits)
+{
+ return second_part - second_part % log_10_int[MAX_SEC_PART_DIGITS - digits];
+}
/*
Available interval types used in any statement.
diff --git a/include/mysql.h.pp b/include/mysql.h.pp
index ceb4b2d591c..408800f55f2 100644
--- a/include/mysql.h.pp
+++ b/include/mysql.h.pp
@@ -102,7 +102,7 @@ struct rand_struct {
double max_value_dbl;
};
enum Item_result {STRING_RESULT=0, REAL_RESULT, INT_RESULT, ROW_RESULT,
- DECIMAL_RESULT};
+ DECIMAL_RESULT, TIME_RESULT};
typedef struct st_udf_args
{
unsigned int arg_count;
diff --git a/include/mysql_com.h b/include/mysql_com.h
index 7d3dd3d4f34..61a50ae558c 100644
--- a/include/mysql_com.h
+++ b/include/mysql_com.h
@@ -439,7 +439,7 @@ struct rand_struct {
/* The following is for user defined functions */
enum Item_result {STRING_RESULT=0, REAL_RESULT, INT_RESULT, ROW_RESULT,
- DECIMAL_RESULT};
+ DECIMAL_RESULT, TIME_RESULT};
typedef struct st_udf_args
{