Changeset: 258edd50db18 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/258edd50db18
Modified Files:
        clients/Tests/MAL-signatures-hge.test
        clients/Tests/MAL-signatures.test
        clients/Tests/exports.stable.out
        gdk/gdk_calc_convert.c
        monetdb5/modules/atoms/blob.c
        monetdb5/modules/atoms/mtime.c
        sql/backends/monet5/UDF/pyapi3/conversion3.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql.h
        sql/backends/monet5/sql_cast.c
        sql/backends/monet5/sql_subquery.c
        sql/backends/monet5/sql_time.c
        sql/test/miscellaneous/Tests/select_groupby.stable.err
        testing/melcheck.py
Branch: default
Log Message:

Add check for multiple MAL commands with same arguments + fix them.
Also changes some comments for English and readability.
BATconvert can now convert strings to other varsized types.


diffs (truncated from 824 to 300 lines):

diff --git a/clients/Tests/MAL-signatures-hge.test 
b/clients/Tests/MAL-signatures-hge.test
--- a/clients/Tests/MAL-signatures-hge.test
+++ b/clients/Tests/MAL-signatures-hge.test
@@ -12,7 +12,7 @@ aggr
 allnotequal
 pattern aggr.allnotequal(X_0:bat[:any_1], X_1:bat[:any_1]):bit 
 SQLallnotequal;
-if all values in r are not equal to l return true, else if r has nil nil else 
false
+if all values in r are not equal to l, return true, else if r has nil, return 
nil, else return false
 aggr
 anyequal
 pattern aggr.anyequal(X_0:any_1, X_1:any_1):bit 
@@ -22,7 +22,7 @@ aggr
 anyequal
 pattern aggr.anyequal(X_0:bat[:any_1], X_1:bat[:any_1]):bit 
 SQLanyequal;
-if any value in r is equal to l return true, else if r has nil nil else false
+if any value in r is equal to l, return true, else if r has nil, return nil, 
else return false
 aggr
 avg
 command aggr.avg(X_0:bat[:bte], X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] 
@@ -1167,42 +1167,32 @@ aggr
 suballnotequal
 pattern aggr.suballnotequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bat[:oid], X_6:bit):bat[:bit] 
 SQLallnotequal_grp2;
-if all values in r are not equal to l return true, else if r has nil nil else 
false, except if rid is nil (ie empty) then true; with candidate list
+if all values in r are not equal to l, return true, else if r has nil return 
nil, else return false, except if rid is nil (ie empty) then return true; with 
candidate list
 aggr
 suballnotequal
 pattern aggr.suballnotequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit):bat[:bit] 
 SQLallnotequal_grp2;
-if all values in r are not equal to l return true, else if r has nil nil else 
false, except if rid is nil (ie empty) then true
-aggr
-suballnotequal
-pattern aggr.suballnotequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit):bat[:bit] 
-SQLallnotequal_grp;
-if all values in r are not equal to l return true, else if r has nil nil else 
false; with candidate list
+if all values in r are not equal to l, return true, else if r has nil return 
nil, else return false, except if rid is nil (ie empty) then return true
 aggr
 suballnotequal
 pattern aggr.suballnotequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bit):bat[:bit] 
 SQLallnotequal_grp;
-if all values in r are not equal to l return true, else if r has nil nil else 
false
+if all values in r are not equal to l, return true, else if r has nil, return 
nil else return false
 aggr
 subanyequal
 pattern aggr.subanyequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bat[:oid], X_6:bit):bat[:bit] 
 SQLanyequal_grp2;
-if any value in r is equal to l return true, else if r has nil nil else false, 
except if rid is nil (ie empty) then false; with candidate list
+if any value in r is equal to l, return true, else if r has nil, return nil, 
else return false, except if rid is nil (ie empty) then return false; with 
candidate list
 aggr
 subanyequal
 pattern aggr.subanyequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit):bat[:bit] 
 SQLanyequal_grp2;
-if any value in r is equal to l return true, else if r has nil nil else false, 
except if rid is nil (ie empty) then false
-aggr
-subanyequal
-pattern aggr.subanyequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit):bat[:bit] 
-SQLanyequal_grp;
-if any value in r is equal to l return true, else if r has nil nil else false; 
with candidate list
+if any value in r is equal to l, return true, else if r has nil, return nil, 
else return false, except if rid is nil (ie empty) then return false
 aggr
 subanyequal
 pattern aggr.subanyequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bit):bat[:bit] 
 SQLanyequal_grp;
-if any value in r is equal to l return true, else if r has nil nil else false
+if any value in r is equal to l, return true, else if r has nil, return nil, 
else return false
 aggr
 subavg
 command aggr.subavg(X_0:bat[:bte], X_1:bat[:oid], X_2:bat[:any_1], 
X_3:bat[:oid], X_4:bit) (X_5:bat[:bte], X_6:bat[:lng], X_7:bat[:lng]) 
@@ -4022,12 +4012,12 @@ bataggr
 allnotequal
 pattern bataggr.allnotequal(X_0:bat[:any_1], X_1:bat[:any_1]):bit 
 SQLallnotequal;
