Changeset: b7905c1f5e0d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b7905c1f5e0d Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 monetdb5/modules/atoms/mtime.c sql/test/SQLancer/Tests/sqlancer02.sql sql/test/SQLancer/Tests/sqlancer02.stable.out Branch: default Log Message:
Making SQLancer happy. Added missing candidate lists for batcalc functions at mtime module diffs (truncated from 351 to 300 lines): diff --git a/clients/Tests/MAL-signatures.stable.out b/clients/Tests/MAL-signatures.stable.out --- a/clients/Tests/MAL-signatures.stable.out +++ b/clients/Tests/MAL-signatures.stable.out @@ -3788,15 +3788,22 @@ stdout of test 'MAL-signatures` in direc [ "batcalc", "cmp", "pattern batcalc.cmp(X_1:str, X_2:bat[:str]):bat[:bte] ", "CMDbatCMP;", "" ] [ "batcalc", "cmp", "pattern batcalc.cmp(X_1:str, X_2:bat[:str], X_3:bat[:oid]):bat[:bte] ", "CMDbatCMP;", "" ] [ "batcalc", "date", "command batcalc.date(X_1:bat[:date]):bat[:date] ", "MTIMEdate_date_bulk;", "" ] +[ "batcalc", "date", "command batcalc.date(X_1:bat[:date], X_2:bat[:oid]):bat[:date] ", "MTIMEdate_date_bulk_cand;", "" ] [ "batcalc", "date", "command batcalc.date(X_1:bat[:str]):bat[:date] ", "MTIMEdate_fromstr_bulk;", "" ] +[ "batcalc", "date", "command batcalc.date(X_1:bat[:str], X_2:bat[:oid]):bat[:date] ", "MTIMEdate_fromstr_bulk_cand;", "" ] [ "batcalc", "date", "command batcalc.date(X_1:bat[:timestamp]):bat[:date] ", "MTIMEtimestamp_extract_date_bulk;", "" ] +[ "batcalc", "date", "command batcalc.date(X_1:bat[:timestamp], X_2:bat[:oid]):bat[:date] ", "MTIMEtimestamp_extract_date_bulk_cand;", "" ] [ "batcalc", "date", "command batcalc.date(X_1:bat[:str]):bat[:date] ", "batstr_2_date;", "" ] [ "batcalc", "date", "command batcalc.date(X_1:bat[:str], X_2:bat[:oid]):bat[:date] ", "batstr_2_date_cand;", "" ] [ "batcalc", "date", "pattern batcalc.date(X_1:bat[:oid]):bat[:date] ", "nil_2_date;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:daytime]):bat[:daytime] ", "MTIMEdaytime_daytime_bulk;", "" ] +[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:daytime], X_2:bat[:oid]):bat[:daytime] ", "MTIMEdaytime_daytime_bulk_cand;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:lng]):bat[:daytime] ", "MTIMEdaytime_fromseconds_bulk;", "" ] +[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:lng], X_2:bat[:oid]):bat[:daytime] ", "MTIMEdaytime_fromseconds_bulk_cand;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:str]):bat[:daytime] ", "MTIMEdaytime_fromstr_bulk;", "" ] +[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:str], X_2:bat[:oid]):bat[:daytime] ", "MTIMEdaytime_fromstr_bulk_cand;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:timestamp]):bat[:daytime] ", "MTIMEtimestamp_extract_daytime_bulk;", "" ] +[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:timestamp], X_2:bat[:oid]):bat[:daytime] ", "MTIMEtimestamp_extract_daytime_bulk_cand;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:str], X_2:int):bat[:daytime] ", "batstr_2time_daytime;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:str], X_2:bat[:oid], X_3:int):bat[:daytime] ", "batstr_2time_daytime_cand;", "" ] [ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:daytime], X_2:bat[:oid], X_3:int):bat[:daytime] ", "daytime_2time_daytime;", "" ] @@ -5275,10 +5282,15 @@ stdout of test 'MAL-signatures` in direc [ "batcalc", "sub_noerror", "pattern batcalc.sub_noerror(X_1:sht, X_2:bat[:lng], X_3:bat[:oid]):bat[:lng] ", "CMDbatSUB;", "" ] [ "batcalc", "sub_noerror", "pattern batcalc.sub_noerror(X_1:sht, X_2:bat[:sht], X_3:bat[:oid]):bat[:sht] ", "CMDbatSUB;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:date]):bat[:timestamp] ", "MTIMEtimestamp_fromdate_bulk;", "" ] +[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:date], X_2:bat[:oid]):bat[:timestamp] ", "MTIMEtimestamp_fromdate_bulk_cand;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:lng]):bat[:timestamp] ", "MTIMEtimestamp_frommsec_bulk;", "" ] +[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:lng], X_2:bat[:oid]):bat[:timestamp] ", "MTIMEtimestamp_frommsec_bulk_cand;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:int]):bat[:timestamp] ", "MTIMEtimestamp_fromsecond_bulk;", "" ] +[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:int], X_2:bat[:oid]):bat[:timestamp] ", "MTIMEtimestamp_fromsecond_bulk_cand;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str]):bat[:timestamp] ", "MTIMEtimestamp_fromstr_bulk;", "" ] +[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str], X_2:bat[:oid]):bat[:timestamp] ", "MTIMEtimestamp_fromstr_bulk_cand;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:timestamp]):bat[:timestamp] ", "MTIMEtimestamp_timestamp_bulk;", "" ] +[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:timestamp], X_2:bat[:oid]):bat[:timestamp] ", "MTIMEtimestamp_timestamp_bulk_cand;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str], X_2:int):bat[:timestamp] ", "batstr_2time_timestamp;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str], X_2:bat[:oid], X_3:int):bat[:timestamp] ", "batstr_2time_timestamp_cand;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str], X_2:int, X_3:int):bat[:timestamp] ", "batstr_2time_timestamptz;", "" ] diff --git a/clients/Tests/MAL-signatures.stable.out.int128 b/clients/Tests/MAL-signatures.stable.out.int128 --- a/clients/Tests/MAL-signatures.stable.out.int128 +++ b/clients/Tests/MAL-signatures.stable.out.int128 @@ -5336,15 +5336,22 @@ stdout of test 'MAL-signatures` in direc [ "batcalc", "cmp", "pattern batcalc.cmp(X_1:str, X_2:bat[:str]):bat[:bte] ", "CMDbatCMP;", "" ] [ "batcalc", "cmp", "pattern batcalc.cmp(X_1:str, X_2:bat[:str], X_3:bat[:oid]):bat[:bte] ", "CMDbatCMP;", "" ] [ "batcalc", "date", "command batcalc.date(X_1:bat[:date]):bat[:date] ", "MTIMEdate_date_bulk;", "" ] +[ "batcalc", "date", "command batcalc.date(X_1:bat[:date], X_2:bat[:oid]):bat[:date] ", "MTIMEdate_date_bulk_cand;", "" ] [ "batcalc", "date", "command batcalc.date(X_1:bat[:str]):bat[:date] ", "MTIMEdate_fromstr_bulk;", "" ] +[ "batcalc", "date", "command batcalc.date(X_1:bat[:str], X_2:bat[:oid]):bat[:date] ", "MTIMEdate_fromstr_bulk_cand;", "" ] [ "batcalc", "date", "command batcalc.date(X_1:bat[:timestamp]):bat[:date] ", "MTIMEtimestamp_extract_date_bulk;", "" ] +[ "batcalc", "date", "command batcalc.date(X_1:bat[:timestamp], X_2:bat[:oid]):bat[:date] ", "MTIMEtimestamp_extract_date_bulk_cand;", "" ] [ "batcalc", "date", "command batcalc.date(X_1:bat[:str]):bat[:date] ", "batstr_2_date;", "" ] [ "batcalc", "date", "command batcalc.date(X_1:bat[:str], X_2:bat[:oid]):bat[:date] ", "batstr_2_date_cand;", "" ] [ "batcalc", "date", "pattern batcalc.date(X_1:bat[:oid]):bat[:date] ", "nil_2_date;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:daytime]):bat[:daytime] ", "MTIMEdaytime_daytime_bulk;", "" ] +[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:daytime], X_2:bat[:oid]):bat[:daytime] ", "MTIMEdaytime_daytime_bulk_cand;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:lng]):bat[:daytime] ", "MTIMEdaytime_fromseconds_bulk;", "" ] +[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:lng], X_2:bat[:oid]):bat[:daytime] ", "MTIMEdaytime_fromseconds_bulk_cand;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:str]):bat[:daytime] ", "MTIMEdaytime_fromstr_bulk;", "" ] +[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:str], X_2:bat[:oid]):bat[:daytime] ", "MTIMEdaytime_fromstr_bulk_cand;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:timestamp]):bat[:daytime] ", "MTIMEtimestamp_extract_daytime_bulk;", "" ] +[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:timestamp], X_2:bat[:oid]):bat[:daytime] ", "MTIMEtimestamp_extract_daytime_bulk_cand;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:str], X_2:int):bat[:daytime] ", "batstr_2time_daytime;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:str], X_2:bat[:oid], X_3:int):bat[:daytime] ", "batstr_2time_daytime_cand;", "" ] [ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:daytime], X_2:bat[:oid], X_3:int):bat[:daytime] ", "daytime_2time_daytime;", "" ] @@ -7514,10 +7521,15 @@ stdout of test 'MAL-signatures` in direc [ "batcalc", "sub_noerror", "pattern batcalc.sub_noerror(X_1:sht, X_2:bat[:lng], X_3:bat[:oid]):bat[:lng] ", "CMDbatSUB;", "" ] [ "batcalc", "sub_noerror", "pattern batcalc.sub_noerror(X_1:sht, X_2:bat[:sht], X_3:bat[:oid]):bat[:sht] ", "CMDbatSUB;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:date]):bat[:timestamp] ", "MTIMEtimestamp_fromdate_bulk;", "" ] +[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:date], X_2:bat[:oid]):bat[:timestamp] ", "MTIMEtimestamp_fromdate_bulk_cand;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:lng]):bat[:timestamp] ", "MTIMEtimestamp_frommsec_bulk;", "" ] +[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:lng], X_2:bat[:oid]):bat[:timestamp] ", "MTIMEtimestamp_frommsec_bulk_cand;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:int]):bat[:timestamp] ", "MTIMEtimestamp_fromsecond_bulk;", "" ] +[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:int], X_2:bat[:oid]):bat[:timestamp] ", "MTIMEtimestamp_fromsecond_bulk_cand;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str]):bat[:timestamp] ", "MTIMEtimestamp_fromstr_bulk;", "" ] +[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str], X_2:bat[:oid]):bat[:timestamp] ", "MTIMEtimestamp_fromstr_bulk_cand;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:timestamp]):bat[:timestamp] ", "MTIMEtimestamp_timestamp_bulk;", "" ] +[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:timestamp], X_2:bat[:oid]):bat[:timestamp] ", "MTIMEtimestamp_timestamp_bulk_cand;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str], X_2:int):bat[:timestamp] ", "batstr_2time_timestamp;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str], X_2:bat[:oid], X_3:int):bat[:timestamp] ", "batstr_2time_timestamp_cand;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str], X_2:int, X_3:int):bat[:timestamp] ", "batstr_2time_timestamptz;", "" ] 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 @@ -77,6 +77,7 @@ MTIMEcurrent_timestamp(timestamp *ret) #define GET_NEXT_VAR(VAR) VAR[i] +#define GET_NEXT_VAR_CAND(VAR) VAR[p] #define INIT_ITER(VAR, VAR_BAT) VAR = bat_iterator(VAR_BAT) @@ -88,6 +89,7 @@ MTIMEcurrent_timestamp(timestamp *ret) #define GET_NEXT_ITER(VAR) BUNtvar(VAR, i) +#define GET_NEXT_ITER_CAND(VAR) BUNtvar(VAR, p) #define DEC_NOTHING(A, B) ; @@ -143,6 +145,58 @@ bailout: \ BBPkeepref(*ret = bn->batCacheid); \ return msg; \ } +#define func1_cand(NAMEBULK, MALFUNC, INTYPE, OUTTYPE, FUNC, SETFLAGS, FUNC_CALL, DEC_SRC, \ + DEC_OUTPUT, INIT_SRC, INIT_OUTPUT, GET_NEXT_SRC) \ +static str \ +NAMEBULK##_cand(bat *ret, const bat *bid, const bat *sid) \ +{ \ + BAT *b1 = NULL, *s = NULL, *bn = NULL; \ + BUN n; \ + DEC_SRC(INTYPE, src1); \ + DEC_OUTPUT(OUTTYPE, dst); \ + str msg = MAL_SUCCEED; \ + struct canditer ci; \ + oid off; \ + \ + if ((b1 = BATdescriptor(*bid)) == NULL) { \ + msg = createException(MAL, "batmtime." MALFUNC "_cand", \ + SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); \ + goto bailout; \ + } \ + if (sid && !is_bat_nil(*sid) && (s = BATdescriptor(*sid)) == NULL) {\ + msg = createException(MAL, "batmtime." MALFUNC "_cand", \ + SQLSTATE(HY005) RUNTIME_OBJECT_MISSING); \ + goto bailout; \ + } \ + off = b1->hseqbase; \ + n = canditer_init(&ci, b1, s); \ + if ((bn = COLnew(b1->hseqbase, TYPE_##OUTTYPE, n, TRANSIENT)) == NULL) { \ + msg = createException(MAL, "batmtime." MALFUNC "_cand", \ + SQLSTATE(HY013) MAL_MALLOC_FAIL); \ + goto bailout; \ + } \ + INIT_SRC(src1, b1); \ + INIT_OUTPUT(dst, bn); \ + for (BUN i = 0; i < n; i++) { \ + BUN p = (BUN) (canditer_next(&ci) - off); \ + FUNC_CALL(FUNC, (dst[i]), (GET_NEXT_SRC(src1))); \ + } \ + bn->tnonil = b1->tnonil; \ + bn->tnil = b1->tnil; \ + BATsetcount(bn, n); \ + SETFLAGS; \ + bn->tkey = false; \ +bailout: \ + if (b1) \ + BBPunfix(b1->batCacheid); \ + if (s) \ + BBPunfix(s->batCacheid); \ + if (msg && bn) \ + BBPreclaim(bn); \ + else if (bn) \ + BBPkeepref(*ret = bn->batCacheid); \ + return msg; \ +} #define func1_noexcept(FUNC, RET, PARAM) RET = FUNC(PARAM) #define func1_except(FUNC, RET, PARAM) msg = FUNC(&RET, PARAM); if (msg) break; @@ -541,13 +595,19 @@ date_fromstr_func(date *ret, str s) } func1(MTIMEdate_fromstr, MTIMEdate_fromstr_bulk, "date_fromstr", str, date, date_fromstr_func, SETFLAGS, func1_except, \ DEC_ITER, DEC_VAR_R, INIT_ITER, INIT_VAR, GET_NEXT_ITER) +func1_cand(MTIMEdate_fromstr_bulk, "date_fromstr", str, date, date_fromstr_func, SETFLAGS, func1_except, \ + DEC_ITER, DEC_VAR_R, INIT_ITER, INIT_VAR, GET_NEXT_ITER_CAND) #define date_date(m) m func1(MTIMEdate_date, MTIMEdate_date_bulk, "date_date", date, date, date_date, COPYFLAGS, func1_noexcept, \ DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR) +func1_cand(MTIMEdate_date_bulk, "date_date", date, date, date_date, COPYFLAGS, func1_noexcept, \ + DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR_CAND) func1(MTIMEtimestamp_extract_date, MTIMEtimestamp_extract_date_bulk, "date", timestamp, date, timestamp_date, COPYFLAGS, func1_noexcept, \ DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR) +func1_cand(MTIMEtimestamp_extract_date_bulk, "date", timestamp, date, timestamp_date, COPYFLAGS, func1_noexcept, \ + DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR_CAND) static inline str timestamp_fromstr_func(timestamp *ret, str s) @@ -558,14 +618,20 @@ timestamp_fromstr_func(timestamp *ret, s } func1(MTIMEtimestamp_fromstr, MTIMEtimestamp_fromstr_bulk, "timestamp_fromstr", str, timestamp, timestamp_fromstr_func, SETFLAGS, func1_except, \ DEC_ITER, DEC_VAR_R, INIT_ITER, INIT_VAR, GET_NEXT_ITER) +func1_cand(MTIMEtimestamp_fromstr_bulk, "timestamp_fromstr", str, timestamp, timestamp_fromstr_func, SETFLAGS, func1_except, \ + DEC_ITER, DEC_VAR_R, INIT_ITER, INIT_VAR, GET_NEXT_ITER_CAND) #define timestamp_timestamp(m) m func1(MTIMEtimestamp_timestamp, MTIMEtimestamp_timestamp_bulk, "timestamp_timestamp", timestamp, timestamp, timestamp_timestamp, COPYFLAGS, func1_noexcept, \ DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR) +func1_cand(MTIMEtimestamp_timestamp_bulk, "timestamp_timestamp", timestamp, timestamp, timestamp_timestamp, COPYFLAGS, func1_noexcept, \ + DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR_CAND) #define mkts(dt) timestamp_create(dt, daytime_create(0, 0, 0, 0)) func1(MTIMEtimestamp_fromdate, MTIMEtimestamp_fromdate_bulk, "timestamp_fromdate", date, timestamp, mkts, COPYFLAGS, func1_noexcept, \ DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR) +func1_cand(MTIMEtimestamp_fromdate_bulk, "timestamp_fromdate", date, timestamp, mkts, COPYFLAGS, func1_noexcept, \ + DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR_CAND) #define seconds_since_epoch(t) is_timestamp_nil(t) ? int_nil : (int) (timestamp_diff(t, unixepoch) / 1000000); func1(MTIMEseconds_since_epoch, MTIMEseconds_since_epoch_bulk, "seconds_since_epoch", timestamp, int, seconds_since_epoch, COPYFLAGS, func1_noexcept, \ @@ -581,8 +647,12 @@ func1(MTIMEseconds_since_epoch, MTIMEsec (msec) * LL_CONSTANT(1000))) func1(MTIMEtimestamp_fromsecond, MTIMEtimestamp_fromsecond_bulk, "timestamp_fromsecond", int, timestamp, mktsfromsec, COPYFLAGS, func1_noexcept, \ DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR) +func1_cand(MTIMEtimestamp_fromsecond_bulk, "timestamp_fromsecond", int, timestamp, mktsfromsec, COPYFLAGS, func1_noexcept, \ + DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR_CAND) func1(MTIMEtimestamp_frommsec, MTIMEtimestamp_frommsec_bulk, "timestamp_frommsec", lng, timestamp, mktsfrommsec, COPYFLAGS, func1_noexcept, \ DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR) +func1_cand(MTIMEtimestamp_frommsec_bulk, "timestamp_frommsec", lng, timestamp, mktsfrommsec, COPYFLAGS, func1_noexcept, \ + DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR_CAND) static inline str daytime_fromstr_func(daytime *ret, str s) @@ -593,10 +663,14 @@ daytime_fromstr_func(daytime *ret, str s } func1(MTIMEdaytime_fromstr, MTIMEdaytime_fromstr_bulk, "daytime_fromstr", str, daytime, daytime_fromstr_func, SETFLAGS, func1_except, \ DEC_ITER, DEC_VAR_R, INIT_ITER, INIT_VAR, GET_NEXT_ITER) +func1_cand(MTIMEdaytime_fromstr_bulk, "daytime_fromstr", str, daytime, daytime_fromstr_func, SETFLAGS, func1_except, \ + DEC_ITER, DEC_VAR_R, INIT_ITER, INIT_VAR, GET_NEXT_ITER_CAND) #define daytime_daytime(m) m func1(MTIMEdaytime_daytime, MTIMEdaytime_daytime_bulk, "daytime_daytime", daytime, daytime, daytime_daytime, COPYFLAGS, func1_noexcept, \ DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR) +func1_cand(MTIMEdaytime_daytime_bulk, "daytime_daytime", daytime, daytime, daytime_daytime, COPYFLAGS, func1_noexcept, \ + DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR_CAND) static inline str daytime_fromseconds(daytime *ret, const lng secs) @@ -611,9 +685,13 @@ daytime_fromseconds(daytime *ret, const } func1(MTIMEdaytime_fromseconds, MTIMEdaytime_fromseconds_bulk, "daytime_fromseconds", lng, daytime, daytime_fromseconds, COPYFLAGS, func1_except, \ DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR) +func1_cand(MTIMEdaytime_fromseconds_bulk, "daytime_fromseconds", lng, daytime, daytime_fromseconds, COPYFLAGS, func1_except, \ + DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR_CAND) func1(MTIMEtimestamp_extract_daytime, MTIMEtimestamp_extract_daytime_bulk, "timestamp_extract_daytime", timestamp, daytime, timestamp_daytime, SETFLAGS, func1_noexcept, \ DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR) +func1_cand(MTIMEtimestamp_extract_daytime_bulk, "timestamp_extract_daytime", timestamp, daytime, timestamp_daytime, SETFLAGS, func1_noexcept, \ + DEC_VAR_R, DEC_VAR_R, INIT_VAR, INIT_VAR, GET_NEXT_VAR_CAND) /* return current system time zone offset in seconds East of Greenwich */ static int @@ -988,17 +1066,29 @@ static mel_func mtime_init_funcs[] = { command("calc", "daytime", MTIMEdaytime_fromseconds, false, "", args(1,2, arg("",daytime),arg("s",lng))), command("calc", "daytime", MTIMEtimestamp_extract_daytime, false, "", args(1,2, arg("",daytime),arg("t",timestamp))), command("batcalc", "date", MTIMEdate_fromstr_bulk, false, "", args(1,2, batarg("",date),batarg("s",str))), + command("batcalc", "date", MTIMEdate_fromstr_bulk_cand, false, "", args(1,3, batarg("",date),batarg("s",str),batarg("s",oid))), command("batcalc", "date", MTIMEdate_date_bulk, false, "", args(1,2, batarg("",date),batarg("d",date))), + command("batcalc", "date", MTIMEdate_date_bulk_cand, false, "", args(1,3, batarg("",date),batarg("d",date),batarg("s",oid))), command("batcalc", "date", MTIMEtimestamp_extract_date_bulk, false, "", args(1,2, batarg("",date),batarg("t",timestamp))), + command("batcalc", "date", MTIMEtimestamp_extract_date_bulk_cand, false, "", args(1,3, batarg("",date),batarg("t",timestamp),batarg("s",oid))), command("batcalc", "timestamp", MTIMEtimestamp_fromstr_bulk, false, "", args(1,2, batarg("",timestamp),batarg("s",str))), + command("batcalc", "timestamp", MTIMEtimestamp_fromstr_bulk_cand, false, "", args(1,3, batarg("",timestamp),batarg("s",str),batarg("s",oid))), command("batcalc", "timestamp", MTIMEtimestamp_timestamp_bulk, false, "", args(1,2, batarg("",timestamp),batarg("t",timestamp))), + command("batcalc", "timestamp", MTIMEtimestamp_timestamp_bulk_cand, false, "", args(1,3, batarg("",timestamp),batarg("t",timestamp),batarg("s",oid))), command("batcalc", "timestamp", MTIMEtimestamp_fromdate_bulk, false, "", args(1,2, batarg("",timestamp),batarg("d",date))), + command("batcalc", "timestamp", MTIMEtimestamp_fromdate_bulk_cand, false, "", args(1,3, batarg("",timestamp),batarg("d",date),batarg("s",oid))), command("batcalc", "timestamp", MTIMEtimestamp_fromsecond_bulk, false, "", args(1,2, batarg("",timestamp),batarg("secs",int))), + command("batcalc", "timestamp", MTIMEtimestamp_fromsecond_bulk_cand, false, "", args(1,3, batarg("",timestamp),batarg("secs",int),batarg("s",oid))), command("batcalc", "timestamp", MTIMEtimestamp_frommsec_bulk, false, "", args(1,2, batarg("",timestamp),batarg("msecs",lng))), + command("batcalc", "timestamp", MTIMEtimestamp_frommsec_bulk_cand, false, "", args(1,3, batarg("",timestamp),batarg("msecs",lng),batarg("s",oid))), command("batcalc", "daytime", MTIMEdaytime_fromstr_bulk, false, "", args(1,2, batarg("",daytime),batarg("s",str))), + command("batcalc", "daytime", MTIMEdaytime_fromstr_bulk_cand, false, "", args(1,3, batarg("",daytime),batarg("s",str),batarg("s",oid))), command("batcalc", "daytime", MTIMEdaytime_daytime_bulk, false, "", args(1,2, batarg("",daytime),batarg("d",daytime))), + command("batcalc", "daytime", MTIMEdaytime_daytime_bulk_cand, false, "", args(1,3, batarg("",daytime),batarg("d",daytime),batarg("s",oid))), command("batcalc", "daytime", MTIMEdaytime_fromseconds_bulk, false, "", args(1,2, batarg("",daytime),batarg("s",lng))), + command("batcalc", "daytime", MTIMEdaytime_fromseconds_bulk_cand, false, "", args(1,3, batarg("",daytime),batarg("s",lng),batarg("s",oid))), command("batcalc", "daytime", MTIMEtimestamp_extract_daytime_bulk, false, "", args(1,2, batarg("",daytime),batarg("t",timestamp))), + command("batcalc", "daytime", MTIMEtimestamp_extract_daytime_bulk_cand, false, "", args(1,3, batarg("",daytime),batarg("t",timestamp),batarg("s",oid))), { .imp=NULL } }; #include "mal_import.h" diff --git a/sql/test/SQLancer/Tests/sqlancer02.sql b/sql/test/SQLancer/Tests/sqlancer02.sql --- a/sql/test/SQLancer/Tests/sqlancer02.sql +++ b/sql/test/SQLancer/Tests/sqlancer02.sql @@ -178,6 +178,23 @@ WHEN 0.948918824875757072057069763104664 ROLLBACK; START TRANSACTION; +CREATE TABLE "sys"."t0" ( + "c0" TIMESTAMP, + "c2" DATE NOT NULL DEFAULT DATE '1970-01-02', + CONSTRAINT "t0_c2_pkey" PRIMARY KEY ("c2"), + CONSTRAINT "t0_c0_unique" UNIQUE ("c0") +); +COMMENT ON TABLE "sys"."t0" IS 'r'; +INSERT INTO "sys"."t0" VALUES (NULL, DATE '1970-01-02'); + +SELECT ALL t0.c2 FROM t0 WHERE (t0.c2) NOT BETWEEN ASYMMETRIC (t0.c2) AND (sql_min(CAST(t0.c0 AS DATE), t0.c2)) +UNION ALL +SELECT t0.c2 FROM t0 WHERE NOT ((t0.c2) NOT BETWEEN ASYMMETRIC (t0.c2) AND (sql_min(CAST(t0.c0 AS DATE), t0.c2))) +UNION ALL +SELECT t0.c2 FROM t0 WHERE ((t0.c2) NOT BETWEEN ASYMMETRIC (t0.c2) AND (sql_min(CAST(t0.c0 AS DATE), t0.c2))) IS NULL; +ROLLBACK; + +START TRANSACTION; CREATE TABLE "sys"."t0" ("c0" INTEGER); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list