Changeset: 7766259b9ca7 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7766259b9ca7 Modified Files: monetdb5/modules/atoms/mtime.c sql/common/sql_types.c sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.out sql/test/BugTracker-2016/Tests/date_calculation_and_comparison_wrong_results.Bug-3940.stable.out sql/test/BugTracker-2017/Tests/date-arithmetic.Bug-6415.stable.out sql/test/pg_regress/Tests/date.stable.out sql/test/sys-schema/Tests/systemfunctions.stable.out sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 Branch: typing Log Message:
Added missing functions for the new day interval type. Also I finally fixed the diff function for dates. As the day interval is the number of milliseconds on the backend, it has to multiply to the number of milliseconds on a day diffs (truncated from 361 to 300 lines): diff --git a/monetdb5/modules/atoms/mtime.c b/monetdb5/modules/atoms/mtime.c --- a/monetdb5/modules/atoms/mtime.c +++ b/monetdb5/modules/atoms/mtime.c @@ -304,7 +304,7 @@ static inline lng date_diff_imp(const date d1, const date d2) { int diff = date_diff(d1, d2); - return is_int_nil(diff) ? lng_nil : (lng) diff; + return is_int_nil(diff) ? lng_nil : (lng) diff * (lng) (24*60*60*1000); } func2(MTIMEdate_diff, MTIMEdate_diff_bulk, "diff", date, date, lng, date_diff_imp, func2_noexcept, \ DEC_VAR_R, DEC_VAR_R, DEC_VAR_R, DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, INIT_VAR, GET_NEXT_VAR, GET_NEXT_VAR, APPEND_VAR) diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c --- a/sql/common/sql_types.c +++ b/sql/common/sql_types.c @@ -1725,20 +1725,26 @@ sqltypeinit( sql_allocator *sa) sql_create_func(sa, "sql_sub", "mtime", "diff", FALSE, FALSE, SCALE_NONE, 0, SECINT, 2, TMESTAMPTZ, TMESTAMPTZ); sql_create_func(sa, "sql_sub", "mtime", "diff", FALSE, FALSE, SCALE_FIX, 0, SECINT, 2, TMESTAMP, TMESTAMP); + sql_create_func(sa, "sql_sub", "mtime", "date_sub_msec_interval", FALSE, FALSE, SCALE_NONE, 0, DTE, 2, DTE, SECINT); sql_create_func(sa, "sql_sub", "mtime", "date_sub_msec_interval", FALSE, FALSE, SCALE_NONE, 0, DTE, 2, DTE, DAYINT); sql_create_func(sa, "sql_sub", "mtime", "date_sub_month_interval", FALSE, FALSE, SCALE_NONE, 0, DTE, 2, DTE, MONINT); sql_create_func(sa, "sql_sub", "mtime", "time_sub_msec_interval", FALSE, FALSE, SCALE_NONE, 0, TME, 2, TME, SECINT); sql_create_func(sa, "sql_sub", "mtime", "time_sub_msec_interval", FALSE, FALSE, SCALE_NONE, 0, TMETZ, 2, TMETZ, SECINT); sql_create_func(sa, "sql_sub", "mtime", "timestamp_sub_msec_interval", FALSE, FALSE, SCALE_NONE, 0, TMESTAMP, 2, TMESTAMP, SECINT); + sql_create_func(sa, "sql_sub", "mtime", "timestamp_sub_msec_interval", FALSE, FALSE, SCALE_NONE, 0, TMESTAMP, 2, TMESTAMP, DAYINT); sql_create_func(sa, "sql_sub", "mtime", "timestamp_sub_month_interval", FALSE, FALSE, SCALE_NONE, 0, TMESTAMP, 2, TMESTAMP, MONINT); sql_create_func(sa, "sql_sub", "mtime", "timestamp_sub_msec_interval", FALSE, FALSE, SCALE_NONE, 0, TMESTAMPTZ, 2, TMESTAMPTZ, SECINT); + sql_create_func(sa, "sql_sub", "mtime", "timestamp_sub_msec_interval", FALSE, FALSE, SCALE_NONE, 0, TMESTAMPTZ, 2, TMESTAMPTZ, DAYINT); sql_create_func(sa, "sql_sub", "mtime", "timestamp_sub_month_interval", FALSE, FALSE, SCALE_NONE, 0, TMESTAMPTZ, 2, TMESTAMPTZ, MONINT); + sql_create_func(sa, "sql_add", "mtime", "date_add_msec_interval", FALSE, FALSE, SCALE_NONE, 0, DTE, 2, DTE, SECINT); sql_create_func(sa, "sql_add", "mtime", "date_add_msec_interval", FALSE, FALSE, SCALE_NONE, 0, DTE, 2, DTE, DAYINT); sql_create_func(sa, "sql_add", "mtime", "addmonths", FALSE, FALSE, SCALE_NONE, 0, DTE, 2, DTE, MONINT); sql_create_func(sa, "sql_add", "mtime", "timestamp_add_msec_interval", FALSE, FALSE, SCALE_NONE, 0, TMESTAMP, 2, TMESTAMP, SECINT); + sql_create_func(sa, "sql_add", "mtime", "timestamp_add_msec_interval", FALSE, FALSE, SCALE_NONE, 0, TMESTAMP, 2, TMESTAMP, DAYINT); sql_create_func(sa, "sql_add", "mtime", "timestamp_add_month_interval", FALSE, FALSE, SCALE_NONE, 0, TMESTAMP, 2, TMESTAMP, MONINT); sql_create_func(sa, "sql_add", "mtime", "timestamp_add_msec_interval", FALSE, FALSE, SCALE_NONE, 0, TMESTAMPTZ, 2, TMESTAMPTZ, SECINT); + sql_create_func(sa, "sql_add", "mtime", "timestamp_add_msec_interval", FALSE, FALSE, SCALE_NONE, 0, TMESTAMPTZ, 2, TMESTAMPTZ, DAYINT); sql_create_func(sa, "sql_add", "mtime", "timestamp_add_month_interval", FALSE, FALSE, SCALE_NONE, 0, TMESTAMPTZ, 2, TMESTAMPTZ, MONINT); sql_create_func(sa, "sql_add", "mtime", "time_add_msec_interval", FALSE, FALSE, SCALE_NONE, 0, TME, 2, TME, SECINT); sql_create_func(sa, "sql_add", "mtime", "time_add_msec_interval", FALSE, FALSE, SCALE_NONE, 0, TMETZ, 2, TMETZ, SECINT); @@ -1787,7 +1793,6 @@ sqltypeinit( sql_allocator *sa) sql_create_func(sa, "year", "mtime", "year", FALSE, FALSE, SCALE_NONE, 0, INT, 1, MONINT); sql_create_func(sa, "month", "mtime", "month", FALSE, FALSE, SCALE_NONE, 0, INT, 1, MONINT); sql_create_func(sa, "day", "mtime", "day", FALSE, FALSE, SCALE_NONE, 0, LNG, 1, DAYINT); - sql_create_func(sa, "day", "mtime", "day", FALSE, FALSE, SCALE_NONE, 0, LNG, 1, SECINT); sql_create_func(sa, "hour", "mtime", "hours", FALSE, FALSE, SCALE_NONE, 0, INT, 1, SECINT); sql_create_func(sa, "minute", "mtime", "minutes", FALSE, FALSE, SCALE_NONE, 0, INT, 1, SECINT); sql_create_func(sa, "second", "mtime", "seconds", FALSE, FALSE, SCALE_NONE, 0, INT, 1, SECINT); diff --git a/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.out b/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.out --- a/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.out +++ b/sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.out @@ -23,6 +23,12 @@ stdout of test 'timestamp_convert.Bug-38 % sec_interval # type % 5 # length [ 1.000 ] +#SELECT date '2015-03-01' - (date '2015-02-01' - date '2015-01-01'); +% .%2 # table_name +% %2 # name +% date # type +% 10 # length +[ 2015-01-29 ] # 19:04:38 > # 19:04:38 > "Done." diff --git a/sql/test/BugTracker-2016/Tests/date_calculation_and_comparison_wrong_results.Bug-3940.stable.out b/sql/test/BugTracker-2016/Tests/date_calculation_and_comparison_wrong_results.Bug-3940.stable.out --- a/sql/test/BugTracker-2016/Tests/date_calculation_and_comparison_wrong_results.Bug-3940.stable.out +++ b/sql/test/BugTracker-2016/Tests/date_calculation_and_comparison_wrong_results.Bug-3940.stable.out @@ -67,14 +67,14 @@ stdout of test 'date_calculation_and_com [ 1 ] #INSERT INTO foo VALUES ('2016-01-01', '2016-01-31'); [ 1 ] -#SELECT (dat2-dat1), (dat2-dat1) < 10 FROM foo; -% sys., sys. # table_name +#SELECT (dat2-dat1), (dat2-dat1) < interval '10' day FROM foo; +% sys.%1, sys.%2 # table_name % %1, %2 # name % day_interval, boolean # type -% 5, 5 # length -[ 0.001, true ] +% 11, 5 # length +[ 86400.000, true ] [ 0.000, true ] -[ 0.030, true ] +[ 2592000.000, false ] #DROP TABLE foo; # 23:40:42 > diff --git a/sql/test/BugTracker-2017/Tests/date-arithmetic.Bug-6415.stable.out b/sql/test/BugTracker-2017/Tests/date-arithmetic.Bug-6415.stable.out --- a/sql/test/BugTracker-2017/Tests/date-arithmetic.Bug-6415.stable.out +++ b/sql/test/BugTracker-2017/Tests/date-arithmetic.Bug-6415.stable.out @@ -9,8 +9,8 @@ stdout of test 'date-arithmetic.Bug-6415 % .%2, .%3 # table_name % %2, %3 # name % day_interval, day_interval # type -% 5, 5 # length -[ 0.009, 0.009 ] +% 10, 10 # length +[ 777600.000, 777600.000 ] #select cast('2017-10-01' as date) + interval '9' day, date '2017-10-01' + interval '9' day; % .%2, .%3 # table_name % %2, %3 # name diff --git a/sql/test/pg_regress/Tests/date.stable.out b/sql/test/pg_regress/Tests/date.stable.out --- a/sql/test/pg_regress/Tests/date.stable.out +++ b/sql/test/pg_regress/Tests/date.stable.out @@ -674,43 +674,43 @@ stdout of test 'date` in directory 'sql/ % sys.date_tbl, sys.%1 # table_name % f1, %1 # name % date, day_interval # type -% 10, 7 # length -[ 1957-04-09, -16.318 ] -[ 1957-06-13, -16.253 ] -[ 1996-02-28, -2.114 ] -[ 1996-02-29, -2.113 ] -[ 1996-03-01, -2.112 ] -[ 1996-03-02, -2.111 ] -[ 1997-02-28, -1.748 ] -[ 1997-03-01, -1.747 ] -[ 1997-03-02, -1.746 ] -[ 2000-04-01, -0.620 ] -[ 2000-04-02, -0.619 ] -[ 2000-04-03, -0.618 ] -[ 2038-04-08, 13.266 ] -[ 2039-04-09, 13.632 ] -[ 2040-04-10, 13.999 ] +% 10, 15 # length +[ 1957-04-09, -1409875200.000 ] +[ 1957-06-13, -1404259200.000 ] +[ 1996-02-28, -182649600.000 ] +[ 1996-02-29, -182563200.000 ] +[ 1996-03-01, -182476800.000 ] +[ 1996-03-02, -182390400.000 ] +[ 1997-02-28, -151027200.000 ] +[ 1997-03-01, -150940800.000 ] +[ 1997-03-02, -150854400.000 ] +[ 2000-04-01, -53568000.000 ] +[ 2000-04-02, -53481600.000 ] +[ 2000-04-03, -53395200.000 ] +[ 2038-04-08, 1146182400.000 ] +[ 2039-04-09, 1177804800.000 ] +[ 2040-04-10, 1209513600.000 ] [ NULL, NULL ] #SELECT f1, sql_sub(cast('2001-12-12' as date), f1) FROM DATE_TBL; % sys.date_tbl, .%1 # table_name % f1, %1 # name % date, day_interval # type -% 10, 7 # length -[ 1957-04-09, 16.318 ] -[ 1957-06-13, 16.253 ] -[ 1996-02-28, 2.114 ] -[ 1996-02-29, 2.113 ] -[ 1996-03-01, 2.112 ] -[ 1996-03-02, 2.111 ] -[ 1997-02-28, 1.748 ] -[ 1997-03-01, 1.747 ] -[ 1997-03-02, 1.746 ] -[ 2000-04-01, 0.620 ] -[ 2000-04-02, 0.619 ] -[ 2000-04-03, 0.618 ] -[ 2038-04-08, -13.266 ] -[ 2039-04-09, -13.632 ] -[ 2040-04-10, -13.999 ] +% 10, 15 # length +[ 1957-04-09, 1409875200.000 ] +[ 1957-06-13, 1404259200.000 ] +[ 1996-02-28, 182649600.000 ] +[ 1996-02-29, 182563200.000 ] +[ 1996-03-01, 182476800.000 ] +[ 1996-03-02, 182390400.000 ] +[ 1997-02-28, 151027200.000 ] +[ 1997-03-01, 150940800.000 ] +[ 1997-03-02, 150854400.000 ] +[ 2000-04-01, 53568000.000 ] +[ 2000-04-02, 53481600.000 ] +[ 2000-04-03, 53395200.000 ] +[ 2038-04-08, -1146182400.000 ] +[ 2039-04-09, -1177804800.000 ] +[ 2040-04-10, -1209513600.000 ] [ NULL, NULL ] #SELECT date 'January 8, 1999'; % .%2 # table_name @@ -1058,22 +1058,22 @@ stdout of test 'date` in directory 'sql/ % sys. # table_name % "Days From 2K" # name % day_interval # type -% 7 # length -[ -15.607 ] -[ -15.542 ] -[ -1.403 ] -[ -1.402 ] -[ -1.401 ] -[ -1.400 ] -[ -1.037 ] -[ -1.036 ] -[ -1.035 ] -[ 0.091 ] -[ 0.092 ] -[ 0.093 ] -[ 13.977 ] -[ 14.343 ] -[ 14.710 ] +% 15 # length +[ -1348444800.000 ] +[ -1342828800.000 ] +[ -121219200.000 ] +[ -121132800.000 ] +[ -121046400.000 ] +[ -120960000.000 ] +[ -89596800.000 ] +[ -89510400.000 ] +[ -89424000.000 ] +[ 7862400.000 ] +[ 7948800.000 ] +[ 8035200.000 ] +[ 1207612800.000 ] +[ 1239235200.000 ] +[ 1270944000.000 ] [ NULL ] #SELECT EXTRACT(CENTURY FROM DATE '0101-12-31 BC'); -- -2 % .%2 # table_name diff --git a/sql/test/sys-schema/Tests/systemfunctions.stable.out b/sql/test/sys-schema/Tests/systemfunctions.stable.out --- a/sql/test/sys-schema/Tests/systemfunctions.stable.out +++ b/sql/test/sys-schema/Tests/systemfunctions.stable.out @@ -639,8 +639,6 @@ stdout of test 'systemfunctions` in dire [ "sys", "day", 1, "timestamptz", "" ] [ "sys", "day", 0, "bigint", "day" ] [ "sys", "day", 1, "day_interval", "" ] -[ "sys", "day", 0, "bigint", "day" ] -[ "sys", "day", 1, "sec_interval", "" ] [ "sys", "dayofmonth", 0, "int", "day" ] [ "sys", "dayofmonth", 1, "date", "" ] [ "sys", "dayofweek", 0, "int", "dayofweek" ] @@ -3718,6 +3716,9 @@ stdout of test 'systemfunctions` in dire [ "sys", "sql_add", 2, "double", "" ] [ "sys", "sql_add", 0, "date", "date_add_msec_interval" ] [ "sys", "sql_add", 1, "date", "" ] +[ "sys", "sql_add", 2, "sec_interval", "" ] +[ "sys", "sql_add", 0, "date", "date_add_msec_interval" ] +[ "sys", "sql_add", 1, "date", "" ] [ "sys", "sql_add", 2, "day_interval", "" ] [ "sys", "sql_add", 0, "date", "addmonths" ] [ "sys", "sql_add", 1, "date", "" ] @@ -3725,12 +3726,18 @@ stdout of test 'systemfunctions` in dire [ "sys", "sql_add", 0, "timestamp", "timestamp_add_msec_interval" ] [ "sys", "sql_add", 1, "timestamp", "" ] [ "sys", "sql_add", 2, "sec_interval", "" ] +[ "sys", "sql_add", 0, "timestamp", "timestamp_add_msec_interval" ] +[ "sys", "sql_add", 1, "timestamp", "" ] +[ "sys", "sql_add", 2, "day_interval", "" ] [ "sys", "sql_add", 0, "timestamp", "timestamp_add_month_interval" ] [ "sys", "sql_add", 1, "timestamp", "" ] [ "sys", "sql_add", 2, "month_interval", "" ] [ "sys", "sql_add", 0, "timestamptz", "timestamp_add_msec_interval" ] [ "sys", "sql_add", 1, "timestamptz", "" ] [ "sys", "sql_add", 2, "sec_interval", "" ] +[ "sys", "sql_add", 0, "timestamptz", "timestamp_add_msec_interval" ] +[ "sys", "sql_add", 1, "timestamptz", "" ] +[ "sys", "sql_add", 2, "day_interval", "" ] [ "sys", "sql_add", 0, "timestamptz", "timestamp_add_month_interval" ] [ "sys", "sql_add", 1, "timestamptz", "" ] [ "sys", "sql_add", 2, "month_interval", "" ] @@ -4305,6 +4312,9 @@ stdout of test 'systemfunctions` in dire [ "sys", "sql_sub", 2, "timestamp", "" ] [ "sys", "sql_sub", 0, "date", "date_sub_msec_interval" ] [ "sys", "sql_sub", 1, "date", "" ] +[ "sys", "sql_sub", 2, "sec_interval", "" ] +[ "sys", "sql_sub", 0, "date", "date_sub_msec_interval" ] +[ "sys", "sql_sub", 1, "date", "" ] [ "sys", "sql_sub", 2, "day_interval", "" ] [ "sys", "sql_sub", 0, "date", "date_sub_month_interval" ] [ "sys", "sql_sub", 1, "date", "" ] @@ -4318,12 +4328,18 @@ stdout of test 'systemfunctions` in dire [ "sys", "sql_sub", 0, "timestamp", "timestamp_sub_msec_interval" ] [ "sys", "sql_sub", 1, "timestamp", "" ] [ "sys", "sql_sub", 2, "sec_interval", "" ] +[ "sys", "sql_sub", 0, "timestamp", "timestamp_sub_msec_interval" ] +[ "sys", "sql_sub", 1, "timestamp", "" ] +[ "sys", "sql_sub", 2, "day_interval", "" ] [ "sys", "sql_sub", 0, "timestamp", "timestamp_sub_month_interval" ] [ "sys", "sql_sub", 1, "timestamp", "" ] [ "sys", "sql_sub", 2, "month_interval", "" ] [ "sys", "sql_sub", 0, "timestamptz", "timestamp_sub_msec_interval" ] [ "sys", "sql_sub", 1, "timestamptz", "" ] [ "sys", "sql_sub", 2, "sec_interval", "" ] +[ "sys", "sql_sub", 0, "timestamptz", "timestamp_sub_msec_interval" ] +[ "sys", "sql_sub", 1, "timestamptz", "" ] +[ "sys", "sql_sub", 2, "day_interval", "" ] [ "sys", "sql_sub", 0, "timestamptz", "timestamp_sub_month_interval" ] [ "sys", "sql_sub", 1, "timestamptz", "" ] [ "sys", "sql_sub", 2, "month_interval", "" ] diff --git a/sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 b/sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 --- a/sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 +++ b/sql/test/sys-schema/Tests/systemfunctions.stable.out.int128 @@ -694,8 +694,6 @@ stdout of test 'systemfunctions` in dire [ "sys", "day", 1, "timestamptz", "" ] [ "sys", "day", 0, "bigint", "day" ] [ "sys", "day", 1, "day_interval", "" ] -[ "sys", "day", 0, "bigint", "day" ] -[ "sys", "day", 1, "sec_interval", "" ] _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list