-(empty)
+if all values in r are not equal to l, return true, else if r has nil, return 
nil, else return false
 bataggr
 anyequal
 pattern bataggr.anyequal(X_0:bat[:any_1], X_1:bat[:any_1]):bat[:bit] 
 SQLanyequal;
-(empty)
+if any value in r is equal to l, return true, else if r has nil, return nil, 
else return false
 bataggr
 exist
 pattern bataggr.exist(X_0:any_1):bat[:bit] 
@@ -25986,8 +25976,8 @@ BLOBblob_blob_bulk;
 batcalc
 blob
 command batcalc.blob(X_0:bat[:str], X_1:bat[:oid]):bat[:blob] 
-batstr_2_blob;
-cast to blob
+BLOBblob_fromstr_bulk;
+(empty)
 batcalc
 bte
 pattern batcalc.bte(X_0:bat[:bit]):bat[:bte] 
@@ -27760,11 +27750,6 @@ MTIMEtimestamp_extract_date_bulk;
 (empty)
 batcalc
 date
-command batcalc.date(X_0:bat[:str], X_1:bat[:oid]):bat[:date] 
-batstr_2_date;
-cast to date
-batcalc
-date
 pattern batcalc.date(X_0:bat[:oid]):bat[:date] 
 nil_2_date;
 cast to date
@@ -41834,11 +41819,6 @@ command calc.blob(X_0:str):blob
 BLOBblob_fromstr;
 (empty)
 calc
-blob
-command calc.blob(X_0:str):blob 
-str_2_blob;
-cast to blob
-calc
 bte
 pattern calc.bte(X_0:bit):bte 
 CMDvarCONVERT;
@@ -42269,11 +42249,6 @@ pattern calc.date(X_0:void):date
 nil_2_date;
 cast to date
 calc
-date
-pattern calc.date(X_0:str):date 
-str_2_date;
-cast to date
-calc
 daytime
 command calc.daytime(X_0:daytime):daytime 
 MTIMEdaytime_daytime;
diff --git a/clients/Tests/MAL-signatures.test 
b/clients/Tests/MAL-signatures.test
--- a/clients/Tests/MAL-signatures.test
+++ b/clients/Tests/MAL-signatures.test
@@ -12,7 +12,7 @@ aggr
 allnotequal
 pattern aggr.allnotequal(X_0:bat[:any_1], X_1:bat[:any_1]):bit 
 SQLallnotequal;
-if all values in r are not equal to l return true, else if r has nil nil else 
false
+if all values in r are not equal to l, return true, else if r has nil, return 
nil, else return false
 aggr
 anyequal
 pattern aggr.anyequal(X_0:any_1, X_1:any_1):bit 
@@ -22,7 +22,7 @@ aggr
 anyequal
 pattern aggr.anyequal(X_0:bat[:any_1], X_1:bat[:any_1]):bit 
 SQLanyequal;
-if any value in r is equal to l return true, else if r has nil nil else false
+if any value in r is equal to l, return true, else if r has nil, return nil, 
else return false
 aggr
 avg
 command aggr.avg(X_0:bat[:bte], X_1:bat[:oid], X_2:bat[:any_1]):bat[:dbl] 
@@ -977,42 +977,32 @@ aggr
 suballnotequal
 pattern aggr.suballnotequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bat[:oid], X_6:bit):bat[:bit] 
 SQLallnotequal_grp2;
-if all values in r are not equal to l return true, else if r has nil nil else 
false, except if rid is nil (ie empty) then true; with candidate list
+if all values in r are not equal to l, return true, else if r has nil return 
nil, else return false, except if rid is nil (ie empty) then return true; with 
candidate list
 aggr
 suballnotequal
 pattern aggr.suballnotequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit):bat[:bit] 
 SQLallnotequal_grp2;
-if all values in r are not equal to l return true, else if r has nil nil else 
false, except if rid is nil (ie empty) then true
-aggr
-suballnotequal
-pattern aggr.suballnotequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit):bat[:bit] 
-SQLallnotequal_grp;
-if all values in r are not equal to l return true, else if r has nil nil else 
false; with candidate list
+if all values in r are not equal to l, return true, else if r has nil return 
nil, else return false, except if rid is nil (ie empty) then return true
 aggr
 suballnotequal
 pattern aggr.suballnotequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bit):bat[:bit] 
 SQLallnotequal_grp;
-if all values in r are not equal to l return true, else if r has nil nil else 
false
+if all values in r are not equal to l, return true, else if r has nil, return 
nil else return false
 aggr
 subanyequal
 pattern aggr.subanyequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bat[:oid], X_6:bit):bat[:bit] 
 SQLanyequal_grp2;
-if any value in r is equal to l return true, else if r has nil nil else false, 
except if rid is nil (ie empty) then false; with candidate list
+if any value in r is equal to l, return true, else if r has nil, return nil, 
else return false, except if rid is nil (ie empty) then return false; with 
candidate list
 aggr
 subanyequal
 pattern aggr.subanyequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit):bat[:bit] 
 SQLanyequal_grp2;
