Changeset: a65d4eb8731b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a65d4eb8731b
Added Files:
monetdb5/mal/Tests/tst180.malC
monetdb5/mal/Tests/tst180.stable.err
monetdb5/mal/Tests/tst180.stable.out
sql/test/BugTracker-2020/Tests/All
sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.sql
sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.stable.err
sql/test/BugTracker-2020/Tests/median_avg-nulls.Bug-6807.stable.out
Modified Files:
MonetDB.spec
NT/mksqlwxs.py
clients/Tests/exports.stable.out
clients/mapiclient/mclient.c
common/stream/stream.c
common/utils/msabaoth.c
common/utils/mutils.c
common/utils/mutils.h
configure.ag
debian/monetdb5-server.install
debian/rules
gdk/gdk.h
gdk/gdk_aggr.c
gdk/gdk_bat.c
gdk/gdk_batop.c
gdk/gdk_bbp.c
gdk/gdk_calc.c
gdk/gdk_group.c
gdk/gdk_hash.c
gdk/gdk_hash.h
gdk/gdk_heap.c
gdk/gdk_imprints.c
gdk/gdk_join.c
gdk/gdk_orderidx.c
gdk/gdk_private.h
gdk/gdk_project.c
gdk/gdk_select.c
gdk/gdk_storage.c
gdk/gdk_unique.c
gdk/gdk_utils.c
monetdb5/mal/mal_authorize.c
monetdb5/mal/mal_builder.c
monetdb5/mal/mal_instruction.c
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_resource.h
monetdb5/mal/mal_session.c
monetdb5/mal/mal_stack.c
monetdb5/mal/mal_stack.h
monetdb5/modules/kernel/bat5.c
monetdb5/modules/kernel/status.c
monetdb5/modules/mal/mal_mapi.c
monetdb5/modules/mal/tokenizer.c
monetdb5/optimizer/opt_evaluate.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_gencode.c
sql/storage/bat/bat_storage.c
sql/storage/store.c
tools/merovingian/client/monetdb.c
tools/merovingian/daemon/argvcmds.c
tools/merovingian/daemon/client.c
tools/merovingian/daemon/connections.c
tools/merovingian/daemon/controlrunner.c
tools/merovingian/daemon/discoveryrunner.c
tools/merovingian/daemon/forkmserver.c
tools/merovingian/daemon/handlers.c
tools/merovingian/daemon/merovingian.c
tools/merovingian/daemon/multiplex-funnel.c
tools/merovingian/utils/control.c
tools/merovingian/utils/glob.c
tools/mserver/Makefile.ag
Branch: gdk_tracer
Log Message:
merged with default
diffs (truncated from 5020 to 300 lines):
diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -680,7 +680,6 @@ exit 0
%endif
%{_libdir}/monetdb5/lib_capi.so
%{_libdir}/monetdb5/lib_generator.so
-%{_libdir}/monetdb5/lib_opt_sql_append.so
%{_libdir}/monetdb5/lib_udf.so
%doc %{_mandir}/man1/mserver5.1.gz
%dir %{_datadir}/doc/MonetDB
@@ -967,6 +966,7 @@ export CFLAGS
--enable-mapi=yes \
--enable-netcdf=no \
--enable-odbc=yes \
+ --enable-profiler=no \
--enable-py2integration=%{?with_py2integration:yes}%{!?with_py2integration:no} \
--enable-py3integration=%{?with_py3integration:yes}%{!?with_py3integration:no} \
--enable-rintegration=%{?with_rintegration:yes}%{!?with_rintegration:no} \
@@ -1040,6 +1040,9 @@ install -d -m 0775 %{buildroot}%{_locals
# .la files
rm -f %{buildroot}%{_libdir}/*.la
rm -f %{buildroot}%{_libdir}/monetdb5/*.la
+rm -f %{buildroot}%{_libdir}/monetdb5/opt_sql_append.mal
+rm -f %{buildroot}%{_libdir}/monetdb5/lib_opt_sql_append.so
+rm -f %{buildroot}%{_libdir}/monetdb5/autoload/??_opt_sql_append.mal
%if %{?rhel:0}%{!?rhel:1} || 0%{?rhel} >= 7
for selinuxvariant in %{selinux_variants}
diff --git a/NT/mksqlwxs.py b/NT/mksqlwxs.py
--- a/NT/mksqlwxs.py
+++ b/NT/mksqlwxs.py
@@ -178,7 +178,7 @@ def main():
print(r' <Directory Id="monetdb5" Name="monetdb5">')
print(r' <Directory Id="autoload" Name="autoload">')
id = comp(features, id, 18,
- [r'lib\monetdb5\autoload\{}'.format(x) for x in
sorted(filter(lambda x: x.endswith('.mal') and ('geom' not in x) and ('pyapi'
not in x), os.listdir(os.path.join(sys.argv[3], 'lib', 'monetdb5',
'autoload'))))])
+ [r'lib\monetdb5\autoload\{}'.format(x) for x in
sorted(filter(lambda x: x.endswith('.mal') and ('geom' not in x) and ('pyapi'
not in x) and ('opt_sql_append' not in x), os.listdir(os.path.join(sys.argv[3],
'lib', 'monetdb5', 'autoload'))))])
id = comp(geom, id, 18,
[r'lib\monetdb5\autoload\{}'.format(x) for x in
sorted(filter(lambda x: x.endswith('.mal') and ('geom' in x),
os.listdir(os.path.join(sys.argv[3], 'lib', 'monetdb5', 'autoload'))))])
id = comp(pyapi2, id, 18,
@@ -193,11 +193,11 @@ def main():
[r'lib\monetdb5\createdb\{}'.format(x) for x in
sorted(filter(lambda x: x.endswith('.sql') and ('geom' in x),
os.listdir(os.path.join(sys.argv[3], 'lib', 'monetdb5', 'createdb'))))])
print(r' </Directory>')
id = comp(features, id, 16,
- [r'lib\monetdb5\{}'.format(x) for x in sorted(filter(lambda x:
x.endswith('.mal') and ('geom' not in x) and ('pyapi' not in x),
os.listdir(os.path.join(sys.argv[3], 'lib', 'monetdb5'))))])
+ [r'lib\monetdb5\{}'.format(x) for x in sorted(filter(lambda x:
x.endswith('.mal') and ('geom' not in x) and ('pyapi' not in x) and
('opt_sql_append' not in x), os.listdir(os.path.join(sys.argv[3], 'lib',
'monetdb5'))))])
id = comp(features, id, 16,
- [r'lib\monetdb5\{}'.format(x) for x in sorted(filter(lambda x:
x.startswith('lib_') and x.endswith('.dll') and ('geom' not in x) and ('pyapi'
not in x), os.listdir(os.path.join(sys.argv[3], 'lib', 'monetdb5'))))])
+ [r'lib\monetdb5\{}'.format(x) for x in sorted(filter(lambda x:
x.startswith('lib_') and x.endswith('.dll') and ('geom' not in x) and ('pyapi'
not in x) and ('opt_sql_append' not in x), os.listdir(os.path.join(sys.argv[3],
'lib', 'monetdb5'))))])
id = comp(debug, id, 16,
- [r'lib\monetdb5\{}'.format(x) for x in sorted(filter(lambda x:
x.startswith('lib_') and x.endswith('.pdb') and ('geom' not in x),
os.listdir(os.path.join(sys.argv[3], 'lib', 'monetdb5'))))])
+ [r'lib\monetdb5\{}'.format(x) for x in sorted(filter(lambda x:
x.startswith('lib_') and x.endswith('.pdb') and ('geom' not in x) and
('opt_sql_append' not in x), os.listdir(os.path.join(sys.argv[3], 'lib',
'monetdb5'))))])
id = comp(geom, id, 16,
[r'lib\monetdb5\{}'.format(x) for x in sorted(filter(lambda x:
x.endswith('.mal') and ('geom' in x), os.listdir(os.path.join(sys.argv[3],
'lib', 'monetdb5'))))])
id = comp(geom, id, 16,
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
@@ -308,6 +308,7 @@ const char *GDKversion(void);
size_t GDKvm_cursize(void);
void *GDKzalloc(size_t size) __attribute__((__malloc__))
__attribute__((__alloc_size__(1))) __attribute__((__warn_unused_result__));
void HASHdestroy(BAT *b);
+gdk_return HASHgrowbucket(BAT *b);
BUN HASHlist(Hash *h, BUN i);
BUN HASHprobe(const Hash *h, const void *v);
void HEAP_free(Heap *heap, var_t block);
@@ -326,7 +327,7 @@ MT_Id MT_getpid(void);
size_t MT_getrss(void);
void MT_init(void);
int MT_join_thread(MT_Id t);
-int MT_lockf(char *filename, int mode, off_t off, off_t len);
+int MT_lockf(char *filename, int mode);
void *MT_mmap(const char *path, int mode, size_t len);
int MT_munmap(void *p, size_t len);
bool MT_path_absolute(const char *path);
@@ -2076,7 +2077,6 @@ int chkInstruction(Module s, MalBlkPtr m
str chkProgram(Module s, MalBlkPtr mb);
str chkTypes(Module s, MalBlkPtr mb, int silent);
str cleanupTraces(Client cntxt);
-void clearStack(MalStkPtr s);
void clearTrace(Client cntxt);
void clearVariable(MalBlkPtr mb, int varid);
str clear_tableRef;
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -124,6 +124,8 @@ static timertype t0, t1; /* used for tim
#ifdef HAVE_POPEN
static char *pager = 0; /* use external pager */
+#endif
+#ifdef HAVE_SIGACTION
#include <signal.h> /* to block SIGPIPE */
#endif
static int rowsperpage = 0; /* for SQL pagination */
@@ -1808,36 +1810,27 @@ start_pager(stream **saveFD)
if (pager) {
FILE *p;
- struct sigaction act;
- /* ignore SIGPIPE so that we get an error instead of signal */
- act.sa_handler = SIG_IGN;
- (void) sigemptyset(&act.sa_mask);
- act.sa_flags = 0;
- if(sigaction(SIGPIPE, &act, NULL) == -1) {
+ p = popen(pager, "w");
+ if (p == NULL)
fprintf(stderr, "Starting '%s' failed\n", pager);
- } else {
- p = popen(pager, "w");
- if (p == NULL)
+ else {
+ *saveFD = toConsole;
+ /* put | in name to indicate that file should be closed
with pclose */
+ if ((toConsole = file_wastream(p, "|pager")) == NULL) {
+ toConsole = *saveFD;
+ *saveFD = NULL;
fprintf(stderr, "Starting '%s' failed\n",
pager);
- else {
- *saveFD = toConsole;
- /* put | in name to indicate that file should
be closed with pclose */
- if ((toConsole = file_wastream(p, "|pager")) ==
NULL) {
+ }
+#ifdef HAVE_ICONV
+ if (encoding != NULL) {
+ if ((toConsole = iconv_wstream(toConsole,
encoding, "pager")) == NULL) {
toConsole = *saveFD;
*saveFD = NULL;
fprintf(stderr, "Starting '%s'
failed\n", pager);
}
-#ifdef HAVE_ICONV
- if (encoding != NULL) {
- if ((toConsole =
iconv_wstream(toConsole, encoding, "pager")) == NULL) {
- toConsole = *saveFD;
- *saveFD = NULL;
- fprintf(stderr, "Starting '%s'
failed\n", pager);
- }
- }
+ }
#endif
- }
}
}
}
@@ -3336,6 +3329,16 @@ main(int argc, char **argv)
exit(2);
}
#endif
+#ifdef HAVE_SIGACTION
+ struct sigaction act;
+ /* ignore SIGPIPE so that we get an error instead of signal */
+ act.sa_handler = SIG_IGN;
+ (void) sigemptyset(&act.sa_mask);
+ act.sa_flags = 0;
+ if (sigaction(SIGPIPE, &act, NULL) == -1)
+ perror("sigaction");
+#endif
+
toConsole = stdout_stream = file_wastream(stdout, "stdout");
stderr_stream = file_wastream(stderr, "stderr");
if(!stdout_stream || !stderr_stream) {
diff --git a/common/stream/stream.c b/common/stream/stream.c
--- a/common/stream/stream.c
+++ b/common/stream/stream.c
@@ -2500,6 +2500,8 @@ socket_read(stream *restrict s, void *re
.events = POLLIN};
ret = poll(&pfd, 1, (int) s->timeout);
+ if (ret == -1 && errno == EINTR)
+ continue;
if (ret == -1 || (pfd.revents & POLLERR)) {
s->errnr = MNSTR_READ_ERROR;
return -1;
@@ -2550,6 +2552,8 @@ socket_read(stream *restrict s, void *re
}
#else
nr = read(s->stream_data.s, buf, size);
+ if (nr == -1 && errno == EINTR)
+ continue;
if (nr == -1) {
s->errnr = MNSTR_READ_ERROR;
return -1;
@@ -2643,6 +2647,8 @@ socket_isalive(stream *s)
pfd = (struct pollfd){.fd = fd};
if ((ret = poll(&pfd, 1, 0)) == 0)
return 1;
+ if (ret == -1 && errno == EINTR)
+ return socket_isalive(s);
if (ret < 0 || pfd.revents & (POLLERR | POLLHUP))
return 0;
assert(0); /* unexpected revents value */
diff --git a/common/utils/msabaoth.c b/common/utils/msabaoth.c
--- a/common/utils/msabaoth.c
+++ b/common/utils/msabaoth.c
@@ -148,7 +148,7 @@ msab_init(const char *dbfarm, const char
if (_sabaoth_internal_dbname != NULL)
free(_sabaoth_internal_dbname);
- /* this UUID is supposed to be unique per-process, we use it lateron
+ /* this UUID is supposed to be unique per-process, we use it later on
* to determine if a database is (started by) the current process,
* since locking always succeeds for the same process */
if (_sabaoth_internal_uuid == NULL)
@@ -641,7 +641,7 @@ msab_getSingleStatus(const char *pathbuf
(void)fclose(f);
}
} else if ((snprintf(buf, sizeof(buf), "%s/%s/%s", pathbuf, dbname,
".gdk_lock") > 0) & /* no typo */
- ((fd = MT_lockf(buf, F_TEST, 4, 1)) == -2)) {
+ ((fd = MT_lockf(buf, F_TEST)) == -2)) {
/* Locking failed; this can be because the lockfile couldn't
* be created. Probably there is no Mserver running for
* that case also.
diff --git a/common/utils/mutils.c b/common/utils/mutils.c
--- a/common/utils/mutils.c
+++ b/common/utils/mutils.c
@@ -278,7 +278,7 @@ dirname(char *path)
/* see contract of unix MT_lockf */
int
-MT_lockf(char *filename, int mode, off_t off, off_t len)
+MT_lockf(char *filename, int mode)
{
int ret = 1, fd = -1;
OVERLAPPED ov;
@@ -292,19 +292,11 @@ MT_lockf(char *filename, int mode, off_t
ov = (OVERLAPPED) {0};
#if defined(DUMMYSTRUCTNAME) && (defined(NONAMELESSUNION) ||
!defined(_MSC_EXTENSIONS)) /* Windows SDK v7.0 */
- ov.u.s.Offset = (unsigned int) off;
-#if 0
- ov.u.s.OffsetHigh = off >> 32;
-#else
- ov.u.s.OffsetHigh = 0; /* sizeof(off) == 4, i.e. off >> 32 is not
possible */
-#endif
+ ov.u.s.Offset = 4;
+ ov.u.s.OffsetHigh = 0;
#else
- ov.Offset = (unsigned int) off;
-#if 0
- ov.OffsetHigh = off >> 32;
-#else
- ov.OffsetHigh = 0; /* sizeof(off) == 4, i.e. off >> 32 is not
possible */
-#endif
+ ov.Offset = 4;
+ ov.OffsetHigh = 0;
#endif
if (mode == F_ULOCK) {
@@ -316,7 +308,7 @@ MT_lockf(char *filename, int mode, off_t
fp = *fpp;
*fpp = fp->next;
free(fp);
- ret = UnlockFileEx(fh, 0, len, 0, &ov);
+ ret = UnlockFileEx(fh, 0, 1, 0, &ov);
return ret ? 0 : -1;
}
}
@@ -327,7 +319,7 @@ MT_lockf(char *filename, int mode, off_t
NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (fh == INVALID_HANDLE_VALUE)
return -2;
- ret = UnlockFileEx(fh, 0, len, 0, &ov);
+ ret = UnlockFileEx(fh, 0, 1, 0, &ov);
CloseHandle(fh);
return 0;
}
@@ -342,13 +334,13 @@ MT_lockf(char *filename, int mode, off_t
}
if (mode == F_TLOCK) {
- ret = LockFileEx(fh, LOCKFILE_FAIL_IMMEDIATELY |
LOCKFILE_EXCLUSIVE_LOCK, 0, len, 0, &ov);
+ ret = LockFileEx(fh, LOCKFILE_FAIL_IMMEDIATELY |
LOCKFILE_EXCLUSIVE_LOCK, 0, 1, 0, &ov);
} else if (mode == F_LOCK) {
- ret = LockFileEx(fh, LOCKFILE_EXCLUSIVE_LOCK, 0, len, 0, &ov);
+ ret = LockFileEx(fh, LOCKFILE_EXCLUSIVE_LOCK, 0, 1, 0, &ov);
} else if (mode == F_TEST) {
- ret = LockFileEx(fh, LOCKFILE_FAIL_IMMEDIATELY |
LOCKFILE_EXCLUSIVE_LOCK, 0, len, 0, &ov);
+ ret = LockFileEx(fh, LOCKFILE_FAIL_IMMEDIATELY |
LOCKFILE_EXCLUSIVE_LOCK, 0, 1, 0, &ov);
if (ret != 0) {
- UnlockFileEx(fh, 0, len, 0, &ov);
+ UnlockFileEx(fh, 0, 1, 0, &ov);
close(fd);
return 0;
}
@@ -408,15 +400,15 @@ lockf(int fd, int cmd, off_t len)
* returns the (open) file descriptor to the file when locking
* returns 0 when unlocking */
int
-MT_lockf(char *filename, int mode, off_t off, off_t len)
+MT_lockf(char *filename, int mode)
{
int fd = open(filename, O_CREAT | O_RDWR | O_TEXT | O_CLOEXEC,
MONETDB_MODE);
if (fd < 0)
return -2;
- if (lseek(fd, off, SEEK_SET) >= 0 &&
- lockf(fd, mode, len) == 0) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list