Changeset: c759885b7a59 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c759885b7a59 Branch: default Log Message:
merged diffs (truncated from 1167 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 @@ -3790,16 +3790,22 @@ stdout of test 'MAL-signatures` in direc [ "batcalc", "date", "command batcalc.date(X_1:bat[:str]):bat[:date] ", "MTIMEdate_fromstr_bulk;", "" ] [ "batcalc", "date", "command batcalc.date(X_1:bat[:timestamp]):bat[:date] ", "MTIMEtimestamp_extract_date_bulk;", "" ] [ "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[:lng]):bat[:daytime] ", "MTIMEdaytime_fromseconds_bulk;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:str]):bat[:daytime] ", "MTIMEdaytime_fromstr_bulk;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:timestamp]):bat[:daytime] ", "MTIMEtimestamp_extract_daytime_bulk;", "" ] [ "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;", "" ] [ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:daytime], X_2:int):bat[:daytime] ", "daytime_2time_daytime;", "" ] [ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:oid], X_2:int):bat[:daytime] ", "nil_2time_daytime;", "" ] +[ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:lng], X_2:bat[:oid], X_3:int):bat[:daytime] ", "second_interval_2_daytime;", "" ] [ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:lng], X_2:int):bat[:daytime] ", "second_interval_2_daytime;", "" ] -[ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:daytime], X_2:int):bat[:daytime] ", "str_2time_daytimetz;", "" ] +[ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:daytime], X_2:bat[:oid], X_3:int, X_4:int):bat[:daytime] ", "str_2time_daytimetz;", "" ] +[ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:daytime], X_2:int, X_3:int):bat[:daytime] ", "str_2time_daytimetz;", "" ] +[ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:timestamp], X_2:bat[:oid], X_3:int):bat[:daytime] ", "timestamp_2_daytime;", "" ] [ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:timestamp], X_2:int):bat[:daytime] ", "timestamp_2_daytime;", "" ] [ "batcalc", "dbl", "pattern batcalc.dbl(X_1:bat[:bit]):bat[:dbl] ", "CMDconvertsignal_dbl;", "" ] [ "batcalc", "dbl", "pattern batcalc.dbl(X_1:bat[:bit], X_2:bat[:oid]):bat[:dbl] ", "CMDconvertsignal_dbl;", "" ] @@ -5255,10 +5261,14 @@ stdout of test 'MAL-signatures` in direc [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str]):bat[:timestamp] ", "MTIMEtimestamp_fromstr_bulk;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:timestamp]):bat[:timestamp] ", "MTIMEtimestamp_timestamp_bulk;", "" ] [ "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;", "" ] +[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str], X_2:bat[:oid], X_3:int, X_4:int):bat[:timestamp] ", "batstr_2time_timestamptz_cand;", "" ] +[ "batcalc", "timestamp", "pattern batcalc.timestamp(X_1:bat[:date], X_2:bat[:oid], X_3:int):bat[:timestamp] ", "date_2_timestamp;", "" ] [ "batcalc", "timestamp", "pattern batcalc.timestamp(X_1:bat[:date], X_2:int):bat[:timestamp] ", "date_2_timestamp;", "" ] [ "batcalc", "timestamp", "pattern batcalc.timestamp(X_1:bat[:oid], X_2:int):bat[:timestamp] ", "nil_2time_timestamp;", "" ] [ "batcalc", "timestamp", "pattern batcalc.timestamp(X_1:bat[:oid], X_2:int, X_3:bat[:BAT]):bat[:timestamp] ", "nil_2time_timestamp;", "" ] +[ "batcalc", "timestamp", "pattern batcalc.timestamp(X_1:bat[:timestamp], X_2:bat[:oid], X_3:int):bat[:timestamp] ", "timestamp_2time_timestamp;", "" ] [ "batcalc", "timestamp", "pattern batcalc.timestamp(X_1:bat[:timestamp], X_2:int):bat[:timestamp] ", "timestamp_2time_timestamp;", "" ] [ "batcalc", "wkb", "command batcalc.wkb(X_1:bat[:wkb], X_2:int, X_3:int):bat[:wkb] ", "geom_2_geom_bat;", "" ] [ "batcalc", "xml", "command batcalc.xml(X_1:bat[:str]):bat[:xml] ", "BATXMLstr2xml;", "" ] 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 @@ -5338,16 +5338,22 @@ stdout of test 'MAL-signatures` in direc [ "batcalc", "date", "command batcalc.date(X_1:bat[:str]):bat[:date] ", "MTIMEdate_fromstr_bulk;", "" ] [ "batcalc", "date", "command batcalc.date(X_1:bat[:timestamp]):bat[:date] ", "MTIMEtimestamp_extract_date_bulk;", "" ] [ "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[:lng]):bat[:daytime] ", "MTIMEdaytime_fromseconds_bulk;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:str]):bat[:daytime] ", "MTIMEdaytime_fromstr_bulk;", "" ] [ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:timestamp]):bat[:daytime] ", "MTIMEtimestamp_extract_daytime_bulk;", "" ] [ "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;", "" ] [ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:daytime], X_2:int):bat[:daytime] ", "daytime_2time_daytime;", "" ] [ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:oid], X_2:int):bat[:daytime] ", "nil_2time_daytime;", "" ] +[ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:lng], X_2:bat[:oid], X_3:int):bat[:daytime] ", "second_interval_2_daytime;", "" ] [ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:lng], X_2:int):bat[:daytime] ", "second_interval_2_daytime;", "" ] -[ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:daytime], X_2:int):bat[:daytime] ", "str_2time_daytimetz;", "" ] +[ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:daytime], X_2:bat[:oid], X_3:int, X_4:int):bat[:daytime] ", "str_2time_daytimetz;", "" ] +[ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:daytime], X_2:int, X_3:int):bat[:daytime] ", "str_2time_daytimetz;", "" ] +[ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:timestamp], X_2:bat[:oid], X_3:int):bat[:daytime] ", "timestamp_2_daytime;", "" ] [ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:timestamp], X_2:int):bat[:daytime] ", "timestamp_2_daytime;", "" ] [ "batcalc", "dbl", "pattern batcalc.dbl(X_1:bat[:bit]):bat[:dbl] ", "CMDconvertsignal_dbl;", "" ] [ "batcalc", "dbl", "pattern batcalc.dbl(X_1:bat[:bit], X_2:bat[:oid]):bat[:dbl] ", "CMDconvertsignal_dbl;", "" ] @@ -6818,12 +6824,17 @@ stdout of test 'MAL-signatures` in direc [ "batcalc", "mod_noerror", "pattern batcalc.mod_noerror(X_1:sht, X_2:bat[:sht], X_3:bat[:oid]):bat[:int] ", "CMDbatMOD;", "" ] [ "batcalc", "mod_noerror", "pattern batcalc.mod_noerror(X_1:sht, X_2:bat[:sht], X_3:bat[:oid]):bat[:lng] ", "CMDbatMOD;", "" ] [ "batcalc", "mod_noerror", "pattern batcalc.mod_noerror(X_1:sht, X_2:bat[:sht], X_3:bat[:oid]):bat[:sht] ", "CMDbatMOD;", "" ] +[ "batcalc", "month_interval", "pattern batcalc.month_interval(X_1:bat[:bte], X_2:bat[:oid], X_3:int, X_4:int):bat[:int] ", "month_interval;", "" ] [ "batcalc", "month_interval", "pattern batcalc.month_interval(X_1:bat[:bte], X_2:int, X_3:int):bat[:int] ", "month_interval;", "" ] [ "batcalc", "month_interval", "pattern batcalc.month_interval(X_1:bat[:hge], X_2:bat[:oid], X_3:int, X_4:int):bat[:int] ", "month_interval;", "" ] [ "batcalc", "month_interval", "pattern batcalc.month_interval(X_1:bat[:hge], X_2:int, X_3:int):bat[:int] ", "month_interval;", "" ] +[ "batcalc", "month_interval", "pattern batcalc.month_interval(X_1:bat[:int], X_2:bat[:oid], X_3:int, X_4:int):bat[:int] ", "month_interval;", "" ] [ "batcalc", "month_interval", "pattern batcalc.month_interval(X_1:bat[:int], X_2:int, X_3:int):bat[:int] ", "month_interval;", "" ] +[ "batcalc", "month_interval", "pattern batcalc.month_interval(X_1:bat[:lng], X_2:bat[:oid], X_3:int, X_4:int):bat[:int] ", "month_interval;", "" ] [ "batcalc", "month_interval", "pattern batcalc.month_interval(X_1:bat[:lng], X_2:int, X_3:int):bat[:int] ", "month_interval;", "" ] +[ "batcalc", "month_interval", "pattern batcalc.month_interval(X_1:bat[:sht], X_2:bat[:oid], X_3:int, X_4:int):bat[:int] ", "month_interval;", "" ] [ "batcalc", "month_interval", "pattern batcalc.month_interval(X_1:bat[:sht], X_2:int, X_3:int):bat[:int] ", "month_interval;", "" ] +[ "batcalc", "month_interval", "pattern batcalc.month_interval(X_1:bat[:str], X_2:bat[:oid], X_3:int, X_4:int):bat[:int] ", "month_interval_str;", "" ] [ "batcalc", "month_interval", "pattern batcalc.month_interval(X_1:bat[:str], X_2:int, X_3:int):bat[:int] ", "month_interval_str;", "" ] [ "batcalc", "mul_noerror", "pattern batcalc.mul_noerror(X_1:bat[:bte], X_2:bat[:bte], X_3:bat[:oid], X_4:bat[:oid]):bat[:bte] ", "CMDbatMUL;", "" ] [ "batcalc", "mul_noerror", "pattern batcalc.mul_noerror(X_1:bat[:bte], X_2:bat[:dbl], X_3:bat[:oid], X_4:bat[:oid]):bat[:dbl] ", "CMDbatMUL;", "" ] @@ -7232,13 +7243,19 @@ stdout of test 'MAL-signatures` in direc [ "batcalc", "second_interval", "command batcalc.second_interval(X_1:int, X_2:bat[:hge], X_3:int, X_4:int):bat[:lng] ", "hge_batdec2second_interval;", "" ] [ "batcalc", "second_interval", "command batcalc.second_interval(X_1:int, X_2:bat[:int], X_3:int, X_4:int):bat[:lng] ", "int_batdec2second_interval;", "" ] [ "batcalc", "second_interval", "command batcalc.second_interval(X_1:int, X_2:bat[:lng], X_3:int, X_4:int):bat[:lng] ", "lng_batdec2second_interval;", "" ] +[ "batcalc", "second_interval", "pattern batcalc.second_interval(X_1:bat[:bte], X_2:bat[:oid], X_3:int, X_4:int):bat[:lng] ", "second_interval;", "" ] [ "batcalc", "second_interval", "pattern batcalc.second_interval(X_1:bat[:bte], X_2:int, X_3:int):bat[:lng] ", "second_interval;", "" ] [ "batcalc", "second_interval", "pattern batcalc.second_interval(X_1:bat[:hge], X_2:bat[:oid], X_3:int, X_4:int):bat[:lng] ", "second_interval;", "" ] [ "batcalc", "second_interval", "pattern batcalc.second_interval(X_1:bat[:hge], X_2:int, X_3:int):bat[:lng] ", "second_interval;", "" ] +[ "batcalc", "second_interval", "pattern batcalc.second_interval(X_1:bat[:int], X_2:bat[:oid], X_3:int, X_4:int):bat[:lng] ", "second_interval;", "" ] [ "batcalc", "second_interval", "pattern batcalc.second_interval(X_1:bat[:int], X_2:int, X_3:int):bat[:lng] ", "second_interval;", "" ] +[ "batcalc", "second_interval", "pattern batcalc.second_interval(X_1:bat[:lng], X_2:bat[:oid], X_3:int, X_4:int):bat[:lng] ", "second_interval;", "" ] [ "batcalc", "second_interval", "pattern batcalc.second_interval(X_1:bat[:lng], X_2:int, X_3:int):bat[:lng] ", "second_interval;", "" ] +[ "batcalc", "second_interval", "pattern batcalc.second_interval(X_1:bat[:sht], X_2:bat[:oid], X_3:int, X_4:int):bat[:lng] ", "second_interval;", "" ] [ "batcalc", "second_interval", "pattern batcalc.second_interval(X_1:bat[:sht], X_2:int, X_3:int):bat[:lng] ", "second_interval;", "" ] +[ "batcalc", "second_interval", "pattern batcalc.second_interval(X_1:bat[:daytime], X_2:bat[:oid], X_3:int, X_4:int):bat[:lng] ", "second_interval_daytime;", "" ] [ "batcalc", "second_interval", "pattern batcalc.second_interval(X_1:bat[:daytime], X_2:int, X_3:int):bat[:lng] ", "second_interval_daytime;", "" ] +[ "batcalc", "second_interval", "pattern batcalc.second_interval(X_1:bat[:str], X_2:bat[:oid], X_3:int, X_4:int):bat[:lng] ", "second_interval_str;", "" ] [ "batcalc", "second_interval", "pattern batcalc.second_interval(X_1:bat[:str], X_2:int, X_3:int):bat[:lng] ", "second_interval_str;", "" ] [ "batcalc", "second_interval", "command batcalc.second_interval(X_1:int, X_2:bat[:sht], X_3:int, X_4:int):bat[:lng] ", "sht_batdec2second_interval;", "" ] [ "batcalc", "sht", "pattern batcalc.sht(X_1:bat[:bit]):bat[:sht] ", "CMDconvertsignal_sht;", "" ] @@ -7493,10 +7510,14 @@ stdout of test 'MAL-signatures` in direc [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str]):bat[:timestamp] ", "MTIMEtimestamp_fromstr_bulk;", "" ] [ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:timestamp]):bat[:timestamp] ", "MTIMEtimestamp_timestamp_bulk;", "" ] [ "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;", "" ] +[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str], X_2:bat[:oid], X_3:int, X_4:int):bat[:timestamp] ", "batstr_2time_timestamptz_cand;", "" ] +[ "batcalc", "timestamp", "pattern batcalc.timestamp(X_1:bat[:date], X_2:bat[:oid], X_3:int):bat[:timestamp] ", "date_2_timestamp;", "" ] [ "batcalc", "timestamp", "pattern batcalc.timestamp(X_1:bat[:date], X_2:int):bat[:timestamp] ", "date_2_timestamp;", "" ] [ "batcalc", "timestamp", "pattern batcalc.timestamp(X_1:bat[:oid], X_2:int):bat[:timestamp] ", "nil_2time_timestamp;", "" ] [ "batcalc", "timestamp", "pattern batcalc.timestamp(X_1:bat[:oid], X_2:int, X_3:bat[:BAT]):bat[:timestamp] ", "nil_2time_timestamp;", "" ] +[ "batcalc", "timestamp", "pattern batcalc.timestamp(X_1:bat[:timestamp], X_2:bat[:oid], X_3:int):bat[:timestamp] ", "timestamp_2time_timestamp;", "" ] [ "batcalc", "timestamp", "pattern batcalc.timestamp(X_1:bat[:timestamp], X_2:int):bat[:timestamp] ", "timestamp_2time_timestamp;", "" ] [ "batcalc", "wkb", "command batcalc.wkb(X_1:bat[:wkb], X_2:int, X_3:int):bat[:wkb] ", "geom_2_geom_bat;", "" ] [ "batcalc", "xml", "command batcalc.xml(X_1:bat[:str]):bat[:xml] ", "BATXMLstr2xml;", "" ] diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -5667,16 +5667,22 @@ static mel_func sql_init_funcs[] = { pattern("calc", "timestamp", str_2time_timestamptz, false, "cast to timestamp and check for overflow", args(1,4, arg("",timestamp),arg("v",str),arg("digits",int),arg("has_tz",int))), pattern("calc", "timestamp", timestamp_2time_timestamp, false, "cast timestamp to timestamp and check for overflow", args(1,3, arg("",timestamp),arg("v",timestamp),arg("digits",int))), command("batcalc", "timestamp", batstr_2time_timestamp, false, "cast to timestamp and check for overflow", args(1,3, batarg("",timestamp),batarg("v",str),arg("digits",int))), + command("batcalc", "timestamp", batstr_2time_timestamp_cand, false, "cast to timestamp and check for overflow", args(1,4, batarg("",timestamp),batarg("v",str),batarg("s",oid),arg("digits",int))), command("batcalc", "timestamp", batstr_2time_timestamptz, false, "cast to timestamp and check for overflow", args(1,4, batarg("",timestamp),batarg("v",str),arg("digits",int),arg("has_tz",int))), + command("batcalc", "timestamp", batstr_2time_timestamptz_cand, false, "cast to timestamp and check for overflow", args(1,5, batarg("",timestamp),batarg("v",str),batarg("s",oid),arg("digits",int),arg("has_tz",int))), pattern("batcalc", "timestamp", timestamp_2time_timestamp, false, "cast timestamp to timestamp and check for overflow", args(1,3, batarg("",timestamp),batarg("v",timestamp),arg("digits",int))), + pattern("batcalc", "timestamp", timestamp_2time_timestamp, false, "cast timestamp to timestamp and check for overflow", args(1,4, batarg("",timestamp),batarg("v",timestamp),batarg("s",oid),arg("digits",int))), pattern("calc", "daytime", nil_2time_daytime, false, "cast to daytime and check for overflow", args(1,3, arg("",daytime),arg("v",void),arg("digits",int))), pattern("batcalc", "daytime", nil_2time_daytime, false, "cast to daytime and check for overflow", args(1,3, batarg("",daytime),batarg("v",oid),arg("digits",int))), pattern("calc", "daytime", str_2time_daytime, false, "cast to daytime and check for overflow", args(1,3, arg("",daytime),arg("v",str),arg("digits",int))), pattern("calc", "daytime", str_2time_daytimetz, false, "cast to daytime and check for overflow", args(1,4, arg("",daytime),arg("v",str),arg("digits",int),arg("has_tz",int))), pattern("calc", "daytime", daytime_2time_daytime, false, "cast daytime to daytime and check for overflow", args(1,3, arg("",daytime),arg("v",daytime),arg("digits",int))), command("batcalc", "daytime", batstr_2time_daytime, false, "cast to daytime and check for overflow", args(1,3, batarg("",daytime),batarg("v",str),arg("digits",int))), - pattern("batcalc", "daytime", str_2time_daytimetz, false, "cast daytime to daytime and check for overflow", args(1,3, batarg("",daytime),batarg("v",daytime),arg("digits",int))), + command("batcalc", "daytime", batstr_2time_daytime_cand, false, "cast to daytime and check for overflow", args(1,4, batarg("",daytime),batarg("v",str),batarg("s",oid),arg("digits",int))), + pattern("batcalc", "daytime", str_2time_daytimetz, false, "cast daytime to daytime and check for overflow", args(1,4, batarg("",daytime),batarg("v",daytime),arg("digits",int),arg("has_tz",int))), + pattern("batcalc", "daytime", str_2time_daytimetz, false, "cast daytime to daytime and check for overflow", args(1,5, batarg("",daytime),batarg("v",daytime),batarg("s",oid),arg("digits",int),arg("has_tz",int))), pattern("batcalc", "daytime", daytime_2time_daytime, false, "cast daytime to daytime and check for overflow", args(1,3, batarg("",daytime),batarg("v",daytime),arg("digits",int))), + pattern("batcalc", "daytime", daytime_2time_daytime, false, "cast daytime to daytime and check for overflow", args(1,4, batarg("",daytime),batarg("v",daytime),batarg("s",oid),arg("digits",int))), command("sql", "date_trunc", bat_date_trunc, false, "Truncate a timestamp to (millennium, century,decade,year,quarter,month,week,day,hour,minute,second, milliseconds,microseconds)", args(1,3, batarg("",timestamp),arg("scale",str),batarg("v",timestamp))), command("sql", "date_trunc", date_trunc, false, "Truncate a timestamp to (millennium, century,decade,year,quarter,month,week,day,hour,minute,second, milliseconds,microseconds)", args(1,3, arg("",timestamp),arg("scale",str),arg("v",timestamp))), pattern("sql", "current_time", SQLcurrent_daytime, false, "Get the clients current daytime", args(1,1, arg("",daytime))), @@ -5685,6 +5691,7 @@ static mel_func sql_init_funcs[] = { pattern("batcalc", "date", nil_2_date, false, "cast to date", args(1,2, batarg("",date),batarg("v",oid))), pattern("calc", "date", str_2_date, false, "cast to date", args(1,2, arg("",date),arg("v",str))), command("batcalc", "date", batstr_2_date, false, "cast to date", args(1,2, batarg("",date),batarg("v",str))), + command("batcalc", "date", batstr_2_date_cand, false, "cast to date", args(1,3, batarg("",date),batarg("v",str),batarg("s",oid))), command("calc", "blob", str_2_blob, false, "cast to blob", args(1,2, arg("",blob),arg("v",str))), command("batcalc", "blob", batstr_2_blob, false, "cast to blob", args(1,2, batarg("",blob),batarg("v",str))), command("batcalc", "blob", batstr_2_blob_cand, false, "cast to blob", args(1,3, batarg("",blob),batarg("v",str),batarg("s",oid))), @@ -5696,24 +5703,34 @@ static mel_func sql_init_funcs[] = { command("calc", "substring", STRsubstring, false, "", args(1,4, arg("",str),arg("s",str),arg("offset",int),arg("count",int))), pattern("calc", "month_interval", month_interval_str, false, "cast str to a month_interval and check for overflow", args(1,4, arg("",int),arg("v",str),arg("ek",int),arg("sk",int))), pattern("batcalc", "month_interval", month_interval_str, false, "cast str to a month_interval and check for overflow", args(1,4, batarg("",int),batarg("v",str),arg("ek",int),arg("sk",int))), + pattern("batcalc", "month_interval", month_interval_str, false, "cast str to a month_interval and check for overflow", args(1,5, batarg("",int),batarg("v",str),batarg("s",oid),arg("ek",int),arg("sk",int))), pattern("calc", "second_interval", second_interval_str, false, "cast str to a second_interval and check for overflow", args(1,4, arg("",lng),arg("v",str),arg("ek",int),arg("sk",int))), pattern("batcalc", "second_interval", second_interval_str, false, "cast str to a second_interval and check for overflow", args(1,4, batarg("",lng),batarg("v",str),arg("ek",int),arg("sk",int))), + pattern("batcalc", "second_interval", second_interval_str, false, "cast str to a second_interval and check for overflow", args(1,5, batarg("",lng),batarg("v",str),batarg("s",oid),arg("ek",int),arg("sk",int))), pattern("calc", "month_interval", month_interval, false, "cast bte to a month_interval and check for overflow", args(1,4, arg("",int),arg("v",bte),arg("ek",int),arg("sk",int))), pattern("batcalc", "month_interval", month_interval, false, "cast bte to a month_interval and check for overflow", args(1,4, batarg("",int),batarg("v",bte),arg("ek",int),arg("sk",int))), + pattern("batcalc", "month_interval", month_interval, false, "cast bte to a month_interval and check for overflow", args(1,5, batarg("",int),batarg("v",bte),batarg("s",oid),arg("ek",int),arg("sk",int))), pattern("calc", "second_interval", second_interval, false, "cast bte to a second_interval and check for overflow", args(1,4, arg("",lng),arg("v",bte),arg("ek",int),arg("sk",int))), pattern("batcalc", "second_interval", second_interval, false, "cast bte to a second_interval and check for overflow", args(1,4, batarg("",lng),batarg("v",bte),arg("ek",int),arg("sk",int))), + pattern("batcalc", "second_interval", second_interval, false, "cast bte to a second_interval and check for overflow", args(1,5, batarg("",lng),batarg("v",bte),batarg("s",oid),arg("ek",int),arg("sk",int))), pattern("calc", "month_interval", month_interval, false, "cast sht to a month_interval and check for overflow", args(1,4, arg("",int),arg("v",sht),arg("ek",int),arg("sk",int))), pattern("batcalc", "month_interval", month_interval, false, "cast sht to a month_interval and check for overflow", args(1,4, batarg("",int),batarg("v",sht),arg("ek",int),arg("sk",int))), + pattern("batcalc", "month_interval", month_interval, false, "cast sht to a month_interval and check for overflow", args(1,5, batarg("",int),batarg("v",sht),batarg("s",oid),arg("ek",int),arg("sk",int))), pattern("calc", "second_interval", second_interval, false, "cast sht to a second_interval and check for overflow", args(1,4, arg("",lng),arg("v",sht),arg("ek",int),arg("sk",int))), pattern("batcalc", "second_interval", second_interval, false, "cast sht to a second_interval and check for overflow", args(1,4, batarg("",lng),batarg("v",sht),arg("ek",int),arg("sk",int))), + pattern("batcalc", "second_interval", second_interval, false, "cast sht to a second_interval and check for overflow", args(1,5, batarg("",lng),batarg("v",sht),batarg("s",oid),arg("ek",int),arg("sk",int))), pattern("calc", "month_interval", month_interval, false, "cast int to a month_interval and check for overflow", args(1,4, arg("",int),arg("v",int),arg("ek",int),arg("sk",int))), pattern("batcalc", "month_interval", month_interval, false, "cast int to a month_interval and check for overflow", args(1,4, batarg("",int),batarg("v",int),arg("ek",int),arg("sk",int))), + pattern("batcalc", "month_interval", month_interval, false, "cast int to a month_interval and check for overflow", args(1,5, batarg("",int),batarg("v",int),batarg("s",oid),arg("ek",int),arg("sk",int))), pattern("calc", "second_interval", second_interval, false, "cast int to a second_interval and check for overflow", args(1,4, arg("",lng),arg("v",int),arg("ek",int),arg("sk",int))), pattern("batcalc", "second_interval", second_interval, false, "cast int to a second_interval and check for overflow", args(1,4, batarg("",lng),batarg("v",int),arg("ek",int),arg("sk",int))), + pattern("batcalc", "second_interval", second_interval, false, "cast int to a second_interval and check for overflow", args(1,5, batarg("",lng),batarg("v",int),batarg("s",oid),arg("ek",int),arg("sk",int))), pattern("calc", "month_interval", month_interval, false, "cast lng to a month_interval and check for overflow", args(1,4, arg("",int),arg("v",lng),arg("ek",int),arg("sk",int))), pattern("batcalc", "month_interval", month_interval, false, "cast lng to a month_interval and check for overflow", args(1,4, batarg("",int),batarg("v",lng),arg("ek",int),arg("sk",int))), + pattern("batcalc", "month_interval", month_interval, false, "cast lng to a month_interval and check for overflow", args(1,5, batarg("",int),batarg("v",lng),batarg("s",oid),arg("ek",int),arg("sk",int))), pattern("calc", "second_interval", second_interval, false, "cast lng to a second_interval and check for overflow", args(1,4, arg("",lng),arg("v",lng),arg("ek",int),arg("sk",int))), pattern("batcalc", "second_interval", second_interval, false, "cast lng to a second_interval and check for overflow", args(1,4, batarg("",lng),batarg("v",lng),arg("ek",int),arg("sk",int))), + pattern("batcalc", "second_interval", second_interval, false, "cast lng to a second_interval and check for overflow", args(1,5, batarg("",lng),batarg("v",lng),batarg("s",oid),arg("ek",int),arg("sk",int))), pattern("calc", "rowid", sql_rowid, false, "return the next rowid", args(1,4, arg("",oid),argany("v",1),arg("schema",str),arg("table",str))), pattern("sql", "shrink", SQLshrink, true, "Consolidate the deletion table over all columns using shrinking", args(0,2, arg("sch",str),arg("tbl",str))), pattern("sql", "reuse", SQLreuse, true, "Consolidate the deletion table over all columns reusing deleted slots", args(0,2, arg("sch",str),arg("tbl",str))), @@ -5723,12 +5740,16 @@ static mel_func sql_init_funcs[] = { command("sql", "epilogue", SQLepilogue, false, "", noargs), pattern("calc", "second_interval", second_interval_daytime, false, "cast daytime to a second_interval and check for overflow", args(1,4, arg("",lng),arg("v",daytime),arg("ek",int),arg("sk",int))), pattern("batcalc", "second_interval", second_interval_daytime, false, "cast daytime to a second_interval and check for overflow", args(1,4, batarg("",lng),batarg("v",daytime),arg("ek",int),arg("sk",int))), + pattern("batcalc", "second_interval", second_interval_daytime, false, "cast daytime to a second_interval and check for overflow", args(1,5, batarg("",lng),batarg("v",daytime),batarg("s",oid),arg("ek",int),arg("sk",int))), pattern("calc", "daytime", second_interval_2_daytime, false, "cast second_interval to a daytime and check for overflow", args(1,3, arg("",daytime),arg("v",lng),arg("d",int))), pattern("batcalc", "daytime", second_interval_2_daytime, false, "cast second_interval to a daytime and check for overflow", args(1,3, batarg("",daytime),batarg("v",lng),arg("d",int))), + pattern("batcalc", "daytime", second_interval_2_daytime, false, "cast second_interval to a daytime and check for overflow", args(1,4, batarg("",daytime),batarg("v",lng),batarg("s",oid),arg("d",int))), pattern("calc", "daytime", timestamp_2_daytime, false, "cast timestamp to a daytime and check for overflow", args(1,3, arg("",daytime),arg("v",timestamp),arg("d",int))), pattern("batcalc", "daytime", timestamp_2_daytime, false, "cast timestamp to a daytime and check for overflow", args(1,3, batarg("",daytime),batarg("v",timestamp),arg("d",int))), + pattern("batcalc", "daytime", timestamp_2_daytime, false, "cast timestamp to a daytime and check for overflow", args(1,4, batarg("",daytime),batarg("v",timestamp),batarg("s",oid),arg("d",int))), pattern("calc", "timestamp", date_2_timestamp, false, "cast date to a timestamp and check for overflow", args(1,3, arg("",timestamp),arg("v",date),arg("d",int))), pattern("batcalc", "timestamp", date_2_timestamp, false, "cast date to a timestamp and check for overflow", args(1,3, batarg("",timestamp),batarg("v",date),arg("d",int))), + pattern("batcalc", "timestamp", date_2_timestamp, false, "cast date to a timestamp and check for overflow", args(1,4, batarg("",timestamp),batarg("v",date),batarg("s",oid),arg("d",int))), command("calc", "index", STRindex_bte, false, "Return the offsets as an index bat", args(1,3, arg("",bte),arg("v",str),arg("u",bit))), command("batcalc", "index", BATSTRindex_bte, false, "Return the offsets as an index bat", args(1,3, batarg("",bte),batarg("v",str),arg("u",bit))), command("calc", "index", STRindex_sht, false, "Return the offsets as an index bat", args(1,3, arg("",sht),arg("v",str),arg("u",bit))), @@ -6449,17 +6470,17 @@ static mel_func sql_init_funcs[] = { command("batsql", "round", hge_bat_round_wrap, false, "round off the decimal v(d,s) to r digits behind the dot (if r < 0, before the dot)", args(1,5, batarg("",hge),batarg("v",hge),arg("d",int),arg("s",int),arg("r",bte))), command("calc", "second_interval", hge_dec2second_interval, false, "cast hge decimal to a second_interval", args(1,5, arg("",lng),arg("sc",int),arg("v",hge),arg("ek",int),arg("sk",int))), command("batcalc", "second_interval", hge_batdec2second_interval, false, "cast hge decimal to a second_interval", args(1,5, batarg("",lng),arg("sc",int),batarg("v",hge),arg("ek",int),arg("sk",int))), - command("batcalc", "second_interval", hge_batdec2second_interval, false, "cast hge decimal to a second_cand_interval", args(1,6, batarg("",lng),arg("sc",int),batarg("v",hge),batarg("s",oid),arg("ek",int),arg("sk",int))), + command("batcalc", "second_interval", hge_batdec2second_interval, false, "cast hge decimal to a second_interval", args(1,6, batarg("",lng),arg("sc",int),batarg("v",hge),batarg("s",oid),arg("ek",int),arg("sk",int))), command("calc", "hge", nil_2dec_hge, false, "cast to dec(hge) and check for overflow", args(1,4, arg("",hge),arg("v",void),arg("digits",int),arg("scale",int))), command("batcalc", "hge", batnil_2dec_hge, false, "cast to dec(hge) and check for overflow", args(1,4, batarg("",hge),batarg("v",void),arg("digits",int),arg("scale",int))), command("calc", "hge", str_2dec_hge, false, "cast to dec(hge) and check for overflow", args(1,4, arg("",hge),arg("v",str),arg("digits",int),arg("scale",int))), command("batcalc", "hge", batstr_2dec_hge, false, "cast to dec(hge) and check for overflow", args(1,4, batarg("",hge),batarg("v",str),arg("digits",int),arg("scale",int))), pattern("calc", "month_interval", month_interval, false, "cast hge to a month_interval and check for overflow", args(1,4, arg("",int),arg("v",hge),arg("ek",int),arg("sk",int))), pattern("batcalc", "month_interval", month_interval, false, "cast hge to a month_interval and check for overflow", args(1,4, batarg("",int),batarg("v",hge),arg("ek",int),arg("sk",int))), - pattern("batcalc", "month_interval", month_interval, false, "cast hge to a month_cand_interval and check for overflow", args(1,5, batarg("",int),batarg("v",hge),batarg("s",oid),arg("ek",int),arg("sk",int))), + pattern("batcalc", "month_interval", month_interval, false, "cast hge to a month_interval and check for overflow", args(1,5, batarg("",int),batarg("v",hge),batarg("s",oid),arg("ek",int),arg("sk",int))), pattern("calc", "second_interval", second_interval, false, "cast hge to a second_interval and check for overflow", args(1,4, arg("",lng),arg("v",hge),arg("ek",int),arg("sk",int))), pattern("batcalc", "second_interval", second_interval, false, "cast hge to a second_interval and check for overflow", args(1,4, batarg("",lng),batarg("v",hge),arg("ek",int),arg("sk",int))), - pattern("batcalc", "second_interval", second_interval, false, "cast hge to a second_cand_interval and check for overflow", args(1,5, batarg("",lng),batarg("v",hge),batarg("s",oid),arg("ek",int),arg("sk",int))), + pattern("batcalc", "second_interval", second_interval, false, "cast hge to a second_interval and check for overflow", args(1,5, batarg("",lng),batarg("v",hge),batarg("s",oid),arg("ek",int),arg("sk",int))), /* sql_decimal_hge */ command("calc", "hge", flt_num2dec_hge, false, "cast number to decimal(hge) and check for overflow", args(1,4, arg("",hge),arg("v",flt),arg("digits",int),arg("scale",int))), command("batcalc", "hge", batflt_num2dec_hge, false, "cast number to decimal(hge) and check for overflow", args(1,4, batarg("",hge),batarg("v",flt),arg("digits",int),arg("scale",int))), diff --git a/sql/backends/monet5/sql.h b/sql/backends/monet5/sql.h --- a/sql/backends/monet5/sql.h +++ b/sql/backends/monet5/sql.h @@ -206,13 +206,16 @@ sql5_export str nil_2time_timestamp(Clie sql5_export str str_2time_timestamp(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str str_2time_timestamptz(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str batstr_2time_timestamp(bat *res, const bat *v, const int *len); +sql5_export str batstr_2time_timestamp_cand(bat *res, const bat *v, const bat *s, const int *len); sql5_export str batstr_2time_timestamptz(bat *res, const bat *v, const int *len, int *tz); +sql5_export str batstr_2time_timestamptz_cand(bat *res, const bat *v, const bat *s, const int *len, int *tz); sql5_export str timestamp_2time_timestamp(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str nil_2time_daytime(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str str_2time_daytime(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str str_2time_daytimetz(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str batstr_2time_daytime(bat *res, const bat *v, const int *len); +sql5_export str batstr_2time_daytime_cand(bat *res, const bat *v, const bat *s, const int *len); sql5_export str daytime_2time_daytime(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str bat_date_trunc(bat *res, const str *scale, const bat *v); @@ -221,6 +224,7 @@ sql5_export str date_trunc(timestamp *re sql5_export str nil_2_date(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str str_2_date(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str batstr_2_date(bat *res, const bat *val); +sql5_export str batstr_2_date_cand(bat *res, const bat *val, const bat *s); sql5_export str str_2_blob(blob * *res, const str *val); sql5_export str batstr_2_blob(bat *res, const bat *val); diff --git a/sql/backends/monet5/sql_time.c b/sql/backends/monet5/sql_time.c --- a/sql/backends/monet5/sql_time.c +++ b/sql/backends/monet5/sql_time.c @@ -27,12 +27,13 @@ str daytime_2time_daytime(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { str msg = MAL_SUCCEED; - BAT *b = NULL, *res = NULL; + BAT *b = NULL, *s = NULL, *res = NULL; BUN q = 0; daytime *restrict ret = NULL; - int tpe = getArgType(mb, pci, 1), *digits = getArgReference_int(stk, pci, 2), d = (*digits) ? *digits - 1 : 0; + int tpe = getArgType(mb, pci, 1), *digits = getArgReference_int(stk, pci, pci->argc == 4 ? 3 : 2), d = (*digits) ? *digits - 1 : 0; bool is_a_bat = false; - bat *r = NULL; + bat *r = NULL, *sid = pci->argc == 4 ? getArgReference_bat(stk, pci, 2): NULL; + struct canditer ci = {0}; #ifdef HAVE_HGE hge shift = 0, divider = 1, multiplier = 1; #else @@ -44,10 +45,14 @@ daytime_2time_daytime(Client cntxt, MalB if (is_a_bat) { tpe = getBatType(tpe); if (!(b = BATdescriptor(*getArgReference_bat(stk, pci, 1)))) { - msg = createException(SQL, "batcalc.daytime_2time_daytime", SQLSTATE(HY005) "Cannot access column descriptor"); + msg = createException(SQL, "batcalc.daytime_2time_daytime", SQLSTATE(HY005) RUNTIME_OBJECT_MISSING); goto bailout; } - q = BATcount(b); + if (sid && !is_bat_nil(*sid) && (s = BATdescriptor(*sid)) == NULL) { + msg = createException(SQL, "batcalc.timestamp_2_daytime", SQLSTATE(HY005) RUNTIME_OBJECT_MISSING); + goto bailout; + } + q = canditer_init(&ci, b, s); if (!(res = COLnew(b->hseqbase, TYPE_daytime, q, TRANSIENT))) { msg = createException(SQL, "batcalc.daytime_2time_daytime", SQLSTATE(HY013) MAL_MALLOC_FAIL); goto bailout; @@ -68,10 +73,12 @@ daytime_2time_daytime(Client cntxt, MalB } if (is_a_bat) { + oid off = b->hseqbase; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list