46
45
Structure with information describing ranges of my_time_t shifted to local
47
time (my_time_t + offset). Used for local MYSQL_TIME -> my_time_t conversion.
46
time (my_time_t + offset). Used for local DRIZZLE_TIME -> my_time_t conversion.
48
47
See comments for TIME_to_gmt_sec() for more info.
50
49
typedef struct revtinfo
131
130
offset - local time zone offset
134
Convert my_time_t with offset to MYSQL_TIME struct. Differs from timesub
133
Convert my_time_t with offset to DRIZZLE_TIME struct. Differs from timesub
135
134
(from elsie code) because doesn't contain any leap correction and
136
135
TM_GMTOFF and is_dst setting and contains some MySQL specific
137
136
initialization. Funny but with removing of these we almost have
138
137
glibc's offtime function.
141
sec_to_TIME(MYSQL_TIME * tmp, my_time_t t, long offset)
140
sec_to_TIME(DRIZZLE_TIME * tmp, my_time_t t, long offset)
195
194
tmp->day= (uint)(days + 1);
197
/* filling MySQL specific MYSQL_TIME members */
196
/* filling MySQL specific DRIZZLE_TIME members */
198
197
tmp->neg= 0; tmp->second_part= 0;
199
tmp->time_type= MYSQL_TIMESTAMP_DATETIME;
198
tmp->time_type= DRIZZLE_TIMESTAMP_DATETIME;
301
300
(60th and 61st second, look how we calculate them as "hit" in this
303
302
Under realistic assumptions about frequency of transitions the same array
304
can be used fot MYSQL_TIME -> my_time_t conversion. For this we need to
303
can be used fot DRIZZLE_TIME -> my_time_t conversion. For this we need to
305
304
implement tweaked binary search which will take into account that some
306
MYSQL_TIME has two matching my_time_t ranges and some of them have none.
305
DRIZZLE_TIME has two matching my_time_t ranges and some of them have none.
309
gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t sec_in_utc, const TIME_ZONE_INFO *sp)
308
gmt_sec_to_TIME(DRIZZLE_TIME *tmp, my_time_t sec_in_utc, const TIME_ZONE_INFO *sp)
311
310
const TRAN_TYPE_INFO *ttisp;
312
311
const LS_INFO *lp;
451
450
We use completely different approach. It is better since it is both
452
451
faster than iterative implementations and fully determenistic. If you
453
look at my_time_t to MYSQL_TIME conversion then you'll find that it consist
452
look at my_time_t to DRIZZLE_TIME conversion then you'll find that it consist
455
454
The first is calculating shifted my_time_t value and the second - TIME
456
455
calculation from shifted my_time_t value (well it is a bit simplified
605
604
Time_zone_system() {} /* Remove gcc warning */
606
virtual my_time_t TIME_to_gmt_sec(const MYSQL_TIME *t,
605
virtual my_time_t TIME_to_gmt_sec(const DRIZZLE_TIME *t,
607
606
bool *in_dst_time_gap) const;
608
virtual void gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const;
607
virtual void gmt_sec_to_TIME(DRIZZLE_TIME *tmp, my_time_t t) const;
609
608
virtual const String * get_name() const;
614
Converts local time in system time zone in MYSQL_TIME representation
613
Converts local time in system time zone in DRIZZLE_TIME representation
615
614
to its my_time_t representation.
618
617
TIME_to_gmt_sec()
619
t - pointer to MYSQL_TIME structure with local time in
618
t - pointer to DRIZZLE_TIME structure with local time in
620
619
broken-down representation.
621
620
in_dst_time_gap - pointer to bool which is set to true if datetime
622
621
value passed doesn't really exist (i.e. falls into
626
625
This method uses system function (localtime_r()) for conversion
627
local time in system time zone in MYSQL_TIME structure to its my_time_t
626
local time in system time zone in DRIZZLE_TIME structure to its my_time_t
628
627
representation. Unlike the same function for Time_zone_db class
629
628
it it won't handle unnormalized input properly. Still it will
630
629
return lowest possible my_time_t in case of ambiguity or if we
636
635
Corresponding my_time_t value or 0 in case of error
639
Time_zone_system::TIME_to_gmt_sec(const MYSQL_TIME *t, bool *in_dst_time_gap) const
638
Time_zone_system::TIME_to_gmt_sec(const DRIZZLE_TIME *t, bool *in_dst_time_gap) const
642
641
return my_system_gmt_sec(t, ¬_used, in_dst_time_gap);
663
Time_zone_system::gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const
662
Time_zone_system::gmt_sec_to_TIME(DRIZZLE_TIME *tmp, my_time_t t) const
665
664
struct tm tmp_tm;
666
665
time_t tmp_t= (time_t)t;
668
667
localtime_r(&tmp_t, &tmp_tm);
669
668
localtime_to_TIME(tmp, &tmp_tm);
670
tmp->time_type= MYSQL_TIMESTAMP_DATETIME;
669
tmp->time_type= DRIZZLE_TIMESTAMP_DATETIME;
691
690
Instance of this class represents UTC time zone. It uses system gmtime_r
692
691
function for conversions and is always available. It is used only for
693
my_time_t -> MYSQL_TIME conversions in various UTC_... functions, it is not
694
intended for MYSQL_TIME -> my_time_t conversions and shouldn't be exposed to user.
692
my_time_t -> DRIZZLE_TIME conversions in various UTC_... functions, it is not
693
intended for DRIZZLE_TIME -> my_time_t conversions and shouldn't be exposed to user.
696
695
class Time_zone_utc : public Time_zone
699
698
Time_zone_utc() {} /* Remove gcc warning */
700
virtual my_time_t TIME_to_gmt_sec(const MYSQL_TIME *t,
699
virtual my_time_t TIME_to_gmt_sec(const DRIZZLE_TIME *t,
701
700
bool *in_dst_time_gap) const;
702
virtual void gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const;
701
virtual void gmt_sec_to_TIME(DRIZZLE_TIME *tmp, my_time_t t) const;
703
702
virtual const String * get_name() const;
708
Convert UTC time from MYSQL_TIME representation to its my_time_t representation.
707
Convert UTC time from DRIZZLE_TIME representation to its my_time_t representation.
711
710
TIME_to_gmt_sec()
712
t - pointer to MYSQL_TIME structure with local time
711
t - pointer to DRIZZLE_TIME structure with local time
713
712
in broken-down representation.
714
713
in_dst_time_gap - pointer to bool which is set to true if datetime
715
714
value passed doesn't really exist (i.e. falls into
727
Time_zone_utc::TIME_to_gmt_sec(const MYSQL_TIME *t __attribute__((unused)),
726
Time_zone_utc::TIME_to_gmt_sec(const DRIZZLE_TIME *t __attribute__((unused)),
728
727
bool *in_dst_time_gap __attribute__((unused))) const
730
729
/* Should be never called */
741
740
gmt_sec_to_TIME()
742
tmp - pointer to MYSQL_TIME structure to fill-in
741
tmp - pointer to DRIZZLE_TIME structure to fill-in
743
742
t - my_time_t value to be converted
746
745
See note for apropriate Time_zone_system method.
749
Time_zone_utc::gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const
748
Time_zone_utc::gmt_sec_to_TIME(DRIZZLE_TIME *tmp, my_time_t t) const
751
750
struct tm tmp_tm;
752
751
time_t tmp_t= (time_t)t;
753
752
gmtime_r(&tmp_t, &tmp_tm);
754
753
localtime_to_TIME(tmp, &tmp_tm);
755
tmp->time_type= MYSQL_TIMESTAMP_DATETIME;
754
tmp->time_type= DRIZZLE_TIMESTAMP_DATETIME;
789
788
Time_zone_db(TIME_ZONE_INFO *tz_info_arg, const String * tz_name_arg);
790
virtual my_time_t TIME_to_gmt_sec(const MYSQL_TIME *t,
789
virtual my_time_t TIME_to_gmt_sec(const DRIZZLE_TIME *t,
791
790
bool *in_dst_time_gap) const;
792
virtual void gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const;
791
virtual void gmt_sec_to_TIME(DRIZZLE_TIME *tmp, my_time_t t) const;
793
792
virtual const String * get_name() const;
795
794
TIME_ZONE_INFO *tz_info;
825
824
TIME_to_gmt_sec()
826
t - pointer to MYSQL_TIME structure with local time
825
t - pointer to DRIZZLE_TIME structure with local time
827
826
in broken-down representation.
828
827
in_dst_time_gap - pointer to bool which is set to true if datetime
829
828
value passed doesn't really exist (i.e. falls into
837
836
Corresponding my_time_t value or 0 in case of error
840
Time_zone_db::TIME_to_gmt_sec(const MYSQL_TIME *t, bool *in_dst_time_gap) const
839
Time_zone_db::TIME_to_gmt_sec(const DRIZZLE_TIME *t, bool *in_dst_time_gap) const
842
841
return ::TIME_to_gmt_sec(t, tz_info, in_dst_time_gap);
851
850
gmt_sec_to_TIME()
852
tmp - pointer to MYSQL_TIME structure to fill-in
851
tmp - pointer to DRIZZLE_TIME structure to fill-in
853
852
t - my_time_t value to be converted
856
Time_zone_db::gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const
855
Time_zone_db::gmt_sec_to_TIME(DRIZZLE_TIME *tmp, my_time_t t) const
858
857
::gmt_sec_to_TIME(tmp, t, tz_info);
885
884
Time_zone_offset(long tz_offset_arg);
886
virtual my_time_t TIME_to_gmt_sec(const MYSQL_TIME *t,
885
virtual my_time_t TIME_to_gmt_sec(const DRIZZLE_TIME *t,
887
886
bool *in_dst_time_gap) const;
888
virtual void gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const;
887
virtual void gmt_sec_to_TIME(DRIZZLE_TIME *tmp, my_time_t t) const;
889
888
virtual const String * get_name() const;
891
890
This have to be public because we want to be able to access it from
922
921
Converts local time in time zone described as offset from UTC
923
from MYSQL_TIME representation to its my_time_t representation.
922
from DRIZZLE_TIME representation to its my_time_t representation.
926
925
TIME_to_gmt_sec()
927
t - pointer to MYSQL_TIME structure with local time
926
t - pointer to DRIZZLE_TIME structure with local time
928
927
in broken-down representation.
929
928
in_dst_time_gap - pointer to bool which should be set to true if
930
929
datetime value passed doesn't really exist
936
935
Corresponding my_time_t value or 0 in case of error
939
Time_zone_offset::TIME_to_gmt_sec(const MYSQL_TIME *t,
938
Time_zone_offset::TIME_to_gmt_sec(const DRIZZLE_TIME *t,
940
939
bool *in_dst_time_gap __attribute__((unused))) const
942
941
my_time_t local_t;
984
983
gmt_sec_to_TIME()
985
tmp - pointer to MYSQL_TIME structure to fill-in
984
tmp - pointer to DRIZZLE_TIME structure to fill-in
986
985
t - my_time_t value to be converted
989
Time_zone_offset::gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const
988
Time_zone_offset::gmt_sec_to_TIME(DRIZZLE_TIME *tmp, my_time_t t) const
991
990
sec_to_TIME(tmp, t, offset);