!6138 修复date类型直接插入与使用TO_DATE函数行为不一致,是否要允许>9999值直接插入的问题

Merge pull request !6138 from yuchao/master
This commit is contained in:
opengauss_bot
2024-09-06 07:46:24 +00:00
committed by Gitee
7 changed files with 51 additions and 51 deletions

View File

@ -234,8 +234,14 @@ bool TimestampTypeCheck(char* str, bool can_ignore, struct pg_tm* tm, Timestamp
if (tm2timestamp(tm, fsec, NULL, &result) != 0)
ereport(ERROR,
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range: \"%s\"", str)));
break;
if (tm->tm_year < MIN_VALUE_YEAR || tm->tm_year > MAX_VALUE_YEAR || tm->tm_year == 0) {
ereport(ERROR,
(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
errmsg("invalid data for \"year = %d\", value must be between -4712 and 9999," \
" and not be 0", tm->tm_year)));
}
break;
case DTK_EPOCH:
result = SetEpochTimestamp();
break;

View File

@ -0,0 +1,10 @@
create table tt(col1 date);
insert into tt values('10000-01-28');
ERROR: invalid data for "year = 10000", value must be between -4712 and 9999, and not be 0
LINE 1: insert into tt values('10000-01-28');
^
CONTEXT: referenced column: col1
insert into tt values(TO_DATE('10000-01-28','yyyy-mm-dd'));
ERROR: invalid data for "year = 10000" ,value must be between 1 and 9999, and not be 0
CONTEXT: referenced column: col1
drop table tt;

View File

@ -955,11 +955,10 @@ SELECT EXTRACT(CENTURY FROM DATE '0100-12-31 BC'); -- -1
(1 row)
SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC'); -- -1
date_part
-----------
-1
(1 row)
ERROR: invalid data for "year = 0", value must be between -4712 and 9999, and not be 0
LINE 1: SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC');
^
CONTEXT: referenced column: date_part
SELECT EXTRACT(CENTURY FROM DATE '0001-01-01'); -- 1
date_part
-----------
@ -1006,11 +1005,10 @@ SELECT EXTRACT(CENTURY FROM CURRENT_DATE)>=21 AS True; -- true
-- millennium
--
SELECT EXTRACT(MILLENNIUM FROM DATE '0001-12-31 BC'); -- -1
date_part
-----------
-1
(1 row)
ERROR: invalid data for "year = 0", value must be between -4712 and 9999, and not be 0
LINE 1: SELECT EXTRACT(MILLENNIUM FROM DATE '0001-12-31 BC');
^
CONTEXT: referenced column: date_part
SELECT EXTRACT(MILLENNIUM FROM DATE '0001-01-01 AD'); -- 1
date_part
-----------
@ -1070,11 +1068,10 @@ SELECT EXTRACT(DECADE FROM DATE '0009-12-31'); -- 0
(1 row)
SELECT EXTRACT(DECADE FROM DATE '0001-01-01 BC'); -- 0
date_part
-----------
0
(1 row)
ERROR: invalid data for "year = 0", value must be between -4712 and 9999, and not be 0
LINE 1: SELECT EXTRACT(DECADE FROM DATE '0001-01-01 BC');
^
CONTEXT: referenced column: date_part
SELECT EXTRACT(DECADE FROM DATE '0002-12-31 BC'); -- -1
date_part
-----------

View File

@ -954,11 +954,10 @@ SELECT EXTRACT(CENTURY FROM DATE '0100-12-31 BC'); -- -1
(1 row)
SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC'); -- -1
date_part
-----------
-1
(1 row)
ERROR: invalid data for "year = 0", value must be between -4712 and 9999, and not be 0
LINE 1: SELECT EXTRACT(CENTURY FROM DATE '0001-12-31 BC');
^
CONTEXT: referenced column: date_part
SELECT EXTRACT(CENTURY FROM DATE '0001-01-01'); -- 1
date_part
-----------
@ -1005,11 +1004,10 @@ SELECT EXTRACT(CENTURY FROM CURRENT_DATE)>=21 AS True; -- true
-- millennium
--
SELECT EXTRACT(MILLENNIUM FROM DATE '0001-12-31 BC'); -- -1
date_part
-----------
-1
(1 row)
ERROR: invalid data for "year = 0", value must be between -4712 and 9999, and not be 0
LINE 1: SELECT EXTRACT(MILLENNIUM FROM DATE '0001-12-31 BC');
^
CONTEXT: referenced column: date_part
SELECT EXTRACT(MILLENNIUM FROM DATE '0001-01-01 AD'); -- 1
date_part
-----------
@ -1069,11 +1067,10 @@ SELECT EXTRACT(DECADE FROM DATE '0009-12-31'); -- 0
(1 row)
SELECT EXTRACT(DECADE FROM DATE '0001-01-01 BC'); -- 0
date_part
-----------
0
(1 row)
ERROR: invalid data for "year = 0", value must be between -4712 and 9999, and not be 0
LINE 1: SELECT EXTRACT(DECADE FROM DATE '0001-01-01 BC');
^
CONTEXT: referenced column: date_part
SELECT EXTRACT(DECADE FROM DATE '0002-12-31 BC'); -- -1
date_part
-----------

