Changeset: 29182bbd8695 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=29182bbd8695
Modified Files:
common/utils/matomic.h
gdk/gdk_posix.c
gdk/gdk_private.h
gdk/gdk_select.c
monetdb5/mal/mal_import.c
sql/backends/monet5/sql_scenario.c
sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.sql
sql/test/BugTracker-2012/Tests/scalar_subquery_with_alias.Bug-3093.sql
sql/test/BugTracker-2012/Tests/scalar_subquery_with_alias.Bug-3093.stable.out
sql/test/Tests/trace.sql
sql/test/Tests/trace.stable.out
Branch: mtime
Log Message:
Merge with default branch.
diffs (truncated from 523 to 300 lines):
diff --git a/common/utils/matomic.h b/common/utils/matomic.h
--- a/common/utils/matomic.h
+++ b/common/utils/matomic.h
@@ -279,6 +279,8 @@ typedef volatile char ATOMIC_FLAG;
/* emulate using mutexes */
+#include <pthread.h> /* required for pthread_mutex_t */
+
typedef size_t ATOMIC_BASE_TYPE;
typedef struct {
ATOMIC_BASE_TYPE val;
diff --git a/gdk/gdk_posix.c b/gdk/gdk_posix.c
--- a/gdk/gdk_posix.c
+++ b/gdk/gdk_posix.c
@@ -629,12 +629,13 @@ MT_mremap(const char *path, int mode, vo
#endif
#endif
) {
- int err = errno;
+ int err = errno, other;
/* extending failed:
* free any disk space
* allocated in the
* process */
- (void) ftruncate(fd, (off_t)
old_size);
+ other = ftruncate(fd, (off_t)
old_size);
+ (void) other; /* silence
compiler warning for ignoring result of ftruncate */
errno = err; /* restore for
error message */
GDKsyserror("MT_mremap: growing
file failed\n");
close(fd);
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -262,9 +262,10 @@ stpconcat(char *restrict dst, const char
__attribute__((__visibility__("hidden")));
/* some macros to help print info about BATs when using ALGODEBUG */
-#define ALGOBATFMT "%s#" BUNFMT "[%s]%s%s%s%s%s%s%s%s%s"
+#define ALGOBATFMT "%s#" BUNFMT "@" OIDFMT "[%s]%s%s%s%s%s%s%s%s%s"
#define ALGOBATPAR(b) BATgetId(b), \
BATcount(b), \
+ b->hseqbase, \
ATOMname(b->ttype), \
!b->batTransient ? "P" : isVIEW(b) ? "V" : "T", \
BATtdense(b) ? "D" : "", \
@@ -276,11 +277,13 @@ stpconcat(char *restrict dst, const char
b->torderidx ? "O" : "", \
b->timprints ? "I" : b->theap.parentid &&
BBP_cache(b->theap.parentid)->timprints ? "(I)" : ""
/* use ALGOOPTBAT* when BAT is optional (can be NULL) */
-#define ALGOOPTBATFMT "%s%s" BUNFMT "%s%s%s%s%s%s%s%s%s%s%s%s"
+#define ALGOOPTBATFMT "%s%s" BUNFMT "%s" OIDFMT "%s%s%s%s%s%s%s%s%s%s%s%s"
#define ALGOOPTBATPAR(b) \
b ? BATgetId(b) : "", \
b ? "#" : "", \
b ? BATcount(b) : 0, \
+ b ? "@" : "", \
+ b ? b->hseqbase : 0, \
b ? "[" : "", \
b ? ATOMname(b->ttype) : "", \
b ? "]" : "", \
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -1216,6 +1216,7 @@ BATselect(BAT *b, BAT *s, const void *tl
BAT *bn, *tmp;
BUN estimate = BUN_NONE, maximum = BUN_NONE;
oid vwl = 0, vwh = 0;
+ lng vwo = 0;
bool use_orderidx = false;
union {
bte v_bte;
@@ -1250,11 +1251,14 @@ BATselect(BAT *b, BAT *s, const void *tl
(s->tseqbase >= b->hseqbase + BATcount(b) ||
s->tseqbase + BATcount(s) <= b->hseqbase))))) {
/* trivially empty result */
+ bn = BATdense(0, 0, 0);
ALGODEBUG fprintf(stderr, "#BATselect(b=" ALGOBATFMT
- ",s=" ALGOOPTBATFMT ",anti=%d): "
+ ",s=" ALGOOPTBATFMT ",anti=%d)=" ALGOOPTBATFMT
+ " (" LLFMT " usec): "
"trivially empty\n",
- ALGOBATPAR(b), ALGOOPTBATPAR(s), anti);
- return BATdense(0, 0, 0);
+ ALGOBATPAR(b), ALGOOPTBATPAR(s), anti,
+ ALGOOPTBATPAR(bn), GDKusec() - t0);
+ return bn;
}
t = b->ttype;
@@ -1267,12 +1271,14 @@ BATselect(BAT *b, BAT *s, const void *tl
/* upper and lower bound of range are equal and we
* want an interval that's open on at least one
* side */
+ bn = BATdense(0, 0, 0);
ALGODEBUG fprintf(stderr, "#BATselect(b=" ALGOBATFMT
- ",s=" ALGOOPTBATFMT ",li=%d,hi=%d,anti=%d): "
+ ",s=" ALGOOPTBATFMT ",li=%d,hi=%d,anti=%d)="
ALGOOPTBATFMT
+ " (" LLFMT " usec): "
"empty interval\n",
ALGOBATPAR(b), ALGOOPTBATPAR(s),
- li, hi, anti);
- return BATdense(0, 0, 0);
+ li, hi, anti, ALGOOPTBATPAR(bn), GDKusec() -
t0);
+ return bn;
}
lval = !lnil || th == NULL; /* low value used for comparison */
@@ -1313,12 +1319,14 @@ BATselect(BAT *b, BAT *s, const void *tl
/* antiselect for nil-nil range: all non-nil
* values are in range; we must return all
* other non-nil values, i.e. nothing */
+ bn = BATdense(0, 0, 0);
ALGODEBUG fprintf(stderr, "#BATselect(b=" ALGOBATFMT
- ",s=" ALGOOPTBATFMT ",anti=%d): "
+ ",s=" ALGOOPTBATFMT ",anti=%d)="
ALGOOPTBATFMT
+ " (" LLFMT " usec): "
"anti: nil-nil range, nonil\n",
ALGOBATPAR(b), ALGOOPTBATPAR(s),
- anti);
- return BATdense(0, 0, 0);
+ anti, ALGOOPTBATPAR(bn), GDKusec() -
t0);
+ return bn;
} else if (equi && lnil) {
/* antiselect for nil value: turn into range
* select for nil-nil range (i.e. everything
@@ -1366,36 +1374,45 @@ BATselect(BAT *b, BAT *s, const void *tl
if (hval && ((equi && !(li && hi)) || ATOMcmp(t, tl, th) > 0)) {
/* empty range */
+ bn = BATdense(0, 0, 0);
ALGODEBUG fprintf(stderr, "#BATselect(b=" ALGOBATFMT
- ",s=" ALGOOPTBATFMT ",anti=%d): "
+ ",s=" ALGOOPTBATFMT ",anti=%d)=" ALGOOPTBATFMT
+ " (" LLFMT " usec): "
"empty range\n",
- ALGOBATPAR(b), ALGOOPTBATPAR(s), anti);
- return BATdense(0, 0, 0);
+ ALGOBATPAR(b), ALGOOPTBATPAR(s), anti,
+ ALGOOPTBATPAR(bn), GDKusec() - t0);
+ return bn;
}
if (equi && lnil && b->tnonil) {
/* return all nils, but there aren't any */
+ bn = BATdense(0, 0, 0);
ALGODEBUG fprintf(stderr, "#BATselect(b=" ALGOBATFMT
- ",s=" ALGOOPTBATFMT ",anti=%d): "
+ ",s=" ALGOOPTBATFMT ",anti=%d)=" ALGOOPTBATFMT
+ " (" LLFMT " usec): "
"equi-nil, nonil\n",
- ALGOBATPAR(b), ALGOOPTBATPAR(s), anti);
- return BATdense(0, 0, 0);
+ ALGOBATPAR(b), ALGOOPTBATPAR(s), anti,
+ ALGOOPTBATPAR(bn), GDKusec() - t0);
+ return bn;
}
if (!equi && !lval && !hval && lnil && b->tnonil) {
/* return all non-nils from a BAT that doesn't have
* any: i.e. return everything */
- ALGODEBUG fprintf(stderr, "#BATselect(b=" ALGOBATFMT
- ",s=" ALGOOPTBATFMT ",anti=%d): "
- "everything, nonil\n",
- ALGOBATPAR(b), ALGOOPTBATPAR(s), anti);
if (s) {
oid o = b->hseqbase + BATcount(b);
BUN q = SORTfndfirst(s, &o);
BUN p = SORTfndfirst(s, &b->hseqbase);
- return BATslice(s, p, q);
+ bn = BATslice(s, p, q);
} else {
- return BATdense(0, b->hseqbase, BATcount(b));
+ bn = BATdense(0, b->hseqbase, BATcount(b));
}
+ ALGODEBUG fprintf(stderr, "#BATselect(b=" ALGOBATFMT
+ ",s=" ALGOOPTBATFMT ",anti=%d)=" ALGOOPTBATFMT
+ " (" LLFMT " usec): "
+ "everything, nonil\n",
+ ALGOBATPAR(b), ALGOOPTBATPAR(s), anti,
+ ALGOOPTBATPAR(bn), GDKusec() - t0);
+ return bn;
}
if (anti) {
@@ -1414,11 +1431,13 @@ BATselect(BAT *b, BAT *s, const void *tl
* BAT, so nothing
* left over for
* anti */
+ bn = BATdense(0, 0, 0);
ALGODEBUG fprintf(stderr,
"#BATselect(b=" ALGOBATFMT
- ",s="
ALGOOPTBATFMT ",anti=%d): "
+ ",s="
ALGOOPTBATFMT ",anti=%d)=" ALGOOPTBATFMT
+ " (" LLFMT "
usec): "
"nothing, out
of range\n",
-
ALGOBATPAR(b), ALGOOPTBATPAR(s), anti);
- return BATdense(0, 0, 0);
+
ALGOBATPAR(b), ALGOOPTBATPAR(s), anti, ALGOOPTBATPAR(bn), GDKusec() - t0);
+ return bn;
}
}
}
@@ -1432,13 +1451,16 @@ BATselect(BAT *b, BAT *s, const void *tl
if (c < 0 || (!hi && c == 0)) {
/* smallest value in BAT larger than
* what we're looking for */
+ bn = BATdense(0, 0, 0);
ALGODEBUG fprintf(stderr, "#BATselect(b="
ALGOBATFMT ",s="
- ALGOOPTBATFMT ",anti=%d): "
+ ALGOOPTBATFMT ",anti=%d)="
ALGOOPTBATFMT
+ " (" LLFMT " usec): "
"nothing, out of range\n",
ALGOBATPAR(b),
- ALGOOPTBATPAR(s), anti);
- return BATdense(0, 0, 0);
+ ALGOOPTBATPAR(s), anti,
+ ALGOOPTBATPAR(bn), GDKusec()
- t0);
+ return bn;
}
}
if (lval && (prop = BATgetprop(b, GDK_MAX_VALUE)) != NULL) {
@@ -1446,13 +1468,16 @@ BATselect(BAT *b, BAT *s, const void *tl
if (c > 0 || (!li && c == 0)) {
/* largest value in BAT smaller than
* what we're looking for */
+ bn = BATdense(0, 0, 0);
ALGODEBUG fprintf(stderr, "#BATselect(b="
ALGOBATFMT ",s="
- ALGOOPTBATFMT ",anti=%d): "
+ ALGOOPTBATFMT ",anti=%d)="
ALGOOPTBATFMT
+ " (" LLFMT " usec): "
"nothing, out of range\n",
ALGOBATPAR(b),
- ALGOOPTBATPAR(s), anti);
- return BATdense(0, 0, 0);
+ ALGOOPTBATPAR(s), anti,
+ ALGOOPTBATPAR(bn), GDKusec()
- t0);
+ return bn;
}
}
}
@@ -1509,7 +1534,9 @@ BATselect(BAT *b, BAT *s, const void *tl
if ((ORDERfnd(b, th) - ORDERfnd(b, tl)) < b->batCount/3) {
use_orderidx = true;
if (view) {
- vwl = view->hseqbase;
+ vwo = (lng) ((view->theap.base - b->theap.base)
>> b->tshift);
+ vwl = b->hseqbase + vwo;
+ vwo = (lng) view->hseqbase - (lng) b->hseqbase
- vwo;
vwh = vwl + view->batCount;
} else {
vwl = b->hseqbase;
@@ -1520,6 +1547,7 @@ BATselect(BAT *b, BAT *s, const void *tl
b = view;
}
}
+ ALGODEBUG if (view && b != view) fprintf(stderr, "#BATselect:
switch from " ALGOBATFMT " to " ALGOBATFMT " " OIDFMT "-" OIDFMT " off " LLFMT
"\n", ALGOBATPAR(view), ALGOBATPAR(b), vwl, vwh, vwo);
}
if (BATordered(b) || BATordered_rev(b) || use_orderidx) {
@@ -1689,7 +1717,7 @@ BATselect(BAT *b, BAT *s, const void *tl
for (i = low; i < high; i++) {
if (vwl <= *rs && *rs < vwh) {
- *rbn++ = *rs;
+ *rbn++ = (oid) ((lng) *rs +
vwo);
cnt++;
}
rs++;
diff --git a/monetdb5/mal/mal_import.c b/monetdb5/mal/mal_import.c
--- a/monetdb5/mal/mal_import.c
+++ b/monetdb5/mal/mal_import.c
@@ -296,13 +296,14 @@ evalFile(str fname, int listing)
}
/* patch a newline character if needed */
-static str mal_cmdline(char *s, int *len)
+static str
+mal_cmdline(char *s, size_t *len)
{
- if (s[*len - 1] != '\n') {
- char *n = GDKmalloc(*len + 1 + 1);
+ if (*len && s[*len - 1] != '\n') {
+ char *n = GDKmalloc(*len + 2);
if (n == NULL)
return s;
- strncpy(n, s, *len);
+ memcpy(n, s, *len);
n[*len] = '\n';
n[*len + 1] = 0;
(*len)++;
@@ -313,9 +314,9 @@ static str mal_cmdline(char *s, int *len
str
compileString(Symbol *fcn, Client cntxt, str s)
-{
+{
Client c;
- int len = (int) strlen(s);
+ size_t len = strlen(s);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list