diff --git a/contrib/dolphin/expected/ansi_quotes_test.out b/contrib/dolphin/expected/ansi_quotes_test.out index 3e14412bfb4196779120d6227a879b762deab2da..6aa888e21cdafbf9d5e532d23136dd54efbb1290 100644 --- a/contrib/dolphin/expected/ansi_quotes_test.out +++ b/contrib/dolphin/expected/ansi_quotes_test.out @@ -1,9 +1,9 @@ \c test_ansi_quotes CREATE TABLE test_quotes (a text); show dolphin.sql_mode; - dolphin.sql_mode ------------------------------------------------------------------ - sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes + dolphin.sql_mode +------------------------------------------------------------------------------ + sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date (1 row) -- test insert diff --git a/contrib/dolphin/expected/b_compatibility_time_type.out b/contrib/dolphin/expected/b_compatibility_time_type.out index 8baf64a4a34d760a08ab241a6a39d6e9a50d9b5f..8ee3c7aaf97f1033c65fda3560ef73fd3f9e28fc 100644 --- a/contrib/dolphin/expected/b_compatibility_time_type.out +++ b/contrib/dolphin/expected/b_compatibility_time_type.out @@ -1694,13 +1694,13 @@ SELECT * FROM ti_hash PARTITION(P2); DROP TABLE ti_hash; -- test cast function -select cast(-232323.555 as time); +SELECT cast(-232323.555 as time); time ----------- -23:23:24 (1 row) -select cast('20121010101010.555' as datetime); +SELECT cast('20121010101010.555' as datetime); timestamp -------------------------- Wed Oct 10 10:10:11 2012 @@ -1754,6 +1754,153 @@ select * from time_tbl; (1 row) DROP TABLE time_tbl; +-- test sql_mode NO_ZERO_DATE +CREATE TABLE t_NO_ZERO_DATE_date(v date); +CREATE TABLE t_NO_ZERO_DATE_datetime(v datetime); +CREATE TABLE t_NO_ZERO_DATE_timestamp(v timestamp); +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-00-00'); +ERROR: date/time field value out of range: "0000-00-00" +LINE 1: INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-00-00'); + ^ +HINT: Perhaps you need a different "datestyle" setting. +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-00-01'); +ERROR: date/time field value out of range: "0000-00-01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-00-01'); + ^ +HINT: Perhaps you need a different "datestyle" setting. +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-01-00'); +ERROR: date/time field value out of range: "0000-01-00" +LINE 1: INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-01-00'); + ^ +HINT: Perhaps you need a different "datestyle" setting. +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('2000-00-00'); +ERROR: date/time field value out of range: "2000-00-00" +LINE 1: INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('2000-00-00'); + ^ +HINT: Perhaps you need a different "datestyle" setting. +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-00-00 10:01'); +ERROR: date/time field value out of range: "0000-00-00 10:01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-00-00 10... + ^ +HINT: Perhaps you need a different "datestyle" setting. +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-00-01 10:01'); +ERROR: date/time field value out of range: "0000-00-01 10:01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-00-01 10... + ^ +HINT: Perhaps you need a different "datestyle" setting. +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-01-00 10:01'); +ERROR: date/time field value out of range: "0000-01-00 10:01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-01-00 10... + ^ +HINT: Perhaps you need a different "datestyle" setting. +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('2000-00-00 10:01'); +ERROR: date/time field value out of range: "2000-00-00 10:01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('2000-00-00 10... + ^ +HINT: Perhaps you need a different "datestyle" setting. +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-00-00 10:01'); +ERROR: date/time field value out of range: "0000-00-00 10:01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-00-00 1... + ^ +HINT: Perhaps you need a different "datestyle" setting. +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-00-01 10:01'); +ERROR: date/time field value out of range: "0000-00-01 10:01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-00-01 1... + ^ +HINT: Perhaps you need a different "datestyle" setting. +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-01-00 10:01'); +ERROR: date/time field value out of range: "0000-01-00 10:01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-01-00 1... + ^ +HINT: Perhaps you need a different "datestyle" setting. +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('2000-00-00 10:01'); +ERROR: date/time field value out of range: "2000-00-00 10:01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('2000-00-00 1... + ^ +HINT: Perhaps you need a different "datestyle" setting. +CONTEXT: referenced column: v +SET dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group'; +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-00-00'); +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-00-01'); +ERROR: date/time field value out of range: "0000-00-01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-00-01'); + ^ +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-01-00'); +ERROR: date/time field value out of range: "0000-01-00" +LINE 1: INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-01-00'); + ^ +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('2000-00-00'); +ERROR: date/time field value out of range: "2000-00-00" +LINE 1: INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('2000-00-00'); + ^ +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-00-00 10:01'); +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-00-01 10:01'); +ERROR: date/time field value out of range: "0000-00-01 10:01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-00-01 10... + ^ +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-01-00 10:01'); +ERROR: date/time field value out of range: "0000-01-00 10:01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-01-00 10... + ^ +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('2000-00-00 10:01'); +ERROR: date/time field value out of range: "2000-00-00 10:01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('2000-00-00 10... + ^ +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-00-00 10:01'); +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-00-01 10:01'); +ERROR: date/time field value out of range: "0000-00-01 10:01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-00-01 1... + ^ +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-01-00 10:01'); +ERROR: date/time field value out of range: "0000-01-00 10:01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-01-00 1... + ^ +CONTEXT: referenced column: v +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('2000-00-00 10:01'); +ERROR: date/time field value out of range: "2000-00-00 10:01" +LINE 1: INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('2000-00-00 1... + ^ +CONTEXT: referenced column: v +SELECT * FROM t_NO_ZERO_DATE_date; + v +------------ + 00-00-0000 +(1 row) + +SELECT * FROM t_NO_ZERO_DATE_datetime; + v +--------------------- + 0000-00-00 10:01:00 +(1 row) + +SELECT * FROM t_NO_ZERO_DATE_timestamp; + v +------------------------------ + 0000-00-00 10:01:00+08:05:43 +(1 row) + +DROP TABLE t_NO_ZERO_DATE_date; +DROP TABLE t_NO_ZERO_DATE_datetime; +DROP TABLE t_NO_ZERO_DATE_timestamp; +RESET dolphin.sql_mode; \c postgres DROP DATABASE b_time_type; DROP TABLESPACE b_time_type_example; diff --git a/contrib/dolphin/expected/db_b_date_time_functions2.out b/contrib/dolphin/expected/db_b_date_time_functions2.out index b1209fe95b69425e07bb025744129d4c9f667492..1d8aa3cef06080941d924f6d0446b43474d7ef8c 100644 --- a/contrib/dolphin/expected/db_b_date_time_functions2.out +++ b/contrib/dolphin/expected/db_b_date_time_functions2.out @@ -43,7 +43,7 @@ insert into test values('dayname(20211112235959.9999999)', dayname(2021111223595 -- 特异 insert into test values('dayname(null)', dayname(null)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('dayname(''10000-1-1'')', dayname('10000-1-1')); WARNING: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -66,7 +66,7 @@ insert into test values('dayname(9999999999999999999999)', dayname(9999999999999 WARNING: Incorrect datetime value: "9999999999999999999999" CONTEXT: referenced column: result -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('dayname(''10000-1-1'')', dayname('10000-1-1')); ERROR: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -132,7 +132,7 @@ insert into test values('monthname(''2021-00-01'')', monthname('2021-00-01')); insert into test values('monthname(20210001)', monthname(20210001)); insert into test values('monthname(0)', monthname(0)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('monthname(''10000-1-1'')', monthname('10000-1-1')); WARNING: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -152,7 +152,7 @@ insert into test values('monthname(9999999999999999999999)', monthname(999999999 WARNING: Incorrect datetime value: "9999999999999999999999" CONTEXT: referenced column: result -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('monthname(''10000-1-1'')', monthname('10000-1-1')); ERROR: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -255,7 +255,7 @@ insert into test values('time_to_sec(8385959)', time_to_sec(8385959)); -- 特异 insert into test values('time_to_sec(null)', time_to_sec(null)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值边界值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('time_to_sec(''00:00:60'')', time_to_sec('00:00:60')); WARNING: date/time field value out of range: "00:00:60" CONTEXT: referenced column: result @@ -287,7 +287,7 @@ insert into test values('time_to_sec(''-34 23:00:00'')', time_to_sec('-34 23:00: WARNING: Truncated incorrect time value. CONTEXT: referenced column: result -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('time_to_sec(''00:00:60'')', time_to_sec('00:00:60')); ERROR: date/time field value out of range: "00:00:60" CONTEXT: referenced column: result @@ -358,7 +358,7 @@ insert into test values('month(20210100)', month(20210100)); insert into test values('month(20210000)', month(20210000)); insert into test values('month(0)', month(0)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('month(''10000-1-1'')', month('10000-1-1')); WARNING: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -378,7 +378,7 @@ insert into test values('month(9999999999999999999999)', month(99999999999999999 WARNING: Incorrect datetime value: "9999999999999999999999" CONTEXT: referenced column: result -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('month(''10000-1-1'')', month('10000-1-1')); ERROR: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -433,7 +433,7 @@ insert into test values('last_day(null)', last_day(null)); insert into test values('last_day(''2021-01-00'')', last_day('2021-01-00')); insert into test values('last_day(20210100)', last_day(20210100)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('last_day(''2021-00-01'')', last_day('2021-00-01')); WARNING: date/time field value out of range: "2021-00-01" CONTEXT: referenced column: result @@ -468,7 +468,7 @@ insert into test values('last_day(9999999999999999999999)', last_day(99999999999 WARNING: Incorrect datetime value: "9999999999999999999999" CONTEXT: referenced column: result -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('last_day(''2021-00-01'')', last_day('2021-00-01')); ERROR: date/time field value out of range: "2021-00-01" HINT: Perhaps you need a different "datestyle" setting. @@ -536,7 +536,7 @@ insert into test values('date(20210031)', date(20210031)); insert into test values('date(20210100)', date(20210100)); insert into test values('date(20210100)', date(20210100)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('date(''10000-1-1'')', date('10000-1-1')); WARNING: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -556,7 +556,7 @@ insert into test values('date(9999999999999999999999)', date(9999999999999999999 WARNING: Incorrect datetime value: "9999999999999999999999" CONTEXT: referenced column: result -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('date(''10000-1-1'')', date('10000-1-1')); ERROR: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -607,7 +607,7 @@ insert into test values('day(20210100)', day(20210100)); insert into test values('day(20210000)', day(20210000)); insert into test values('day(0)', day(0)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('day(''10000-1-1'')', day('10000-1-1')); WARNING: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -627,7 +627,7 @@ insert into test values('day(9999999999999999999999)', day(999999999999999999999 WARNING: Incorrect datetime value: "9999999999999999999999" CONTEXT: referenced column: result -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('day(''10000-1-1'')', day('10000-1-1')); ERROR: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -791,7 +791,7 @@ insert into test values('week(20211112235959.9999999)', week(20211112235959.9999 -- 单参数-特异 insert into test values('week(null)', week(null)); -- 单参数-非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('week(''10000-1-1'')', week('10000-1-1')); WARNING: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -820,7 +820,7 @@ insert into test values('week(''0000-12-31 22:59:59.9999995'')', week('0000-12-3 WARNING: Truncated incorrect datetime value: "0000-12-31 22:59:59.9999995" CONTEXT: referenced column: result -- 单参数-严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('week(''10000-1-1'')', week('10000-1-1')); ERROR: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -863,7 +863,7 @@ insert into test values('week(null, 0)', week(null, 0)); insert into test values('week(''2000-1-1'', null)', week('2000-1-1', null)); insert into test values('week(null, null)', week(null, null)); -- 双参数-非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('week(''10000-1-1'', 0)', week('10000-1-1', 0)); WARNING: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -892,7 +892,7 @@ insert into test values('week(''0000-12-31 22:59:59.9999995'', 0)', week('0000-1 WARNING: Truncated incorrect datetime value: "0000-12-31 22:59:59.9999995" CONTEXT: referenced column: result -- 双参数-严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('week(''10000-1-1'', 0)', week('10000-1-1', 0)); ERROR: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -941,7 +941,7 @@ insert into test values('yearweek(20211112235959.9999999)', yearweek(20211112235 -- 单参数-特异 insert into test values('yearweek(null)', yearweek(null)); -- 单参数-非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('yearweek(''10000-1-1'')', yearweek('10000-1-1')); WARNING: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -970,7 +970,7 @@ insert into test values('yearweek(''0000-12-31 22:59:59.9999995'')', yearweek('0 WARNING: Incorrect datetime value: '0000-00-00' CONTEXT: referenced column: result -- 单参数-严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('yearweek(''10000-1-1'')', yearweek('10000-1-1')); ERROR: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -1013,7 +1013,7 @@ insert into test values('yearweek(null, 0)', yearweek(null, 0)); insert into test values('yearweek(''2000-1-1'', null)', yearweek('2000-1-1', null)); insert into test values('yearweek(null, null)', yearweek(null, null)); -- 双参数-非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('yearweek(''10000-1-1'', 0)', yearweek('10000-1-1', 0)); WARNING: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result @@ -1042,7 +1042,7 @@ insert into test values('yearweek(''0000-12-31 22:59:59.9999995'', 0)', yearweek WARNING: Incorrect datetime value: '0000-00-00' CONTEXT: referenced column: result -- 双参数-严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('yearweek(''10000-1-1'', 0)', yearweek('10000-1-1', 0)); ERROR: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result diff --git a/contrib/dolphin/expected/db_b_date_time_functions3.out b/contrib/dolphin/expected/db_b_date_time_functions3.out index 656557a0faf1ebf1b1d4a91662ffec30bc9af37c..ea87b846394d85c412d7d6f01ba84e681e47a78f 100644 --- a/contrib/dolphin/expected/db_b_date_time_functions3.out +++ b/contrib/dolphin/expected/db_b_date_time_functions3.out @@ -31,7 +31,7 @@ insert into test values('datediff(null, ''2021-11-12'')', datediff(null, '2021-1 insert into test values('datediff(''2021-11-12'', null)', datediff('2021-11-12', null)); insert into test values('datediff(null, null)', datediff(null, null)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('datediff(''10000-01-01'', ''2021-11-12'')', datediff('10000-01-01', '2021-11-12')); WARNING: Incorrect datetime value: "10000-01-01" CONTEXT: referenced column: result @@ -45,7 +45,7 @@ insert into test values('datediff(9999999999999999999999, 20211112)', datediff(9 WARNING: Incorrect datetime value: "9999999999999999999999" CONTEXT: referenced column: result -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('datediff(''10000-01-01'', ''2021-11-12'')', datediff('10000-01-01', '2021-11-12')); ERROR: Incorrect datetime value: "10000-01-01" CONTEXT: referenced column: result @@ -125,7 +125,7 @@ insert into test values('timestampdiff(week, null, ''9999-12-31'')', timestampdi insert into test values('timestampdiff(week, ''9999-12-31'', null)', timestampdiff(week, '9999-12-31', null)); insert into test values('timestampdiff(week, null, null)', timestampdiff(week, null, null)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('timestampdiff(microsecond, ''abc'', ''2021-11-12'')', timestampdiff(microsecond, 'abc', '2021-11-12')); WARNING: invalid input syntax for type timestamp: "abc" CONTEXT: referenced column: result @@ -136,7 +136,7 @@ insert into test values('timestampdiff(microsecond, ''10000-1-1'', ''2021-11-12' WARNING: Incorrect datetime value: "10000-1-1" CONTEXT: referenced column: result -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('timestampdiff(microsecond, ''abc'', ''2021-11-12'')', timestampdiff(microsecond, 'abc', '2021-11-12')); ERROR: invalid input syntax for type timestamp: "abc" CONTEXT: referenced column: result @@ -190,12 +190,12 @@ insert into test values('convert_tz(''2021-11-12 12:12:12'', ''+1:00'', ''abc'') insert into test values('convert_tz(''2021-11-12 12:12:12'', ''+13:01'', ''+0:00'')', convert_tz('2021-11-12 12:12:12', '+13:01', '+0:00')); insert into test values('convert_tz(''2021-11-12 12:12:12'', ''+0:00'', ''-13:00'')', convert_tz('2021-11-12 12:12:12', '+0:00', '-13:00')); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('convert_tz(''10000-1-1 10:10:10'', ''+1:00'', ''+0:00'')', convert_tz('10000-1-1 10:10:10', '+1:00', '+0:00')); WARNING: Incorrect datetime value: "10000-1-1 10:10:10" CONTEXT: referenced column: result -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('convert_tz(''10000-1-1 10:10:10'', ''+1:00'', ''+0:00'')', convert_tz('10000-1-1 10:10:10', '+1:00', '+0:00')); ERROR: Incorrect datetime value: "10000-1-1 10:10:10" CONTEXT: referenced column: result @@ -255,7 +255,7 @@ insert into test values('adddate(null, INTERVAL 1 day)', adddate(null, INTERVAL insert into test values('adddate(''2021-11-12'', null)', adddate('2021-11-12', null)); insert into test values('adddate(null, null)', adddate(null, null)); -- 非严格模式,参数或者结果不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('adddate(0, INTERVAL 100 second)', adddate(0, INTERVAL 100 second)); WARNING: Incorrect datetime value: "0" CONTEXT: referenced column: result @@ -294,7 +294,7 @@ insert into test values('adddate(''0001-1-1 00:00:00'', INTERVAL -1 second)', ad WARNING: date/time field value out of range CONTEXT: referenced column: result -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('adddate(0, INTERVAL 100 second)', adddate(0, INTERVAL 100 second)); ERROR: Incorrect datetime value: "0" CONTEXT: referenced column: result @@ -381,7 +381,7 @@ insert into test values('date_add(101, INTERVAL 100 second)', date_add(101, INTE -- 特异 insert into test values('date_add(null, INTERVAL 1 day)', date_add(null, INTERVAL 1 day)); -- 非严格模式,参数或者结果不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('date_add(0, INTERVAL 100 second)', date_add(0, INTERVAL 100 second)); WARNING: Incorrect datetime value: "0" CONTEXT: referenced column: result @@ -420,7 +420,7 @@ insert into test values('date_add(''0001-1-1 00:00:00'', INTERVAL -1 second)', d WARNING: date/time field value out of range CONTEXT: referenced column: result -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('date_add(0, INTERVAL 100 second)', date_add(0, INTERVAL 100 second)); ERROR: Incorrect datetime value: "0" CONTEXT: referenced column: result @@ -507,7 +507,7 @@ insert into test values('date_sub(101, INTERVAL 100 second)', date_sub(101, INTE -- 特异 insert into test values('date_sub(null, INTERVAL 1 day)', date_sub(null, INTERVAL 1 day)); -- 非严格模式,参数或者结果不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('date_sub(0, INTERVAL 100 second)', date_sub(0, INTERVAL 100 second)); WARNING: Incorrect datetime value: "0" CONTEXT: referenced column: result @@ -546,7 +546,7 @@ insert into test values('date_sub(''0001-1-1 00:00:00'', INTERVAL 1 second)', da WARNING: date/time field value out of range CONTEXT: referenced column: result -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('date_sub(0, INTERVAL 100 second)', date_sub(0, INTERVAL 100 second)); ERROR: Incorrect datetime value: "0" CONTEXT: referenced column: result @@ -611,7 +611,7 @@ insert into test values('addtime(null, null)', addtime(null, null)); insert into test values('addtime(''12:12:12'', ''2021-11-12 12:12:12'')', addtime('12:12:12', '2021-11-12 12:12:12')); insert into test values('addtime(''0001-1-1 00:00:00'', ''-00:00:01'')', addtime('0001-1-1 00:00:00', '-00:00:01')); -- 非严格模式,参数或者结果不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('addtime(''839:00:00'', ''00:00:00'')', addtime('839:00:00', '00:00:00')); WARNING: Truncated incorrect time value. CONTEXT: referenced column: result @@ -637,7 +637,7 @@ insert into test values('addtime(''10000-1-1 00:00:00'', ''00:00:00'')', addtime WARNING: date/time field overflow CONTEXT: referenced column: result -- 严格模式,参数或结果不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('addtime(''839:00:00'', ''00:00:00'')', addtime('839:00:00', '00:00:00')); ERROR: date/time field value out of range: "839:00:00" CONTEXT: referenced column: result diff --git a/contrib/dolphin/include/plugin_commands/mysqlmode.h b/contrib/dolphin/include/plugin_commands/mysqlmode.h index 82520995130e57727a605002ae7439dcd1a0015c..1e1cb4781970572849961cfb792077ac4576d01a 100644 --- a/contrib/dolphin/include/plugin_commands/mysqlmode.h +++ b/contrib/dolphin/include/plugin_commands/mysqlmode.h @@ -9,12 +9,14 @@ #define OPT_SQL_MODE_FULL_GROUP 4 #define OPT_SQL_MODE_PIPES_AS_CONCAT 8 #define OPT_SQL_MODE_ANSI_QUOTES 16 -#define OPT_SQL_MODE_MAX 5 +#define OPT_SQL_MODE_NO_ZERO_DATE 32 +#define OPT_SQL_MODE_MAX 6 #define SQL_MODE_STRICT() (GetSessionContext()->sqlModeFlags & OPT_SQL_MODE_STRICT) #define SQL_MODE_FULL_GROUP() (GetSessionContext()->sqlModeFlags & OPT_SQL_MODE_FULL_GROUP) #define PG_RETURN_INT8(x) return Int8GetDatum(x) #define SQL_MODE_PIPES_AS_CONCAT() (GetSessionContext()->sqlModeFlags & OPT_SQL_MODE_PIPES_AS_CONCAT) #define SQL_MODE_ANSI_QUOTES() (GetSessionContext()->sqlModeFlags & OPT_SQL_MODE_ANSI_QUOTES) +#define SQL_MODE_NO_ZERO_DATE() (GetSessionContext()->sqlModeFlags & OPT_SQL_MODE_NO_ZERO_DATE) extern int32 PgAtoiInternal(char* s, int size, int c, bool sqlModeStrict, bool can_ignore, bool isUnsigned = false); extern int16 PgStrtoint16Internal(const char* s, bool sqlModeStrict, bool can_ignore); diff --git a/contrib/dolphin/include/plugin_utils/date.h b/contrib/dolphin/include/plugin_utils/date.h index f873eaa9954eb32004e64da0355c840cd287b346..768908392dcfd44da6354d1a04d5c9d542283280 100644 --- a/contrib/dolphin/include/plugin_utils/date.h +++ b/contrib/dolphin/include/plugin_utils/date.h @@ -51,6 +51,8 @@ #define FROM_DAYS_MAX_DAY 3652500 #define MAX_NUMBER_OF_DAY 3652424 #define TIME_MAX_FRAC 999999 +#define DATE_ALL_ZERO_VALUE (-2451508) +#define JDATE_ALL_ZERO_VALUE (DATE_ALL_ZERO_VALUE + POSTGRES_EPOCH_JDATE) #endif /* for b compatibility type*/ diff --git a/contrib/dolphin/plugin_postgres.cpp b/contrib/dolphin/plugin_postgres.cpp index 3193c0f833e0d274d42943abc223226556075f1f..8ddc918e8c2865d2719c085aafb8e5d09a227eaa 100644 --- a/contrib/dolphin/plugin_postgres.cpp +++ b/contrib/dolphin/plugin_postgres.cpp @@ -90,6 +90,7 @@ static const struct sql_mode_entry sql_mode_options[OPT_SQL_MODE_MAX] = { {"sql_mode_full_group", OPT_SQL_MODE_FULL_GROUP}, {"pipes_as_concat", OPT_SQL_MODE_PIPES_AS_CONCAT}, {"ansi_quotes", OPT_SQL_MODE_ANSI_QUOTES}, + {"no_zero_date", OPT_SQL_MODE_NO_ZERO_DATE}, }; /* @@ -380,7 +381,7 @@ void init_session_vars(void) gettext_noop("CUSTOM_OPTIONS"), NULL, &GetSessionContext()->sqlModeString, - "sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes", + "sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date", PGC_USERSET, GUC_LIST_INPUT | GUC_REPORT, CheckSqlMode, diff --git a/contrib/dolphin/plugin_utils/adt/datetime.cpp b/contrib/dolphin/plugin_utils/adt/datetime.cpp index 1ccbb535ab605e60e28d0f93659f52a73156ca62..d2c2701a92ae040990a6cdcf1602c0187268e46c 100644 --- a/contrib/dolphin/plugin_utils/adt/datetime.cpp +++ b/contrib/dolphin/plugin_utils/adt/datetime.cpp @@ -298,6 +298,9 @@ static int strtoi(const char* nptr, char** endptr, int base) int date2j(int y, int m, int d) { +#ifdef DOLPHIN + if (y == 0 && m == 0 && d == 0) return JDATE_ALL_ZERO_VALUE; +#endif int julian; int century; @@ -339,6 +342,14 @@ void j2date(int jd, int* year, int* month, int* day) *day = julian - 7834 * quad / 256; *month = (quad + 10) % MONTHS_PER_YEAR + 1; +#ifdef DOLPHIN + if (jd == JDATE_ALL_ZERO_VALUE) { + *year = 0; + *month = 0; + *day = 0; + } +#endif + return; } /* j2date() */ @@ -2292,7 +2303,7 @@ static int ValidateDate(unsigned int fmask, bool isjulian, bool is2digits, bool /* check for valid month */ if (fmask & DTK_M(MONTH)) { #ifdef DOLPHIN - if ((date_flag & ENABLE_ZERO_MONTH)) { + if ((date_flag & ENABLE_ZERO_MONTH) || (!SQL_MODE_NO_ZERO_DATE() && SQL_MODE_STRICT())) { if (tm->tm_mon < 0 || tm->tm_mon > MONTHS_PER_YEAR) return DTERR_MD_FIELD_OVERFLOW; } else if (tm->tm_mon < 1 || tm->tm_mon > MONTHS_PER_YEAR) @@ -2305,7 +2316,7 @@ static int ValidateDate(unsigned int fmask, bool isjulian, bool is2digits, bool /* minimal check for valid day */ if (fmask & DTK_M(DAY)) { #ifdef DOLPHIN - if ((date_flag & ENABLE_ZERO_DAY)) { + if ((date_flag & ENABLE_ZERO_DAY) || (!SQL_MODE_NO_ZERO_DATE() && SQL_MODE_STRICT())) { if (tm->tm_mday < 0 || tm->tm_mday > 31) return DTERR_MD_FIELD_OVERFLOW; } else if(tm->tm_mday < 1 || tm->tm_mday > 31) @@ -2315,7 +2326,16 @@ static int ValidateDate(unsigned int fmask, bool isjulian, bool is2digits, bool return DTERR_MD_FIELD_OVERFLOW; } - if ((fmask & DTK_DATE_M) == DTK_DATE_M) { +#ifdef DOLPHIN + if ((date_flag & (ENABLE_ZERO_DAY | ENABLE_ZERO_MONTH)) == 0 && (fmask & (DTK_M(DAY) | DTK_M(MONTH) | DTK_M(YEAR)))) { + int zero_cnt = (tm->tm_mon == 0) + (tm->tm_mday == 0) + (tm->tm_year == 0); + if (zero_cnt > 1 && zero_cnt < 3) { + return DTERR_FIELD_OVERFLOW; + } + } +#endif + + if ((fmask & DTK_DATE_M) == DTK_DATE_M && (tm->tm_mon && tm->tm_year && tm->tm_mday)) { /* * Check for valid day of month, now that we know for sure the month * and year. Note we don't use MD_FIELD_OVERFLOW here, since it seems @@ -3555,7 +3575,7 @@ void EncodeDateOnlyForBDatabase(struct pg_tm* tm, int style, char* str) { errno_t rc; #ifdef DOLPHIN - if (date_flag & ENABLE_ZERO_MONTH) { + if (date_flag & ENABLE_ZERO_MONTH || (!SQL_MODE_NO_ZERO_DATE() && SQL_MODE_STRICT())) { Assert(tm->tm_mon >= 0 && tm->tm_mon <= MONTHS_PER_YEAR); } else { Assert(tm->tm_mon >= 1 && tm->tm_mon <= MONTHS_PER_YEAR); @@ -3686,7 +3706,21 @@ void EncodeDateTimeForBDatabase(struct pg_tm* tm, fsec_t fsec, bool print_tz, in { int day; errno_t rc = EOK; +#ifdef DOLPHIN + if (!SQL_MODE_NO_ZERO_DATE() && SQL_MODE_STRICT()) { + Assert(tm->tm_mon >= 0 && tm->tm_mon <= MONTHS_PER_YEAR); + } else { + Assert(tm->tm_mon >= 1 && tm->tm_mon <= MONTHS_PER_YEAR); + } +#else Assert(tm->tm_mon >= 1 && tm->tm_mon <= MONTHS_PER_YEAR); +#endif + +#ifdef DOLPHIN + if (style == USE_POSTGRES_DATES && tm->tm_year == 0 && tm->tm_mon == 0 && tm->tm_mday == 0) { + style = USE_ISO_DATES; + } +#endif /* * Negative tm_isdst means we have no valid time zone translation. diff --git a/contrib/dolphin/plugin_utils/adt/timestamp.cpp b/contrib/dolphin/plugin_utils/adt/timestamp.cpp index 59b2f8f52109fd7a57e029c4246bfdda2a5eb0cc..07a24669f0465f683de996da0ec7b081c15f156a 100644 --- a/contrib/dolphin/plugin_utils/adt/timestamp.cpp +++ b/contrib/dolphin/plugin_utils/adt/timestamp.cpp @@ -2291,10 +2291,14 @@ recalc_t: utime = (pg_time_t)dt; if ((Timestamp)utime == dt) { struct pg_tm* tx = pg_localtime(&utime, attimezone ? attimezone : session_timezone); - - tm->tm_year = tx->tm_year + 1900; - tm->tm_mon = tx->tm_mon + 1; - tm->tm_mday = tx->tm_mday; +#ifdef DOLPHIN + if (tm->tm_year || tm->tm_mon || tm->tm_mday) +#endif + { + tm->tm_year = tx->tm_year + 1900; + tm->tm_mon = tx->tm_mon + 1; + tm->tm_mday = tx->tm_mday; + } tm->tm_hour = tx->tm_hour; tm->tm_min = tx->tm_min; tm->tm_sec = tx->tm_sec; diff --git a/contrib/dolphin/sql/b_compatibility_time_type.sql b/contrib/dolphin/sql/b_compatibility_time_type.sql index ddac24715a0995c9a28024cbfeb024f82588d35a..125526bc66e6823f9552f5bf720397f45d7c62c8 100644 --- a/contrib/dolphin/sql/b_compatibility_time_type.sql +++ b/contrib/dolphin/sql/b_compatibility_time_type.sql @@ -521,8 +521,8 @@ SELECT * FROM ti_hash PARTITION(P2); DROP TABLE ti_hash; -- test cast function -select cast(-232323.555 as time); -select cast('20121010101010.555' as datetime); +SELECT cast(-232323.555 as time); +SELECT cast('20121010101010.555' as datetime); -- test time type operations select ('2001-10-10 11:11:59.123456'::time(6) + 1); @@ -539,6 +539,47 @@ INSERT INTO time_tbl VALUES('20220-01-01'); select * from time_tbl; DROP TABLE time_tbl; +-- test sql_mode NO_ZERO_DATE +CREATE TABLE t_NO_ZERO_DATE_date(v date); +CREATE TABLE t_NO_ZERO_DATE_datetime(v datetime); +CREATE TABLE t_NO_ZERO_DATE_timestamp(v timestamp); + +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-00-00'); +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-00-01'); +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-01-00'); +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('2000-00-00'); +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-00-00 10:01'); +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-00-01 10:01'); +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-01-00 10:01'); +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('2000-00-00 10:01'); +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-00-00 10:01'); +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-00-01 10:01'); +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-01-00 10:01'); +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('2000-00-00 10:01'); + +SET dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group'; +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-00-00'); +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-00-01'); +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('0000-01-00'); +INSERT INTO t_NO_ZERO_DATE_date(v) VALUES('2000-00-00'); +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-00-00 10:01'); +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-00-01 10:01'); +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('0000-01-00 10:01'); +INSERT INTO t_NO_ZERO_DATE_datetime(v) VALUES('2000-00-00 10:01'); +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-00-00 10:01'); +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-00-01 10:01'); +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('0000-01-00 10:01'); +INSERT INTO t_NO_ZERO_DATE_timestamp(v) VALUES('2000-00-00 10:01'); + +SELECT * FROM t_NO_ZERO_DATE_date; +SELECT * FROM t_NO_ZERO_DATE_datetime; +SELECT * FROM t_NO_ZERO_DATE_timestamp; + +DROP TABLE t_NO_ZERO_DATE_date; +DROP TABLE t_NO_ZERO_DATE_datetime; +DROP TABLE t_NO_ZERO_DATE_timestamp; +RESET dolphin.sql_mode; + \c postgres DROP DATABASE b_time_type; DROP TABLESPACE b_time_type_example; \ No newline at end of file diff --git a/contrib/dolphin/sql/db_b_date_time_functions2.sql b/contrib/dolphin/sql/db_b_date_time_functions2.sql index 12c4de0bd3ee47b9b282b0387e09ddc8f6b8f19f..c6e398298dce69442b3d21116f7b79118088e4cb 100644 --- a/contrib/dolphin/sql/db_b_date_time_functions2.sql +++ b/contrib/dolphin/sql/db_b_date_time_functions2.sql @@ -38,7 +38,7 @@ insert into test values('dayname(20211112235959.9999999)', dayname(2021111223595 insert into test values('dayname(null)', dayname(null)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('dayname(''10000-1-1'')', dayname('10000-1-1')); insert into test values('dayname(''9999-12-31 23:59:59.9999995'')', dayname('9999-12-31 23:59:59.9999995')); insert into test values('dayname(-1)', dayname(-1)); @@ -48,7 +48,7 @@ insert into test values('dayname(99991231235959.9999995)', dayname(9999123123595 insert into test values('dayname(9999999999999999999999)', dayname(9999999999999999999999)); -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('dayname(''10000-1-1'')', dayname('10000-1-1')); insert into test values('dayname(''9999-12-31 23:59:59.9999995'')', dayname('9999-12-31 23:59:59.9999995')); insert into test values('dayname(-1)', dayname(-1)); @@ -97,7 +97,7 @@ insert into test values('monthname(20210001)', monthname(20210001)); insert into test values('monthname(0)', monthname(0)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('monthname(''10000-1-1'')', monthname('10000-1-1')); insert into test values('monthname(''9999-12-31 23:59:59.9999995'')', monthname('9999-12-31 23:59:59.9999995')); insert into test values('monthname(-1)', monthname(-1)); @@ -106,7 +106,7 @@ insert into test values('monthname(99991231235959.9999995)', monthname(999912312 insert into test values('monthname(9999999999999999999999)', monthname(9999999999999999999999)); -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('monthname(''10000-1-1'')', monthname('10000-1-1')); insert into test values('monthname(''9999-12-31 23:59:59.9999995'')', monthname('9999-12-31 23:59:59.9999995')); insert into test values('monthname(-1)', monthname(-1)); @@ -159,7 +159,7 @@ insert into test values('time_to_sec(8385959)', time_to_sec(8385959)); insert into test values('time_to_sec(null)', time_to_sec(null)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值边界值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('time_to_sec(''00:00:60'')', time_to_sec('00:00:60')); insert into test values('time_to_sec(''00:60:00'')', time_to_sec('00:60:00')); insert into test values('time_to_sec(''838:59:59.1'')', time_to_sec('838:59:59.1')); @@ -172,7 +172,7 @@ insert into test values('time_to_sec(''34 23:00:00'')', time_to_sec('34 23:00:00 insert into test values('time_to_sec(''-34 23:00:00'')', time_to_sec('-34 23:00:00')); -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('time_to_sec(''00:00:60'')', time_to_sec('00:00:60')); insert into test values('time_to_sec(''00:60:00'')', time_to_sec('00:60:00')); insert into test values('time_to_sec(''838:59:59.1'')', time_to_sec('838:59:59.1')); @@ -225,7 +225,7 @@ insert into test values('month(20210000)', month(20210000)); insert into test values('month(0)', month(0)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('month(''10000-1-1'')', month('10000-1-1')); insert into test values('month(''9999-12-31 23:59:59.9999995'')', month('9999-12-31 23:59:59.9999995')); insert into test values('month(-1)', month(-1)); @@ -234,7 +234,7 @@ insert into test values('month(99991231235959.9999995)', month(99991231235959.99 insert into test values('month(9999999999999999999999)', month(9999999999999999999999)); -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('month(''10000-1-1'')', month('10000-1-1')); insert into test values('month(''9999-12-31 23:59:59.9999995'')', month('9999-12-31 23:59:59.9999995')); insert into test values('month(-1)', month(-1)); @@ -279,7 +279,7 @@ insert into test values('last_day(''2021-01-00'')', last_day('2021-01-00')); insert into test values('last_day(20210100)', last_day(20210100)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('last_day(''2021-00-01'')', last_day('2021-00-01')); insert into test values('last_day(20210001)', last_day(20210001)); insert into test values('last_day(''0000-1-1 23:59:59.9999995'')', last_day('0000-1-1 23:59:59.9999995')); @@ -293,7 +293,7 @@ insert into test values('last_day(99991231235959.9999995)', last_day(99991231235 insert into test values('last_day(9999999999999999999999)', last_day(9999999999999999999999)); -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('last_day(''2021-00-01'')', last_day('2021-00-01')); insert into test values('last_day(20210001)', last_day(20210001)); insert into test values('last_day(''0000-1-1 23:59:59.9999995'')', last_day('0000-1-1 23:59:59.9999995')); @@ -340,7 +340,7 @@ insert into test values('date(20210100)', date(20210100)); insert into test values('date(20210100)', date(20210100)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('date(''10000-1-1'')', date('10000-1-1')); insert into test values('date(''9999-12-31 23:59:59.9999995'')', date('9999-12-31 23:59:59.9999995')); insert into test values('date(-1)', date(-1)); @@ -349,7 +349,7 @@ insert into test values('date(99991231235959.9999995)', date(99991231235959.9999 insert into test values('date(9999999999999999999999)', date(9999999999999999999999)); -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('date(''10000-1-1'')', date('10000-1-1')); insert into test values('date(''9999-12-31 23:59:59.9999995'')', date('9999-12-31 23:59:59.9999995')); insert into test values('date(-1)', date(-1)); @@ -390,7 +390,7 @@ insert into test values('day(20210000)', day(20210000)); insert into test values('day(0)', day(0)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('day(''10000-1-1'')', day('10000-1-1')); insert into test values('day(''9999-12-31 23:59:59.9999995'')', day('9999-12-31 23:59:59.9999995')); insert into test values('day(-1)', day(-1)); @@ -399,7 +399,7 @@ insert into test values('day(99991231235959.9999995)', day(99991231235959.999999 insert into test values('day(9999999999999999999999)', day(9999999999999999999999)); -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('day(''10000-1-1'')', day('10000-1-1')); insert into test values('day(''9999-12-31 23:59:59.9999995'')', day('9999-12-31 23:59:59.9999995')); insert into test values('day(-1)', day(-1)); @@ -463,7 +463,7 @@ insert into test values('week(20211112235959.9999999)', week(20211112235959.9999 insert into test values('week(null)', week(null)); -- 单参数-非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('week(''10000-1-1'')', week('10000-1-1')); insert into test values('week(''9999-12-31 23:59:59.9999995'')', week('9999-12-31 23:59:59.9999995')); insert into test values('week(0)', week(0)); @@ -475,7 +475,7 @@ insert into test values('week(''0000-1-1 23:59:59.9999995'')', week('0000-1-1 23 insert into test values('week(''0000-12-31 22:59:59.9999995'')', week('0000-12-31 22:59:59.9999995')); -- 单参数-严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('week(''10000-1-1'')', week('10000-1-1')); insert into test values('week(''9999-12-31 23:59:59.9999995'')', week('9999-12-31 23:59:59.9999995')); insert into test values('week(0)', week(0)); @@ -502,7 +502,7 @@ insert into test values('week(''2000-1-1'', null)', week('2000-1-1', null)); insert into test values('week(null, null)', week(null, null)); -- 双参数-非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('week(''10000-1-1'', 0)', week('10000-1-1', 0)); insert into test values('week(''9999-12-31 23:59:59.9999995'', 0)', week('9999-12-31 23:59:59.9999995', 0)); insert into test values('week(0, 0)', week(0, 0)); @@ -514,7 +514,7 @@ insert into test values('week(''0000-1-1 23:59:59.9999995'', 0)', week('0000-1-1 insert into test values('week(''0000-12-31 22:59:59.9999995'', 0)', week('0000-12-31 22:59:59.9999995', 0)); -- 双参数-严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('week(''10000-1-1'', 0)', week('10000-1-1', 0)); insert into test values('week(''9999-12-31 23:59:59.9999995'', 0)', week('9999-12-31 23:59:59.9999995', 0)); insert into test values('week(0, 0)', week(0, 0)); @@ -547,7 +547,7 @@ insert into test values('yearweek(20211112235959.9999999)', yearweek(20211112235 insert into test values('yearweek(null)', yearweek(null)); -- 单参数-非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('yearweek(''10000-1-1'')', yearweek('10000-1-1')); insert into test values('yearweek(''9999-12-31 23:59:59.9999995'')', yearweek('9999-12-31 23:59:59.9999995')); insert into test values('yearweek(0)', yearweek(0)); @@ -559,7 +559,7 @@ insert into test values('yearweek(''0000-1-1 23:59:59.9999995'')', yearweek('000 insert into test values('yearweek(''0000-12-31 22:59:59.9999995'')', yearweek('0000-12-31 22:59:59.9999995')); -- 单参数-严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('yearweek(''10000-1-1'')', yearweek('10000-1-1')); insert into test values('yearweek(''9999-12-31 23:59:59.9999995'')', yearweek('9999-12-31 23:59:59.9999995')); insert into test values('yearweek(0)', yearweek(0)); @@ -586,7 +586,7 @@ insert into test values('yearweek(''2000-1-1'', null)', yearweek('2000-1-1', nul insert into test values('yearweek(null, null)', yearweek(null, null)); -- 双参数-非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('yearweek(''10000-1-1'', 0)', yearweek('10000-1-1', 0)); insert into test values('yearweek(''9999-12-31 23:59:59.9999995'', 0)', yearweek('9999-12-31 23:59:59.9999995', 0)); insert into test values('yearweek(0, 0)', yearweek(0, 0)); @@ -598,7 +598,7 @@ insert into test values('yearweek(''0000-1-1 23:59:59.9999995'', 0)', yearweek(' insert into test values('yearweek(''0000-12-31 22:59:59.9999995'', 0)', yearweek('0000-12-31 22:59:59.9999995', 0)); -- 双参数-严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('yearweek(''10000-1-1'', 0)', yearweek('10000-1-1', 0)); insert into test values('yearweek(''9999-12-31 23:59:59.9999995'', 0)', yearweek('9999-12-31 23:59:59.9999995', 0)); insert into test values('yearweek(0, 0)', yearweek(0, 0)); diff --git a/contrib/dolphin/sql/db_b_date_time_functions3.sql b/contrib/dolphin/sql/db_b_date_time_functions3.sql index 1e675391954a474b914cb3df7c18f9febc94ed59..858b88750a72468b85f6141c38cacb986ed55420 100644 --- a/contrib/dolphin/sql/db_b_date_time_functions3.sql +++ b/contrib/dolphin/sql/db_b_date_time_functions3.sql @@ -31,14 +31,14 @@ insert into test values('datediff(''2021-11-12'', null)', datediff('2021-11-12', insert into test values('datediff(null, null)', datediff(null, null)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('datediff(''10000-01-01'', ''2021-11-12'')', datediff('10000-01-01', '2021-11-12')); insert into test values('datediff(100000101, 20211112)', datediff(100000101, 20211112)); insert into test values('datediff(99991231235959.9999995, 20211112)', datediff(99991231235959.9999995, 20211112)); insert into test values('datediff(9999999999999999999999, 20211112)', datediff(9999999999999999999999, 20211112)); -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('datediff(''10000-01-01'', ''2021-11-12'')', datediff('10000-01-01', '2021-11-12')); insert into test values('datediff(100000101, 20211112)', datediff(100000101, 20211112)); insert into test values('datediff(99991231235959.9999995, 20211112)', datediff(99991231235959.9999995, 20211112)); @@ -113,13 +113,13 @@ insert into test values('timestampdiff(week, ''9999-12-31'', null)', timestampdi insert into test values('timestampdiff(week, null, null)', timestampdiff(week, null, null)); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('timestampdiff(microsecond, ''abc'', ''2021-11-12'')', timestampdiff(microsecond, 'abc', '2021-11-12')); insert into test values('timestampdiff(microsecond, ''2021-11-12'', ''10000-1-1'')', timestampdiff(microsecond, '2021-11-12', '10000-1-1')); insert into test values('timestampdiff(microsecond, ''10000-1-1'', ''2021-11-12'')', timestampdiff(microsecond, '10000-1-1', '2021-11-12')); -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('timestampdiff(microsecond, ''abc'', ''2021-11-12'')', timestampdiff(microsecond, 'abc', '2021-11-12')); insert into test values('timestampdiff(microsecond, ''2021-11-12'', ''10000-1-1'')', timestampdiff(microsecond, '2021-11-12', '10000-1-1')); insert into test values('timestampdiff(microsecond, ''10000-1-1'', ''2021-11-12'')', timestampdiff(microsecond, '10000-1-1', '2021-11-12')); @@ -168,11 +168,11 @@ insert into test values('convert_tz(''2021-11-12 12:12:12'', ''+1:00'', ''abc'') insert into test values('convert_tz(''2021-11-12 12:12:12'', ''+13:01'', ''+0:00'')', convert_tz('2021-11-12 12:12:12', '+13:01', '+0:00')); insert into test values('convert_tz(''2021-11-12 12:12:12'', ''+0:00'', ''-13:00'')', convert_tz('2021-11-12 12:12:12', '+0:00', '-13:00')); -- 非严格模式,参数不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('convert_tz(''10000-1-1 10:10:10'', ''+1:00'', ''+0:00'')', convert_tz('10000-1-1 10:10:10', '+1:00', '+0:00')); -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('convert_tz(''10000-1-1 10:10:10'', ''+1:00'', ''+0:00'')', convert_tz('10000-1-1 10:10:10', '+1:00', '+0:00')); @@ -233,7 +233,7 @@ insert into test values('adddate(''2021-11-12'', null)', adddate('2021-11-12', n insert into test values('adddate(null, null)', adddate(null, null)); -- 非严格模式,参数或者结果不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('adddate(0, INTERVAL 100 second)', adddate(0, INTERVAL 100 second)); insert into test values('adddate(''10000-1-1'', INTERVAL -1 day)', adddate('10000-1-1', INTERVAL -1 day)); insert into test values('adddate(''9999-12-31'', INTERVAL 1 day)', adddate('9999-12-31', INTERVAL 1 day)); @@ -249,7 +249,7 @@ insert into test values('adddate(''0001-1-1'', INTERVAL -1 day)', adddate('0001- insert into test values('adddate(''0001-1-1 00:00:00'', INTERVAL -1 second)', adddate('0001-1-1', INTERVAL -1 second)); -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('adddate(0, INTERVAL 100 second)', adddate(0, INTERVAL 100 second)); insert into test values('adddate(''10000-1-1'', INTERVAL -1 day)', adddate('10000-1-1', INTERVAL -1 day)); insert into test values('adddate(''9999-12-31'', INTERVAL 1 day)', adddate('9999-12-31', INTERVAL 1 day)); @@ -314,7 +314,7 @@ insert into test values('date_add(101, INTERVAL 100 second)', date_add(101, INTE insert into test values('date_add(null, INTERVAL 1 day)', date_add(null, INTERVAL 1 day)); -- 非严格模式,参数或者结果不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('date_add(0, INTERVAL 100 second)', date_add(0, INTERVAL 100 second)); insert into test values('date_add(''10000-1-1'', INTERVAL -1 day)', date_add('10000-1-1', INTERVAL -1 day)); insert into test values('date_add(''9999-12-31'', INTERVAL 1 day)', date_add('9999-12-31', INTERVAL 1 day)); @@ -330,7 +330,7 @@ insert into test values('date_add(''0001-1-1'', INTERVAL -1 day)', date_add('000 insert into test values('date_add(''0001-1-1 00:00:00'', INTERVAL -1 second)', date_add('0001-1-1', INTERVAL -1 second)); -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('date_add(0, INTERVAL 100 second)', date_add(0, INTERVAL 100 second)); insert into test values('date_add(''10000-1-1'', INTERVAL -1 day)', date_add('10000-1-1', INTERVAL -1 day)); insert into test values('date_add(''9999-12-31'', INTERVAL 1 day)', date_add('9999-12-31', INTERVAL 1 day)); @@ -396,7 +396,7 @@ insert into test values('date_sub(101, INTERVAL 100 second)', date_sub(101, INTE insert into test values('date_sub(null, INTERVAL 1 day)', date_sub(null, INTERVAL 1 day)); -- 非严格模式,参数或者结果不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('date_sub(0, INTERVAL 100 second)', date_sub(0, INTERVAL 100 second)); insert into test values('date_sub(''10000-1-1'', INTERVAL 1 day)', date_sub('10000-1-1', INTERVAL 1 day)); insert into test values('date_sub(''9999-12-31'', INTERVAL -1 day)', date_sub('9999-12-31', INTERVAL -1 day)); @@ -412,7 +412,7 @@ insert into test values('date_sub(''0001-1-1'', INTERVAL 1 day)', date_sub('0001 insert into test values('date_sub(''0001-1-1 00:00:00'', INTERVAL 1 second)', date_sub('0001-1-1 00:00:00', INTERVAL 1 second)); -- 严格模式,参数不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('date_sub(0, INTERVAL 100 second)', date_sub(0, INTERVAL 100 second)); insert into test values('date_sub(''10000-1-1'', INTERVAL 1 day)', date_sub('10000-1-1', INTERVAL 1 day)); insert into test values('date_sub(''9999-12-31'', INTERVAL -1 day)', date_sub('9999-12-31', INTERVAL -1 day)); @@ -455,7 +455,7 @@ insert into test values('addtime(''12:12:12'', ''2021-11-12 12:12:12'')', addtim insert into test values('addtime(''0001-1-1 00:00:00'', ''-00:00:01'')', addtime('0001-1-1 00:00:00', '-00:00:01')); -- 非严格模式,参数或者结果不合法,报warning,返回NULL或者对应值 -set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('addtime(''839:00:00'', ''00:00:00'')', addtime('839:00:00', '00:00:00')); insert into test values('addtime(''838:59:59'', ''00:00:01'')', addtime('838:59:59', '00:00:01')); insert into test values('addtime(''838:59:59.1'', ''00:00:00'')', addtime('838:59:59.1', '00:00:00')); @@ -466,7 +466,7 @@ insert into test values('addtime(''9999-12-31 23:59:59'', ''00:00:01'')', addtim insert into test values('addtime(''10000-1-1 00:00:00'', ''00:00:00'')', addtime('10000-1-1 00:00:00', '00:00:00')); -- 严格模式,参数或结果不合法,抛出错误 -set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes'; +set dolphin.sql_mode = 'sql_mode_strict,sql_mode_full_group,pipes_as_concat,ansi_quotes,no_zero_date'; insert into test values('addtime(''839:00:00'', ''00:00:00'')', addtime('839:00:00', '00:00:00')); insert into test values('addtime(''838:59:59'', ''00:00:01'')', addtime('838:59:59', '00:00:01')); insert into test values('addtime(''838:59:59.1'', ''00:00:00'')', addtime('838:59:59.1', '00:00:00'));