Changeset: 41f5ebb486fa for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/41f5ebb486fa
Modified Files:
gdk/gdk_time.c
monetdb5/modules/atoms/mtime.c
monetdb5/modules/atoms/mtime.h
sql/server/rel_statistics_functions.c
Branch: default
Log Message:
Some cleanup to time-related code. Nothing fundamental.
diffs (truncated from 1028 to 300 lines):
diff --git a/gdk/gdk_time.c b/gdk/gdk_time.c
--- a/gdk/gdk_time.c
+++ b/gdk/gdk_time.c
@@ -27,15 +27,15 @@
* (i.e. 0mmmmmmmmmmmmmmmmmmmmmdddddttttttttttttttttttttttttttttttttttttt)
*/
-#define YEAR_MIN (-4712) /* 4713 BC */
+#define YEAR_OFFSET 4712
+#define YEAR_MIN (-YEAR_OFFSET) /* 4713 BC */
-#define YEAR_OFFSET (-YEAR_MIN)
#define DTDAY_WIDTH 5 /* 1..28/29/30/31, depending on month/year */
#define DTDAY_SHIFT 0
#define DTMONTH_WIDTH 21 /* enough for 174761 years (and 8 months) */
-#define DTMONTH_SHIFT (DTDAY_WIDTH+DTDAY_SHIFT)
+#define DTMONTH_SHIFT (DTDAY_WIDTH + DTDAY_SHIFT)
-#define YEAR_MAX (YEAR_MIN+(1<<DTMONTH_WIDTH)/12-1)
+#define YEAR_MAX (YEAR_MIN + (1 << DTMONTH_WIDTH) / 12 - 1)
static const int leapdays[13] = { /* days per month in leap year */
0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
@@ -137,25 +137,30 @@ __attribute__((__const__))
static inline daytime
ts_time(timestamp ts)
{
- return (daytime) (((uint64_t) ts >> TSTIME_SHIFT) & ((LL_CONSTANT(1) <<
TSTIME_WIDTH) - 1));
+ return (daytime) (((uint64_t) ts >> TSTIME_SHIFT)
+ & ((LL_CONSTANT(1) << TSTIME_WIDTH) - 1));
}
__attribute__((__const__))
static inline date
ts_date(timestamp ts)
{
- return (date) (((uint64_t) ts >> TSDATE_SHIFT) & ((1 << TSDATE_WIDTH) -
1));
+ return (date) (((uint64_t) ts >> TSDATE_SHIFT)
+ & ((1 << TSDATE_WIDTH) - 1));
}
__attribute__((__const__))
static inline timestamp
mktimestamp(date d, daytime t)
{
- return (timestamp) (((uint64_t) d << TSDATE_SHIFT) |
- ((uint64_t) t << TSTIME_SHIFT));
+ return (timestamp) (((uint64_t) d << TSDATE_SHIFT)
+ | ((uint64_t) t << TSTIME_SHIFT));
}
-const timestamp unixepoch = (((((timestamp) 1970 + YEAR_OFFSET) * 12) <<
DTMONTH_SHIFT) | ((timestamp) 1 << DTDAY_SHIFT)) << TSDATE_SHIFT; /*
mktimestamp(mkdate(1970, 1, 1), mkdaytime(0, 0, 0, 0)) */
+/* mktimestamp(mkdate(1970, 1, 1), mkdaytime(0, 0, 0, 0)) */
+const timestamp unixepoch =
+ (((((timestamp) 1970 + YEAR_OFFSET) * 12) << DTMONTH_SHIFT)
+ | ((timestamp) 1 << DTDAY_SHIFT)) << TSDATE_SHIFT;
date
date_create(int year, int month, int day)
@@ -282,6 +287,7 @@ date_add_month(date dt, int months)
/* count days (including leap days) since some time before YEAR_MIN */
#define CNT_OFF (((YEAR_OFFSET+399)/400)*400)
+__attribute__((__const__))
static inline int
date_countdays(date dt)
{
@@ -292,8 +298,8 @@ date_countdays(date dt)
int m = date_extract_month(dt);
int y1 = y + CNT_OFF - 1;
return date_extract_day(dt)
- + (y+CNT_OFF)*365 + y1/4 - y1/100 + y1/400
- + cumdays[m-1] + (m > 2 && isleapyear(y));
+ + (y + CNT_OFF) * 365 + y1 / 4 - y1 / 100 + y1 / 400
+ + cumdays[m - 1] + (m > 2 && isleapyear(y));
}
/* return the difference in days between the two dates */
@@ -590,10 +596,12 @@ timestamp_diff(timestamp t1, timestamp t
{
if (is_timestamp_nil(t1) || is_timestamp_nil(t2))
return lng_nil;
- return ts_time(t1) - ts_time(t2) + DAY_USEC * date_diff(ts_date(t1),
ts_date(t2));
+ return ts_time(t1) - ts_time(t2)
+ + DAY_USEC * date_diff(ts_date(t1), ts_date(t2));
}
/* GDK level atom functions with some helpers */
+__attribute__((__pure__))
static ssize_t
fleximatch(const char *s, const char *pat, size_t min)
{
@@ -612,7 +620,8 @@ fleximatch(const char *s, const char *pa
}
static ssize_t
-parse_substr(int *ret, const char *s, size_t min, const char *const list[],
int size)
+parse_substr(int *ret, const char *s, size_t min,
+ const char *const list[], int size)
{
for (int i = 0; i < size; i++) {
ssize_t j = 0;
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
@@ -68,7 +68,7 @@ MTIMEcurrent_timestamp(Client ctx, times
#define is_str_nil strNil
-#define MTIME_STR_BUFFER_LENGTH MAX(strlen(str_nil) + 1, 512)
+#define MTIME_STR_BUFFER_LENGTH 512
#define DEC_VAR_R(TYPE, ARG) TYPE *restrict ptr##ARG
@@ -77,11 +77,12 @@ MTIMEcurrent_timestamp(Client ctx, times
#define DEC_ITER(TYPE, ARG)
-#define DEC_BUFFER(OUTTYPE, RES, MALFUNC) \
- OUTTYPE RES = ma_alloc(ma, MTIME_STR_BUFFER_LENGTH); \
- if (!res) { \
- msg = createException(MAL, "batmtime." MALFUNC, SQLSTATE(HY013)
MAL_MALLOC_FAIL); \
- goto bailout; \
+#define DEC_BUFFER(OUTTYPE, RES, MALFUNC)
\
+ OUTTYPE RES = ma_alloc(ma, MTIME_STR_BUFFER_LENGTH); \
+ if (!res) {
\
+ msg = createException(MAL, "batmtime." MALFUNC,
\
+ SQLSTATE(HY013)
MAL_MALLOC_FAIL); \
+ goto bailout;
\
}
#define DEC_INT(OUTTYPE, RES, MALFUNC) OUTTYPE RES = (OUTTYPE){0}
@@ -94,10 +95,11 @@ MTIMEcurrent_timestamp(Client ctx, times
#define GET_NEXT_VAR(ARG, OFF) ptr##ARG[OFF]
-#define APPEND_STR(MALFUNC) \
- if (tfastins_nocheckVAR(bn, i, res) != GDK_SUCCEED) { \
- msg = createException(SQL, "batmtime." MALFUNC, SQLSTATE(HY013)
MAL_MALLOC_FAIL); \
- break; \
+#define APPEND_STR(MALFUNC)
\
+ if (tfastins_nocheckVAR(bn, i, res) != GDK_SUCCEED) { \
+ msg = createException(SQL, "batmtime." MALFUNC,
\
+ SQLSTATE(HY013)
MAL_MALLOC_FAIL); \
+ break;
\
}
#define GET_NEXT_ITER(ARG, OFF) BUNtvar(&b##ARG##i, OFF)
@@ -105,11 +107,12 @@ MTIMEcurrent_timestamp(Client ctx, times
#define DEC_NOTHING(TYPE, ARG)
#define INIT_NOTHING(ARG)
-#define FINISH_BUFFER_SINGLE(MALFUNC) \
-bailout: \
- *ret = NULL; \
- if (!msg && res && !(*ret = ma_strdup(ma, res))) \
- msg = createException(MAL, "batmtime." MALFUNC, SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+#define FINISH_BUFFER_SINGLE(MALFUNC)
\
+ bailout:
\
+ *ret = NULL;
\
+ if (!msg && res && !(*ret = ma_strdup(ma, res)))
\
+ msg = createException(MAL, "batmtime." MALFUNC,
\
+ SQLSTATE(HY013)
MAL_MALLOC_FAIL);
#define FINISH_INT_SINGLE(MALFUNC) do { *ret = res; } while (0)
@@ -118,8 +121,13 @@ bailout: \
#define CLEAR_NOTHING(RES)
-#define COPYFLAGS(n) do { bn->tsorted = b1i.sorted; bn->trevsorted =
b1i.revsorted; } while (0)
-#define SETFLAGS(n) do { bn->tsorted = bn->trevsorted = n < 2; } while (0)
+#define COPYFLAGS(n) \
+ do {
\
+ bn->tsorted = b1i.sorted; \
+ bn->trevsorted = b1i.revsorted; \
+ } while (0)
+#define SETFLAGS(n) do { bn->tsorted = bn->trevsorted = (n) < 2; } while (0)
+
#define func1(NAME, MALFUNC, INTYPE, OUTTYPE,
\
FUNC, SETFLAGS, FUNC_CALL,
\
DEC_SRC, DEC_OUTPUT,
\
@@ -131,7 +139,7 @@ NAME(Client ctx, OUTTYPE *ret, const INT
(void) ma;
\
str msg = MAL_SUCCEED;
\
do {
\
- FUNC_CALL(FUNC, (*ret), *src);
\
+ FUNC_CALL(FUNC, *ret, *src);
\
} while (0);
\
return msg;
\
}
\
@@ -209,7 +217,8 @@ bailout:
\
}
#define func1_noexcept(FUNC, RET, PARAM) RET = FUNC(PARAM)
-#define func1_except(FUNC, RET, PARAM) msg = FUNC(ma, &RET, PARAM); if (msg)
break
+#define func1_except(FUNC, RET, PARAM) \
+ msg = FUNC(ma, &RET, PARAM); if (msg) break
#define func2(NAME, MALFUNC,
\
INTYPE1, INTYPE2, OUTTYPE, FUNC, FUNC_CALL,
\
@@ -279,7 +288,8 @@ NAME##_bulk(Client cntxt, MalBlkPtr mb,
"inputs not the same size");
\
goto bailout;
\
}
\
- if ((bn = COLnew(ci1.hseq, TYPE_##OUTTYPE, ci1.ncand, TRANSIENT)) ==
NULL) { \
+ if ((bn = COLnew(ci1.hseq, TYPE_##OUTTYPE,
\
+ ci1.ncand, TRANSIENT)) == NULL) {
\
msg = createException(MAL, "batmtime." MALFUNC,
\
SQLSTATE(HY013) MAL_MALLOC_FAIL);
\
goto bailout;
\
@@ -363,7 +373,8 @@ NAME##_bulk_p1(Client cntxt, MalBlkPtr m
goto bailout;
\
}
\
canditer_init(&ci2, b2, s2);
\
- if ((bn = COLnew(ci2.hseq, TYPE_##OUTTYPE, ci2.ncand, TRANSIENT)) ==
NULL) { \
+ if ((bn = COLnew(ci2.hseq, TYPE_##OUTTYPE,
\
+ ci2.ncand, TRANSIENT)) == NULL) {
\
msg = createException(MAL, "batmtime." MALFUNC,
\
SQLSTATE(HY013) MAL_MALLOC_FAIL);
\
goto bailout;
\
@@ -443,7 +454,8 @@ NAME##_bulk_p2(Client cntxt, MalBlkPtr m
goto bailout;
\
}
\
canditer_init(&ci1, b1, s1);
\
- if ((bn = COLnew(ci1.hseq, TYPE_##OUTTYPE, ci1.ncand, TRANSIENT)) ==
NULL) { \
+ if ((bn = COLnew(ci1.hseq, TYPE_##OUTTYPE,
\
+ ci1.ncand, TRANSIENT)) == NULL) {
\
msg = createException(MAL, "batmtime." MALFUNC,
\
SQLSTATE(HY013) MAL_MALLOC_FAIL);
\
goto bailout;
\
@@ -491,7 +503,8 @@ bailout:
\
}
#define func2_noexcept(FUNC, RET, PARAM1, PARAM2) RET = FUNC(PARAM1, PARAM2)
-#define func2_except(FUNC, RET, PARAM1, PARAM2) msg = FUNC(&RET, PARAM1,
PARAM2); if (msg) break
+#define func2_except(FUNC, RET, PARAM1, PARAM2) \
+ msg = FUNC(&RET, PARAM1, PARAM2); if (msg) break
#define func3(NAME, MALFUNC,
\
INTYPE1, INTYPE2, OUTTYPE, FUNC, FUNC_CALL,
\
@@ -500,9 +513,10 @@ bailout:
\
GET_NEXT_SRC1, GET_NEXT_SRC2,
\
APPEND_NEXT, CLEAR_EXTRA_SINGLE, CLEAR_EXTRA_MULTI)
\
static str
\
-NAME(Client ctx, OUTTYPE *ret, const INTYPE1 *v1, const INTYPE2 *v2, const lng
*extra) \
+NAME(Client ctx, OUTTYPE *ret, const INTYPE1 *v1, const INTYPE2 *v2, \
+ const lng *extra)
\
{
\
- allocator *ma = ctx->curprg->def->ma;
\
+ allocator *ma = ctx->curprg->def->ma;
\
(void) ma;
\
str msg = MAL_SUCCEED;
\
DEC_EXTRA(OUTTYPE, res, MALFUNC);
\
@@ -529,7 +543,7 @@ NAME##_bulk(Client cntxt, MalBlkPtr mb,
*bid2 = getArgReference_bat(stk, pci, 2),
\
*sid1 = pci->argc == 6 ? getArgReference_bat(stk, pci, 3) :
NULL, \
*sid2 = pci->argc == 6 ? getArgReference_bat(stk, pci, 4) :
NULL; \
- lng *extra = getArgReference_lng(stk, pci, pci->argc-1);
\
+ lng *extra = getArgReference_lng(stk, pci, pci->argc-1);
\
BATiter b1i, b2i = { .vh = NULL };
\
DEC_SRC1(INTYPE1, 1);
\
DEC_SRC2(INTYPE2, 2);
\
@@ -562,7 +576,8 @@ NAME##_bulk(Client cntxt, MalBlkPtr mb,
"inputs not the same size");
\
goto bailout;
\
}
\
- if ((bn = COLnew(ci1.hseq, TYPE_##OUTTYPE, ci1.ncand, TRANSIENT)) ==
NULL) { \
+ if ((bn = COLnew(ci1.hseq, TYPE_##OUTTYPE,
\
+ ci1.ncand, TRANSIENT)) == NULL) {
\
msg = createException(MAL, "batmtime." MALFUNC,
\
SQLSTATE(HY013) MAL_MALLOC_FAIL);
\
goto bailout;
\
@@ -576,7 +591,8 @@ NAME##_bulk(Client cntxt, MalBlkPtr mb,
for (BUN i = 0; i < ci1.ncand; i++) {
\
oid p1 = (canditer_next_dense(&ci1) - off1);
\
oid p2 = (canditer_next_dense(&ci2) - off2);
\
- FUNC_CALL(FUNC, res, GET_NEXT_SRC1(1, p1),
GET_NEXT_SRC2(2, p2), *extra); \
+ FUNC_CALL(FUNC, res, GET_NEXT_SRC1(1, p1),
\
+ GET_NEXT_SRC2(2, p2), *extra);
\
APPEND_NEXT(MALFUNC);
\
nils |= is_##OUTTYPE##_nil(res);
\
}
\
@@ -584,7 +600,8 @@ NAME##_bulk(Client cntxt, MalBlkPtr mb,
for (BUN i = 0; i < ci1.ncand; i++) {
\
oid p1 = (canditer_next(&ci1) - off1);
\
oid p2 = (canditer_next(&ci2) - off2);
\
- FUNC_CALL(FUNC, res, GET_NEXT_SRC1(1, p1),
GET_NEXT_SRC2(2, p2), *extra); \
+ FUNC_CALL(FUNC, res, GET_NEXT_SRC1(1, p1),
\
+ GET_NEXT_SRC2(2, p2), *extra);
\
APPEND_NEXT(MALFUNC);
\
nils |= is_##OUTTYPE##_nil(res);
\
}
\
@@ -647,7 +664,8 @@ NAME##_bulk_p1(Client cntxt, MalBlkPtr m
goto bailout;
\
}
\
canditer_init(&ci2, b2, s2);
\
- if ((bn = COLnew(ci2.hseq, TYPE_##OUTTYPE, ci2.ncand, TRANSIENT)) ==
NULL) { \
+ if ((bn = COLnew(ci2.hseq, TYPE_##OUTTYPE,
\
+ ci2.ncand, TRANSIENT)) == NULL) {
\
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]