From e7b100e76598ce2beba2a9e95ac8327054963030 Mon Sep 17 00:00:00 2001 From: myzhen <601316152@qq.com> Date: Mon, 30 Oct 2023 14:27:01 +0800 Subject: [PATCH 1/6] Fix bug#M247: 1) Fixed the problem of missing the time part when the Oracle-compatible oradate type uses PG's I/O function to process the input string. 2) Fixed an error in which the fractional seconds precision cannot exceed 6 digits when the Oracle-compatible timestamp type uses PG's I/O function to process input strings. --- .../ivorysql_ora/expected/ora_datetime.out | 17 +++++ contrib/ivorysql_ora/sql/ora_datetime.sql | 14 ++++ contrib/ivorysql_ora/src/datatype/oradate.c | 68 +++++++++++++++++- .../ivorysql_ora/src/datatype/oratimestamp.c | 69 ++++++++++++++++-- .../src/datatype/oratimestampltz.c | 9 ++- .../src/datatype/oratimestamptz.c | 71 +++++++++++++++++-- .../src/include/common_datatypes.h | 7 ++ 7 files changed, 242 insertions(+), 13 deletions(-) diff --git a/contrib/ivorysql_ora/expected/ora_datetime.out b/contrib/ivorysql_ora/expected/ora_datetime.out index a21a9ad638d..250a6e76fa5 100644 --- a/contrib/ivorysql_ora/expected/ora_datetime.out +++ b/contrib/ivorysql_ora/expected/ora_datetime.out @@ -1236,3 +1236,20 @@ select 25::number <= to_char('1990-01-01'::oradate, 'yyyy'); t (1 row) +/* Begin - BUG#M0000247 */ +set client_min_messages = 'error'; +create table test_247(a date, b timestamp(7), c timestamp(7) with time zone, d timestamp(7) with local time zone); +set ivorysql.datetime_ignore_nls_mask = 15; +insert into test_247 values('2023-10-27 10:54:55.1234567', '2023-10-27 10:54:55.1234567', '2023-10-27 10:54:55.1234567', '2023-10-27 10:54:55.1234567'); +SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'; +select * from test_247; + a | b | c | d +---------------------+-------------------------------+-------------------------------+------------------------------- + 2023-10-27 10:54:55 | 2023-10-27 10:54:55.123457000 | 2023-10-27 10:54:55.123457000 | 2023-10-27 10:54:55.123457000 +(1 row) + +drop table test_247; +reset NLS_DATE_FORMAT; +reset ivorysql.datetime_ignore_nls_mask; +reset client_min_messages; +/* End - BUG#M0000247 */ diff --git a/contrib/ivorysql_ora/sql/ora_datetime.sql b/contrib/ivorysql_ora/sql/ora_datetime.sql index 138ef43cb09..e7c1567b946 100644 --- a/contrib/ivorysql_ora/sql/ora_datetime.sql +++ b/contrib/ivorysql_ora/sql/ora_datetime.sql @@ -597,3 +597,17 @@ SELECT 123.456 * interval'365 11:11:11' day(3) to second; -- The operator "<=" supports a comparison between the "number" type and the "varchar2" type. SET NLS_DATE_FORMAT = 'YYYY-MM-DD'; select 25::number <= to_char('1990-01-01'::oradate, 'yyyy'); + +/* Begin - BUG#M0000247 */ +set client_min_messages = 'error'; +create table test_247(a date, b timestamp(7), c timestamp(7) with time zone, d timestamp(7) with local time zone); +set ivorysql.datetime_ignore_nls_mask = 15; +insert into test_247 values('2023-10-27 10:54:55.1234567', '2023-10-27 10:54:55.1234567', '2023-10-27 10:54:55.1234567', '2023-10-27 10:54:55.1234567'); +SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'; +select * from test_247; + +drop table test_247; +reset NLS_DATE_FORMAT; +reset ivorysql.datetime_ignore_nls_mask; +reset client_min_messages; +/* End - BUG#M0000247 */ \ No newline at end of file diff --git a/contrib/ivorysql_ora/src/datatype/oradate.c b/contrib/ivorysql_ora/src/datatype/oradate.c index 0b5315e6a7d..6ceef85d1fa 100644 --- a/contrib/ivorysql_ora/src/datatype/oradate.c +++ b/contrib/ivorysql_ora/src/datatype/oradate.c @@ -38,6 +38,7 @@ #include "utils/timestamp.h" #include "utils/date.h" +#include "../include/common_datatypes.h" /* BUG#M0000247 */ PG_FUNCTION_INFO_V1(oradate_in); PG_FUNCTION_INFO_V1(oradate_out); @@ -143,6 +144,67 @@ timestamp2timestamptz(Timestamp timestamp) return result; } +/* Begin - BUG#M0000247 */ +/* + * Same as timestamp_in(), In oracle mode, oradate type input is + * not affected by the nls parameter, and you can also choose to + * execute pg's input parsing logic. + */ +Timestamp +pg_oradate_in(char *str, int32 typmod) +{ + Timestamp result; + fsec_t fsec; + struct pg_tm tt, + *tm = &tt; + int tz; + int dtype; + int nf; + int dterr; + char *field[MAXDATEFIELDS]; + int ftype[MAXDATEFIELDS]; + char workbuf[MAXDATELEN + MAXDATEFIELDS]; + + dterr = ParseDateTime(str, workbuf, sizeof(workbuf), + field, ftype, MAXDATEFIELDS, &nf); + if (dterr == 0) + dterr = DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tz); + if (dterr != 0) + DateTimeParseError(dterr, str, "date"); + + switch (dtype) + { + case DTK_DATE: + if (tm2timestamp(tm, fsec, NULL, &result) != 0) + ereport(ERROR, + (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), + errmsg("date out of range: \"%s\"", str))); + break; + + case DTK_EPOCH: + result = SetEpochTimestamp(); + break; + + case DTK_LATE: + TIMESTAMP_NOEND(result); + break; + + case DTK_EARLY: + TIMESTAMP_NOBEGIN(result); + break; + + default: + elog(ERROR, "unexpected dtype %d while parsing date \"%s\"", + dtype, str); + TIMESTAMP_NOEND(result); + } + + OraAdjustTimestampForTypmod(&result, typmod); + + return result; +} +/* End - BUG#M0000247 */ + /***************************************************************************** * USER I/O ROUTINES * *****************************************************************************/ @@ -161,8 +223,10 @@ oradate_in(PG_FUNCTION_ARGS) if (strcmp(nls_date_format, "pg") == 0 || DATETIME_IGNORE_NLS(datetime_ignore_nls_mask, ORADATE_MASK)) { - return DirectFunctionCall1(date_timestamp, - DirectFunctionCall1(date_in, CStringGetDatum(str))); + /* Begin - BUG#M0000247 */ + result = pg_oradate_in(str, 0); + PG_RETURN_TIMESTAMP(result); + /* End - BUG#M0000247 */ } else { diff --git a/contrib/ivorysql_ora/src/datatype/oratimestamp.c b/contrib/ivorysql_ora/src/datatype/oratimestamp.c index 4fbbd60dd54..a52dbf32466 100644 --- a/contrib/ivorysql_ora/src/datatype/oratimestamp.c +++ b/contrib/ivorysql_ora/src/datatype/oratimestamp.c @@ -173,6 +173,67 @@ OraAdjustTimestampForTypmod(Timestamp *time, int32 typmod) } } +/* Begin - BUG#M0000247 */ +/* + * Same as timestamp_in(), In oracle mode, oratimestamp input is + * not affected by the nls parameter, and you can also choose to + * execute pg's input parsing logic. + */ +Timestamp +pg_oratimestamp_in(char *str, int32 typmod) +{ + Timestamp result; + fsec_t fsec; + struct pg_tm tt, + *tm = &tt; + int tz; + int dtype; + int nf; + int dterr; + char *field[MAXDATEFIELDS]; + int ftype[MAXDATEFIELDS]; + char workbuf[MAXDATELEN + MAXDATEFIELDS]; + + dterr = ParseDateTime(str, workbuf, sizeof(workbuf), + field, ftype, MAXDATEFIELDS, &nf); + if (dterr == 0) + dterr = DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tz); + if (dterr != 0) + DateTimeParseError(dterr, str, "timestamp"); + + switch (dtype) + { + case DTK_DATE: + if (tm2timestamp(tm, fsec, NULL, &result) != 0) + ereport(ERROR, + (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), + errmsg("timestamp out of range: \"%s\"", str))); + break; + + case DTK_EPOCH: + result = SetEpochTimestamp(); + break; + + case DTK_LATE: + TIMESTAMP_NOEND(result); + break; + + case DTK_EARLY: + TIMESTAMP_NOBEGIN(result); + break; + + default: + elog(ERROR, "unexpected dtype %d while parsing timestamp \"%s\"", + dtype, str); + TIMESTAMP_NOEND(result); + } + + OraAdjustTimestampForTypmod(&result, typmod); + + return result; +} +/* End - BUG#M0000247 */ + /* common code for timestamptypmodin and timestamptztypmodin */ static int32 anytimestamp_typmodin(bool istz, ArrayType *ta) @@ -282,10 +343,10 @@ oratimestamp_in(PG_FUNCTION_ARGS) if (strcmp(nls_timestamp_format, "pg") == 0 || DATETIME_IGNORE_NLS(datetime_ignore_nls_mask, ORATIMESTAMP_MASK)) { - return DirectFunctionCall3(timestamp_in, - CStringGetDatum(str), - ObjectIdGetDatum(InvalidOid), - Int32GetDatum(typmod)); + /* Begin - BUG#M0000247 */ + result = pg_oratimestamp_in(str, typmod); + PG_RETURN_TIMESTAMP(result); + /* End - BUG#M0000247 */ } else { diff --git a/contrib/ivorysql_ora/src/datatype/oratimestampltz.c b/contrib/ivorysql_ora/src/datatype/oratimestampltz.c index 821430ec0ed..dbdb81e7e37 100644 --- a/contrib/ivorysql_ora/src/datatype/oratimestampltz.c +++ b/contrib/ivorysql_ora/src/datatype/oratimestampltz.c @@ -195,9 +195,12 @@ oratimestampltz_in(PG_FUNCTION_ARGS) if (strcmp(nls_timestamp_format, "pg") == 0 || DATETIME_IGNORE_NLS(datetime_ignore_nls_mask, ORATIMESTAMPLTZ_MASK)) { - Datum datum; - datum = DirectFunctionCall3(timestamp_in, CStringGetDatum(str), ObjectIdGetDatum(InvalidOid), Int32GetDatum(typmod)); - PG_RETURN_TIMESTAMPTZ(timestamp2timestamptz(DatumGetTimestamp(datum))); + /* Begin - BUG#M0000247 */ + Timestamp res; + + res = pg_oratimestamp_in(str, typmod); + PG_RETURN_TIMESTAMPTZ(timestamp2timestamptz(res)); + /* End - BUG#M0000247 */ } else { diff --git a/contrib/ivorysql_ora/src/datatype/oratimestamptz.c b/contrib/ivorysql_ora/src/datatype/oratimestamptz.c index 45c8d852b97..706a8ab9355 100644 --- a/contrib/ivorysql_ora/src/datatype/oratimestamptz.c +++ b/contrib/ivorysql_ora/src/datatype/oratimestamptz.c @@ -170,6 +170,67 @@ timestamp2timestamptz(Timestamp timestamp) return result; } +/* Begin - BUG#M0000247 */ +/* + * Same as timestamptz_in(), In oracle mode, oratimestamptz input is + * not affected by the nls parameter, and you can also choose to + * execute pg's input parsing logic. + */ +TimestampTz +pg_oratimestamptz_in(char *str, int32 typmod) +{ + TimestampTz result; + fsec_t fsec; + struct pg_tm tt, + *tm = &tt; + int tz; + int dtype; + int nf; + int dterr; + char *field[MAXDATEFIELDS]; + int ftype[MAXDATEFIELDS]; + char workbuf[MAXDATELEN + MAXDATEFIELDS]; + + dterr = ParseDateTime(str, workbuf, sizeof(workbuf), + field, ftype, MAXDATEFIELDS, &nf); + if (dterr == 0) + dterr = DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tz); + if (dterr != 0) + DateTimeParseError(dterr, str, "timestamp with time zone"); + + switch (dtype) + { + case DTK_DATE: + if (tm2timestamp(tm, fsec, &tz, &result) != 0) + ereport(ERROR, + (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), + errmsg("timestamp out of range: \"%s\"", str))); + break; + + case DTK_EPOCH: + result = SetEpochTimestamp(); + break; + + case DTK_LATE: + TIMESTAMP_NOEND(result); + break; + + case DTK_EARLY: + TIMESTAMP_NOBEGIN(result); + break; + + default: + elog(ERROR, "unexpected dtype %d while parsing timestamptz \"%s\"", + dtype, str); + TIMESTAMP_NOEND(result); + } + + OraAdjustTimestampForTypmod(&result, typmod); + + return result; +} +/* Begin - BUG#M0000247 */ + /***************************************************************************** * USER I/O ROUTINES * *****************************************************************************/ @@ -190,10 +251,12 @@ oratimestamptz_in(PG_FUNCTION_ARGS) if (strcmp(nls_timestamp_tz_format, "pg") == 0 || DATETIME_IGNORE_NLS(datetime_ignore_nls_mask, ORATIMESTAMPTZ_MASK)) { - return DirectFunctionCall3(timestamptz_in, - CStringGetDatum(str), - ObjectIdGetDatum(InvalidOid), - Int32GetDatum(typmod)); + /* Begin - BUG#M0000247 */ + TimestampTz result; + + result = pg_oratimestamptz_in(str, typmod); + PG_RETURN_TIMESTAMPTZ(result); + /* End - BUG#M0000247 */ } else { diff --git a/contrib/ivorysql_ora/src/include/common_datatypes.h b/contrib/ivorysql_ora/src/include/common_datatypes.h index 72cf0f07f1b..77419a3c46e 100644 --- a/contrib/ivorysql_ora/src/include/common_datatypes.h +++ b/contrib/ivorysql_ora/src/include/common_datatypes.h @@ -54,6 +54,13 @@ extern PGDLLEXPORT Datum oratimestamptz_cmp(PG_FUNCTION_ARGS); /* oratimestampltz.c */ extern PGDLLEXPORT Datum oratimestampltz_cmp(PG_FUNCTION_ARGS); +extern Timestamp pg_oratimestamp_in(char *str, int32 typmod); /* BUG#M0000247 */ + +/* oradate.c */ +extern Timestamp pg_oradate_in(char *str, int32 typmod); /* BUG#M0000247 */ + +/* oratimestamptz.c */ +extern TimestampTz pg_oratimestamptz_in(char *str, int32 typmod); /* BUG#M0000247 */ /* dsinterval.c */ extern Datum dsinterval_out(PG_FUNCTION_ARGS); From ebe9cc1f969bb8e049ffacb3c22842e63d713e66 Mon Sep 17 00:00:00 2001 From: liangxiangyu Date: Tue, 23 Apr 2024 17:03:22 +0800 Subject: [PATCH 2/6] add datetime ignore nls mask regression test --- contrib/ivorysql_ora/Makefile | 3 +- .../expected/ora_datetime_ignore_nls_mask.out | 230 ++++++++++++++++++ .../sql/ora_datetime_ignore_nls_mask.sql | 153 ++++++++++++ 3 files changed, 385 insertions(+), 1 deletion(-) create mode 100644 contrib/ivorysql_ora/expected/ora_datetime_ignore_nls_mask.out create mode 100644 contrib/ivorysql_ora/sql/ora_datetime_ignore_nls_mask.sql diff --git a/contrib/ivorysql_ora/Makefile b/contrib/ivorysql_ora/Makefile index 0a8a22e0ecd..a452c079fd8 100644 --- a/contrib/ivorysql_ora/Makefile +++ b/contrib/ivorysql_ora/Makefile @@ -63,7 +63,8 @@ ORA_REGRESS = \ datatype_and_func_bugs \ ora_sysview \ ora_like_operator \ - ora_xml_functions + ora_xml_functions \ + ora_datetime_ignore_nls_mask SHLIB_LINK += -lxml2 diff --git a/contrib/ivorysql_ora/expected/ora_datetime_ignore_nls_mask.out b/contrib/ivorysql_ora/expected/ora_datetime_ignore_nls_mask.out new file mode 100644 index 00000000000..8f9453cab67 --- /dev/null +++ b/contrib/ivorysql_ora/expected/ora_datetime_ignore_nls_mask.out @@ -0,0 +1,230 @@ + +-- build table and test 'datetime_ignore_nls_mask' parameter with value 0, do not ignore any types. +CREATE TABLE TEST_DATETIME_IGNORE_NLS_MASK(a date, b timestamp, c timestamptz, d timestamp with local time zone); +SET TIMEZONE TO 'Asia/Shanghai'; +SET ivorysql.datetime_ignore_nls_mask TO 0; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+----------------------------+-----------------------------------+---------------------------- + 2024-04-23 | 2024-04-23 15:16:11.000000 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15:16:11.000000 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 1, ignore date. +SET ivorysql.datetime_ignore_nls_mask TO 1; +SET TIMEZONE TO 'Asia/Shanghai'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+----------------------------+-----------------------------------+---------------------------- + 2024-04-23 | 2024-04-23 15:16:11.000000 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15:16:11.000000 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 2, ignore timestamp. +SET ivorysql.datetime_ignore_nls_mask TO 2; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+---------------+-----------------------------------+--------------- + 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 3, ignore date and timestamp. +SET ivorysql.datetime_ignore_nls_mask TO 3; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24:MI'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15:16'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+------------------+-----------------------------------+------------------ + 2024-04-23 | 2024-04-23 15:16 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15:16 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 4, ignore timestamptz. +SET ivorysql.datetime_ignore_nls_mask TO 4; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+----------------------------+---------------------+---------------------------- + 2024-04-23 | 2024-04-23 15:16:11.000000 | 2024-04-23 14:16:11 | 2024-04-23 15:16:11.000000 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 5, ignore date and timestamptz. +SET ivorysql.datetime_ignore_nls_mask TO 5; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+----------------------------+---------------------+---------------------------- + 2024-04-23 | 2024-04-23 15:16:11.000000 | 2024-04-23 14:16:11 | 2024-04-23 15:16:11.000000 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 6, ignore timestamp and timestamptz. +SET ivorysql.datetime_ignore_nls_mask TO 6; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+---------------+---------------------+--------------- + 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11 | 2024-04-23 15 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 7, ignore date, timestamp and timestamptz. +SET ivorysql.datetime_ignore_nls_mask TO 7; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+---------------+---------------------+--------------- + 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11 | 2024-04-23 15 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 8, ignore timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 8; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+---------------+-----------------------------------+--------------- + 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 9, ignore date and timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 9; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+---------------+-----------------------------------+--------------- + 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 10, ignore timestamp and timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 10; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+---------------+-----------------------------------+--------------- + 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 11, ignore date, timestamp and timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 11; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+---------------+-----------------------------------+--------------- + 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 12, ignore timestamptz and timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 12; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+---------------+---------------------+--------------- + 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11 | 2024-04-23 15 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 13, ignore date, timestamptz and timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 13; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+---------------+---------------------+--------------- + 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11 | 2024-04-23 15 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 14, ignore timestamp, timestamptz and timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 14; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+---------------+---------------------+--------------- + 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11 | 2024-04-23 15 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 15, date, timestamp, timestamptz and timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 15; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; + a | b | c | d +------------+---------------+---------------------+--------------- + 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11 | 2024-04-23 15 +(1 row) + +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; \ No newline at end of file diff --git a/contrib/ivorysql_ora/sql/ora_datetime_ignore_nls_mask.sql b/contrib/ivorysql_ora/sql/ora_datetime_ignore_nls_mask.sql new file mode 100644 index 00000000000..f94d5720d6b --- /dev/null +++ b/contrib/ivorysql_ora/sql/ora_datetime_ignore_nls_mask.sql @@ -0,0 +1,153 @@ +-- +-- datetime_ignore_nls_mask +-- + +-- build table and test 'datetime_ignore_nls_mask' parameter with value 0, do not ignore any types. +CREATE TABLE TEST_DATETIME_IGNORE_NLS_MASK(a date, b timestamp, c timestamptz, d timestamp with local time zone); +SET TIMEZONE TO 'Asia/Shanghai'; +SET ivorysql.datetime_ignore_nls_mask TO 0; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 1, ignore date. +SET ivorysql.datetime_ignore_nls_mask TO 1; +SET TIMEZONE TO 'Asia/Shanghai'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 2, ignore timestamp. +SET ivorysql.datetime_ignore_nls_mask TO 2; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 3, ignore date and timestamp. +SET ivorysql.datetime_ignore_nls_mask TO 3; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24:MI'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 4, ignore timestamptz. +SET ivorysql.datetime_ignore_nls_mask TO 4; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 5, ignore date and timestamptz. +SET ivorysql.datetime_ignore_nls_mask TO 5; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 6, ignore timestamp and timestamptz. +SET ivorysql.datetime_ignore_nls_mask TO 6; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 7, ignore date, timestamp and timestamptz. +SET ivorysql.datetime_ignore_nls_mask TO 7; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 8, ignore timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 8; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 9, ignore date and timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 9; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 10, ignore timestamp and timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 10; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 11, ignore date, timestamp and timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 11; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 12, ignore timestamptz and timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 12; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 13, ignore date, timestamptz and timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 13; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 14, ignore timestamp, timestamptz and timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 14; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; +-- test 'datetime_ignore_nls_mask' parameter with value 15, date, timestamp, timestamptz and timestampltz. +SET ivorysql.datetime_ignore_nls_mask TO 15; +SET TIMEZONE TO 'Asia/Shanghai'; +SET nls_timestamp_format = 'YYYY-MM-DD HH24'; +SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; +DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; +RESET ALL; \ No newline at end of file From 9af6bd112dc8b4365268392178798f32044c3c3d Mon Sep 17 00:00:00 2001 From: liangxiangyu Date: Wed, 24 Apr 2024 14:52:56 +0800 Subject: [PATCH 3/6] 1) bugfix for ora timestamp compatible function 2) enhance regression test for nls mask --- .../expected/ora_datetime_ignore_nls_mask.out | 212 ++++++++++++++---- .../sql/ora_datetime_ignore_nls_mask.sql | 79 +++++-- contrib/ivorysql_ora/src/datatype/oradate.c | 5 +- .../ivorysql_ora/src/datatype/oratimestamp.c | 5 +- .../src/datatype/oratimestamptz.c | 5 +- 5 files changed, 234 insertions(+), 72 deletions(-) diff --git a/contrib/ivorysql_ora/expected/ora_datetime_ignore_nls_mask.out b/contrib/ivorysql_ora/expected/ora_datetime_ignore_nls_mask.out index 8f9453cab67..246ad943bd6 100644 --- a/contrib/ivorysql_ora/expected/ora_datetime_ignore_nls_mask.out +++ b/contrib/ivorysql_ora/expected/ora_datetime_ignore_nls_mask.out @@ -1,12 +1,13 @@ - +-- +-- datetime_ignore_nls_mask +-- -- build table and test 'datetime_ignore_nls_mask' parameter with value 0, do not ignore any types. CREATE TABLE TEST_DATETIME_IGNORE_NLS_MASK(a date, b timestamp, c timestamptz, d timestamp with local time zone); SET TIMEZONE TO 'Asia/Shanghai'; SET ivorysql.datetime_ignore_nls_mask TO 0; - INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+----------------------------+-----------------------------------+---------------------------- 2024-04-23 | 2024-04-23 15:16:11.000000 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15:16:11.000000 (1 row) @@ -14,12 +15,15 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 1, ignore date. -SET ivorysql.datetime_ignore_nls_mask TO 1; SET TIMEZONE TO 'Asia/Shanghai'; - +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23... + ^ +SET ivorysql.datetime_ignore_nls_mask TO 1; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+----------------------------+-----------------------------------+---------------------------- 2024-04-23 | 2024-04-23 15:16:11.000000 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15:16:11.000000 (1 row) @@ -27,13 +31,16 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 2, ignore timestamp. -SET ivorysql.datetime_ignore_nls_mask TO 2; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; - +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...EST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-2... + ^ +SET ivorysql.datetime_ignore_nls_mask TO 2; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+---------------+-----------------------------------+--------------- 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15 (1 row) @@ -41,13 +48,20 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 3, ignore date and timestamp. -SET ivorysql.datetime_ignore_nls_mask TO 3; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24:MI'; - +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15:16'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15:16'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...EST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-2... + ^ +SET ivorysql.datetime_ignore_nls_mask TO 3; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15:16'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+------------------+-----------------------------------+------------------ 2024-04-23 | 2024-04-23 15:16 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15:16 (1 row) @@ -55,13 +69,16 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 4, ignore timestamptz. -SET ivorysql.datetime_ignore_nls_mask TO 4; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; - +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ..._MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-2... + ^ +SET ivorysql.datetime_ignore_nls_mask TO 4; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+----------------------------+---------------------+---------------------------- 2024-04-23 | 2024-04-23 15:16:11.000000 | 2024-04-23 14:16:11 | 2024-04-23 15:16:11.000000 (1 row) @@ -69,13 +86,20 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 5, ignore date and timestamptz. -SET ivorysql.datetime_ignore_nls_mask TO 5; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; - +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ..._MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-2... + ^ +SET ivorysql.datetime_ignore_nls_mask TO 5; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+----------------------------+---------------------+---------------------------- 2024-04-23 | 2024-04-23 15:16:11.000000 | 2024-04-23 14:16:11 | 2024-04-23 15:16:11.000000 (1 row) @@ -83,14 +107,21 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 6, ignore timestamp and timestamptz. -SET ivorysql.datetime_ignore_nls_mask TO 6; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; - +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...EST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-2... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...RE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-2... + ^ +SET ivorysql.datetime_ignore_nls_mask TO 6; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+---------------+---------------------+--------------- 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11 | 2024-04-23 15 (1 row) @@ -98,14 +129,25 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 7, ignore date, timestamp and timestamptz. -SET ivorysql.datetime_ignore_nls_mask TO 7; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; - +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...EST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-2... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...RE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-2... + ^ +SET ivorysql.datetime_ignore_nls_mask TO 7; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+---------------+---------------------+--------------- 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11 | 2024-04-23 15 (1 row) @@ -113,13 +155,16 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 8, ignore timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 8; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; - +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-2... + ^ +SET ivorysql.datetime_ignore_nls_mask TO 8; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+---------------+-----------------------------------+--------------- 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15 (1 row) @@ -127,13 +172,20 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 9, ignore date and timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 9; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; - +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-2... + ^ +SET ivorysql.datetime_ignore_nls_mask TO 9; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+---------------+-----------------------------------+--------------- 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15 (1 row) @@ -141,13 +193,20 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 10, ignore timestamp and timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 10; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; - +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...EST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-2... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-2... + ^ +SET ivorysql.datetime_ignore_nls_mask TO 10; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+---------------+-----------------------------------+--------------- 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15 (1 row) @@ -155,13 +214,24 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 11, ignore date, timestamp and timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 11; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; - +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...EST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-2... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-2... + ^ +SET ivorysql.datetime_ignore_nls_mask TO 11; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+---------------+-----------------------------------+--------------- 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11.000000 +08:00 | 2024-04-23 15 (1 row) @@ -169,14 +239,21 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 12, ignore timestamptz and timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 12; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; - +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...RE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-2... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...4-04-23', '2024-04-23 15', '2024-04-23 15:16:11', '2024-04-2... + ^ +SET ivorysql.datetime_ignore_nls_mask TO 12; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+---------------+---------------------+--------------- 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11 | 2024-04-23 15 (1 row) @@ -184,14 +261,25 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 13, ignore date, timestamptz and timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 13; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; - +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...RE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-2... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...4-04-23', '2024-04-23 15', '2024-04-23 15:16:11', '2024-04-2... + ^ +SET ivorysql.datetime_ignore_nls_mask TO 13; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+---------------+---------------------+--------------- 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11 | 2024-04-23 15 (1 row) @@ -199,14 +287,25 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 14, ignore timestamp, timestamptz and timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 14; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; - +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...EST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-2... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...RE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-2... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...4-04-23', '2024-04-23 15', '2024-04-23 15:16:11', '2024-04-2... + ^ +SET ivorysql.datetime_ignore_nls_mask TO 14; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+---------------+---------------------+--------------- 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11 | 2024-04-23 15 (1 row) @@ -214,17 +313,32 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 15, date, timestamp, timestamptz and timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 15; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; - +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...EST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-2... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...RE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-2... + ^ +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11', '2024-04-23 15:16:11'); +ERROR: datetime format picture ends before converting entire input string +LINE 1: ...4-04-23', '2024-04-23 15', '2024-04-23 15:16:11', '2024-04-2... + ^ +SET ivorysql.datetime_ignore_nls_mask TO 15; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; - a | b | c | d + a | b | c | d ------------+---------------+---------------------+--------------- 2024-04-23 | 2024-04-23 15 | 2024-04-23 14:16:11 | 2024-04-23 15 (1 row) DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; -RESET ALL; \ No newline at end of file +RESET ALL; diff --git a/contrib/ivorysql_ora/sql/ora_datetime_ignore_nls_mask.sql b/contrib/ivorysql_ora/sql/ora_datetime_ignore_nls_mask.sql index f94d5720d6b..9e599cd569f 100644 --- a/contrib/ivorysql_ora/sql/ora_datetime_ignore_nls_mask.sql +++ b/contrib/ivorysql_ora/sql/ora_datetime_ignore_nls_mask.sql @@ -12,140 +12,185 @@ SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 1, ignore date. -SET ivorysql.datetime_ignore_nls_mask TO 1; SET TIMEZONE TO 'Asia/Shanghai'; +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09', '2024-04-23 15:16:11'); + +SET ivorysql.datetime_ignore_nls_mask TO 1; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 2, ignore timestamp. -SET ivorysql.datetime_ignore_nls_mask TO 2; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15'); -INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15:16:11'); +SET ivorysql.datetime_ignore_nls_mask TO 2; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 3, ignore date and timestamp. -SET ivorysql.datetime_ignore_nls_mask TO 3; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24:MI'; +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15:16'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15:16'); -INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15:16:11'); +SET ivorysql.datetime_ignore_nls_mask TO 3; + +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11 +08:00', '2024-04-23 15:16:11 +09', '2024-04-23 15:16'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 4, ignore timestamptz. -SET ivorysql.datetime_ignore_nls_mask TO 4; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); + +SET ivorysql.datetime_ignore_nls_mask TO 4; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 5, ignore date and timestamptz. -SET ivorysql.datetime_ignore_nls_mask TO 5; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); + +SET ivorysql.datetime_ignore_nls_mask TO 5; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 6, ignore timestamp and timestamptz. -SET ivorysql.datetime_ignore_nls_mask TO 6; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); + +SET ivorysql.datetime_ignore_nls_mask TO 6; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 7, ignore date, timestamp and timestamptz. -SET ivorysql.datetime_ignore_nls_mask TO 7; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); + +SET ivorysql.datetime_ignore_nls_mask TO 7; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 8, ignore timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 8; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); + +SET ivorysql.datetime_ignore_nls_mask TO 8; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 9, ignore date and timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 9; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); + +SET ivorysql.datetime_ignore_nls_mask TO 9; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 10, ignore timestamp and timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 10; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); + +SET ivorysql.datetime_ignore_nls_mask TO 10; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 11, ignore date, timestamp and timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 11; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +SET ivorysql.datetime_ignore_nls_mask TO 11; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 12, ignore timestamptz and timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 12; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11', '2024-04-23 15:16:11'); + +SET ivorysql.datetime_ignore_nls_mask TO 12; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 13, ignore date, timestamptz and timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 13; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11', '2024-04-23 15:16:11'); + +SET ivorysql.datetime_ignore_nls_mask TO 13; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 14, ignore timestamp, timestamptz and timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 14; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11', '2024-04-23 15:16:11'); +SET ivorysql.datetime_ignore_nls_mask TO 14; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; DELETE FROM TEST_DATETIME_IGNORE_NLS_MASK; RESET ALL; -- test 'datetime_ignore_nls_mask' parameter with value 15, date, timestamp, timestamptz and timestampltz. -SET ivorysql.datetime_ignore_nls_mask TO 15; SET TIMEZONE TO 'Asia/Shanghai'; SET nls_timestamp_format = 'YYYY-MM-DD HH24'; SET nls_timestamp_tz_format = 'YYYY-MM-DD HH24:MI:SS'; +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); +INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23', '2024-04-23 15', '2024-04-23 15:16:11', '2024-04-23 15:16:11'); + +SET ivorysql.datetime_ignore_nls_mask TO 15; INSERT INTO TEST_DATETIME_IGNORE_NLS_MASK VALUES('2024-04-23 15:16:11', '2024-04-23 15:16:11', '2024-04-23 15:16:11 +09:00', '2024-04-23 15:16:11'); SELECT * FROM TEST_DATETIME_IGNORE_NLS_MASK; diff --git a/contrib/ivorysql_ora/src/datatype/oradate.c b/contrib/ivorysql_ora/src/datatype/oradate.c index 6ceef85d1fa..4bddf9d6626 100644 --- a/contrib/ivorysql_ora/src/datatype/oradate.c +++ b/contrib/ivorysql_ora/src/datatype/oradate.c @@ -164,13 +164,14 @@ pg_oradate_in(char *str, int32 typmod) char *field[MAXDATEFIELDS]; int ftype[MAXDATEFIELDS]; char workbuf[MAXDATELEN + MAXDATEFIELDS]; + DateTimeErrorExtra extra; dterr = ParseDateTime(str, workbuf, sizeof(workbuf), field, ftype, MAXDATEFIELDS, &nf); if (dterr == 0) - dterr = DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tz); + dterr = DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tz, &extra); if (dterr != 0) - DateTimeParseError(dterr, str, "date"); + DateTimeParseError(dterr, &extra, str, "date", NULL); switch (dtype) { diff --git a/contrib/ivorysql_ora/src/datatype/oratimestamp.c b/contrib/ivorysql_ora/src/datatype/oratimestamp.c index a52dbf32466..291631b9e5d 100644 --- a/contrib/ivorysql_ora/src/datatype/oratimestamp.c +++ b/contrib/ivorysql_ora/src/datatype/oratimestamp.c @@ -193,13 +193,14 @@ pg_oratimestamp_in(char *str, int32 typmod) char *field[MAXDATEFIELDS]; int ftype[MAXDATEFIELDS]; char workbuf[MAXDATELEN + MAXDATEFIELDS]; + DateTimeErrorExtra extra; dterr = ParseDateTime(str, workbuf, sizeof(workbuf), field, ftype, MAXDATEFIELDS, &nf); if (dterr == 0) - dterr = DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tz); + dterr = DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tz, &extra); if (dterr != 0) - DateTimeParseError(dterr, str, "timestamp"); + DateTimeParseError(dterr, &extra, str, "timestamp", NULL); switch (dtype) { diff --git a/contrib/ivorysql_ora/src/datatype/oratimestamptz.c b/contrib/ivorysql_ora/src/datatype/oratimestamptz.c index 706a8ab9355..8d5c30450cf 100644 --- a/contrib/ivorysql_ora/src/datatype/oratimestamptz.c +++ b/contrib/ivorysql_ora/src/datatype/oratimestamptz.c @@ -190,13 +190,14 @@ pg_oratimestamptz_in(char *str, int32 typmod) char *field[MAXDATEFIELDS]; int ftype[MAXDATEFIELDS]; char workbuf[MAXDATELEN + MAXDATEFIELDS]; + DateTimeErrorExtra extra; dterr = ParseDateTime(str, workbuf, sizeof(workbuf), field, ftype, MAXDATEFIELDS, &nf); if (dterr == 0) - dterr = DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tz); + dterr = DecodeDateTime(field, ftype, nf, &dtype, tm, &fsec, &tz, &extra); if (dterr != 0) - DateTimeParseError(dterr, str, "timestamp with time zone"); + DateTimeParseError(dterr, &extra, str, "timestamp with time zone", NULL); switch (dtype) { From 2a8ac53ec79c371ddd1edfe6ef795372685a169d Mon Sep 17 00:00:00 2001 From: liangxiangyu Date: Wed, 24 Apr 2024 16:04:23 +0800 Subject: [PATCH 4/6] bugfix for macos regression failed --- .github/workflows/build.yml | 4 ++-- .github/workflows/oracle_pg_regression.yml | 4 ++-- .github/workflows/oracle_regression.yml | 4 ++-- .github/workflows/pg_regression.yml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 01788442da6..9c0c4c187fd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,7 +11,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, macos-latest] + os: [ubuntu-latest, macos-12.7.4] steps: - uses: actions/checkout@v3 @@ -35,7 +35,7 @@ jobs: --with-ossp-uuid --with-libxml --with-libxslt --with-perl \ --with-icu - name: configure - macos - if: ${{ matrix.os == 'macos-latest' }} + if: ${{ matrix.os == 'macos-12.7.4' }} run: | export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig" ./configure \ diff --git a/.github/workflows/oracle_pg_regression.yml b/.github/workflows/oracle_pg_regression.yml index 008dd645a4d..b98f8cb7075 100644 --- a/.github/workflows/oracle_pg_regression.yml +++ b/.github/workflows/oracle_pg_regression.yml @@ -11,7 +11,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, macos-latest] + os: [ubuntu-latest, macos-12.7.4] steps: - uses: actions/checkout@v3 @@ -39,7 +39,7 @@ jobs: --with-ossp-uuid --with-libxml --with-libxslt --with-perl \ --with-icu - name: configure - macos - if: ${{ matrix.os == 'macos-latest' }} + if: ${{ matrix.os == 'macos-12.7.4' }} run: | export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig" curl -L -o cpanm http://cpanmin.us && chmod +x cpanm && \ diff --git a/.github/workflows/oracle_regression.yml b/.github/workflows/oracle_regression.yml index d8813fd9084..fac5744d7d7 100644 --- a/.github/workflows/oracle_regression.yml +++ b/.github/workflows/oracle_regression.yml @@ -11,7 +11,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, macos-latest] + os: [ubuntu-latest, macos-12.7.4] steps: - uses: actions/checkout@v3 @@ -39,7 +39,7 @@ jobs: --with-ossp-uuid --with-libxml --with-libxslt --with-perl \ --with-icu - name: configure - macos - if: ${{ matrix.os == 'macos-latest' }} + if: ${{ matrix.os == 'macos-12.7.4' }} run: | export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig" curl -L -o cpanm http://cpanmin.us && chmod +x cpanm && \ diff --git a/.github/workflows/pg_regression.yml b/.github/workflows/pg_regression.yml index 32040513882..68b946249b8 100644 --- a/.github/workflows/pg_regression.yml +++ b/.github/workflows/pg_regression.yml @@ -11,7 +11,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, macos-latest] + os: [ubuntu-latest, macos-12.7.4] steps: - uses: actions/checkout@v3 @@ -39,7 +39,7 @@ jobs: --with-ossp-uuid --with-libxml --with-libxslt --with-perl \ --with-icu - name: configure - macos - if: ${{ matrix.os == 'macos-latest' }} + if: ${{ matrix.os == 'macos-12.7.4' }} run: | export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig" curl -L -o cpanm http://cpanmin.us && chmod +x cpanm && \ From eea207b538c11c45cfc4cd3afb2b1ff5f440ce97 Mon Sep 17 00:00:00 2001 From: liangxiangyu Date: Wed, 24 Apr 2024 16:42:41 +0800 Subject: [PATCH 5/6] bugfix for macos regression failed --- .github/workflows/build.yml | 4 ++-- .github/workflows/oracle_pg_regression.yml | 4 ++-- .github/workflows/oracle_regression.yml | 4 ++-- .github/workflows/pg_regression.yml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9c0c4c187fd..b2f076886b9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,7 +11,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, macos-12.7.4] + os: [ubuntu-latest, macos-12] steps: - uses: actions/checkout@v3 @@ -35,7 +35,7 @@ jobs: --with-ossp-uuid --with-libxml --with-libxslt --with-perl \ --with-icu - name: configure - macos - if: ${{ matrix.os == 'macos-12.7.4' }} + if: ${{ matrix.os == 'macos-12' }} run: | export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig" ./configure \ diff --git a/.github/workflows/oracle_pg_regression.yml b/.github/workflows/oracle_pg_regression.yml index b98f8cb7075..851edc9eefa 100644 --- a/.github/workflows/oracle_pg_regression.yml +++ b/.github/workflows/oracle_pg_regression.yml @@ -11,7 +11,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, macos-12.7.4] + os: [ubuntu-latest, macos-12] steps: - uses: actions/checkout@v3 @@ -39,7 +39,7 @@ jobs: --with-ossp-uuid --with-libxml --with-libxslt --with-perl \ --with-icu - name: configure - macos - if: ${{ matrix.os == 'macos-12.7.4' }} + if: ${{ matrix.os == 'macos-12' }} run: | export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig" curl -L -o cpanm http://cpanmin.us && chmod +x cpanm && \ diff --git a/.github/workflows/oracle_regression.yml b/.github/workflows/oracle_regression.yml index fac5744d7d7..9e83d16e640 100644 --- a/.github/workflows/oracle_regression.yml +++ b/.github/workflows/oracle_regression.yml @@ -11,7 +11,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, macos-12.7.4] + os: [ubuntu-latest, macos-12] steps: - uses: actions/checkout@v3 @@ -39,7 +39,7 @@ jobs: --with-ossp-uuid --with-libxml --with-libxslt --with-perl \ --with-icu - name: configure - macos - if: ${{ matrix.os == 'macos-12.7.4' }} + if: ${{ matrix.os == 'macos-12' }} run: | export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig" curl -L -o cpanm http://cpanmin.us && chmod +x cpanm && \ diff --git a/.github/workflows/pg_regression.yml b/.github/workflows/pg_regression.yml index 68b946249b8..be0adb44894 100644 --- a/.github/workflows/pg_regression.yml +++ b/.github/workflows/pg_regression.yml @@ -11,7 +11,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, macos-12.7.4] + os: [ubuntu-latest, macos-12] steps: - uses: actions/checkout@v3 @@ -39,7 +39,7 @@ jobs: --with-ossp-uuid --with-libxml --with-libxslt --with-perl \ --with-icu - name: configure - macos - if: ${{ matrix.os == 'macos-12.7.4' }} + if: ${{ matrix.os == 'macos-12' }} run: | export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig" curl -L -o cpanm http://cpanmin.us && chmod +x cpanm && \ From c892749ff1dbffe1ea0a390aba249f1e9649f379 Mon Sep 17 00:00:00 2001 From: liangxiangyu Date: Wed, 24 Apr 2024 17:24:56 +0800 Subject: [PATCH 6/6] bugfix for macos regression failed --- .github/workflows/build.yml | 2 +- .github/workflows/contrib_regression.yml | 2 +- .github/workflows/meson_build.yml | 2 +- .github/workflows/oracle_pg_regression.yml | 2 +- .github/workflows/oracle_regression.yml | 2 +- .github/workflows/pg_regression.yml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b2f076886b9..7cda50ceec5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,7 +18,7 @@ jobs: - name: dependancy - linux if: ${{ matrix.os == 'ubuntu-latest' }} run: | - sudo apt-get update + sudo apt-get update --allow-unauthenticated --allow-insecure-repositories sudo apt-get install -y build-essential git lcov bison flex \ libkrb5-dev libssl-dev libldap-dev libpam-dev python3-dev \ tcl-dev libperl-dev gettext libxml2-dev libxslt-dev \ diff --git a/.github/workflows/contrib_regression.yml b/.github/workflows/contrib_regression.yml index 2fde426e707..5d60cdaee82 100644 --- a/.github/workflows/contrib_regression.yml +++ b/.github/workflows/contrib_regression.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v3 - name: dependancy run: | - sudo apt-get update + sudo apt-get update --allow-unauthenticated --allow-insecure-repositories sudo apt-get install -y build-essential git lcov bison flex \ libkrb5-dev libssl-dev libldap-dev libpam-dev python3-dev \ tcl-dev libperl-dev gettext libxml2-dev libxslt-dev \ diff --git a/.github/workflows/meson_build.yml b/.github/workflows/meson_build.yml index d781680c55c..54635e71b85 100644 --- a/.github/workflows/meson_build.yml +++ b/.github/workflows/meson_build.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@v3 - name: dependancy - linux run: | - sudo apt-get update + sudo apt-get update --allow-unauthenticated --allow-insecure-repositories sudo apt-get install -y build-essential git lcov bison flex \ libkrb5-dev libssl-dev libldap-dev libpam-dev python3-dev \ tcl-dev libperl-dev gettext libxml2-dev libxslt-dev \ diff --git a/.github/workflows/oracle_pg_regression.yml b/.github/workflows/oracle_pg_regression.yml index 851edc9eefa..6fec885112b 100644 --- a/.github/workflows/oracle_pg_regression.yml +++ b/.github/workflows/oracle_pg_regression.yml @@ -18,7 +18,7 @@ jobs: - name: dependancy if: ${{ matrix.os == 'ubuntu-latest' }} run: | - sudo apt-get update + sudo apt-get update --allow-unauthenticated --allow-insecure-repositories sudo apt-get install -y build-essential git lcov bison flex \ libkrb5-dev libssl-dev libldap-dev libpam-dev python3-dev \ tcl-dev libperl-dev gettext libxml2-dev libxslt-dev \ diff --git a/.github/workflows/oracle_regression.yml b/.github/workflows/oracle_regression.yml index 9e83d16e640..d5093ab0b67 100644 --- a/.github/workflows/oracle_regression.yml +++ b/.github/workflows/oracle_regression.yml @@ -18,7 +18,7 @@ jobs: - name: dependancy if: ${{ matrix.os == 'ubuntu-latest' }} run: | - sudo apt-get update + sudo apt-get update --allow-unauthenticated --allow-insecure-repositories sudo apt-get install -y build-essential git lcov bison flex \ libkrb5-dev libssl-dev libldap-dev libpam-dev python3-dev \ tcl-dev libperl-dev gettext libxml2-dev libxslt-dev \ diff --git a/.github/workflows/pg_regression.yml b/.github/workflows/pg_regression.yml index be0adb44894..08a49eb4bad 100644 --- a/.github/workflows/pg_regression.yml +++ b/.github/workflows/pg_regression.yml @@ -18,7 +18,7 @@ jobs: - name: dependancy if: ${{ matrix.os == 'ubuntu-latest' }} run: | - sudo apt-get update + sudo apt-get update --allow-unauthenticated --allow-insecure-repositories sudo apt-get install -y build-essential git lcov bison flex \ libkrb5-dev libssl-dev libldap-dev libpam-dev python3-dev \ tcl-dev libperl-dev gettext libxml2-dev libxslt-dev \