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

Reply via email to