Changeset: 3aa9236215a7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3aa9236215a7
Added Files:
monetdb5/modules/atoms/mtime_private.h
Modified Files:
monetdb5/modules/atoms/mtime.c
monetdb5/modules/atoms/mtime.h
monetdb5/modules/atoms/mtime_analytic.c
Branch: default
Log Message:
Use proper limits for date type in analytics.
diffs (103 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
@@ -190,6 +190,7 @@
#include "monetdb_config.h"
#include "mtime.h"
+#include "mtime_private.h"
#ifndef HAVE_STRPTIME
extern char *strptime(const char *, const char *, struct tm *);
@@ -243,7 +244,7 @@ static int CUMLEAPDAYS[13] = {
0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366
};
-static date DATE_MAX, DATE_MIN; /* often used dates; computed
once */
+date DATE_MAX, DATE_MIN; /* often used dates; computed once */
#define MONTHDAYS(m,y) ((m) != 2 ? LEAPDAYS[m] : leapyear(y) ? 29 : 28)
#define YEARDAYS(y) (leapyear(y) ? 366 : 365)
diff --git a/monetdb5/modules/atoms/mtime.h b/monetdb5/modules/atoms/mtime.h
--- a/monetdb5/modules/atoms/mtime.h
+++ b/monetdb5/modules/atoms/mtime.h
@@ -41,7 +41,6 @@
typedef int date;
#define date_nil ((date) int_nil)
#define is_date_nil(X) ((X) == date_nil)
-#define date_max GDK_int_max /* used for overflow checks */
/*
* @- daytime
diff --git a/monetdb5/modules/atoms/mtime_analytic.c
b/monetdb5/modules/atoms/mtime_analytic.c
--- a/monetdb5/modules/atoms/mtime_analytic.c
+++ b/monetdb5/modules/atoms/mtime_analytic.c
@@ -16,8 +16,9 @@
#include "monetdb_config.h"
#include "mtime.h"
+#include "mtime_private.h"
-#define MTIME_SUB_WITH_CHECK(lft, rgt, TYPE, dst, max, on_overflow) \
+#define MTIME_SUB_WITH_CHECK(lft, rgt, TYPE, dst, min, max, on_overflow) \
do { \
if ((rgt) < 1) { \
if ((max) + (rgt) < (lft)) \
@@ -25,7 +26,7 @@
else \
(dst) = (TYPE) (lft) - (rgt); \
} else { \
- if (-(max) + (rgt) > (lft)) \
+ if ((min) + (rgt) > (lft)) \
on_overflow; \
else \
(dst) = (TYPE) (lft) - (rgt); \
@@ -36,7 +37,7 @@
#define DATE_RANGE_MONTH_DIFF(X,Y,R) \
do { \
- MTIME_SUB_WITH_CHECK(X, Y, date, R, date_max, goto
calc_overflow); \
+ MTIME_SUB_WITH_CHECK(X, Y, date, R, DATE_MIN, DATE_MAX, goto
calc_overflow); \
R = MABSOLUTE(R); \
R /= 30; /* days in a month */ \
R += (X != Y); /* in a '0' month interval, the rows don't
belong to the same frame if the difference is less than one month */ \
@@ -44,7 +45,7 @@
#define TIMESTAMP_RANGE_MONTH_DIFF(X,Y,R) \
do { \
- MTIME_SUB_WITH_CHECK(X.days, Y.days, date, R, date_max, goto
calc_overflow); \
+ MTIME_SUB_WITH_CHECK(X.days, Y.days, date, R, DATE_MIN,
DATE_MAX, goto calc_overflow); \
R = MABSOLUTE(R); \
R /= 30; /* days in a month */ \
R += (X.days != Y.days); /* same reason as above */ \
@@ -57,14 +58,14 @@
#define DATE_RANGE_SEC_DIFF(X,Y,R) \
do { \
- MTIME_SUB_WITH_CHECK(X, Y, date, R, date_max, goto
calc_overflow); \
+ MTIME_SUB_WITH_CHECK(X, Y, date, R, DATE_MIN, DATE_MAX, goto
calc_overflow); \
R = MABSOLUTE(R); \
R *= 86400000; /* days in milliseconds */ \
} while (0)
#define TIMESTAMP_RANGE_SEC_DIFF(X,Y,R) \
do { \
- MTIME_SUB_WITH_CHECK(X.days, Y.days, date, R, date_max, goto
calc_overflow); \
+ MTIME_SUB_WITH_CHECK(X.days, Y.days, date, R, DATE_MIN,
DATE_MAX, goto calc_overflow); \
R = MABSOLUTE(R); \
R *= 86400000; /* days in milliseconds */ \
R += MABSOLUTE(X.msecs - Y.msecs); /* never overflows */ \
diff --git a/monetdb5/modules/atoms/mtime_private.h
b/monetdb5/modules/atoms/mtime_private.h
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/atoms/mtime_private.h
@@ -0,0 +1,9 @@
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 1997 - July 2008 CWI, August 2008 - 2019 MonetDB B.V.
+ */
+
+extern date DATE_MAX, DATE_MIN; /* often used dates; computed
once */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list