Changeset: a3780e4d0491 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a3780e4d0491
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
sql/server/rel_select.c
sql/server/rel_unnest.c
Branch: typing
Log Message:
Merged with Oct2020
diffs (truncated from 1135 to 300 lines):
diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -116,9 +116,14 @@ BuildRequires: gcc
BuildRequires: bison
BuildRequires: /usr/bin/python3
%if %{?rhel:1}%{!?rhel:0}
+# RH 7 (and for readline also 8)
BuildRequires: bzip2-devel
+BuildRequires: unixODBC-devel
+BuildRequires: readline-devel
%else
BuildRequires: pkgconfig(bzip2)
+BuildRequires: pkgconfig(odbc)
+BuildRequires: pkgconfig(readline)
%endif
%if %{with fits}
BuildRequires: pkgconfig(cfitsio)
@@ -128,23 +133,19 @@ BuildRequires: geos-devel >= 3.4.0
%endif
BuildRequires: pkgconfig(libcurl)
BuildRequires: pkgconfig(liblzma)
-# BuildRequires: libmicrohttpd-devel
-BuildRequires: libuuid-devel
+BuildRequires: pkgconfig(uuid)
BuildRequires: pkgconfig(libxml-2.0)
BuildRequires: pkgconfig(openssl)
%if %{with pcre}
BuildRequires: pkgconfig(libpcre) >= 4.5
%endif
-BuildRequires: readline-devel
-BuildRequires: unixODBC-devel
-# BuildRequires: uriparser-devel
BuildRequires: pkgconfig(zlib)
%if %{with py3integration}
-BuildRequires: python3-devel >= 3.5
+BuildRequires: pkgconfig(python3) >= 3.5
BuildRequires: python3-numpy
%endif
%if %{with rintegration}
-BuildRequires: R-core-devel
+BuildRequires: pkgconfig(libR)
%endif
%if (0%{?fedora} >= 22)
diff --git a/README.rst b/README.rst
--- a/README.rst
+++ b/README.rst
@@ -105,9 +105,10 @@ The following packages are optional but
``xz-devel``, ``zlib-devel``.
The following packages are optional:
-``cfitsio-devel``, ``geos-devel``, ``libcurl-devel``, ``libxml2-devel``,
+``cfitsio-devel``, ``gdal-devel``, ``geos-devel``, ``libasan``,
+``libcurl-devel``, ``libxml2-devel``, ``netcdf-devel``, ``proj-devel``,
``python3-devel``, ``python3-numpy``, ``R-core-devel``,
-``unixODBC-devel``.
+``unixODBC-devel``, ``valgrind-devel``.
On Ubuntu and Debian the following packages are required:
``bison``, ``cmake``, ``gcc``, ``libssl-dev``, ``pkg-config``,
@@ -118,9 +119,10 @@ The following packages are optional but
``liblzma-dev``, ``zlib1g-dev``.
The following packages are optional:
-``libcfitsio-dev``, ``libgeos-dev``, ``libcurl4-gnutls-dev``,
+``libasan5``, ``libcfitsio-dev``, ``libcurl4-gnutls-dev``,
+``libgdal-dev``, ``libgeos-dev``, ``libnetcdf-dev``, ``libproj-dev``,
``libxml2-dev``, ``python3-dev``, ``python3-numpy``, ``r-base-dev``,
-``unixodbc-dev``.
+``unixodbc-dev``, ``valgrind``.
``cmake`` must be at least version 3.12, ``python`` must be at least
version 3.5.
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
@@ -5880,6 +5880,8 @@ stdout of test 'MAL-signatures` in direc
[ "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", "insert", "command batstr.insert(X_1:bat[:str],
X_2:bat[:int], X_3:bat[:int], X_4:bat[:str]):bat[:str] ", "STRbatInsert;",
"" ]
+[ "batstr", "insert", "command batstr.insert(X_1:bat[:str], X_2:int,
X_3:int, X_4:str):bat[:str] ", "STRbatInsertcst;", "" ]
[ "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;", "" ]
@@ -5899,6 +5901,8 @@ stdout of test 'MAL-signatures` in direc
[ "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:bat[:int]):bat[:str] ", "STRbatrepeat;", "" ]
[ "batstr", "repeat", "command batstr.repeat(X_1:bat[:str],
X_2:int):bat[:str] ", "STRbatrepeatcst;", "" ]
+[ "batstr", "replace", "command batstr.replace(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:str]):bat[:str] ", "STRbatReplace;", ""
]
+[ "batstr", "replace", "command batstr.replace(X_1:bat[:str], X_2:str,
X_3:str):bat[:str] ", "STRbatReplacecst;", "" ]
[ "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;", "" ]
@@ -5910,6 +5914,9 @@ stdout of test 'MAL-signatures` in direc
[ "batstr", "rtrim", "command batstr.rtrim(X_1:bat[:str]):bat[:str]
", "STRbatRtrim;", "" ]
[ "batstr", "search", "command batstr.search(X_1:bat[:str],
X_2:bat[:str]):bat[:int] ", "STRbatstrSearch;", "" ]
[ "batstr", "search", "command batstr.search(X_1:bat[:str],
X_2:str):bat[:int] ", "STRbatstrSearchcst;", "" ]
+[ "batstr", "space", "command batstr.space(X_1:bat[:int]):bat[:str]
", "STRbatSpace;", "" ]
+[ "batstr", "splitpart", "command batstr.splitpart(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:int]):bat[:str] ", "STRbatsplitpart;", "" ]
+[ "batstr", "splitpart", "command batstr.splitpart(X_1:bat[:str],
X_2:str, X_3:int):bat[:str] ", "STRbatsplitpartcst;", "" ]
[ "batstr", "startsWith", "command batstr.startsWith(X_1:bat[:str],
X_2:bat[:str]):bat[:bit] ", "STRbatPrefix;", "" ]
[ "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;", "" ]
@@ -5918,14 +5925,18 @@ stdout of test 'MAL-signatures` in direc
[ "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:bat[:str], X_3:bat[:str], X_4:bat[:bit]):bat[:str] ",
"STRbatSubstitute;", "" ]
[ "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
@@ -8156,6 +8156,8 @@ stdout of test 'MAL-signatures` in direc
[ "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", "insert", "command batstr.insert(X_1:bat[:str],
X_2:bat[:int], X_3:bat[:int], X_4:bat[:str]):bat[:str] ", "STRbatInsert;",
"" ]
+[ "batstr", "insert", "command batstr.insert(X_1:bat[:str], X_2:int,
X_3:int, X_4:str):bat[:str] ", "STRbatInsertcst;", "" ]
[ "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;", "" ]
@@ -8175,6 +8177,8 @@ stdout of test 'MAL-signatures` in direc
[ "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:bat[:int]):bat[:str] ", "STRbatrepeat;", "" ]
[ "batstr", "repeat", "command batstr.repeat(X_1:bat[:str],
X_2:int):bat[:str] ", "STRbatrepeatcst;", "" ]
+[ "batstr", "replace", "command batstr.replace(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:str]):bat[:str] ", "STRbatReplace;", ""
]
+[ "batstr", "replace", "command batstr.replace(X_1:bat[:str], X_2:str,
X_3:str):bat[:str] ", "STRbatReplacecst;", "" ]
[ "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;", "" ]
@@ -8186,6 +8190,9 @@ stdout of test 'MAL-signatures` in direc
[ "batstr", "rtrim", "command batstr.rtrim(X_1:bat[:str]):bat[:str]
", "STRbatRtrim;", "" ]
[ "batstr", "search", "command batstr.search(X_1:bat[:str],
X_2:bat[:str]):bat[:int] ", "STRbatstrSearch;", "" ]
[ "batstr", "search", "command batstr.search(X_1:bat[:str],
X_2:str):bat[:int] ", "STRbatstrSearchcst;", "" ]
+[ "batstr", "space", "command batstr.space(X_1:bat[:int]):bat[:str]
", "STRbatSpace;", "" ]
+[ "batstr", "splitpart", "command batstr.splitpart(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:int]):bat[:str] ", "STRbatsplitpart;", "" ]
+[ "batstr", "splitpart", "command batstr.splitpart(X_1:bat[:str],
X_2:str, X_3:int):bat[:str] ", "STRbatsplitpartcst;", "" ]
[ "batstr", "startsWith", "command batstr.startsWith(X_1:bat[:str],
X_2:bat[:str]):bat[:bit] ", "STRbatPrefix;", "" ]
[ "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;", "" ]
@@ -8194,14 +8201,18 @@ stdout of test 'MAL-signatures` in direc
[ "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:bat[:str], X_3:bat[:str], X_4:bat[:bit]):bat[:str] ",
"STRbatSubstitute;", "" ]
[ "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,89 @@ 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
+STRbatSpace(bat *ret, const bat *l)
+{
+ BAT *bn, *b;
+ BUN q;
+ str y, msg = MAL_SUCCEED;
+ int *restrict input;
+
+ prepareOperand(b, l, "batstr.Space");
+ prepareResult(bn, b, TYPE_str, "batstr.Space");
+ bn->tnonil=true;
+ bn->tnil=false;
+
+ input = Tloc(b, 0);
+ q = BATcount(b);
+
+ for (BUN p = 0; p < q; p++) {
+ if ((msg = STRspace(&y, &input[p])) != MAL_SUCCEED)
+ goto bailout;
+ if (bunfastappVAR(bn, y) != GDK_SUCCEED) {
+ GDKfree(y);
+ goto bailout;
+ }
+ if (strNil(y)) {
+ bn->tnonil = false;
+ bn->tnil = true;
+ }
+ GDKfree(y);
+ }
+
+bailout:
+ if (msg) {
+ BBPreclaim(bn);
+ } else {
+ BATsetcount(bn, q);
+ bn->tkey = BATcount(bn) <= 1;
+ bn->tsorted = BATcount(bn) <= 1;
+ bn->trevsorted = BATcount(bn) <= 1;
+ BBPkeepref(*ret = bn->batCacheid);
+ }
+ if (b)
+ BBPunfix(b->batCacheid);
+ return msg;
+}
+
+static str
do_batstr_str(bat *ret, const bat *l, const char *name, str (*func)(str *,
const str *))
{
BATiter bi;
@@ -1162,6 +1245,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,42 +1320,472 @@ 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;
- BAT *bn, *b;
- BUN p, q;
- str x;
- str y;
- str err = MAL_SUCCEED;
+ BATiter lefti;
+ BAT *bn, *left;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list