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]