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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list