View File

@ -43,25 +43,11 @@ CREATE TABLE colcmpr_date_01
c date
) with (orientation = column) ;
COPY colcmpr_date_01 FROM '@abs_srcdir@/data/colcmpr_date_01.data';
ERROR: invalid data for "year = 294276", value must be between -4712 and 9999, and not be 0
CONTEXT: COPY colcmpr_date_01, line 5, column c: "294276-01-01 AD"
SELECT * FROM colcmpr_date_01;
distkey | a | b | c
---------+------------------------+------------------------+-----------------------
1 | 4713-01-01 00:00:00 BC | 4713-01-01 00:00:00 BC | 0001-01-01 00:00:00
1 | 4713-01-01 00:00:00 BC | 4713-01-02 00:00:00 BC | 0001-01-02 00:00:00
1 | 4713-01-01 00:00:00 BC | 4713-01-03 00:00:00 BC | 0001-01-03 00:00:00
1 | 4713-01-01 00:00:00 BC | 4713-01-04 00:00:00 BC | 0001-01-04 00:00:00
1 | 4713-01-01 00:00:00 BC | 4713-01-05 00:00:00 BC | 294276-01-01 00:00:00
1 | 4713-01-01 00:00:00 BC | 4712-01-01 00:00:00 BC | 294276-02-01 00:00:00
1 | 4713-01-01 00:00:00 BC | 4711-01-01 00:00:00 BC | 294276-03-01 00:00:00
1 | 4713-12-31 00:00:00 BC | 4710-01-01 00:00:00 BC | 294276-04-01 00:00:00
1 | 294276-01-01 00:00:00 | 0001-01-01 00:00:00 | 294276-05-01 00:00:00
1 | 294276-01-01 00:00:00 | 0001-01-01 00:00:00 BC | 294276-07-01 00:00:00
1 | 294276-01-01 00:00:00 | 0001-01-02 00:00:00 BC | 294276-08-01 00:00:00
1 | 294276-01-01 00:00:00 | 0001-01-03 00:00:00 BC | 294276-09-01 00:00:00
1 | 294276-01-01 00:00:00 | 0001-01-04 00:00:00 BC | 294276-10-01 00:00:00
1 | 294276-01-01 00:00:00 | 0001-01-02 00:00:00 | 294276-11-01 00:00:00
1 | 294276-01-01 00:00:00 | 0001-01-03 00:00:00 | 294276-12-01 00:00:00
1 | 294276-12-31 00:00:00 | 0001-01-04 00:00:00 | 294276-12-31 00:00:00
(16 rows)
distkey | a | b | c
---------+---+---+---
(0 rows)
DROP TABLE colcmpr_date_01;

View File

@ -45,7 +45,7 @@ test: spm_adaptive_gplan
test: smp smp_cursor parallel_enable_function
test: alter_hw_package
test: hw_grant_package gsc_func gsc_db
test: uppercase_attribute_name decode_compatible_with_o outerjoin_bugfix chr_gbk
test: uppercase_attribute_name decode_compatible_with_o outerjoin_bugfix chr_gbk insert_date_to_date
test: replace_func_with_two_args trunc_func_for_date nlssort_pinyin updatable_views test_cursor_arg_defexpr
# test multiple statistics

View File

@ -0,0 +1,4 @@
create table tt(col1 date);
insert into tt values('10000-01-28');
insert into tt values(TO_DATE('10000-01-28','yyyy-mm-dd'));
drop table tt;