Changeset: b35d66612032 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b35d66612032
Branch: ascii-flag
Log Message:
Merge with default branch.
diffs (truncated from 2731 to 300 lines):
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
--- a/.github/workflows/linux.yml
+++ b/.github/workflows/linux.yml
@@ -43,7 +43,7 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
ref: ${{ github.ref }}
@@ -129,7 +129,7 @@ jobs:
- name: Tar files
run: tar -cvf mtests.tar mTests
- name: Publish mtest results
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: mtest-${{ github.sha }}-${{ matrix.os }}-${{ matrix.c_compiler
}}
path: mtests.tar
diff --git a/clients/Tests/MAL-signatures-hge.test
b/clients/Tests/MAL-signatures-hge.test
--- a/clients/Tests/MAL-signatures-hge.test
+++ b/clients/Tests/MAL-signatures-hge.test
@@ -50440,7 +50440,12 @@ SQLwindow_bound;
computes window ranges for each row
sqlcatalog
alter_add_range_partition
-pattern sqlcatalog.alter_add_range_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:any_1, X_5:any_1, X_6:bit, X_7:int):void
+pattern sqlcatalog.alter_add_range_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:any_1, X_5:any_1, X_6:bit, X_7:int, X_8:bat[:lng]):void
+SQLalter_add_range_partition;
+Catalog operation alter_add_range_partition
+sqlcatalog
+alter_add_range_partition
+pattern sqlcatalog.alter_add_range_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:any_1, X_5:any_1, X_6:bit, X_7:int, X_8:lng):void
SQLalter_add_range_partition;
Catalog operation alter_add_range_partition
sqlcatalog
@@ -50450,12 +50455,22 @@ SQLalter_add_table;
Catalog operation alter_add_table
sqlcatalog
alter_add_value_partition
-pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:bit, X_5:int):void
+pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:bit, X_5:int, X_6:bat[:lng]):void
SQLalter_add_value_partition;
Catalog operation alter_add_value_partition
sqlcatalog
alter_add_value_partition
-pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:bit, X_5:int, X_6:any...):void
+pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:bit, X_5:int, X_6:bat[:lng], X_7:any...):void
+SQLalter_add_value_partition;
+Catalog operation alter_add_value_partition
+sqlcatalog
+alter_add_value_partition
+pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:bit, X_5:int, X_6:lng):void
+SQLalter_add_value_partition;
+Catalog operation alter_add_value_partition
+sqlcatalog
+alter_add_value_partition
+pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:bit, X_5:int, X_6:lng, X_7:any...):void
SQLalter_add_value_partition;
Catalog operation alter_add_value_partition
sqlcatalog
diff --git a/clients/Tests/MAL-signatures.test
b/clients/Tests/MAL-signatures.test
--- a/clients/Tests/MAL-signatures.test
+++ b/clients/Tests/MAL-signatures.test
@@ -38765,7 +38765,12 @@ SQLwindow_bound;
computes window ranges for each row
sqlcatalog
alter_add_range_partition
-pattern sqlcatalog.alter_add_range_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:any_1, X_5:any_1, X_6:bit, X_7:int):void
+pattern sqlcatalog.alter_add_range_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:any_1, X_5:any_1, X_6:bit, X_7:int, X_8:bat[:lng]):void
+SQLalter_add_range_partition;
+Catalog operation alter_add_range_partition
+sqlcatalog
+alter_add_range_partition
+pattern sqlcatalog.alter_add_range_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:any_1, X_5:any_1, X_6:bit, X_7:int, X_8:lng):void
SQLalter_add_range_partition;
Catalog operation alter_add_range_partition
sqlcatalog
@@ -38775,12 +38780,22 @@ SQLalter_add_table;
Catalog operation alter_add_table
sqlcatalog
alter_add_value_partition
-pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:bit, X_5:int):void
+pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:bit, X_5:int, X_6:bat[:lng]):void
SQLalter_add_value_partition;
Catalog operation alter_add_value_partition
sqlcatalog
alter_add_value_partition
-pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:bit, X_5:int, X_6:any...):void
+pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:bit, X_5:int, X_6:bat[:lng], X_7:any...):void
+SQLalter_add_value_partition;
+Catalog operation alter_add_value_partition
+sqlcatalog
+alter_add_value_partition
+pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:bit, X_5:int, X_6:lng):void
+SQLalter_add_value_partition;
+Catalog operation alter_add_value_partition
+sqlcatalog
+alter_add_value_partition
+pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str,
X_3:str, X_4:bit, X_5:int, X_6:lng, X_7:any...):void
SQLalter_add_value_partition;
Catalog operation alter_add_value_partition
sqlcatalog
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1728,7 +1728,6 @@ int mnstr_writeShtArray(stream *restrict
int mnstr_writeStr(stream *restrict s, const char *restrict val);
stream *open_rastream(const char *filename);
stream *open_rstream(const char *filename);
-stream *open_urlstream(const char *url);
stream *open_wastream(const char *filename);
stream *open_wstream(const char *filename);
stream *openssl_rstream(const char *hostname, BIO *bio);
diff --git a/clients/examples/C/CMakeLists.txt
b/clients/examples/C/CMakeLists.txt
--- a/clients/examples/C/CMakeLists.txt
+++ b/clients/examples/C/CMakeLists.txt
@@ -46,7 +46,8 @@ add_executable(streamcat
target_link_libraries(streamcat
PRIVATE
monetdb_config_header
- stream)
+ stream
+ $<$<BOOL:${CURL_FOUND}>:CURL::libcurl>)
add_executable(testcondvar
testcondvar.c)
diff --git a/clients/examples/C/streamcat.c b/clients/examples/C/streamcat.c
--- a/clients/examples/C/streamcat.c
+++ b/clients/examples/C/streamcat.c
@@ -436,6 +436,71 @@ opener_rastream(char *filename)
return s;
}
+#ifdef HAVE_CURL
+#include <curl/curl.h>
+
+static size_t
+write_callback(char *buffer, size_t size, size_t nitems, void *userp)
+{
+ stream *s = userp;
+
+ /* size is expected to always be 1 */
+
+ ssize_t sz = mnstr_write(s, buffer, size, nitems);
+ if (sz < 0)
+ return CURL_WRITEFUNC_ERROR; /* indicate failure to library */
+ return (size_t) sz * size;
+}
+
+static stream *
+open_urlstream(const char *url)
+{
+ CURL *handle;
+ stream *s;
+ CURLcode ret;
+ char errbuf[CURL_ERROR_SIZE];
+
+ s = buffer_wastream(NULL, url);
+ if (s == NULL) {
+ return NULL;
+ }
+
+ if ((handle = curl_easy_init()) == NULL) {
+ mnstr_destroy(s);
+ return NULL;
+ }
+
+ errbuf[0] = 0;
+
+ if ((ret = curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, errbuf)) !=
CURLE_OK ||
+ (ret = curl_easy_setopt(handle, CURLOPT_URL, url)) != CURLE_OK ||
+ (ret = curl_easy_setopt(handle, CURLOPT_WRITEDATA, s)) != CURLE_OK
||
+ (ret = curl_easy_setopt(handle, CURLOPT_VERBOSE, 0)) != CURLE_OK ||
+ (ret = curl_easy_setopt(handle, CURLOPT_NOSIGNAL, 1)) != CURLE_OK ||
+ (ret = curl_easy_setopt(handle, CURLOPT_FAILONERROR, 1)) !=
CURLE_OK ||
+ (ret = curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION,
write_callback)) != CURLE_OK ||
+ (ret = curl_easy_perform(handle)) != CURLE_OK) {
+ curl_easy_cleanup(handle);
+ mnstr_destroy(s);
+ if (errbuf[0])
+ fprintf(stderr, "%s\n", errbuf);
+ else
+ fprintf(stderr, "%s\n", curl_easy_strerror(ret));
+ return NULL;
+ }
+ curl_easy_cleanup(handle);
+ (void) mnstr_get_buffer(s); /* switch to read-only */
+ return s;
+}
+#else
+static stream *
+open_urlstream(const char *url)
+{
+ (void) url;
+ return NULL;
+}
+#endif
+
static stream *
opener_urlstream(char *url)
{
diff --git a/clients/mapiclient/CMakeLists.txt
b/clients/mapiclient/CMakeLists.txt
--- a/clients/mapiclient/CMakeLists.txt
+++ b/clients/mapiclient/CMakeLists.txt
@@ -54,6 +54,7 @@ target_link_libraries(mclient
mapi
stream
$<$<BOOL:${READLINE_FOUND}>:Readline::Readline>
+ $<$<BOOL:${CURL_FOUND}>:CURL::libcurl>
$<$<BOOL:${Iconv_FOUND}>:Iconv::Iconv>
$<$<PLATFORM_ID:Windows>:${GETOPT_LIB}>)
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -3072,10 +3072,70 @@ doFile(Mapi mid, stream *fp, bool useins
return errseen;
}
+#ifdef HAVE_CURL
+#include <curl/curl.h>
+
+static size_t
+write_callback(char *buffer, size_t size, size_t nitems, void *userp)
+{
+ stream *s = userp;
+
+ /* size is expected to always be 1 */
+
+ ssize_t sz = mnstr_write(s, buffer, size, nitems);
+ if (sz < 0)
+ return CURL_WRITEFUNC_ERROR; /* indicate failure to library */
+ return (size_t) sz * size;
+}
+
+static stream *
+open_urlstream(const char *url, char *errbuf)
+{
+ CURL *handle;
+ stream *s;
+ CURLcode ret;
+
+ s = buffer_wastream(NULL, url);
+ if (s == NULL) {
+ snprintf(errbuf, CURL_ERROR_SIZE, "could not allocate memory");
+ return NULL;
+ }
+
+ if ((handle = curl_easy_init()) == NULL) {
+ mnstr_destroy(s);
+ snprintf(errbuf, CURL_ERROR_SIZE, "could not create CURL
handle");
+ return NULL;
+ }
+
+ errbuf[0] = 0;
+
+ if ((ret = curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, errbuf)) !=
CURLE_OK ||
+ (ret = curl_easy_setopt(handle, CURLOPT_URL, url)) != CURLE_OK ||
+ (ret = curl_easy_setopt(handle, CURLOPT_WRITEDATA, s)) != CURLE_OK
||
+ (ret = curl_easy_setopt(handle, CURLOPT_VERBOSE, 0)) != CURLE_OK ||
+ (ret = curl_easy_setopt(handle, CURLOPT_NOSIGNAL, 1)) != CURLE_OK ||
+ (ret = curl_easy_setopt(handle, CURLOPT_FAILONERROR, 1)) !=
CURLE_OK ||
+ (ret = curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION,
write_callback)) != CURLE_OK ||
+ (ret = curl_easy_perform(handle)) != CURLE_OK) {
+ curl_easy_cleanup(handle);
+ mnstr_destroy(s);
+ if (errbuf[0] == 0)
+ snprintf(errbuf, CURL_ERROR_SIZE, "%s",
curl_easy_strerror(ret));
+ return NULL;
+ }
+ curl_easy_cleanup(handle);
+ (void) mnstr_get_buffer(s); /* switch to read-only */
+ return s;
+}
+#endif
+
struct privdata {
stream *f;
char *buf;
Mapi mid;
+#ifdef HAVE_CURL
+ char errbuf[CURL_ERROR_SIZE];
+#endif
};
#define READSIZE (1 << 16)
@@ -3086,7 +3146,7 @@ static const char alpha[] = "ABCDEFGHIJK
static char *
getfile(void *data, const char *filename, bool binary,
- uint64_t offset, size_t *size)
+ uint64_t offset, size_t *size)
{
stream *f;
char *buf;
@@ -3116,9 +3176,13 @@ getfile(void *data, const char *filename
&& filename[x] == ':'
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]