Changeset: e68b4bba0eb4 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e68b4bba0eb4 Modified Files: clients/Tests/MAL-signatures.stable.out.int128 gdk/ChangeLog.Dec2016 gdk/gdk_calc.c monetdb5/modules/mal/00_batcalc_hge.mal monetdb5/modules/mal/00_batcalc_hge.mal.sh monetdb5/modules/mal/00_calc_hge.mal monetdb5/modules/mal/00_calc_hge.mal.sh monetdb5/modules/mal/01_batcalc.mal monetdb5/modules/mal/01_batcalc.mal.sh monetdb5/modules/mal/01_calc.mal monetdb5/modules/mal/01_calc.mal.sh Branch: Dec2016 Log Message:
Implemented (bat)calc.str for :any type. diffs (truncated from 518 to 300 lines): 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 @@ -7543,47 +7543,11 @@ Ready. [ "batcalc", "sign", "pattern batcalc.sign(b:bat[:sht]):bat[:bte] ", "CMDbatSIGN;", "Unary sign (-1,0,1) over the tail of the bat" ] [ "batcalc", "sign", "pattern batcalc.sign(b:bat[:sht],s:bat[:oid]):bat[:bte] ", "CMDbatSIGN;", "Unary sign (-1,0,1) over the tail of the bat with candidates list" ] [ "batcalc", "sqlblob", "command batcalc.sqlblob(v:bat[:str]):bat[:sqlblob] ", "batstr_2_sqlblob;", "cast to sqlblob" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:bit]):bat[:str] ", "CMDconvertsignal_str;", "cast from bit to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:bit],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from bit to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:bte]):bat[:str] ", "CMDconvertsignal_str;", "cast from bte to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:bte],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from bte to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:dbl]):bat[:str] ", "CMDconvertsignal_str;", "cast from dbl to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:dbl],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from dbl to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:flt]):bat[:str] ", "CMDconvertsignal_str;", "cast from flt to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:flt],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from flt to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:hge]):bat[:str] ", "CMDconvertsignal_str;", "cast from hge to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:hge],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from hge to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:int]):bat[:str] ", "CMDconvertsignal_str;", "cast from int to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:int],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from int to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:lng]):bat[:str] ", "CMDconvertsignal_str;", "cast from lng to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:lng],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from lng to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from oid to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:oid],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from oid to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:sht]):bat[:str] ", "CMDconvertsignal_str;", "cast from sht to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:sht],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from sht to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:str]):bat[:str] ", "CMDconvertsignal_str;", "cast from str to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:str],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from str to str with candidates list, signal error on overflow" ] +[ "batcalc", "str", "pattern batcalc.str(b:bat[:any]):bat[:str] ", "CMDconvertsignal_str;", "cast from any to str, signal error on overflow" ] +[ "batcalc", "str", "pattern batcalc.str(b:bat[:any],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from any to str with candidates list, signal error on overflow" ] [ "batcalc", "str", "pattern batcalc.str(eclass:int,d1:int,s1:int,has_tz:int,v:bat[:any_1],digits:int):bat[:str] ", "SQLbatstr_cast;", "cast to string and check for overflow" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:bit]):bat[:str] ", "CMDconvert_str;", "cast from bit to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:bit],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from bit to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:bte]):bat[:str] ", "CMDconvert_str;", "cast from bte to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:bte],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from bte to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:dbl]):bat[:str] ", "CMDconvert_str;", "cast from dbl to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:dbl],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from dbl to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:flt]):bat[:str] ", "CMDconvert_str;", "cast from flt to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:flt],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from flt to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:hge]):bat[:str] ", "CMDconvert_str;", "cast from hge to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:hge],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from hge to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:int]):bat[:str] ", "CMDconvert_str;", "cast from int to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:int],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from int to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:lng]):bat[:str] ", "CMDconvert_str;", "cast from lng to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:lng],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from lng to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from oid to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:oid],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from oid to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:sht]):bat[:str] ", "CMDconvert_str;", "cast from sht to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:sht],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from sht to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:str]):bat[:str] ", "CMDconvert_str;", "cast from str to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:str],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from str to str with candidates list" ] +[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:any]):bat[:str] ", "CMDconvert_str;", "cast from any to str" ] +[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:any],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from any to str with candidates list" ] [ "batcalc", "strings", "command batcalc.strings(v:bat[:str]):bat[:str] ", "BATSTRstrings;", "Return the strings" ] [ "batcalc", "sub_noerror", "pattern batcalc.sub_noerror(b1:bat[:bte],b2:bat[:bte]):bat[:bte] ", "CMDbatSUB;", "Return B1 - B2, overflow causes NIL value" ] [ "batcalc", "sub_noerror", "pattern batcalc.sub_noerror(b1:bat[:bte],b2:bat[:bte],s:bat[:oid]):bat[:bte] ", "CMDbatSUB;", "Return B1 - B2 with candidates list, overflow causes NIL value" ] @@ -9664,17 +9628,7 @@ Ready. [ "calc", "sqlblob", "command calc.sqlblob(b:sqlblob):sqlblob ", "BLOBblob_blob;", "" ] [ "calc", "sqlblob", "command calc.sqlblob(s:str):sqlblob ", "BLOBsqlblob_fromstr;", "" ] [ "calc", "sqlblob", "command calc.sqlblob(v:str):sqlblob ", "str_2_sqlblob;", "cast to sqlblob" ] -[ "calc", "str", "pattern calc.str(v:bit):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:bte):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:dbl):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:flt):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:hge):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:int):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:lng):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:oid):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:sht):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:str):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:void):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] +[ "calc", "str", "pattern calc.str(v:any):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] [ "calc", "str", "command calc.str(v:date):str ", "SQLdate_2_str;", "cast date to str" ] [ "calc", "str", "command calc.str(v:sqlblob):str ", "SQLsqlblob_2_str;", "cast sqlblob to str" ] [ "calc", "str", "pattern calc.str(eclass:int,d1:int,s1:int,has_tz:int,v:any_1,digits:int):str ", "SQLstr_cast;", "cast to string and check for overflow" ] diff --git a/gdk/ChangeLog.Dec2016 b/gdk/ChangeLog.Dec2016 --- a/gdk/ChangeLog.Dec2016 +++ b/gdk/ChangeLog.Dec2016 @@ -1,6 +1,10 @@ # ChangeLog file for MonetDB # This file is updated with Maddlog +* Wed Oct 26 2016 Sjoerd Mullender <[email protected]> +- Implemented conversion to str from any type (not just the internal + types). + * Wed Sep 14 2016 Sjoerd Mullender <[email protected]> - VALcopy and VALinit both return their first argument on success or (and that's new) NULL on (allocation) failure. diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c --- a/gdk/gdk_calc.c +++ b/gdk/gdk_calc.c @@ -13589,36 +13589,64 @@ convert2bit_impl(flt) convert2bit_impl(dbl) static BUN -convert_any_str(int tp, const void *src, BAT *bn, BUN cnt, - BUN start, BUN end, const oid *restrict cand, - const oid *candend, oid candoff) -{ +convert_any_str(BAT *b, BAT *bn, BUN cnt, BUN start, BUN end, + const oid *restrict cand, const oid *candend) +{ + int tp = b->ttype; + oid candoff = b->hseqbase; str dst = 0; int len = 0; BUN nils = 0; BUN i; const void *nil = ATOMnilptr(tp); + const void *restrict src; int (*atomtostr)(str *, int *, const void *) = BATatoms[tp].atomToStr; - int size = ATOMsize(tp); + int (*atomcmp)(const void *, const void *) = ATOMcompare(tp); for (i = 0; i < start; i++) tfastins_nocheck(bn, i, str_nil, bn->twidth); - for (i = start; i < end; i++) { - if (cand) { - if (i < *cand - candoff) { + if (b->tvarsized) { + BATiter bi = bat_iterator(b); + + assert(b->ttype != TYPE_void); + for (i = start; i < end; i++) { + if (cand) { + if (i < *cand - candoff) { + nils++; + tfastins_nocheck(bn, i, str_nil, bn->twidth); + continue; + } + assert(i == *cand - candoff); + if (++cand == candend) + end = i + 1; + } + src = BUNtvar(bi, i); + (*atomtostr)(&dst, &len, src); + if ((*atomcmp)(src, nil) == 0) nils++; - tfastins_nocheck(bn, i, str_nil, bn->twidth); - continue; - } - assert(i == *cand - candoff); - if (++cand == candend) - end = i + 1; - } - (*atomtostr)(&dst, &len, src); - if (ATOMcmp(tp, src, nil) == 0) - nils++; - tfastins_nocheck(bn, i, dst, bn->twidth); - src = (const void *) ((const char *) src + size); + tfastins_nocheck(bn, i, dst, bn->twidth); + } + } else { + int size = ATOMsize(tp); + + src = Tloc(b, 0); + for (i = start; i < end; i++) { + if (cand) { + if (i < *cand - candoff) { + nils++; + tfastins_nocheck(bn, i, str_nil, bn->twidth); + continue; + } + assert(i == *cand - candoff); + if (++cand == candend) + end = i + 1; + } + (*atomtostr)(&dst, &len, src); + if ((*atomcmp)(src, nil) == 0) + nils++; + tfastins_nocheck(bn, i, dst, bn->twidth); + src = (const void *) ((const char *) src + size); + } } for (i = end; i < cnt; i++) tfastins_nocheck(bn, i, str_nil, bn->twidth); @@ -14279,7 +14307,8 @@ BATconvert(BAT *b, BAT *s, int tp, int a CANDINIT(b, s, start, end, cnt, cand, candend); - if (s == NULL && tp != TYPE_bit && ATOMbasetype(b->ttype) == ATOMbasetype(tp)){ + if (s == NULL && tp != TYPE_bit && tp != TYPE_str && + ATOMbasetype(b->ttype) == ATOMbasetype(tp)) { return COLcopy(b, tp, 0, TRANSIENT); } @@ -14292,9 +14321,7 @@ BATconvert(BAT *b, BAT *s, int tp, int a start, end, cand, candend, b->hseqbase, abort_on_error); else if (tp == TYPE_str) - nils = convert_any_str(b->ttype, Tloc(b, 0), bn, - cnt, start, end, cand, candend, - b->hseqbase); + nils = convert_any_str(b, bn, cnt, start, end, cand, candend); else if (b->ttype == TYPE_str) nils = convert_str_any(b, tp, Tloc(bn, 0), start, end, cand, candend, b->hseqbase, @@ -14347,7 +14374,7 @@ VARconvert(ValPtr ret, const ValRecord * if (ret->vtype == TYPE_str) { if (v->vtype == TYPE_void || (*ATOMcompare(v->vtype))(VALptr(v), - ATOMnilptr(v->vtype)) == 0) { + ATOMnilptr(v->vtype)) == 0) { ret->val.sval = GDKstrdup(str_nil); } else if (v->vtype == TYPE_str) { ret->val.sval = GDKstrdup(v->val.sval); diff --git a/monetdb5/modules/mal/00_batcalc_hge.mal b/monetdb5/modules/mal/00_batcalc_hge.mal --- a/monetdb5/modules/mal/00_batcalc_hge.mal +++ b/monetdb5/modules/mal/00_batcalc_hge.mal @@ -5727,16 +5727,3 @@ pattern oid_noerror(b:bat[:hge],s:bat[:o address CMDconvert_oid comment "cast from hge to oid with candidates list"; -pattern str(b:bat[:hge]) :bat[:str] -address CMDconvertsignal_str -comment "cast from hge to str, signal error on overflow"; -pattern str(b:bat[:hge],s:bat[:oid]) :bat[:str] -address CMDconvertsignal_str -comment "cast from hge to str with candidates list, signal error on overflow"; -pattern str_noerror(b:bat[:hge]) :bat[:str] -address CMDconvert_str -comment "cast from hge to str"; -pattern str_noerror(b:bat[:hge],s:bat[:oid]) :bat[:str] -address CMDconvert_str -comment "cast from hge to str with candidates list"; - diff --git a/monetdb5/modules/mal/00_batcalc_hge.mal.sh b/monetdb5/modules/mal/00_batcalc_hge.mal.sh --- a/monetdb5/modules/mal/00_batcalc_hge.mal.sh +++ b/monetdb5/modules/mal/00_batcalc_hge.mal.sh @@ -493,6 +493,9 @@ EOF done for tp1 in $alltypes; do + if [[ $tp1 == str ]]; then + continue + fi for tp2 in $alltypes; do case $tp1$tp2 in *hge*) ;; diff --git a/monetdb5/modules/mal/00_calc_hge.mal b/monetdb5/modules/mal/00_calc_hge.mal --- a/monetdb5/modules/mal/00_calc_hge.mal +++ b/monetdb5/modules/mal/00_calc_hge.mal @@ -1278,11 +1278,6 @@ address CMDvarCONVERT comment "Cast VALUE to oid"; -pattern str(v:hge) :str -address CMDvarCONVERT -comment "Cast VALUE to str"; - - module aggr; pattern sum(b:bat[:bte]) :hge diff --git a/monetdb5/modules/mal/00_calc_hge.mal.sh b/monetdb5/modules/mal/00_calc_hge.mal.sh --- a/monetdb5/modules/mal/00_calc_hge.mal.sh +++ b/monetdb5/modules/mal/00_calc_hge.mal.sh @@ -276,6 +276,9 @@ echo # done for tp1 in void $alltypes; do + if [[ $tp1 == str ]]; then + continue + fi for tp2 in void $alltypes; do case $tp1$tp2 in *hge*) ;; diff --git a/monetdb5/modules/mal/01_batcalc.mal b/monetdb5/modules/mal/01_batcalc.mal --- a/monetdb5/modules/mal/01_batcalc.mal +++ b/monetdb5/modules/mal/01_batcalc.mal @@ -15840,122 +15840,18 @@ pattern oid_noerror(b:bat[:str],s:bat[:o address CMDconvert_oid comment "cast from str to oid with candidates list"; -pattern str(b:bat[:bit]) :bat[:str] +pattern str(b:bat[:any]) :bat[:str] address CMDconvertsignal_str -comment "cast from bit to str, signal error on overflow"; -pattern str(b:bat[:bit],s:bat[:oid]) :bat[:str] +comment "cast from any to str, signal error on overflow"; +pattern str(b:bat[:any],s:bat[:oid]) :bat[:str] address CMDconvertsignal_str -comment "cast from bit to str with candidates list, signal error on overflow"; -pattern str_noerror(b:bat[:bit]) :bat[:str] +comment "cast from any to str with candidates list, signal error on overflow"; +pattern str_noerror(b:bat[:any]) :bat[:str] address CMDconvert_str -comment "cast from bit to str"; -pattern str_noerror(b:bat[:bit],s:bat[:oid]) :bat[:str] +comment "cast from any to str"; +pattern str_noerror(b:bat[:any],s:bat[:oid]) :bat[:str] address CMDconvert_str -comment "cast from bit to str with candidates list"; - -pattern str(b:bat[:bte]) :bat[:str] -address CMDconvertsignal_str -comment "cast from bte to str, signal error on overflow"; -pattern str(b:bat[:bte],s:bat[:oid]) :bat[:str] -address CMDconvertsignal_str -comment "cast from bte to str with candidates list, signal error on overflow"; _______________________________________________ checkin-list mailing list [email protected] https://www.monetdb.org/mailman/listinfo/checkin-list
