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

Reply via email to