Changeset: cdcc6bd1fb1f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cdcc6bd1fb1f
Modified Files:
clients/mapiclient/mclient.c
gdk/gdk_utils.c
monetdb5/mal/mal_profiler.c
Branch: makelibstreamgreatagain
Log Message:
Merge with default branch.
diffs (truncated from 712 to 300 lines):
diff --git a/clients/mapiclient/ReadlineTools.c
b/clients/mapiclient/ReadlineTools.c
--- a/clients/mapiclient/ReadlineTools.c
+++ b/clients/mapiclient/ReadlineTools.c
@@ -12,6 +12,8 @@
#include "monetdb_config.h"
#ifdef HAVE_LIBREADLINE
+#include <fcntl.h>
+#include <unistd.h>
#include <readline/readline.h>
#include <readline/history.h>
@@ -39,7 +41,7 @@ static const char *sql_commands[] = {
static Mapi _mid;
static char _history_file[FILENAME_MAX];
-static int _save_history = 0;
+static bool _save_history = false;
static const char *language;
static char *
@@ -289,8 +291,73 @@ continue_completion(rl_completion_func_t
rl_attempted_completion_function = func;
}
+#ifndef BUFSIZ
+#define BUFSIZ 1024
+#endif
+
+static void
+readline_show_error(const char *msg) {
+ rl_save_prompt();
+ rl_message(msg);
+ rl_restore_prompt();
+ rl_clear_message();
+}
+
+static int
+invoke_editor(int cnt, int key) {
+ char template[] = "/tmp/mclient_temp_XXXXXX";
+ char cmd[BUFSIZ];
+ char *editor;
+ FILE *fp;
+ size_t cmd_len;
+
+ (void) cnt;
+ (void) key;
+
+ if ((fp = fdopen(mkstemp(template), "r+")) == NULL) {
+ // Notify the user that we cannot create temp file
+ readline_show_error("invoke_editor: Cannot create temp file\n");
+ goto bailout;
+ }
+
+ fwrite(rl_line_buffer, sizeof(char), rl_end, fp);
+ fflush(fp);
+
+ editor = getenv("VISUAL");
+ if (!editor) {
+ editor = getenv("EDITOR");
+ if (!editor) {
+ readline_show_error("invoke_editor: EDITOR/VISUAL env
variable not set\n");
+ goto bailout;
+ }
+ }
+
+ snprintf(cmd, BUFSIZ, "%s %s", editor, template);
+ if (system(cmd) != 0) {
+ readline_show_error("invoke_editor: Starting editor failed\n");
+ goto bailout;
+ }
+
+ fseek(fp, 0, SEEK_SET);
+ cmd_len = fread(cmd, sizeof(char), BUFSIZ, fp);
+ fclose(fp);
+
+ *(cmd + cmd_len) = 0;
+
+ rl_replace_line(cmd, 0);
+ rl_point = cmd_len - 1;
+
+ unlink(template);
+
+ return 0;
+
+bailout:
+ fclose(fp);
+ return 1;
+}
+
void
-init_readline(Mapi mid, const char *lang, int save_history)
+init_readline(Mapi mid, const char *lang, bool save_history)
{
language = lang;
_mid = mid;
@@ -308,6 +375,8 @@ init_readline(Mapi mid, const char *lang
rl_attempted_completion_function = mal_completion;
}
+ rl_bind_key(024, invoke_editor);
+
if (save_history) {
int len;
if (getenv("HOME") != NULL) {
@@ -317,7 +386,7 @@ init_readline(Mapi mid, const char *lang
if (len == -1 || len >= FILENAME_MAX)
fprintf(stderr, "Warning: history filename path
is too large\n");
else
- _save_history = 1;
+ _save_history = true;
}
if (_save_history) {
FILE *f;
diff --git a/clients/mapiclient/ReadlineTools.h
b/clients/mapiclient/ReadlineTools.h
--- a/clients/mapiclient/ReadlineTools.h
+++ b/clients/mapiclient/ReadlineTools.h
@@ -13,7 +13,7 @@
#include "mapi.h"
-void init_readline(Mapi mid, const char *language, int save_history);
+void init_readline(Mapi mid, const char *language, bool save_history);
void deinit_readline(void);
void save_line(const char *s);
rl_completion_func_t *suspend_completion(void);
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -2207,7 +2207,7 @@ mydestroy(void *private)
#endif
static bool
-doFile(Mapi mid, stream *fp, bool useinserts, bool interactive, int
save_history)
+doFile(Mapi mid, stream *fp, bool useinserts, bool interactive, bool
save_history)
{
char *line = NULL;
char *buf = NULL;
@@ -3173,7 +3173,7 @@ main(int argc, char **argv)
bool useinserts = false;
int c = 0;
Mapi mid;
- int save_history = 0;
+ bool save_history = false;
bool interactive = false;
bool has_fileargs = false;
int option_index = 0;
@@ -3257,7 +3257,7 @@ main(int argc, char **argv)
dbname = dotfile.dbname;
language = dotfile.language;
host = dotfile.host;
- save_history = (int)dotfile.save_history;
+ save_history = dotfile.save_history;
output = dotfile.output;
pagewidth = dotfile.pagewidth;
port = dotfile.port;
@@ -3320,7 +3320,7 @@ main(int argc, char **argv)
host = optarg;
break;
case 'H':
- save_history = 1;
+ save_history = true;
break;
case 'i':
interactive = true;
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1360,7 +1360,7 @@ GDKusec(void)
return (lng) (f.QuadPart / 10);
#elif defined(HAVE_CLOCK_GETTIME)
struct timespec ts;
- clock_gettime(CLOCK_REALTIME, &ts);
+ (void) clock_gettime(CLOCK_REALTIME, &ts);
return (lng) (ts.tv_sec * LL_CONSTANT(1000000) + ts.tv_nsec / 1000);
#elif defined(HAVE_GETTIMEOFDAY)
struct timeval tv;
diff --git a/monetdb5/ChangeLog b/monetdb5/ChangeLog
--- a/monetdb5/ChangeLog
+++ b/monetdb5/ChangeLog
@@ -1,3 +1,16 @@
# ChangeLog file for MonetDB5
# This file is updated with Maddlog
+* Thu Aug 20 2020 Sjoerd Mullender <[email protected]>
+- The settings for specifying how mserver5 should listen to "The
+ Internet" have been overhauled. See the manual for details. In
+ brief, mapi_autosense, mapi_ipv6 and mapi_open are gone. If
+ mapi_listenaddr equals "localhost" or "all", we listen to both IPv4
+ and IPv6 (if available), if "127.0.0.1" or "0.0.0.0", we listen to
+ IPv4 only, if "::1" or "::" we listen to IPv6 only. The first of
+ each pair is loopback interface only, the second is all interfaces.
+ If mapi_listenaddr is "none", then no IP port is opened, you need to
+ use a UNIX domain socket. If mapi_port is 0, we let the operating
+ system choose a free port (like mapi_autosense). Default behavior
+ has not changed.
+
diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -246,9 +246,9 @@ This information can be used to determin
logadd(",\"parent\":%d", VIEWtparent(d));
logadd(",\"seqbase\":"BUNFMT, d->hseqbase);
v=
BBPquickdesc(VIEWtparent(d), false);
-
logadd(",\"persistence\":\"%s\"", (v && !v->batTransient ? "persistent" :
"transient"));
+
logadd(",\"mode\":\"%s\"", (v && !v->batTransient ? "persistent" :
"transient"));
} else
-
logadd(",\"persistence\":\"%s\"", (d->batTransient ? "transient" :
"persistent"));
+
logadd(",\"mode\":\"%s\"", (d->batTransient ? "transient" : "persistent"));
logadd(",\"sorted\":%d",
d->tsorted);
logadd(",\"revsorted\":%d",
d->trevsorted);
logadd(",\"nonil\":%d",
d->tnonil);
@@ -260,6 +260,7 @@ This information can be used to determin
logadd(",\"file\":\"%s\"", cv +
1);
GDKfree(cv);
total += cnt * d->twidth;
+ logadd(",\"width\":%d",
d->twidth);
/* keeping information about
the individual auxiliary heaps is helpful during analysis. */
if( d->thash)
logadd(",\"hash\":"
LLFMT, (lng) hashinfo(d->thash, d->batCacheid));
@@ -290,10 +291,10 @@ This information can be used to determin
GDKfree(cv);
GDKfree(stmtq);
}
- logadd(",\"eol\":%d",
getVarEolife(mb,getArg(pci,j)));
- logadd(",\"used\":%d",
isVarUsed(mb,getArg(pci,j)));
- logadd(",\"fixed\":%d",
isVarFixed(mb,getArg(pci,j)));
- logadd(",\"udf\":%d",
isVarUDFtype(mb,getArg(pci,j)));
+ // logadd(",\"eol\":%d",
getVarEolife(mb,getArg(pci,j))); useful for MAL debugging
+ // logadd(",\"used\":%d",
isVarUsed(mb,getArg(pci,j)));
+ // logadd(",\"fixed\":%d",
isVarFixed(mb,getArg(pci,j)));
+ // logadd(",\"udf\":%d",
isVarUDFtype(mb,getArg(pci,j)));
GDKfree(tname);
logadd("}");
}
diff --git a/sql/test/BugTracker-2020/Tests/All
b/sql/test/BugTracker-2020/Tests/All
--- a/sql/test/BugTracker-2020/Tests/All
+++ b/sql/test/BugTracker-2020/Tests/All
@@ -18,3 +18,4 @@ interval-math.Bug-6935
tpch-cube.Bug-6938
HAVE_PYMONETDB?remote-table-like.Bug-6841
KNOWNFAIL?copy-empty-blob.Bug-6948
+values-like-join.Bug-6954
diff --git a/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.sql
b/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.sql
--- a/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.sql
+++ b/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.sql
@@ -9,5 +9,5 @@ 2,""
3,
-- This should return 4 rows
-select * form blobtbl;
+select * from blobtbl;
rollback;
diff --git a/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.stable.err
b/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.stable.err
--- a/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.stable.err
+++ b/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.stable.err
@@ -0,0 +1,12 @@
+stderr of test 'copy-empty-blob.Bug-6948` in directory
'sql/test/BugTracker-2020` itself:
+
+
+# 16:22:46 >
+# 16:22:46 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-2979" "--port=31302"
+# 16:22:46 >
+
+
+# 16:22:46 >
+# 16:22:46 > "Done."
+# 16:22:46 >
+
diff --git a/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.stable.out
b/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.stable.out
--- a/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.stable.out
+++ b/sql/test/BugTracker-2020/Tests/copy-empty-blob.Bug-6948.stable.out
@@ -0,0 +1,31 @@
+stdout of test 'copy-empty-blob.Bug-6948` in directory
'sql/test/BugTracker-2020` itself:
+
+
+# 16:22:46 >
+# 16:22:46 > "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e"
"--host=/var/tmp/mtest-2979" "--port=31302"
+# 16:22:46 >
+
+#start transaction;
+#create table blobtbl (i int, b blob);
+#copy into blobtbl from stdin delimiters ',','\n','"';
+#0,NULL
+#1,12ff
+#2,""
+#3,
+#
+[ 4 ]
+#select * from blobtbl;
+% sys.blobtbl, sys.blobtbl # table_name
+% i, b # name
+% int, blob # type
+% 1, 0 # length
+[ 0, NULL ]
+[ 1, 12FF ]
+[ 2, ]
+[ 3, ]
+#rollback;
+
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list