Changeset: 7cdfd7df906a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7cdfd7df906a
Added Files:
sql/test/BugTracker-2019/Tests/All
sql/test/BugTracker-2019/Tests/copy-into-from-stdin-empty-line.Bug-67999.sql
sql/test/BugTracker-2019/Tests/copy-into-from-stdin-empty-line.Bug-67999.stable.err
sql/test/BugTracker-2019/Tests/copy-into-from-stdin-empty-line.Bug-67999.stable.out
Modified Files:
clients/Tests/exports.stable.out
configure.ag
gdk/gdk.h
gdk/gdk_hash.c
gdk/gdk_imprints.c
gdk/gdk_join.c
gdk/gdk_orderidx.c
gdk/gdk_posix.c
gdk/gdk_utils.c
monetdb5/extras/rapi/converters.c.h
monetdb5/extras/rapi/rapi.c
monetdb5/mal/mal_client.c
monetdb5/mal/mal_dataflow.c
monetdb5/mal/mal_import.c
monetdb5/modules/mal/mal_mapi.c
monetdb5/modules/mal/tablet.c
sql/backends/monet5/Tests/rapi17.stable.out
sql/backends/monet5/sql_scenario.c
sql/server/sql_mvc.c
testing/Mtest.py.in
Branch: default
Log Message:
Merge with Apr2019 branch.
diffs (truncated from 1233 to 300 lines):
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
@@ -324,6 +324,7 @@ void PROPdestroy(BAT *b);
BUN SORTfnd(BAT *b, const void *v);
BUN SORTfndfirst(BAT *b, const void *v);
BUN SORTfndlast(BAT *b, const void *v);
+MT_Id THRcreate(void (*f)(void *), void *arg, enum MT_thr_detach d, const char
*name);
void *THRdata[THREADDATA];
void THRdel(Thread t);
Thread THRget(int tid);
diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -1321,14 +1321,6 @@ AC_DEFINE_UNQUOTED([PATH_SEP_STR], ["$PA
AC_DEFINE_UNQUOTED([SO_PREFIX], ["$SOPREF"], [Shared Object prefix])
AC_DEFINE_UNQUOTED([SO_EXT], ["$SOEXT"], [Shared Object extension])
-AS_CASE([$host_os],
- [cygwin*], [],
- [
- CYGPATH_W=echo
- CYGPATH_WP=echo
- AC_SUBST([CYGPATH_W])
- AC_SUBST([CYGPATH_WP])])
-
# checks for libraries
# check for bz2 (de)compression library
org_have_bz2=auto
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1969,7 +1969,7 @@ gdk_export str GDKstrndup(const char *s,
fprintf(stderr, \
"#GDKstrdup(len=%zu) -> %p" \
" %s[%s:%d]\n", \
- strlen(_str), \
+ _str ? strlen(_str) : 0, \
_res, \
__func__, __FILE__, __LINE__); \
_res; \
@@ -2100,7 +2100,7 @@ GDKstrdup_debug(const char *str, const c
void *res = GDKstrdup(str);
ALLOCDEBUG fprintf(stderr, "#GDKstrdup(len=%zu) -> "
"%p [%s:%d]\n",
- strlen(str), res, filename, lineno);
+ str ? strlen(str) : 0, res, filename, lineno);
return res;
}
#define GDKstrdup(s) GDKstrdup_debug((s), __FILE__, __LINE__)
@@ -2306,6 +2306,7 @@ typedef struct threadStruct {
gdk_export int THRgettid(void);
gdk_export Thread THRget(int tid);
gdk_export Thread THRnew(const char *name);
+gdk_export MT_Id THRcreate(void (*f) (void *), void *arg, enum MT_thr_detach
d, const char *name);
gdk_export void THRdel(Thread t);
gdk_export void THRsetdata(int, void *);
gdk_export void *THRgetdata(int);
diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c
--- a/gdk/gdk_hash.c
+++ b/gdk/gdk_hash.c
@@ -270,6 +270,7 @@ BAThashsync(void *arg)
fsync(fd);
#endif
}
+ hp->dirty = false;
} else {
perror("write hash");
}
@@ -278,8 +279,12 @@ BAThashsync(void *arg)
} else {
((size_t *) hp->base)[0] |= (size_t) 1 << 24;
if (!(GDKdebug & NOSYNCMASK) &&
- MT_msync(hp->base, SIZEOF_SIZE_T) < 0)
+ MT_msync(hp->base, SIZEOF_SIZE_T) < 0) {
((size_t *) hp->base)[0] &= ~((size_t)
1 << 24);
+ } else {
+ hp->dirty = false;
+ failed = ""; /* not failed */
+ }
}
ALGODEBUG fprintf(stderr, "#BAThash: persisting hash %s
(" LLFMT " usec)%s\n", hp->filename, GDKusec() - t0, failed);
}
diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c
--- a/gdk/gdk_imprints.c
+++ b/gdk/gdk_imprints.c
@@ -298,7 +298,9 @@ BATimpsync(void *arg)
fsync(fd);
#endif
}
+ hp->dirty = false;
} else {
+ failed = " write failed";
perror("write hash");
}
close(fd);
@@ -309,8 +311,13 @@ BATimpsync(void *arg)
/* sync-on-disk checked bit */
((size_t *) hp->base)[0] |= (size_t) 1 << 16;
if (!(GDKdebug & NOSYNCMASK) &&
- MT_msync(hp->base, SIZEOF_SIZE_T) < 0)
+ MT_msync(hp->base, SIZEOF_SIZE_T) < 0) {
+ failed = " sync failed";
((size_t *) hp->base)[0] &= ~((size_t)
IMPRINTS_VERSION << 8);
+ } else {
+ hp->dirty = false;
+ failed = ""; /* not failed */
+ }
}
ALGODEBUG fprintf(stderr, "#BATimpsync(" ALGOBATFMT "):
"
"imprints persisted "
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -3755,6 +3755,19 @@ BATjoin(BAT **r1p, BAT **r2p, BAT *l, BA
ALGODEBUG t0 = GDKusec();
+ if ((parent = VIEWtparent(l)) != 0) {
+ BAT *b = BBPdescriptor(parent);
+ if (l->hseqbase == b->hseqbase &&
+ BATcount(l) == BATcount(b))
+ l = b;
+ }
+ if ((parent = VIEWtparent(r)) != 0) {
+ BAT *b = BBPdescriptor(parent);
+ if (r->hseqbase == b->hseqbase &&
+ BATcount(r) == BATcount(b))
+ r = b;
+ }
+
CANDINIT(l, sl, lstart, lend, lcnt, lcand, lcandend);
CANDINIT(r, sr, rstart, rend, rcnt, rcand, rcandend);
lcnt = lcand ? (BUN) (lcandend - lcand) : lend - lstart;
diff --git a/gdk/gdk_orderidx.c b/gdk/gdk_orderidx.c
--- a/gdk/gdk_orderidx.c
+++ b/gdk/gdk_orderidx.c
@@ -41,6 +41,7 @@ BATidxsync(void *arg)
fsync(fd);
#endif
}
+ hp->dirty = false;
} else {
perror("write hash");
}
@@ -49,8 +50,12 @@ BATidxsync(void *arg)
} else {
((oid *) hp->base)[0] |= (oid) 1 << 24;
if (!(GDKdebug & NOSYNCMASK) &&
- MT_msync(hp->base, SIZEOF_OID) < 0)
+ MT_msync(hp->base, SIZEOF_OID) < 0) {
((oid *) hp->base)[0] &= ~((oid) 1 <<
24);
+ } else {
+ hp->dirty = false;
+ failed = ""; /* not failed */
+ }
}
ALGODEBUG fprintf(stderr, "#BATidxsync(%s): orderidx
persisted"
" (" LLFMT " usec)%s\n",
diff --git a/gdk/gdk_posix.c b/gdk/gdk_posix.c
--- a/gdk/gdk_posix.c
+++ b/gdk/gdk_posix.c
@@ -1099,20 +1099,11 @@ win_mkdir(const char *pathname, const in
void
MT_sleep_ms(unsigned int ms)
{
-#ifdef HAVE_NANOSLEEP_dont_use
- struct timespec ts;
-
- ts.tv_sec = (time_t) (ms / 1000);
- ts.tv_nsec = 1000000 * (ms % 1000);
- while (nanosleep(&ts, &ts) == -1 && errno == EINTR)
- ;
-#else
struct timeval tv;
tv.tv_sec = ms / 1000;
tv.tv_usec = 1000 * (ms % 1000);
(void) select(0, NULL, NULL, NULL, &tv);
-#endif
}
#else /* WIN32 */
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1357,23 +1357,98 @@ THRnew(const char *name)
.sp = THRsp(),
};
- PARDEBUG fprintf(stderr, "#%x %zu sp = %zu\n", (unsigned)
s->tid, (size_t) pid, (size_t) s->sp);
- PARDEBUG fprintf(stderr, "#nrofthreads %d\n", GDKnrofthreads);
-
- GDKnrofthreads++;
s->name = GDKstrdup(name);
- if(!s->name) {
+ if (s->name == NULL) {
+ s->pid = 0;
MT_lock_unset(&GDKthreadLock);
IODEBUG fprintf(stderr, "#THRnew: malloc failure\n");
GDKerror("THRnew: malloc failure\n");
return NULL;
}
+ GDKnrofthreads++;
+ PARDEBUG fprintf(stderr, "#%x %zu sp = %zu\n", (unsigned)
s->tid, (size_t) pid, (size_t) s->sp);
+ PARDEBUG fprintf(stderr, "#nrofthreads %d\n", GDKnrofthreads);
}
MT_lock_unset(&GDKthreadLock);
return s;
}
+struct THRstart {
+ void (*func) (void *);
+ void *arg;
+ MT_Sema sem;
+ Thread thr;
+};
+
+static void
+THRstarter(void *a)
+{
+ struct THRstart *t = a;
+ void (*func) (void *) = t->func;
+ void *arg = t->arg;
+
+ MT_sema_down(&t->sem);
+ t->thr->sp = THRsp();
+ (*func)(arg);
+ THRdel(t->thr);
+ MT_sema_destroy(&t->sem);
+ GDKfree(a);
+}
+
+MT_Id
+THRcreate(void (*f) (void *), void *arg, enum MT_thr_detach d, const char
*name)
+{
+ MT_Id tid;
+ Thread s;
+ struct THRstart *t;
+
+ if ((t = GDKmalloc(sizeof(*t))) == NULL)
+ return 0;
+ t->func = f;
+ t->arg = arg;
+ MT_lock_set(&GDKthreadLock);
+ for (s = GDKthreads; s < GDKthreads + THREADS; s++) {
+ if (s->pid == 0) {
+ break;
+ }
+ }
+ if (s == GDKthreads + THREADS) {
+ MT_lock_unset(&GDKthreadLock);
+ IODEBUG fprintf(stderr, "#THRcreate: too many threads\n");
+ GDKerror("THRcreate: too many threads\n");
+ return 0;
+ }
+ tid = s->tid;
+ /* name is for debugging and may be NULL */
+ *s = (ThreadRec) {
+ .pid = ~0,
+ .tid = tid,
+ .data[0] = THRdata[0],
+ .data[1] = THRdata[1],
+ .name = GDKstrdup(name),
+ };
+ MT_lock_unset(&GDKthreadLock);
+ t->thr = s;
+ MT_sema_init(&t->sem, 0, "THRcreate");
+ if (MT_create_thread(&tid, THRstarter, t, d) != 0) {
+ GDKerror("THRcreate: could not start thread\n");
+ MT_sema_destroy(&t->sem);
+ GDKfree(t);
+ MT_lock_set(&GDKthreadLock);
+ s->pid = 0;
+ MT_lock_unset(&GDKthreadLock);
+ return 0;
+ }
+ MT_lock_set(&GDKthreadLock);
+ GDKnrofthreads++;
+ s->pid = tid;
+ MT_lock_unset(&GDKthreadLock);
+ /* send new thread on its way */
+ MT_sema_up(&t->sem);
+ return tid;
+}
+
void
THRdel(Thread t)
{
diff --git a/monetdb5/extras/rapi/converters.c.h
b/monetdb5/extras/rapi/converters.c.h
--- a/monetdb5/extras/rapi/converters.c.h
+++ b/monetdb5/extras/rapi/converters.c.h
@@ -8,41 +8,52 @@
#define RSTR(somestr) mkCharCE(somestr, CE_UTF8)
+//Element-wise conversion functions, use no-op as passthrough when no
conversion required
+#define M_TO_R_NOOP(v) (v)
+#define R_TO_M_NOOP(v) (v)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list