Changeset: fb9c92e89ef7 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fb9c92e89ef7 Modified Files: monetdb5/modules/atoms/mtime.c Branch: default Log Message:
Some mtime functions take strings as input/output parameters, so I had do change the func1 and func2 macros to reflect this diffs (truncated from 474 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 @@ -67,13 +67,39 @@ MTIMEcurrent_timestamp(timestamp *ret) #define is_str_nil strNil -#define COPYFLAGS do { bn->tsorted = b->tsorted; bn->trevsorted = b->trevsorted; } while (0) + +#define DEC_INT(INTYPE, VAR) INTYPE * VAR; + +#define INIT_INT(VAR, VAR_BAT) VAR = Tloc(VAR_BAT, 0); + +#define APPEND_INT(MALFUNC) dst[i] = res; + +#define GET_NEXT_INT(VAR) VAR[i] + + +#define DEC_STR(INTYPE, VAR) BATiter VAR; + +#define INIT_STR(VAR, VAR_BAT) VAR = bat_iterator(VAR_BAT); + +#define APPEND_STR(MALFUNC) \ + if (BUNappend(bn, res, false) != GDK_SUCCEED) { \ + msg = createException(SQL, "batmtime." MALFUNC, SQLSTATE(HY013) MAL_MALLOC_FAIL); \ + break; \ + } + +#define GET_NEXT_STR(VAR) BUNtvar(VAR, i) + + +#define DEC_NOTHING(A, B) ; + +#define COPYFLAGS do { bn->tsorted = b1->tsorted; bn->trevsorted = b1->trevsorted; } while (0) #define SETFLAGS do { bn->tsorted = bn->trevsorted = n < 2; } while (0) -#define func1(NAME, NAMEBULK, MALFUNC, INTYPE, OUTYPE, FUNC, SETFLAGS, FUNC_CALL) \ -mal_export str NAME(OUTYPE *ret, const INTYPE *src); \ +#define func1(NAME, NAMEBULK, MALFUNC, INTYPE, OUTTYPE, FUNC, SETFLAGS, FUNC_CALL, DEC_INPUT, DEC_OUTPUT, \ + INIT_INPUT, INIT_OUTPUT, GET_NEXT_INPUT) \ +mal_export str NAME(OUTTYPE *ret, const INTYPE *src); \ mal_export str NAMEBULK(bat *ret, const bat *bid); \ str \ -NAME(OUTYPE *ret, const INTYPE *src) \ +NAME(OUTTYPE *ret, const INTYPE *src) \ { \ str msg = MAL_SUCCEED; \ do { \ @@ -84,36 +110,36 @@ NAME(OUTYPE *ret, const INTYPE *src) str \ NAMEBULK(bat *ret, const bat *bid) \ { \ - BAT *b = NULL, *bn = NULL; \ + BAT *b1 = NULL, *bn = NULL; \ BUN n; \ - const INTYPE *src; \ - OUTYPE *dst; \ + DEC_INPUT(INTYPE, src1); \ + DEC_OUTPUT(OUTTYPE, dst); \ str msg = MAL_SUCCEED; \ \ - if ((b = BATdescriptor(*bid)) == NULL) { \ + if ((b1 = BATdescriptor(*bid)) == NULL) { \ msg = createException(MAL, "batmtime." MALFUNC, \ SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); \ goto bailout; \ } \ - n = BATcount(b); \ - if ((bn = COLnew(b->hseqbase, TYPE_##OUTYPE, n, TRANSIENT)) == NULL) { \ + n = BATcount(b1); \ + if ((bn = COLnew(b1->hseqbase, TYPE_##OUTTYPE, n, TRANSIENT)) == NULL) { \ msg = createException(MAL, "batmtime." MALFUNC, \ SQLSTATE(HY013) MAL_MALLOC_FAIL); \ goto bailout; \ } \ - src = Tloc(b, 0); \ - dst = Tloc(bn, 0); \ - for (BUN i = 0; i < n; i++) { \ - FUNC_CALL(FUNC, (dst[i]), src[i]); \ + INIT_INPUT(src1, b1); \ + INIT_OUTPUT(dst, bn); \ + for (BUN i = 0; i < n; i++) { \ + FUNC_CALL(FUNC, (dst[i]), (GET_NEXT_INPUT(src1))); \ } \ - bn->tnonil = b->tnonil; \ - bn->tnil = b->tnil; \ + bn->tnonil = b1->tnonil; \ + bn->tnil = b1->tnil; \ BATsetcount(bn, n); \ SETFLAGS; \ bn->tkey = false; \ bailout: \ - if (b) \ - BBPunfix(b->batCacheid); \ + if (b1) \ + BBPunfix(b1->batCacheid); \ if (msg && bn) \ BBPreclaim(bn); \ else if (bn) \ @@ -124,7 +150,8 @@ bailout: \ #define func1_noexcept(FUNC, RET, PARAM) RET = FUNC(PARAM) #define func1_except(FUNC, RET, PARAM) msg = FUNC(&RET, PARAM); if (msg) break; -#define func2(NAME, NAMEBULK, MALFUNC, INTYPE1, INTYPE2, OUTTYPE, FUNC, FUNC_CALL) \ +#define func2(NAME, NAMEBULK, MALFUNC, INTYPE1, INTYPE2, OUTTYPE, FUNC, FUNC_CALL, DEC_INPUT1, DEC_INPUT2, DEC_OUTPUT, \ + INIT_INPUT1, INIT_INPUT2, INIT_OUTPUT, GET_NEXT_INPUT1, GET_NEXT_INPUT2, APPEND_NEXT) \ mal_export str NAME(OUTTYPE *ret, const INTYPE1 *v1, const INTYPE2 *v2); \ mal_export str NAMEBULK(bat *ret, const bat *bid1, const bat *bid2); \ mal_export str NAMEBULK##_p1(bat *ret, const INTYPE1 *src1, const bat *bid2); \ @@ -143,9 +170,9 @@ NAMEBULK(bat *ret, const bat *bid1, cons { \ BAT *b1 = NULL, *b2 = NULL, *bn = NULL; \ BUN n; \ - const INTYPE1 *src1; \ - const INTYPE2 *src2; \ - OUTTYPE *dst; \ + DEC_INPUT1(INTYPE1, src1); \ + DEC_INPUT2(INTYPE2, src2); \ + DEC_OUTPUT(OUTTYPE, dst); \ str msg = MAL_SUCCEED; \ \ b1 = BATdescriptor(*bid1); \ @@ -166,11 +193,13 @@ NAMEBULK(bat *ret, const bat *bid1, cons SQLSTATE(HY013) MAL_MALLOC_FAIL); \ goto bailout; \ } \ - src1 = Tloc(b1, 0); \ - src2 = Tloc(b2, 0); \ - dst = Tloc(bn, 0); \ - for (BUN i = 0; i < n; i++) { \ - FUNC_CALL(FUNC, (dst[i]), src1[i], src2[i]); \ + INIT_INPUT1(src1, b1); \ + INIT_INPUT2(src2, b2); \ + INIT_OUTPUT(dst, bn); \ + for (BUN i = 0; i < n; i++) { \ + OUTTYPE res; \ + FUNC_CALL(FUNC, (res), (GET_NEXT_INPUT1(src1)), (GET_NEXT_INPUT2(src2))); \ + APPEND_NEXT(MALFUNC); \ } \ bn->tnonil = b1->tnonil & b2->tnonil; \ bn->tnil = b1->tnil | b2->tnil; \ @@ -194,8 +223,8 @@ NAMEBULK##_p1(bat *ret, const INTYPE1 *s { \ BAT *b2 = NULL, *bn = NULL; \ BUN n; \ - const INTYPE2 *src2; \ - OUTTYPE *dst; \ + DEC_INPUT2(INTYPE2, src2); \ + DEC_OUTPUT(OUTTYPE, dst); \ str msg = MAL_SUCCEED; \ \ if ((b2 = BATdescriptor(*bid2)) == NULL) { \ @@ -209,10 +238,12 @@ NAMEBULK##_p1(bat *ret, const INTYPE1 *s SQLSTATE(HY013) MAL_MALLOC_FAIL); \ goto bailout; \ } \ - src2 = Tloc(b2, 0); \ - dst = Tloc(bn, 0); \ - for (BUN i = 0; i < n; i++) { \ - FUNC_CALL(FUNC, (dst[i]), (*src1), src2[i]); \ + INIT_INPUT2(src2, b2); \ + INIT_OUTPUT(dst, bn); \ + for (BUN i = 0; i < n; i++) { \ + OUTTYPE res; \ + FUNC_CALL(FUNC, (res), *src1, (GET_NEXT_INPUT2(src2))); \ + APPEND_NEXT(MALFUNC); \ } \ bn->tnonil = !is_##INTYPE1##_nil(*src1) && b2->tnonil; \ bn->tnil = is_##INTYPE1##_nil(*src1) || b2->tnil; \ @@ -234,8 +265,8 @@ NAMEBULK##_p2(bat *ret, const bat *bid1, { \ BAT *b1 = NULL, *bn = NULL; \ BUN n; \ - const INTYPE1 *src1; \ - OUTTYPE *dst; \ + DEC_INPUT1(INTYPE1, src1); \ + DEC_OUTPUT(OUTTYPE, dst); \ str msg = MAL_SUCCEED; \ \ if ((b1 = BATdescriptor(*bid1)) == NULL) { \ @@ -249,10 +280,12 @@ NAMEBULK##_p2(bat *ret, const bat *bid1, SQLSTATE(HY013) MAL_MALLOC_FAIL); \ goto bailout; \ } \ - src1 = Tloc(b1, 0); \ - dst = Tloc(bn, 0); \ - for (BUN i = 0; i < n; i++) { \ - FUNC_CALL(FUNC, (dst[i]), src1[i], (*src2)); \ + INIT_INPUT1(src1, b1); \ + INIT_OUTPUT(dst, bn); \ + for (BUN i = 0; i < n; i++) { \ + OUTTYPE res; \ + FUNC_CALL(FUNC, (res), (GET_NEXT_INPUT1(src1)), *src2); \ + APPEND_NEXT(MALFUNC); \ } \ bn->tnonil = b1->tnonil && !is_##INTYPE2##_nil(*src2); \ bn->tnil = b1->tnil || is_##INTYPE2##_nil(*src2); \ @@ -273,8 +306,10 @@ 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; -func2(MTIMEdate_diff, MTIMEdate_diff_bulk, "diff", date, date, int, date_diff, func2_noexcept) -func2(MTIMEdaytime_diff_msec, MTIMEdaytime_diff_msec_bulk, "diff", daytime, daytime, lng, daytime_diff, func2_noexcept) +func2(MTIMEdate_diff, MTIMEdate_diff_bulk, "diff", date, date, int, date_diff, func2_noexcept, + DEC_INT, DEC_INT, DEC_INT, INIT_INT, INIT_INT, INIT_INT, GET_NEXT_INT, GET_NEXT_INT, APPEND_INT) +func2(MTIMEdaytime_diff_msec, MTIMEdaytime_diff_msec_bulk, "diff", daytime, daytime, lng, daytime_diff, func2_noexcept, + DEC_INT, DEC_INT, DEC_INT, INIT_INT, INIT_INT, INIT_INT, GET_NEXT_INT, GET_NEXT_INT, APPEND_INT) #define func2chk(NAME, NAMEBULK, MALFUNC, INTYPE1, INTYPE2, OUTTYPE, FUNC) \ mal_export str NAME(OUTTYPE *ret, const INTYPE1 *v1, const INTYPE2 *v2); \ @@ -468,26 +503,40 @@ time_add_msec_interval(const daytime t, return daytime_nil; return daytime_add_usec_modulo(t, ms * 1000); } -func2(MTIMEtime_sub_msec_interval, MTIMEtime_sub_msec_interval_bulk, "time_sub_msec_interval", daytime, lng, daytime, time_sub_msec_interval, func2_noexcept) -func2(MTIMEtime_add_msec_interval, MTIMEtime_add_msec_interval_bulk, "time_add_msec_interval", daytime, lng, daytime, time_add_msec_interval, func2_noexcept) +func2(MTIMEtime_sub_msec_interval, MTIMEtime_sub_msec_interval_bulk, "time_sub_msec_interval", daytime, lng, daytime, time_sub_msec_interval, func2_noexcept, + DEC_INT, DEC_INT, DEC_INT, INIT_INT, INIT_INT, INIT_INT, GET_NEXT_INT, GET_NEXT_INT, APPEND_INT) +func2(MTIMEtime_add_msec_interval, MTIMEtime_add_msec_interval_bulk, "time_add_msec_interval", daytime, lng, daytime, time_add_msec_interval, func2_noexcept, + DEC_INT, DEC_INT, DEC_INT, INIT_INT, INIT_INT, INIT_INT, GET_NEXT_INT, GET_NEXT_INT, APPEND_INT) #define date_submonths(d, m) date_add_month(d, -m) #define date_addmonths(d, m) date_add_month(d, m) func2chk(MTIMEdate_submonths, MTIMEdate_submonths_bulk, "date_submonths", date, int, date, date_submonths) func2chk(MTIMEdate_addmonths, MTIMEdate_addmonths_bulk, "date_addmonths", date, int, date, date_addmonths) -func1(MTIMEdate_extract_century, MTIMEdate_extract_century_bulk, "date_century", date, int, date_century, COPYFLAGS, func1_noexcept) -func1(MTIMEdate_extract_decade, MTIMEdate_extract_decade_bulk, "date_decade", date, int, date_decade, COPYFLAGS, func1_noexcept) -func1(MTIMEdate_extract_year, MTIMEdate_extract_year_bulk, "date_year", date, int, date_year, COPYFLAGS, func1_noexcept) -func1(MTIMEdate_extract_quarter, MTIMEdate_extract_quarter_bulk, "date_quarter", date, int, date_quarter, SETFLAGS, func1_noexcept) -func1(MTIMEdate_extract_month, MTIMEdate_extract_month_bulk, "date_month", date, int, date_month, SETFLAGS, func1_noexcept) -func1(MTIMEdate_extract_day, MTIMEdate_extract_day_bulk, "date_day", date, int, date_day, SETFLAGS, func1_noexcept) -func1(MTIMEdate_extract_dayofyear, MTIMEdate_extract_dayofyear_bulk, "date_dayofyear", date, int, date_dayofyear, SETFLAGS, func1_noexcept) -func1(MTIMEdate_extract_weekofyear, MTIMEdate_extract_weekofyear_bulk, "date_weekofyear", date, int, date_weekofyear, SETFLAGS, func1_noexcept) -func1(MTIMEdate_extract_dayofweek, MTIMEdate_extract_dayofweek_bulk, "date_dayofweek", date, int, date_dayofweek, SETFLAGS, func1_noexcept) -func1(MTIMEdaytime_extract_hours, MTIMEdaytime_extract_hours_bulk, "daytime_hour", daytime, int, daytime_hour, COPYFLAGS, func1_noexcept) -func1(MTIMEdaytime_extract_minutes, MTIMEdaytime_extract_minutes_bulk, "daytime_minutes", daytime, int, daytime_min, SETFLAGS, func1_noexcept) -func1(MTIMEdaytime_extract_sql_seconds, MTIMEdaytime_extract_sql_seconds_bulk, "daytime_seconds", daytime, int, daytime_sec_usec, SETFLAGS, func1_noexcept) +func1(MTIMEdate_extract_century, MTIMEdate_extract_century_bulk, "date_century", date, int, date_century, COPYFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEdate_extract_decade, MTIMEdate_extract_decade_bulk, "date_decade", date, int, date_decade, COPYFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEdate_extract_year, MTIMEdate_extract_year_bulk, "date_year", date, int, date_year, COPYFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEdate_extract_quarter, MTIMEdate_extract_quarter_bulk, "date_quarter", date, int, date_quarter, SETFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEdate_extract_month, MTIMEdate_extract_month_bulk, "date_month", date, int, date_month, SETFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEdate_extract_day, MTIMEdate_extract_day_bulk, "date_day", date, int, date_day, SETFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEdate_extract_dayofyear, MTIMEdate_extract_dayofyear_bulk, "date_dayofyear", date, int, date_dayofyear, SETFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEdate_extract_weekofyear, MTIMEdate_extract_weekofyear_bulk, "date_weekofyear", date, int, date_weekofyear, SETFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEdate_extract_dayofweek, MTIMEdate_extract_dayofweek_bulk, "date_dayofweek", date, int, date_dayofweek, SETFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEdaytime_extract_hours, MTIMEdaytime_extract_hours_bulk, "daytime_hour", daytime, int, daytime_hour, COPYFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEdaytime_extract_minutes, MTIMEdaytime_extract_minutes_bulk, "daytime_minutes", daytime, int, daytime_min, SETFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEdaytime_extract_sql_seconds, MTIMEdaytime_extract_sql_seconds_bulk, "daytime_seconds", daytime, int, daytime_sec_usec, SETFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) static inline lng TSDIFF(timestamp t1, timestamp t2) @@ -505,7 +554,8 @@ TSDIFF(timestamp t1, timestamp t2) } return diff; } -func2(MTIMEtimestamp_diff_msec, MTIMEtimestamp_diff_msec_bulk, "diff", timestamp, timestamp, lng, TSDIFF, func2_noexcept) +func2(MTIMEtimestamp_diff_msec, MTIMEtimestamp_diff_msec_bulk, "diff", timestamp, timestamp, lng, TSDIFF, func2_noexcept, + DEC_INT, DEC_INT, DEC_INT, INIT_INT, INIT_INT, INIT_INT, GET_NEXT_INT, GET_NEXT_INT, APPEND_INT) static inline int timestamp_century(const timestamp t) @@ -526,15 +576,24 @@ timestamp_century(const timestamp t) #define timestamp_hours(t) daytime_hour(timestamp_daytime(t)) #define timestamp_minutes(t) daytime_min(timestamp_daytime(t)) #define timestamp_extract_usecond(ts) daytime_sec_usec(timestamp_daytime(ts)) -func1(MTIMEtimestamp_century, MTIMEtimestamp_century_bulk, "timestamp_century", timestamp, int, timestamp_century, COPYFLAGS, func1_noexcept) -func1(MTIMEtimestamp_decade, MTIMEtimestamp_decade_bulk, "timestamp_decade", timestamp, int, timestamp_decade, COPYFLAGS, func1_noexcept) -func1(MTIMEtimestamp_year, MTIMEtimestamp_year_bulk, "timestamp_year", timestamp, int, timestamp_year, COPYFLAGS, func1_noexcept) -func1(MTIMEtimestamp_quarter, MTIMEtimestamp_quarter_bulk, "timestamp_quarter", timestamp, int, timestamp_quarter, SETFLAGS, func1_noexcept) -func1(MTIMEtimestamp_month, MTIMEtimestamp_month_bulk, "timestamp_month", timestamp, int, timestamp_month, SETFLAGS, func1_noexcept) -func1(MTIMEtimestamp_day, MTIMEtimestamp_day_bulk, "timestamp_day", timestamp, int, timestamp_day, SETFLAGS, func1_noexcept) -func1(MTIMEtimestamp_hours, MTIMEtimestamp_hours_bulk, "timestamp_hours", timestamp, int, timestamp_hours, SETFLAGS, func1_noexcept) -func1(MTIMEtimestamp_minutes, MTIMEtimestamp_minutes_bulk, "timestamp_minutes", timestamp, int, timestamp_minutes, SETFLAGS, func1_noexcept) -func1(MTIMEtimestamp_sql_seconds, MTIMEtimestamp_sql_seconds_bulk, "sql_seconds", timestamp, int, timestamp_extract_usecond, SETFLAGS, func1_noexcept) +func1(MTIMEtimestamp_century, MTIMEtimestamp_century_bulk, "timestamp_century", timestamp, int, timestamp_century, COPYFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEtimestamp_decade, MTIMEtimestamp_decade_bulk, "timestamp_decade", timestamp, int, timestamp_decade, COPYFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEtimestamp_year, MTIMEtimestamp_year_bulk, "timestamp_year", timestamp, int, timestamp_year, COPYFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEtimestamp_quarter, MTIMEtimestamp_quarter_bulk, "timestamp_quarter", timestamp, int, timestamp_quarter, SETFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEtimestamp_month, MTIMEtimestamp_month_bulk, "timestamp_month", timestamp, int, timestamp_month, SETFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEtimestamp_day, MTIMEtimestamp_day_bulk, "timestamp_day", timestamp, int, timestamp_day, SETFLAGS, func1_noexcept, + DEC_INT, DEC_INT, INIT_INT, INIT_INT, GET_NEXT_INT) +func1(MTIMEtimestamp_hours, MTIMEtimestamp_hours_bulk, "timestamp_hours", timestamp, int, timestamp_hours, SETFLAGS, func1_noexcept, _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list