47
45
Structure with information describing ranges of my_time_t shifted to local
48
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.
49
47
See comments for TIME_to_gmt_sec() for more info.
51
49
typedef struct revtinfo
132
130
offset - local time zone offset
135
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
136
134
(from elsie code) because doesn't contain any leap correction and
137
135
TM_GMTOFF and is_dst setting and contains some MySQL specific
138
136
initialization. Funny but with removing of these we almost have
139
137
glibc's offtime function.
142
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)
196
194
tmp->day= (uint)(days + 1);
198
/* filling MySQL specific MYSQL_TIME members */
196
/* filling MySQL specific DRIZZLE_TIME members */
199
197
tmp->neg= 0; tmp->second_part= 0;
200
tmp->time_type= MYSQL_TIMESTAMP_DATETIME;
198
tmp->time_type= DRIZZLE_TIMESTAMP_DATETIME;
302
300
(60th and 61st second, look how we calculate them as "hit" in this
304
302
Under realistic assumptions about frequency of transitions the same array
305
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
306
304
implement tweaked binary search which will take into account that some
307
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.
310
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)
312
310
const TRAN_TYPE_INFO *ttisp;
313
311
const LS_INFO *lp;
452
450
We use completely different approach. It is better since it is both
453
451
faster than iterative implementations and fully determenistic. If you
454
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
456
454
The first is calculating shifted my_time_t value and the second - TIME
457
455
calculation from shifted my_time_t value (well it is a bit simplified
606
604
Time_zone_system() {} /* Remove gcc warning */
607
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,
608
606
bool *in_dst_time_gap) const;
609
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;
610
608
virtual const String * get_name() const;
615
Converts local time in system time zone in MYSQL_TIME representation
613
Converts local time in system time zone in DRIZZLE_TIME representation
616
614
to its my_time_t representation.
619
617
TIME_to_gmt_sec()
620
t - pointer to MYSQL_TIME structure with local time in
618
t - pointer to DRIZZLE_TIME structure with local time in
621
619
broken-down representation.
622
620
in_dst_time_gap - pointer to bool which is set to true if datetime
623
621
value passed doesn't really exist (i.e. falls into
627
625
This method uses system function (localtime_r()) for conversion
628
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
629
627
representation. Unlike the same function for Time_zone_db class
630
628
it it won't handle unnormalized input properly. Still it will
631
629
return lowest possible my_time_t in case of ambiguity or if we
637
635
Corresponding my_time_t value or 0 in case of error
640
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
643
641
return my_system_gmt_sec(t, ¬_used, in_dst_time_gap);
664
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
666
664
struct tm tmp_tm;
667
665
time_t tmp_t= (time_t)t;
669
667
localtime_r(&tmp_t, &tmp_tm);
670
668
localtime_to_TIME(tmp, &tmp_tm);
671
tmp->time_type= MYSQL_TIMESTAMP_DATETIME;
669
tmp->time_type= DRIZZLE_TIMESTAMP_DATETIME;
692
690
Instance of this class represents UTC time zone. It uses system gmtime_r
693
691
function for conversions and is always available. It is used only for
694
my_time_t -> MYSQL_TIME conversions in various UTC_... functions, it is not
695
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.
697
695
class Time_zone_utc : public Time_zone
700
698
Time_zone_utc() {} /* Remove gcc warning */
701
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,
702
700
bool *in_dst_time_gap) const;
703
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;
704
702
virtual const String * get_name() const;
709
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.
712
710
TIME_to_gmt_sec()
713
t - pointer to MYSQL_TIME structure with local time
711
t - pointer to DRIZZLE_TIME structure with local time
714
712
in broken-down representation.
715
713
in_dst_time_gap - pointer to bool which is set to true if datetime
716
714
value passed doesn't really exist (i.e. falls into
728
Time_zone_utc::TIME_to_gmt_sec(const MYSQL_TIME *t __attribute__((__unused__)),
729
bool *in_dst_time_gap __attribute__((__unused__))) const
726
Time_zone_utc::TIME_to_gmt_sec(const DRIZZLE_TIME *t __attribute__((unused)),
727
bool *in_dst_time_gap __attribute__((unused))) const
731
729
/* Should be never called */
742
740
gmt_sec_to_TIME()
743
tmp - pointer to MYSQL_TIME structure to fill-in
741
tmp - pointer to DRIZZLE_TIME structure to fill-in
744
742
t - my_time_t value to be converted
747
745
See note for apropriate Time_zone_system method.
750
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
752
750
struct tm tmp_tm;
753
751
time_t tmp_t= (time_t)t;
754
752
gmtime_r(&tmp_t, &tmp_tm);
755
753
localtime_to_TIME(tmp, &tmp_tm);
756
tmp->time_type= MYSQL_TIMESTAMP_DATETIME;
754
tmp->time_type= DRIZZLE_TIMESTAMP_DATETIME;
790
788
Time_zone_db(TIME_ZONE_INFO *tz_info_arg, const String * tz_name_arg);
791
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,
792
790
bool *in_dst_time_gap) const;
793
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;
794
792
virtual const String * get_name() const;
796
794
TIME_ZONE_INFO *tz_info;
826
824
TIME_to_gmt_sec()
827
t - pointer to MYSQL_TIME structure with local time
825
t - pointer to DRIZZLE_TIME structure with local time
828
826
in broken-down representation.
829
827
in_dst_time_gap - pointer to bool which is set to true if datetime
830
828
value passed doesn't really exist (i.e. falls into
838
836
Corresponding my_time_t value or 0 in case of error
841
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
843
841
return ::TIME_to_gmt_sec(t, tz_info, in_dst_time_gap);
852
850
gmt_sec_to_TIME()
853
tmp - pointer to MYSQL_TIME structure to fill-in
851
tmp - pointer to DRIZZLE_TIME structure to fill-in
854
852
t - my_time_t value to be converted
857
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
859
857
::gmt_sec_to_TIME(tmp, t, tz_info);
886
884
Time_zone_offset(long tz_offset_arg);
887
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,
888
886
bool *in_dst_time_gap) const;
889
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;
890
888
virtual const String * get_name() const;
892
890
This have to be public because we want to be able to access it from
923
921
Converts local time in time zone described as offset from UTC
924
from MYSQL_TIME representation to its my_time_t representation.
922
from DRIZZLE_TIME representation to its my_time_t representation.
927
925
TIME_to_gmt_sec()
928
t - pointer to MYSQL_TIME structure with local time
926
t - pointer to DRIZZLE_TIME structure with local time
929
927
in broken-down representation.
930
928
in_dst_time_gap - pointer to bool which should be set to true if
931
929
datetime value passed doesn't really exist
937
935
Corresponding my_time_t value or 0 in case of error
940
Time_zone_offset::TIME_to_gmt_sec(const MYSQL_TIME *t,
941
bool *in_dst_time_gap __attribute__((__unused__))) const
938
Time_zone_offset::TIME_to_gmt_sec(const DRIZZLE_TIME *t,
939
bool *in_dst_time_gap __attribute__((unused))) const
943
941
my_time_t local_t;
985
983
gmt_sec_to_TIME()
986
tmp - pointer to MYSQL_TIME structure to fill-in
984
tmp - pointer to DRIZZLE_TIME structure to fill-in
987
985
t - my_time_t value to be converted
990
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
992
990
sec_to_TIME(tmp, t, offset);
1173
my_tz_find(THD *thd __attribute__((__unused__)),
1174
const String *name __attribute__((__unused__)))
1171
my_tz_find(THD *thd __attribute__((unused)),
1172
const String *name __attribute__((unused)))