Changeset: 11bfbdaf30cd for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=11bfbdaf30cd Modified Files: testing/Mtest.py.in Branch: default Log Message:
Merge with Oct2020 diffs (truncated from 2166 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/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -1709,11 +1709,7 @@ setWidth(void) else #endif { -#ifdef WIN32 - pagewidth = 79; /* 80 columns minus 1 for the edge */ -#else pagewidth = -1; -#endif } } } diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c --- a/clients/mapiclient/mhelp.c +++ b/clients/mapiclient/mhelp.c @@ -128,17 +128,17 @@ SQLhelp sqlhelp1[] = { {"CREATE AGGREGATE", "Create an user-defined aggregate function. The body of the aggregate function\n" "can also be defined in other programming languages such as Python, R, C or CPP.", - "CREATE [ OR REPLACE ] AGGREGATE qname '(' { '*' | [ param [',' ...]] } ')'\n" + "CREATE [ OR REPLACE ] AGGREGATE [ FUNCTION ] qname '(' { '*' | [ param [',' ...]] } ')'\n" " RETURNS data_type\n" " EXTERNAL NAME ident ',' ident\n" - "CREATE [ OR REPLACE ] AGGREGATE qname '(' { '*' | [ param [',' ...]] } ')'\n" + "CREATE [ OR REPLACE ] AGGREGATE [ FUNCTION ] qname '(' { '*' | [ param [',' ...]] } ')'\n" " RETURNS data_type\n" " LANGUAGE language_keyword external_code", "qname,param,data_type,ident,language_keyword,external_code", "See also https://www.monetdb.org/Documentation/Manuals/SQLreference/Functions"}, {"CREATE FILTER FUNCTION", "", - "CREATE [ OR REPLACE ] FILTER FUNCTION qname '(' { '*' | [ param [',' ...]] } ')'\n" + "CREATE [ OR REPLACE ] FILTER [ FUNCTION ] qname '(' { '*' | [ param [',' ...]] } ')'\n" " RETURNS { data_type | TABLE '(' function_return [',' ...] ')' }\n" " EXTERNAL NAME ident ',' ident", "qname,param,data_type,function_return,ident", @@ -164,7 +164,7 @@ SQLhelp sqlhelp1[] = { "See also https://www.monetdb.org/Documentation/Manuals/SQLreference/Indices"}, {"CREATE LOADER", "Create a custom (external) data loader function. The body is defined in Python language", - "CREATE [ OR REPLACE ] LOADER qname '(' [ param [',' ...]] ')'\n" + "CREATE [ OR REPLACE ] LOADER [ FUNCTION ] qname '(' [ param [',' ...]] ')'\n" " LANGUAGE PYTHON external_code", "qname,param,external_code", "See also https://www.monetdb.org/blog/monetdbpython-loader-functions"}, @@ -308,14 +308,20 @@ SQLhelp sqlhelp1[] = { NULL}, {"DROP AGGREGATE", "", - "DROP ALL AGGREGATE qname [ RESTRICT | CASCADE ]\n" - "DROP AGGREGATE [ IF EXISTS ] qname [ '(' [ param [',' ...]] ')' ] [ RESTRICT | CASCADE ]", + "DROP ALL AGGREGATE [ FUNCTION ] qname [ RESTRICT | CASCADE ]\n" + "DROP AGGREGATE [ FUNCTION ] [ IF EXISTS ] qname [ '(' [ param [',' ...]] ')' ] [ RESTRICT | CASCADE ]", + "param", + NULL}, + {"DROP FILTER FUNCTION", + "", + "DROP ALL FILTER [ FUNCTION ] qname [ RESTRICT | CASCADE ]\n" + "DROP FILTER [ FUNCTION ] [ IF EXISTS ] qname [ '(' [ param [',' ...]] ')' ] [ RESTRICT | CASCADE ]", "param", NULL}, {"DROP FUNCTION", "", - "DROP ALL [FILTER] FUNCTION qname [ RESTRICT | CASCADE ]\n" - "DROP [FILTER] FUNCTION [ IF EXISTS ] qname [ '(' [ param [',' ...]] ')' ] [ RESTRICT | CASCADE ]", + "DROP ALL FUNCTION qname [ RESTRICT | CASCADE ]\n" + "DROP FUNCTION [ IF EXISTS ] qname [ '(' [ param [',' ...]] ')' ] [ RESTRICT | CASCADE ]", "param", NULL}, {"DROP INDEX", @@ -325,8 +331,8 @@ SQLhelp sqlhelp1[] = { NULL}, {"DROP LOADER", "", - "DROP ALL LOADER qname [ RESTRICT | CASCADE ]\n" - "DROP LOADER [ IF EXISTS ] qname [ '(' [ param [',' ...]] ')' ] [ RESTRICT | CASCADE ]", + "DROP ALL LOADER [ FUNCTION ] qname [ RESTRICT | CASCADE ]\n" + "DROP LOADER [ FUNCTION ] [ IF EXISTS ] qname [ '(' [ param [',' ...]] ')' ] [ RESTRICT | CASCADE ]", "param", NULL}, {"DROP PROCEDURE", @@ -375,10 +381,10 @@ SQLhelp sqlhelp1[] = { "DROP VIEW [ IF EXISTS ] qname [ RESTRICT | CASCADE ]", NULL, NULL}, - {"DROP WINDOW", + {"DROP WINDOW [ FUNCTION ]", "", - "DROP ALL WINDOW qname [ RESTRICT | CASCADE ]\n" - "DROP WINDOW [ IF EXISTS ] qname [ '(' [ param [',' ...]] ')' ] [ RESTRICT | CASCADE ]", + "DROP ALL WINDOW [ FUNCTION ] qname [ RESTRICT | CASCADE ]\n" + "DROP WINDOW [ FUNCTION ] [ IF EXISTS ] qname [ '(' [ param [',' ...]] ')' ] [ RESTRICT | CASCADE ]", "param", NULL}, {"EXECUTE", diff --git a/common/stream/stream.c b/common/stream/stream.c --- a/common/stream/stream.c +++ b/common/stream/stream.c @@ -86,7 +86,7 @@ get_tl_error_buf(void) p = malloc(sizeof(*p)); if (p == NULL) return NULL; - *p = (struct tl_error_buf) { 0 }; + *p = (struct tl_error_buf) { .msg = 0 }; pthread_setspecific(tl_error_key, p); struct tl_error_buf *second_attempt = pthread_getspecific(tl_error_key); assert(p == second_attempt /* maybe mnstr_init has not been called? */); @@ -124,7 +124,7 @@ get_tl_error_buf(void) p = malloc(sizeof(*p)); if (p == NULL) return NULL; - *p = (struct tl_error_buf) { 0 }; + *p = (struct tl_error_buf) { .msg = 0 }; if (!TlsSetValue(tl_error_key, p)) { free(p); return NULL; diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c --- a/gdk/gdk_calc.c +++ b/gdk/gdk_calc.c @@ -14075,7 +14075,7 @@ BATconvert(BAT *b, BAT *s, int tp, bool bn->tnil = nils != 0; bn->tnonil = nils == 0; - if ((bn->ttype != TYPE_bit && b->ttype != TYPE_str) || + if ((bn->ttype != TYPE_str && bn->ttype != TYPE_bit && b->ttype != TYPE_str) || BATcount(bn) < 2) { bn->tsorted = nils == 0 && b->tsorted; bn->trevsorted = nils == 0 && b->trevsorted; 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); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list