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

Reply via email to