Changeset: b14c59328439 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b14c59328439 Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 monetdb5/modules/kernel/batstr.c Branch: Oct2020 Log Message:
Added more missing bulk implementations of str module diffs (truncated from 522 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 @@ -5877,9 +5877,14 @@ stdout of test 'MAL-signatures` in direc [ "batsql", "window_bound", "pattern batsql.window_bound(X_1:bat[:bit], X_2:bat[:any_1], X_3:int, X_4:int, X_5:int, X_6:int):bat[:lng] ", "SQLwindow_bound;", "" ] [ "batsql", "window_bound", "pattern batsql.window_bound(X_1:bat[:bit], X_2:bat[:any_1], X_3:int, X_4:int, X_5:int, X_6:lng):bat[:lng] ", "SQLwindow_bound;", "" ] [ "batsql", "window_bound", "pattern batsql.window_bound(X_1:bat[:bit], X_2:bat[:any_1], X_3:int, X_4:int, X_5:int, X_6:sht):bat[:lng] ", "SQLwindow_bound;", "" ] +[ "batstr", "ascii", "command batstr.ascii(X_1:bat[:str]):bat[:int] ", "STRbatAscii;", "" ] [ "batstr", "endsWith", "command batstr.endsWith(X_1:bat[:str], X_2:bat[:str]):bat[:bit] ", "STRbatSuffix;", "" ] [ "batstr", "endsWith", "command batstr.endsWith(X_1:bat[:str], X_2:str):bat[:bit] ", "STRbatSuffixcst;", "" ] [ "batstr", "length", "command batstr.length(X_1:bat[:str]):bat[:int] ", "STRbatLength;", "" ] +[ "batstr", "locate", "command batstr.locate(X_1:bat[:str], X_2:bat[:str], X_3:bat[:int]):bat[:int] ", "STRbatstrLocate2;", "" ] +[ "batstr", "locate", "command batstr.locate(X_1:bat[:str], X_2:str, X_3:int):bat[:int] ", "STRbatstrLocate2cst;", "" ] +[ "batstr", "locate", "command batstr.locate(X_1:bat[:str], X_2:bat[:str]):bat[:int] ", "STRbatstrLocate;", "" ] +[ "batstr", "locate", "command batstr.locate(X_1:bat[:str], X_2:str):bat[:int] ", "STRbatstrLocatecst;", "" ] [ "batstr", "lpad", "command batstr.lpad(X_1:bat[:str], X_2:bat[:int], X_3:bat[:str]):bat[:str] ", "STRbatLpad2_bat_bat;", "" ] [ "batstr", "lpad", "command batstr.lpad(X_1:bat[:str], X_2:bat[:int], X_3:str):bat[:str] ", "STRbatLpad2_bat_const;", "" ] [ "batstr", "lpad", "command batstr.lpad(X_1:bat[:str], X_2:int, X_3:bat[:str]):bat[:str] ", "STRbatLpad2_const_bat;", "" ] @@ -5892,7 +5897,8 @@ stdout of test 'MAL-signatures` in direc [ "batstr", "nbytes", "command batstr.nbytes(X_1:bat[:str]):bat[:int] ", "STRbatBytes;", "" ] [ "batstr", "r_search", "command batstr.r_search(X_1:bat[:str], X_2:bat[:str]):bat[:int] ", "STRbatRstrSearch;", "" ] [ "batstr", "r_search", "command batstr.r_search(X_1:bat[:str], X_2:str):bat[:int] ", "STRbatRstrSearchcst;", "" ] -[ "batstr", "repeat", "command batstr.repeat(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatrepeat;", "" ] +[ "batstr", "repeat", "command batstr.repeat(X_1:bat[:str], X_2:bat[:int]):bat[:str] ", "STRbatrepeat;", "" ] +[ "batstr", "repeat", "command batstr.repeat(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatrepeatcst;", "" ] [ "batstr", "rpad", "command batstr.rpad(X_1:bat[:str], X_2:bat[:int], X_3:bat[:str]):bat[:str] ", "STRbatRpad2_bat_bat;", "" ] [ "batstr", "rpad", "command batstr.rpad(X_1:bat[:str], X_2:bat[:int], X_3:str):bat[:str] ", "STRbatRpad2_bat_const;", "" ] [ "batstr", "rpad", "command batstr.rpad(X_1:bat[:str], X_2:int, X_3:bat[:str]):bat[:str] ", "STRbatRpad2_const_bat;", "" ] @@ -5908,8 +5914,10 @@ stdout of test 'MAL-signatures` in direc [ "batstr", "startsWith", "command batstr.startsWith(X_1:bat[:str], X_2:str):bat[:bit] ", "STRbatPrefixcst;", "" ] [ "batstr", "string", "command batstr.string(X_1:bat[:str], X_2:bat[:int]):bat[:str] ", "STRbatTail;", "" ] [ "batstr", "string", "command batstr.string(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatTailcst;", "" ] -[ "batstr", "stringleft", "command batstr.stringleft(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatprefix;", "" ] -[ "batstr", "stringright", "command batstr.stringright(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatsuffix;", "" ] +[ "batstr", "stringleft", "command batstr.stringleft(X_1:bat[:str], X_2:bat[:int]):bat[:str] ", "STRbatprefix;", "" ] +[ "batstr", "stringleft", "command batstr.stringleft(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatprefixcst;", "" ] +[ "batstr", "stringright", "command batstr.stringright(X_1:bat[:str], X_2:bat[:int]):bat[:str] ", "STRbatsuffix;", "" ] +[ "batstr", "stringright", "command batstr.stringright(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatsuffixcst;", "" ] [ "batstr", "substitute", "command batstr.substitute(X_1:bat[:str], X_2:str, X_3:str, X_4:bit):bat[:str] ", "STRbatSubstitutecst;", "" ] [ "batstr", "substring", "command batstr.substring(X_1:bat[:str], X_2:bat[:int], X_3:bat[:int]):bat[:str] ", "STRbatsubstring;", "" ] [ "batstr", "substring", "command batstr.substring(X_1:bat[:str], X_2:int, X_3:int):bat[:str] ", "STRbatsubstringcst;", "" ] 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 @@ -8153,9 +8153,14 @@ stdout of test 'MAL-signatures` in direc [ "batsql", "window_bound", "pattern batsql.window_bound(X_1:bat[:bit], X_2:bat[:any_1], X_3:int, X_4:int, X_5:int, X_6:int):bat[:lng] ", "SQLwindow_bound;", "" ] [ "batsql", "window_bound", "pattern batsql.window_bound(X_1:bat[:bit], X_2:bat[:any_1], X_3:int, X_4:int, X_5:int, X_6:lng):bat[:lng] ", "SQLwindow_bound;", "" ] [ "batsql", "window_bound", "pattern batsql.window_bound(X_1:bat[:bit], X_2:bat[:any_1], X_3:int, X_4:int, X_5:int, X_6:sht):bat[:lng] ", "SQLwindow_bound;", "" ] +[ "batstr", "ascii", "command batstr.ascii(X_1:bat[:str]):bat[:int] ", "STRbatAscii;", "" ] [ "batstr", "endsWith", "command batstr.endsWith(X_1:bat[:str], X_2:bat[:str]):bat[:bit] ", "STRbatSuffix;", "" ] [ "batstr", "endsWith", "command batstr.endsWith(X_1:bat[:str], X_2:str):bat[:bit] ", "STRbatSuffixcst;", "" ] [ "batstr", "length", "command batstr.length(X_1:bat[:str]):bat[:int] ", "STRbatLength;", "" ] +[ "batstr", "locate", "command batstr.locate(X_1:bat[:str], X_2:bat[:str], X_3:bat[:int]):bat[:int] ", "STRbatstrLocate2;", "" ] +[ "batstr", "locate", "command batstr.locate(X_1:bat[:str], X_2:str, X_3:int):bat[:int] ", "STRbatstrLocate2cst;", "" ] +[ "batstr", "locate", "command batstr.locate(X_1:bat[:str], X_2:bat[:str]):bat[:int] ", "STRbatstrLocate;", "" ] +[ "batstr", "locate", "command batstr.locate(X_1:bat[:str], X_2:str):bat[:int] ", "STRbatstrLocatecst;", "" ] [ "batstr", "lpad", "command batstr.lpad(X_1:bat[:str], X_2:bat[:int], X_3:bat[:str]):bat[:str] ", "STRbatLpad2_bat_bat;", "" ] [ "batstr", "lpad", "command batstr.lpad(X_1:bat[:str], X_2:bat[:int], X_3:str):bat[:str] ", "STRbatLpad2_bat_const;", "" ] [ "batstr", "lpad", "command batstr.lpad(X_1:bat[:str], X_2:int, X_3:bat[:str]):bat[:str] ", "STRbatLpad2_const_bat;", "" ] @@ -8168,7 +8173,8 @@ stdout of test 'MAL-signatures` in direc [ "batstr", "nbytes", "command batstr.nbytes(X_1:bat[:str]):bat[:int] ", "STRbatBytes;", "" ] [ "batstr", "r_search", "command batstr.r_search(X_1:bat[:str], X_2:bat[:str]):bat[:int] ", "STRbatRstrSearch;", "" ] [ "batstr", "r_search", "command batstr.r_search(X_1:bat[:str], X_2:str):bat[:int] ", "STRbatRstrSearchcst;", "" ] -[ "batstr", "repeat", "command batstr.repeat(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatrepeat;", "" ] +[ "batstr", "repeat", "command batstr.repeat(X_1:bat[:str], X_2:bat[:int]):bat[:str] ", "STRbatrepeat;", "" ] +[ "batstr", "repeat", "command batstr.repeat(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatrepeatcst;", "" ] [ "batstr", "rpad", "command batstr.rpad(X_1:bat[:str], X_2:bat[:int], X_3:bat[:str]):bat[:str] ", "STRbatRpad2_bat_bat;", "" ] [ "batstr", "rpad", "command batstr.rpad(X_1:bat[:str], X_2:bat[:int], X_3:str):bat[:str] ", "STRbatRpad2_bat_const;", "" ] [ "batstr", "rpad", "command batstr.rpad(X_1:bat[:str], X_2:int, X_3:bat[:str]):bat[:str] ", "STRbatRpad2_const_bat;", "" ] @@ -8184,8 +8190,10 @@ stdout of test 'MAL-signatures` in direc [ "batstr", "startsWith", "command batstr.startsWith(X_1:bat[:str], X_2:str):bat[:bit] ", "STRbatPrefixcst;", "" ] [ "batstr", "string", "command batstr.string(X_1:bat[:str], X_2:bat[:int]):bat[:str] ", "STRbatTail;", "" ] [ "batstr", "string", "command batstr.string(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatTailcst;", "" ] -[ "batstr", "stringleft", "command batstr.stringleft(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatprefix;", "" ] -[ "batstr", "stringright", "command batstr.stringright(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatsuffix;", "" ] +[ "batstr", "stringleft", "command batstr.stringleft(X_1:bat[:str], X_2:bat[:int]):bat[:str] ", "STRbatprefix;", "" ] +[ "batstr", "stringleft", "command batstr.stringleft(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatprefixcst;", "" ] +[ "batstr", "stringright", "command batstr.stringright(X_1:bat[:str], X_2:bat[:int]):bat[:str] ", "STRbatsuffix;", "" ] +[ "batstr", "stringright", "command batstr.stringright(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatsuffixcst;", "" ] [ "batstr", "substitute", "command batstr.substitute(X_1:bat[:str], X_2:str, X_3:str, X_4:bit):bat[:str] ", "STRbatSubstitutecst;", "" ] [ "batstr", "substring", "command batstr.substring(X_1:bat[:str], X_2:bat[:int], X_3:bat[:int]):bat[:str] ", "STRbatsubstring;", "" ] [ "batstr", "substring", "command batstr.substring(X_1:bat[:str], X_2:int, X_3:int):bat[:str] ", "STRbatsubstringcst;", "" ] diff --git a/monetdb5/modules/kernel/batstr.c b/monetdb5/modules/kernel/batstr.c --- a/monetdb5/modules/kernel/batstr.c +++ b/monetdb5/modules/kernel/batstr.c @@ -118,6 +118,42 @@ STRbatBytes(bat *ret, const bat *l) } static str +STRbatAscii(bat *ret, const bat *l) +{ + BATiter bi; + BAT *bn, *b; + BUN p, q; + str x; + int y; + str msg = MAL_SUCCEED; + + prepareOperand(b, l, "batstr.Ascii"); + prepareResult(bn, b, TYPE_int, "batstr.Ascii"); + + bi = bat_iterator(b); + + BATloop(b, p, q) { + x = (str) BUNtvar(bi, p); + if ((msg = STRascii(&y, &x)) != MAL_SUCCEED) + goto bunins_failed; + if (is_int_nil(y)) { + bn->tnonil = false; + bn->tnil = true; + } + if (bunfastappTYPE(int, bn, &y) != GDK_SUCCEED) + goto bunins_failed; + } + finalizeResult(ret, bn, b); + return MAL_SUCCEED; +bunins_failed: + BBPunfix(b->batCacheid); + BBPunfix(bn->batCacheid); + if (msg != MAL_SUCCEED) + return msg; + throw(MAL, "batstr.Ascii", OPERATION_FAILED " During bulk operation"); +} + +static str do_batstr_str(bat *ret, const bat *l, const char *name, str (*func)(str *, const str *)) { BATiter bi; @@ -996,85 +1032,6 @@ STRbatRstrSearchcst(bat *ret, const bat } static str -STRbatTail(bat *ret, const bat *l, const bat *r) -{ - BATiter lefti, righti; - BAT *bn, *left, *right; - BUN p,q; - str v; - str msg = MAL_SUCCEED; - - prepareOperand2(left,l,right,r,"batstr.string"); - if(BATcount(left) != BATcount(right)) { - BBPunfix(left->batCacheid); - BBPunfix(right->batCacheid); - throw(MAL, "batstr.string", ILLEGAL_ARGUMENT " Requires bats of identical size"); - } - prepareResult2(bn,left,right,TYPE_str,"batstr.string"); - - lefti = bat_iterator(left); - righti = bat_iterator(right); - - BATloop(left, p, q) { - str tl = (str) BUNtvar(lefti,p); - int *tr = (int *) BUNtloc(righti,p); - if ((msg = STRTail(&v, &tl, tr)) != MAL_SUCCEED) - goto bunins_failed; - if (bunfastappVAR(bn, v) != GDK_SUCCEED) - goto bunins_failed; - GDKfree(v); - } - bn->tnonil = false; - BBPunfix(right->batCacheid); - finalizeResult(ret,bn,left); - return MAL_SUCCEED; - -bunins_failed: - BBPunfix(left->batCacheid); - BBPunfix(right->batCacheid); - BBPunfix(*ret); - if (msg) - return msg; - GDKfree(v); - throw(MAL, "batstr.string" , OPERATION_FAILED " During bulk operation"); -} - -static str -STRbatTailcst(bat *ret, const bat *l, const int *cst) -{ - BATiter lefti; - BAT *bn, *left; - BUN p,q; - str v; - str msg = MAL_SUCCEED; - - prepareOperand(left,l,"batstr.string"); - prepareResult(bn,left,TYPE_str,"batstr.string"); - - lefti = bat_iterator(left); - - BATloop(left, p, q) { - str tl = (str) BUNtvar(lefti,p); - if ((msg = STRTail(&v, &tl, cst)) != MAL_SUCCEED) - goto bunins_failed; - if (bunfastappVAR(bn, v) != GDK_SUCCEED) - goto bunins_failed; - GDKfree(v); - } - bn->tnonil = false; - finalizeResult(ret,bn,left); - return MAL_SUCCEED; - -bunins_failed: - BBPunfix(left->batCacheid); - BBPunfix(*ret); - if (msg) - return msg; - GDKfree(v); - throw(MAL, "batstr.string", OPERATION_FAILED " During bulk operation"); -} - -static str STRbatWChrAt(bat *ret, const bat *l, const bat *r) { BATiter lefti, righti; @@ -1138,7 +1095,7 @@ STRbatWChrAtcst(bat *ret, const bat *l, } static str -do_batstr_str_int(bat *ret, const bat *l, const int *cst, const char *name, str (*func)(str *, const str *, const int *)) +do_batstr_str_int_cst(bat *ret, const bat *l, const int *cst, const char *name, str (*func)(str *, const str *, const int *)) { BATiter bi; BAT *bn, *b; @@ -1181,21 +1138,96 @@ bailout: } static str -STRbatprefix(bat *ret, const bat *l, const int *cst) +STRbatprefixcst(bat *ret, const bat *l, const int *cst) +{ + return do_batstr_str_int_cst(ret, l, cst, "batstr.prefix", STRprefix); +} + +static str +STRbatsuffixcst(bat *ret, const bat *l, const int *cst) { - return do_batstr_str_int(ret, l, cst, "batstr.prefix", STRprefix); + return do_batstr_str_int_cst(ret, l, cst, "batstr.suffix", STRsuffix); +} + +static str +STRbatrepeatcst(bat *ret, const bat *l, const int *cst) +{ + return do_batstr_str_int_cst(ret, l, cst, "batstr.repeat", STRrepeat); +} + +static str +STRbatTailcst(bat *ret, const bat *l, const int *cst) +{ + return do_batstr_str_int_cst(ret, l, cst, "batstr.tail", STRTail); } static str -STRbatsuffix(bat *ret, const bat *l, const int *cst) +do_batstr_str_int(bat *ret, const bat *l, const bat *r, const char *name, str (*func)(str *, const str *, const int *)) { - return do_batstr_str_int(ret, l, cst, "batstr.suffix", STRsuffix); + BATiter lefti; + BAT *bn, *left, *right; + BUN p,q; + str v; + str msg = MAL_SUCCEED; + int *restrict right_vals; + + prepareOperand2(left,l,right,r,name); + if(BATcount(left) != BATcount(right)) { + BBPunfix(left->batCacheid); + BBPunfix(right->batCacheid); + throw(MAL, name, ILLEGAL_ARGUMENT " Requires bats of identical size"); + } + prepareResult2(bn,left,right,TYPE_str,name); + + lefti = bat_iterator(left); + right_vals = Tloc(right, 0); + + BATloop(left, p, q) { + str tl = (str) BUNtvar(lefti,p); + int tr = right_vals[p]; + if ((msg = func(&v, &tl, &tr)) != MAL_SUCCEED) + goto bunins_failed; + if (bunfastappVAR(bn, v) != GDK_SUCCEED) + goto bunins_failed; + GDKfree(v); + } + bn->tnonil = false; + BBPunfix(right->batCacheid); + finalizeResult(ret,bn,left); + return MAL_SUCCEED; + +bunins_failed: + BBPunfix(left->batCacheid); + BBPunfix(right->batCacheid); + BBPunfix(*ret); + if (msg) + return msg; + GDKfree(v); + throw(MAL, name, OPERATION_FAILED " During bulk operation"); } static str _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list