Changeset: c66b77a68e26 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c66b77a68e26 Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 monetdb5/modules/kernel/batstr.c Branch: Oct2020 Log Message:
More missing bulk str module implementations diffs (124 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 @@ -5920,12 +5920,15 @@ stdout of test 'MAL-signatures` in direc [ "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:bat[:int]):bat[:str] ", "STRbatsubstringTail;", "" ] +[ "batstr", "substring", "command batstr.substring(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatsubstringTailcst;", "" ] [ "batstr", "substring", "command batstr.substring(X_1:bat[:str], X_2:int, X_3:int):bat[:str] ", "STRbatsubstringcst;", "" ] [ "batstr", "toLower", "command batstr.toLower(X_1:bat[:str]):bat[:str] ", "STRbatLower;", "" ] [ "batstr", "toUpper", "command batstr.toUpper(X_1:bat[:str]):bat[:str] ", "STRbatUpper;", "" ] [ "batstr", "trim", "command batstr.trim(X_1:bat[:str], X_2:bat[:str]):bat[:str] ", "STRbatStrip2_bat;", "" ] [ "batstr", "trim", "command batstr.trim(X_1:bat[:str], X_2:str):bat[:str] ", "STRbatStrip2_const;", "" ] [ "batstr", "trim", "command batstr.trim(X_1:bat[:str]):bat[:str] ", "STRbatStrip;", "" ] +[ "batstr", "unicode", "command batstr.unicode(X_1:bat[:int]):bat[:str] ", "STRbatFromWChr;", "" ] [ "batstr", "unicodeAt", "command batstr.unicodeAt(X_1:bat[:str], X_2:bat[:int]):bat[:int] ", "STRbatWChrAt;", "" ] [ "batstr", "unicodeAt", "command batstr.unicodeAt(X_1:bat[:str], X_2:int):bat[:int] ", "STRbatWChrAtcst;", "" ] [ "batudf", "fuse", "command batudf.fuse(X_1:bat[:bte], X_2:bat[:bte]):bat[:sht] ", "UDFBATfuse;", "" ] 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 @@ -8196,12 +8196,15 @@ stdout of test 'MAL-signatures` in direc [ "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:bat[:int]):bat[:str] ", "STRbatsubstringTail;", "" ] +[ "batstr", "substring", "command batstr.substring(X_1:bat[:str], X_2:int):bat[:str] ", "STRbatsubstringTailcst;", "" ] [ "batstr", "substring", "command batstr.substring(X_1:bat[:str], X_2:int, X_3:int):bat[:str] ", "STRbatsubstringcst;", "" ] [ "batstr", "toLower", "command batstr.toLower(X_1:bat[:str]):bat[:str] ", "STRbatLower;", "" ] [ "batstr", "toUpper", "command batstr.toUpper(X_1:bat[:str]):bat[:str] ", "STRbatUpper;", "" ] [ "batstr", "trim", "command batstr.trim(X_1:bat[:str], X_2:bat[:str]):bat[:str] ", "STRbatStrip2_bat;", "" ] [ "batstr", "trim", "command batstr.trim(X_1:bat[:str], X_2:str):bat[:str] ", "STRbatStrip2_const;", "" ] [ "batstr", "trim", "command batstr.trim(X_1:bat[:str]):bat[:str] ", "STRbatStrip;", "" ] +[ "batstr", "unicode", "command batstr.unicode(X_1:bat[:int]):bat[:str] ", "STRbatFromWChr;", "" ] [ "batstr", "unicodeAt", "command batstr.unicodeAt(X_1:bat[:str], X_2:bat[:int]):bat[:int] ", "STRbatWChrAt;", "" ] [ "batstr", "unicodeAt", "command batstr.unicodeAt(X_1:bat[:str], X_2:int):bat[:int] ", "STRbatWChrAtcst;", "" ] [ "batudf", "fuse", "command batudf.fuse(X_1:bat[:bte], X_2:bat[:bte]):bat[:sht] ", "UDFBATfuse;", "" ] 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 @@ -154,6 +154,44 @@ bunins_failed: } static str +STRbatFromWChr(bat *ret, const bat *l) +{ + BAT *bn, *b; + BUN q; + str y; + int *restrict input; + str msg = MAL_SUCCEED; + + prepareOperand(b, l, "batstr.unicode"); + prepareResult(bn, b, TYPE_str, "batstr.unicode"); + input = Tloc(b, 0); + q = BATcount(b); + + for (BUN p = 0 ; p < q; p++) { + int x = input[p]; + gdk_return res; + + if ((msg = STRFromWChr(&y, &x)) != MAL_SUCCEED) + goto bailout; + res = bunfastappVAR(bn, y); + GDKfree(y); + if (res != GDK_SUCCEED) + goto bailout; + } + bn->tnonil = b->tnonil; + bn->tnil = b->tnonil; + finalizeResult(ret, bn, b); + return MAL_SUCCEED; + +bailout: + BBPunfix(b->batCacheid); + BBPunfix(bn->batCacheid); + if (msg != MAL_SUCCEED) + return msg; + throw(MAL, "batstr.unicode", 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; @@ -1162,6 +1200,12 @@ STRbatTailcst(bat *ret, const bat *l, co } static str +STRbatsubstringTailcst(bat *ret, const bat *l, const int *cst) +{ + return do_batstr_str_int_cst(ret, l, cst, "batstr.substring", STRsubstringTail); +} + +static str do_batstr_str_int(bat *ret, const bat *l, const bat *r, const char *name, str (*func)(str *, const str *, const int *)) { BATiter lefti; @@ -1231,6 +1275,12 @@ STRbatTail(bat *ret, const bat *l, const } static str +STRbatsubstringTail(bat *ret, const bat *l, const bat *r) +{ + return do_batstr_str_int(ret, l, r, "batstr.substring", STRsubstringTail); +} + +static str STRbatSubstitutecst(bat *ret, const bat *l, const str *arg2, const str *arg3, const bit *rep) { BATiter bi; @@ -1573,8 +1623,11 @@ mel_func batstr_init_funcs[] = { command("batstr", "string", STRbatTail, false, "Return the tail s[offset..n] of a string s[0..n].", args(1,3, batarg("",str),batarg("b",str),batarg("offset",int))), command("batstr", "string", STRbatTailcst, false, "Return the tail s[offset..n] of a string s[0..n].", args(1,3, batarg("",str),batarg("b",str),arg("offset",int))), command("batstr", "ascii", STRbatAscii, false, "Return unicode of head of string", args(1,2, batarg("",int),batarg("s",str))), + command("batstr", "substring", STRbatsubstringTailcst, false, "Extract the tail of a string", args(1,3, batarg("",str),batarg("s",str),arg("start",int))), + command("batstr", "substring", STRbatsubstringTail, false, "Extract the tail of a string", args(1,3, batarg("",str),batarg("s",str),batarg("start",int))), command("batstr", "substring", STRbatsubstring, false, "Substring extraction using [start,start+length]", args(1,4, batarg("",str),batarg("s",str),batarg("start",int),batarg("index",int))), command("batstr", "substring", STRbatsubstringcst, false, "Substring extraction using [start,start+length]", args(1,4, batarg("",str),batarg("s",str),arg("start",int),arg("index",int))), + command("batstr", "unicode", STRbatFromWChr, false, "convert a unicode to a character.", args(1,2, batarg("",str),batarg("wchar",int))), command("batstr", "unicodeAt", STRbatWChrAt, false, "get a unicode character (as an int) from a string position.", args(1,3, batarg("",int),batarg("s",str),batarg("index",int))), command("batstr", "unicodeAt", STRbatWChrAtcst, false, "get a unicode character (as an int) from a string position.", args(1,3, batarg("",int),batarg("s",str),arg("index",int))), command("batstr", "substitute", STRbatSubstitutecst, false, "Substitute first occurrence of 'src' by\n'dst'. Iff repeated = true this is\nrepeated while 'src' can be found in the\nresult string. In order to prevent\nrecursion and result strings of unlimited\nsize, repeating is only done iff src is\nnot a substring of dst.", args(1,5, batarg("",str),batarg("s",str),arg("src",str),arg("dst",str),arg("rep",bit))), _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list