1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4
* Copyright (C) 2008-2009 Sun Microsystems
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; version 2 of the License.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
#ifndef DRIZZLED_TIME_FUNCTIONS_H
21
#define DRIZZLED_TIME_FUNCTIONS_H
23
#include "drizzled/sql_error.h"
24
#include "mysys/drizzle_time.h"
26
typedef struct st_drizzle_time DRIZZLE_TIME;
28
/* Calc weekday from daynr */
29
/* Returns 0 for monday, 1 for tuesday .... */
30
int calc_weekday(long daynr, bool sunday_first_day_of_week);
33
The bits in week_format has the following meaning:
34
WEEK_MONDAY_FIRST (0) If not set Sunday is first day of week
35
If set Monday is first day of week
36
WEEK_YEAR (1) If not set Week is in range 0-53
38
Week 0 is returned for the the last week of the previous year (for
39
a date at start of january) In this case one can get 53 for the
40
first week of next year. This flag ensures that the week is
41
relevant for the given year. Note that this flag is only
42
releveant if WEEK_JANUARY is not set.
44
If set Week is in range 1-53.
46
In this case one may get week 53 for a date in January (when
47
the week is that last week of previous year) and week 1 for a
50
WEEK_FIRST_WEEKDAY (2) If not set Weeks are numbered according
52
If set The week that contains the first
53
'first-day-of-week' is week 1.
55
ISO 8601:1988 means that if the week containing January 1 has
56
four or more days in the new year, then it is week 1;
57
Otherwise it is the last week of the previous year, and the
60
uint32_t calc_week(DRIZZLE_TIME *l_time, uint32_t week_behaviour, uint32_t *year);
62
/* Change a daynr to year, month and day */
63
/* Daynr 0 is returned as date 00.00.00 */
64
void get_date_from_daynr(long daynr,
70
Convert a timestamp string to a DRIZZLE_TIME value and produce a warning
71
if string was truncated during conversion.
74
See description of str_to_datetime() for more information.
76
enum enum_drizzle_timestamp_type str_to_datetime_with_warn(const char *str,
82
Convert a time string to a DRIZZLE_TIME struct and produce a warning
83
if string was cut during conversion.
86
See str_to_time() for more info.
88
bool str_to_time_with_warn(const char *str, uint32_t length, DRIZZLE_TIME *l_time);
91
Convert a system time structure to TIME
93
void localtime_to_TIME(DRIZZLE_TIME *to, struct tm *from);
95
void make_date(const DRIZZLE_TIME *l_time, String *str);
97
void make_datetime(const DRIZZLE_TIME *l_time, String *str);
99
void make_truncated_value_warning(Session *session,
100
DRIZZLE_ERROR::enum_warning_level level,
103
enum enum_drizzle_timestamp_type time_type,
104
const char *field_name);
107
Calculate difference between two datetime values as seconds + microseconds.
111
l_time1 - TIME/DATE/DATETIME value
112
l_time2 - TIME/DATE/DATETIME value
113
l_sign - 1 absolute values are substracted,
114
-1 absolute values are added.
115
seconds_out - Out parameter where difference between
116
l_time1 and l_time2 in seconds is stored.
117
microseconds_out- Out parameter where microsecond part of difference
118
between l_time1 and l_time2 is stored.
121
This function calculates difference between l_time1 and l_time2 absolute
122
values. So one should set l_sign and correct result if he want to take
123
signs into account (i.e. for DRIZZLE_TIME values).
126
Returns sign of difference.
127
1 means negative result
128
0 means positive result
131
bool calc_time_diff(DRIZZLE_TIME *l_time1,
132
DRIZZLE_TIME *l_time2,
134
int64_t *seconds_out,
135
long *microseconds_out);
137
#endif /* DRIZZLED_TIME_FUNCTIONS_H */