Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
3a3f39fd
G
Gpdb
项目概览
Greenplum
/
Gpdb
通知
7
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gpdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3a3f39fd
编写于
3月 12, 2011
作者:
B
Bruce Momjian
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use macros for time-based constants, rather than constants.
上级
3d9f7ec1
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
46 addition
and
41 deletion
+46
-41
src/backend/utils/adt/date.c
src/backend/utils/adt/date.c
+1
-1
src/backend/utils/adt/datetime.c
src/backend/utils/adt/datetime.c
+26
-23
src/backend/utils/adt/formatting.c
src/backend/utils/adt/formatting.c
+10
-10
src/backend/utils/adt/nabstime.c
src/backend/utils/adt/nabstime.c
+5
-5
src/backend/utils/adt/timestamp.c
src/backend/utils/adt/timestamp.c
+2
-2
src/include/utils/timestamp.h
src/include/utils/timestamp.h
+2
-0
未找到文件。
src/backend/utils/adt/date.c
浏览文件 @
3a3f39fd
...
...
@@ -2612,7 +2612,7 @@ timetz_zone(PG_FUNCTION_ARGS)
type
=
DecodeSpecial
(
0
,
lowzone
,
&
val
);
if
(
type
==
TZ
||
type
==
DTZ
)
tz
=
val
*
60
;
tz
=
val
*
MINS_PER_HOUR
;
else
{
tzp
=
pg_tzset
(
tzname
);
...
...
src/backend/utils/adt/datetime.c
浏览文件 @
3a3f39fd
...
...
@@ -342,7 +342,7 @@ j2date(int jd, int *year, int *month, int *day)
*
year
=
y
-
4800
;
quad
=
julian
*
2141
/
65536
;
*
day
=
julian
-
7834
*
quad
/
256
;
*
month
=
(
quad
+
10
)
%
12
+
1
;
*
month
=
(
quad
+
10
)
%
MONTHS_PER_YEAR
+
1
;
return
;
}
/* j2date() */
...
...
@@ -952,8 +952,8 @@ DecodeDateTime(char **field, int *ftype, int nf,
* DecodeTime()
*/
/* test for > 24:00:00 */
if
(
tm
->
tm_hour
>
24
||
(
tm
->
tm_hour
==
24
&&
if
(
tm
->
tm_hour
>
HOURS_PER_DAY
||
(
tm
->
tm_hour
==
HOURS_PER_DAY
&&
(
tm
->
tm_min
>
0
||
tm
->
tm_sec
>
0
||
*
fsec
>
0
)))
return
DTERR_FIELD_OVERFLOW
;
break
;
...
...
@@ -1371,12 +1371,12 @@ DecodeDateTime(char **field, int *ftype, int nf,
return
dterr
;
/* handle AM/PM */
if
(
mer
!=
HR24
&&
tm
->
tm_hour
>
1
2
)
if
(
mer
!=
HR24
&&
tm
->
tm_hour
>
HOURS_PER_DAY
/
2
)
return
DTERR_FIELD_OVERFLOW
;
if
(
mer
==
AM
&&
tm
->
tm_hour
==
1
2
)
if
(
mer
==
AM
&&
tm
->
tm_hour
==
HOURS_PER_DAY
/
2
)
tm
->
tm_hour
=
0
;
else
if
(
mer
==
PM
&&
tm
->
tm_hour
!=
1
2
)
tm
->
tm_hour
+=
1
2
;
else
if
(
mer
==
PM
&&
tm
->
tm_hour
!=
HOURS_PER_DAY
/
2
)
tm
->
tm_hour
+=
HOURS_PER_DAY
/
2
;
/* do additional checking for full date specs... */
if
(
*
dtype
==
DTK_DATE
)
...
...
@@ -2058,17 +2058,18 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
return
dterr
;
/* handle AM/PM */
if
(
mer
!=
HR24
&&
tm
->
tm_hour
>
1
2
)
if
(
mer
!=
HR24
&&
tm
->
tm_hour
>
HOURS_PER_DAY
/
2
)
return
DTERR_FIELD_OVERFLOW
;
if
(
mer
==
AM
&&
tm
->
tm_hour
==
1
2
)
if
(
mer
==
AM
&&
tm
->
tm_hour
==
HOURS_PER_DAY
/
2
)
tm
->
tm_hour
=
0
;
else
if
(
mer
==
PM
&&
tm
->
tm_hour
!=
1
2
)
tm
->
tm_hour
+=
1
2
;
else
if
(
mer
==
PM
&&
tm
->
tm_hour
!=
HOURS_PER_DAY
/
2
)
tm
->
tm_hour
+=
HOURS_PER_DAY
/
2
;
if
(
tm
->
tm_hour
<
0
||
tm
->
tm_min
<
0
||
tm
->
tm_min
>
59
||
tm
->
tm_sec
<
0
||
tm
->
tm_sec
>
60
||
tm
->
tm_hour
>
24
||
if
(
tm
->
tm_hour
<
0
||
tm
->
tm_min
<
0
||
tm
->
tm_min
>
MINS_PER_HOUR
-
1
||
tm
->
tm_sec
<
0
||
tm
->
tm_sec
>
SECS_PER_MINUTE
||
tm
->
tm_hour
>
HOURS_PER_DAY
||
/* test for > 24:00:00 */
(
tm
->
tm_hour
==
24
&&
(
tm
->
tm_hour
==
HOURS_PER_DAY
&&
(
tm
->
tm_min
>
0
||
tm
->
tm_sec
>
0
||
*
fsec
>
0
))
||
#ifdef HAVE_INT64_TIMESTAMP
*
fsec
<
INT64CONST
(
0
)
||
*
fsec
>
USECS_PER_SEC
...
...
@@ -2396,13 +2397,15 @@ DecodeTime(char *str, int fmask, int range,
/* do a sanity check */
#ifdef HAVE_INT64_TIMESTAMP
if
(
tm
->
tm_hour
<
0
||
tm
->
tm_min
<
0
||
tm
->
tm_min
>
59
||
tm
->
tm_sec
<
0
||
tm
->
tm_sec
>
60
||
*
fsec
<
INT64CONST
(
0
)
||
if
(
tm
->
tm_hour
<
0
||
tm
->
tm_min
<
0
||
tm
->
tm_min
>
MINS_PER_HOUR
-
1
||
tm
->
tm_sec
<
0
||
tm
->
tm_sec
>
SECS_PER_MINUTE
||
*
fsec
<
INT64CONST
(
0
)
||
*
fsec
>
USECS_PER_SEC
)
return
DTERR_FIELD_OVERFLOW
;
#else
if
(
tm
->
tm_hour
<
0
||
tm
->
tm_min
<
0
||
tm
->
tm_min
>
59
||
tm
->
tm_sec
<
0
||
tm
->
tm_sec
>
60
||
*
fsec
<
0
||
*
fsec
>
1
)
if
(
tm
->
tm_hour
<
0
||
tm
->
tm_min
<
0
||
tm
->
tm_min
>
MINS_PER_HOUR
-
1
||
tm
->
tm_sec
<
0
||
tm
->
tm_sec
>
SECS_PER_MINUTE
||
*
fsec
<
0
||
*
fsec
>
1
)
return
DTERR_FIELD_OVERFLOW
;
#endif
...
...
@@ -2748,9 +2751,9 @@ DecodeTimezone(char *str, int *tzp)
if
(
hr
<
0
||
hr
>
14
)
return
DTERR_TZDISP_OVERFLOW
;
if
(
min
<
0
||
min
>=
60
)
if
(
min
<
0
||
min
>=
MINS_PER_HOUR
)
return
DTERR_TZDISP_OVERFLOW
;
if
(
sec
<
0
||
sec
>=
60
)
if
(
sec
<
0
||
sec
>=
SECS_PER_MINUTE
)
return
DTERR_TZDISP_OVERFLOW
;
tz
=
(
hr
*
MINS_PER_HOUR
+
min
)
*
SECS_PER_MINUTE
+
sec
;
...
...
@@ -3324,7 +3327,7 @@ DecodeISO8601Interval(char *str,
{
case
'Y'
:
tm
->
tm_year
+=
val
;
tm
->
tm_mon
+=
(
fval
*
12
);
tm
->
tm_mon
+=
(
fval
*
MONTHS_PER_YEAR
);
break
;
case
'M'
:
tm
->
tm_mon
+=
val
;
...
...
@@ -3359,7 +3362,7 @@ DecodeISO8601Interval(char *str,
return
DTERR_BAD_FORMAT
;
tm
->
tm_year
+=
val
;
tm
->
tm_mon
+=
(
fval
*
12
);
tm
->
tm_mon
+=
(
fval
*
MONTHS_PER_YEAR
);
if
(
unit
==
'\0'
)
return
0
;
if
(
unit
==
'T'
)
...
...
@@ -4155,7 +4158,7 @@ InstallTimeZoneAbbrevs(tzEntry *abbrevs, int n)
{
strncpy
(
newtbl
[
i
].
token
,
abbrevs
[
i
].
abbrev
,
TOKMAXLEN
);
newtbl
[
i
].
type
=
abbrevs
[
i
].
is_dst
?
DTZ
:
TZ
;
TOVAL
(
&
newtbl
[
i
],
abbrevs
[
i
].
offset
/
60
);
TOVAL
(
&
newtbl
[
i
],
abbrevs
[
i
].
offset
/
MINS_PER_HOUR
);
}
/* Check the ordering, if testing */
...
...
src/backend/utils/adt/formatting.c
浏览文件 @
3a3f39fd
...
...
@@ -2129,7 +2129,7 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
* intervals
*/
sprintf
(
s
,
"%0*d"
,
S_FM
(
n
->
suffix
)
?
0
:
2
,
tm
->
tm_hour
%
(
HOURS_PER_DAY
/
2
)
==
0
?
1
2
:
tm
->
tm_hour
%
(
HOURS_PER_DAY
/
2
)
==
0
?
HOURS_PER_DAY
/
2
:
tm
->
tm_hour
%
(
HOURS_PER_DAY
/
2
));
if
(
S_THth
(
n
->
suffix
))
str_numth
(
s
,
s
,
S_TH_TYPE
(
n
->
suffix
));
...
...
@@ -2486,14 +2486,14 @@ DCH_to_char(FormatNode *node, bool is_interval, TmToChar *in, char *out, Oid col
if
(
!
tm
->
tm_mon
)
break
;
sprintf
(
s
,
"%*s"
,
S_FM
(
n
->
suffix
)
?
0
:
-
4
,
rm_months_upper
[
12
-
tm
->
tm_mon
]);
rm_months_upper
[
MONTHS_PER_YEAR
-
tm
->
tm_mon
]);
s
+=
strlen
(
s
);
break
;
case
DCH_rm
:
if
(
!
tm
->
tm_mon
)
break
;
sprintf
(
s
,
"%*s"
,
S_FM
(
n
->
suffix
)
?
0
:
-
4
,
rm_months_lower
[
12
-
tm
->
tm_mon
]);
rm_months_lower
[
MONTHS_PER_YEAR
-
tm
->
tm_mon
]);
s
+=
strlen
(
s
);
break
;
case
DCH_W
:
...
...
@@ -2779,12 +2779,12 @@ DCH_from_char(FormatNode *node, char *in, TmFromChar *out)
case
DCH_RM
:
from_char_seq_search
(
&
value
,
&
s
,
rm_months_upper
,
ALL_UPPER
,
MAX_RM_LEN
,
n
);
from_char_set_int
(
&
out
->
mm
,
12
-
value
,
n
);
from_char_set_int
(
&
out
->
mm
,
MONTHS_PER_YEAR
-
value
,
n
);
break
;
case
DCH_rm
:
from_char_seq_search
(
&
value
,
&
s
,
rm_months_lower
,
ALL_LOWER
,
MAX_RM_LEN
,
n
);
from_char_set_int
(
&
out
->
mm
,
12
-
value
,
n
);
from_char_set_int
(
&
out
->
mm
,
MONTHS_PER_YEAR
-
value
,
n
);
break
;
case
DCH_W
:
from_char_parse_int
(
&
out
->
w
,
&
s
,
n
);
...
...
@@ -3236,16 +3236,16 @@ do_to_timestamp(text *date_txt, text *fmt,
if
(
tmfc
.
clock
==
CLOCK_12_HOUR
)
{
if
(
tm
->
tm_hour
<
1
||
tm
->
tm_hour
>
1
2
)
if
(
tm
->
tm_hour
<
1
||
tm
->
tm_hour
>
HOURS_PER_DAY
/
2
)
ereport
(
ERROR
,
(
errcode
(
ERRCODE_INVALID_DATETIME_FORMAT
),
errmsg
(
"hour
\"
%d
\"
is invalid for the 12-hour clock"
,
tm
->
tm_hour
),
errhint
(
"Use the 24-hour clock, or give an hour between 1 and 12."
)));
if
(
tmfc
.
pm
&&
tm
->
tm_hour
<
1
2
)
tm
->
tm_hour
+=
1
2
;
else
if
(
!
tmfc
.
pm
&&
tm
->
tm_hour
==
1
2
)
if
(
tmfc
.
pm
&&
tm
->
tm_hour
<
HOURS_PER_DAY
/
2
)
tm
->
tm_hour
+=
HOURS_PER_DAY
/
2
;
else
if
(
!
tmfc
.
pm
&&
tm
->
tm_hour
==
HOURS_PER_DAY
/
2
)
tm
->
tm_hour
=
0
;
}
...
...
@@ -3347,7 +3347,7 @@ do_to_timestamp(text *date_txt, text *fmt,
y
=
ysum
[
isleap
(
tm
->
tm_year
)];
for
(
i
=
1
;
i
<=
12
;
i
++
)
for
(
i
=
1
;
i
<=
MONTHS_PER_YEAR
;
i
++
)
{
if
(
tmfc
.
ddd
<
y
[
i
])
break
;
...
...
src/backend/utils/adt/nabstime.c
浏览文件 @
3a3f39fd
...
...
@@ -179,13 +179,13 @@ tm2abstime(struct pg_tm * tm, int tz)
/* validate, before going out of range on some members */
if
(
tm
->
tm_year
<
1901
||
tm
->
tm_year
>
2038
||
tm
->
tm_mon
<
1
||
tm
->
tm_mon
>
12
||
tm
->
tm_mon
<
1
||
tm
->
tm_mon
>
MONTHS_PER_YEAR
||
tm
->
tm_mday
<
1
||
tm
->
tm_mday
>
31
||
tm
->
tm_hour
<
0
||
tm
->
tm_hour
>
24
||
/* test for > 24:00:00 */
(
tm
->
tm_hour
==
24
&&
(
tm
->
tm_min
>
0
||
tm
->
tm_sec
>
0
))
||
tm
->
tm_min
<
0
||
tm
->
tm_min
>
59
||
tm
->
tm_sec
<
0
||
tm
->
tm_sec
>
60
)
tm
->
tm_hour
>
HOURS_PER_DAY
||
/* test for > 24:00:00 */
(
tm
->
tm_hour
==
HOURS_PER_DAY
&&
(
tm
->
tm_min
>
0
||
tm
->
tm_sec
>
0
))
||
tm
->
tm_min
<
0
||
tm
->
tm_min
>
MINS_PER_HOUR
-
1
||
tm
->
tm_sec
<
0
||
tm
->
tm_sec
>
SECS_PER_MINUTE
)
return
INVALID_ABSTIME
;
day
=
date2j
(
tm
->
tm_year
,
tm
->
tm_mon
,
tm
->
tm_mday
)
-
UNIX_EPOCH_JDATE
;
...
...
src/backend/utils/adt/timestamp.c
浏览文件 @
3a3f39fd
...
...
@@ -4422,7 +4422,7 @@ timestamp_zone(PG_FUNCTION_ARGS)
if
(
type
==
TZ
||
type
==
DTZ
)
{
tz
=
-
(
val
*
60
);
tz
=
-
(
val
*
MINS_PER_HOUR
);
result
=
dt2local
(
timestamp
,
tz
);
}
else
...
...
@@ -4596,7 +4596,7 @@ timestamptz_zone(PG_FUNCTION_ARGS)
if
(
type
==
TZ
||
type
==
DTZ
)
{
tz
=
val
*
60
;
tz
=
val
*
MINS_PER_HOUR
;
result
=
dt2local
(
timestamp
,
tz
);
}
else
...
...
src/include/utils/timestamp.h
浏览文件 @
3a3f39fd
...
...
@@ -81,6 +81,8 @@ typedef struct
*/
#define DAYS_PER_MONTH 30
/* assumes exactly 30 days per month */
#define HOURS_PER_DAY 24
/* assume no daylight savings time changes */
#define MINS_PER_HOUR 60
/* assume no daylight savings time changes */
#define SECS_PER_MINUTE 60
/* assume no daylight savings time changes */
/*
* This doesn't adjust for uneven daylight savings time intervals or leap
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录