-if any value in r is equal to l return true, else if r has nil nil else false, 
except if rid is nil (ie empty) then false
-aggr
-subanyequal
-pattern aggr.subanyequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bat[:oid], X_5:bit):bat[:bit] 
-SQLanyequal_grp;
-if any value in r is equal to l return true, else if r has nil nil else false; 
with candidate list
+if any value in r is equal to l, return true, else if r has nil, return nil, 
else return false, except if rid is nil (ie empty) then return false
 aggr
 subanyequal
 pattern aggr.subanyequal(X_0:bat[:any_1], X_1:bat[:any_1], X_2:bat[:oid], 
X_3:bat[:oid], X_4:bit):bat[:bit] 
 SQLanyequal_grp;
-if any value in r is equal to l return true, else if r has nil nil else false
+if any value in r is equal to l, return true, else if r has nil, return nil, 
else return false
 aggr
 subavg
 command aggr.subavg(X_0:bat[:bte], X_1:bat[:oid], X_2:bat[:any_1], 
X_3:bat[:oid], X_4:bit) (X_5:bat[:bte], X_6:bat[:lng], X_7:bat[:lng]) 
@@ -3447,12 +3437,12 @@ bataggr
 allnotequal
 pattern bataggr.allnotequal(X_0:bat[:any_1], X_1:bat[:any_1]):bit 
 SQLallnotequal;
-(empty)
+if all values in r are not equal to l, return true, else if r has nil, return 
nil, else return false
 bataggr
 anyequal
 pattern bataggr.anyequal(X_0:bat[:any_1], X_1:bat[:any_1]):bat[:bit] 
 SQLanyequal;
-(empty)
+if any value in r is equal to l, return true, else if r has nil, return nil, 
else return false
 bataggr
 exist
 pattern bataggr.exist(X_0:any_1):bat[:bit] 
@@ -18091,8 +18081,8 @@ BLOBblob_blob_bulk;
 batcalc
 blob
 command batcalc.blob(X_0:bat[:str], X_1:bat[:oid]):bat[:blob] 
-batstr_2_blob;
-cast to blob
+BLOBblob_fromstr_bulk;
+(empty)
 batcalc
 bte
 pattern batcalc.bte(X_0:bat[:bit]):bat[:bte] 
@@ -19450,11 +19440,6 @@ MTIMEtimestamp_extract_date_bulk;
 (empty)
 batcalc
 date
-command batcalc.date(X_0:bat[:str], X_1:bat[:oid]):bat[:date] 
-batstr_2_date;
-cast to date
-batcalc
-date
 pattern batcalc.date(X_0:bat[:oid]):bat[:date] 
 nil_2_date;
 cast to date
@@ -30724,11 +30709,6 @@ command calc.blob(X_0:str):blob
 BLOBblob_fromstr;
 (empty)
 calc
-blob
-command calc.blob(X_0:str):blob 
-str_2_blob;
-cast to blob
-calc
 bte
 pattern calc.bte(X_0:bit):bte 
 CMDvarCONVERT;
@@ -31074,11 +31054,6 @@ pattern calc.date(X_0:void):date
 nil_2_date;
 cast to date
 calc
-date
-pattern calc.date(X_0:str):date 
-str_2_date;
-cast to date
-calc
 daytime
 command calc.daytime(X_0:daytime):daytime 
 MTIMEdaytime_daytime;
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1622,7 +1622,6 @@ str batsht_num2dec_flt(bat *res, const b
 str batsht_num2dec_int(bat *res, const bat *v, const bat *sid, const int *d2, 
const int *s2);
 str batsht_num2dec_lng(bat *res, const bat *v, const bat *sid, const int *d2, 
const int *s2);
 str batsht_num2dec_sht(bat *res, const bat *v, const bat *sid, const int *d2, 
const int *s2);
-str batstr_2_date(bat *res, const bat *val, const bat *s);
 str batstr_2time_daytime(bat *res, const bat *v, const bat *s, const int *len);
 str batstr_2time_timestamp(bat *res, const bat *v, const bat *s, const int 
*len);
 str bte_dec2_bte(bte *res, const int *s1, const bte *v);
diff --git a/gdk/gdk_calc_convert.c b/gdk/gdk_calc_convert.c
--- a/gdk/gdk_calc_convert.c
+++ b/gdk/gdk_calc_convert.c
@@ -773,7 +773,47 @@ convert_any_str(BATiter *bi, BAT *bn, st
 }
 
 static BUN
-convert_str_any(BATiter *bi, int tp, void *restrict dst,
+convert_str_var(BATiter *bi, BAT *bn, struct canditer *restrict ci)
+{
+       int tp = bn->ttype;
+       oid candoff = bi->b->hseqbase;
+       void *dst = 0;
+       size_t len = 0;
+       BUN nils = 0;
+       BUN i;
+       const void *nil = ATOMnilptr(tp);
+       const char *restrict src;
+       ssize_t (*atomfromstr)(const char *, size_t *, ptr *, bool) = 
BATatoms[tp].atomFromStr;
+       oid x;
+
+       CAND_LOOP_IDX(ci, i) {
+               x = canditer_next(ci) - candoff;
+               src = BUNtvar(*bi, x);
+               if (strNil(src)) {
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to