pike.git/
lib/
modules/
Sql.pmod/
mysql.pike
Branch:
Tag:
Non-build tags
All tags
No tags
2017-03-12
2017-03-12 14:54:40 by Henrik Grubbström (Grubba) <grubba@grubba.org>
59c3ce871bc03df1390b1a73791246c41b5f05c5 (
79
lines) (+
4
/-
75
)
[
Show
|
Annotate
]
Branch:
8.1
Sql.mysql: Reduce code duplication somewhat.
537:
return e; }
-
// The following time conversion functions assumes the SQL server
-
// handles time in this local timezone. They map the special zero
-
// time/date spec to 0.
-
-
private constant timezone = localtime (0)->timezone;
-
+
//! Converts a system time value to an appropriately formatted time //! spec for the database. //!
555:
//! seconds-since-midnight value. string encode_time (int time, void|int date) {
-
if (date) {
-
if (!time)
return
"000000";
-
mapping(string
:
int) ct = localtime (
time
);
-
return sprintf
(
"%02d%02d%02d"
,
ct->hour,
ct
-
>min,
ct->sec)
;
+
return :
:encode_time
(time
, date
)
-
"
:
";
}
-
else return sprintf ("%02d%02d%02d", time / 3600 % 24, time / 60 % 60, time % 60);
-
}
+
//! Converts a system time value to an appropriately formatted //! date-only spec for the database.
570:
//! Time to encode. string encode_date (int time) {
-
if (!time)
return
"00000000";
-
mapping(string
:
int) ct = localtime
(time)
;
-
return sprintf (
"
%04d%02d%02d", ct
-
>year + 1900, ct->mon + 1, ct->mday)
;
+
return :
:encode_date
(time)
-
"
-
";
} //! Converts a system time value to an appropriately formatted
582:
//! Time to encode. string encode_datetime (int time) {
-
if (!time)
return
"00000000000000";
-
mapping
(
string
:
int) ct = localtime
(time)
;
-
return sprintf
("
%04d%02d%02d%02d%02d%02d
",
-
ct->year + 1900
,
ct->mon + 1, ct->mday,
-
ct->hour, ct->min, ct->sec
);
+
return
replace
(:
:encode_datetime
(time)
,
"-:T"/"",
(
{
"",
""
,
""}
)
)
;
}
-
//! Converts a database time spec to a system time value.
-
//!
-
//! @param timestr
-
//! Time spec to decode.
-
//!
-
//! @param date
-
//! Take the date part from this system time value. If zero, a
-
//! seconds-since-midnight value is returned.
-
int decode_time (string timestr, void|int date)
-
{
-
int hour = 0, min = 0, sec = 0;
-
if (sscanf (timestr, "%d:%d:%d", hour, min, sec) <= 1)
-
sscanf (timestr, "%2d%2d%2d", hour, min, sec);
-
if (date && (hour || min || sec)) {
-
mapping(string:int) ct = localtime (date);
-
return mktime (sec, min, hour, ct->mday, ct->mon, ct->year, ct->isdst, ct->timezone);
-
}
-
else return (hour * 60 + min) * 60 + sec;
-
}
-
-
//! Converts a database date-only spec to a system time value.
-
//! Assumes 4-digit years.
-
//!
-
//! @param datestr
-
//! Date spec to decode.
-
int decode_date (string datestr)
-
{
-
int year = 0, mon = 0, mday = 0, n;
-
n = sscanf (datestr, "%d-%d-%d", year, mon, mday);
-
if (n <= 1) n = sscanf (datestr, "%4d%2d%2d", year, mon, mday);
-
if (year || mon || mday)
-
return mktime (0, 0, 0, n == 3 ? mday : 1, n >= 2 && mon - 1, year - 1900,
-
-1, timezone);
-
else return 0;
-
}
-
-
//! Converts a database date and time spec to a system time value.
-
//! Can decode strings missing the time part.
-
//!
-
//! @param datestr
-
//! Date and time spec to decode.
-
int decode_datetime (string timestr)
-
{
-
array(string) a = timestr / " ";
-
if (sizeof (a) == 2)
-
return decode_date (a[0]) + decode_time (a[1]);
-
else {
-
int n = sizeof (timestr);
-
if (n >= 12)
-
return decode_date (timestr[..n-7]) + decode_time (timestr[n-6..n-1]);
-
else
-
return decode_date (timestr);
-
}
-
}
-
+
#if constant (Mysql.mysql.HAVE_MYSQL_FIELD_CHARSETNR) #define HAVE_MYSQL_FIELD_CHARSETNR_IFELSE(TRUE, FALSE) TRUE #else