Changeset: 16057af49c2c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=16057af49c2c Modified Files: common/utils/matomic.h gdk/gdk_posix.c gdk/gdk_private.h gdk/gdk_select.c gdk/gdk_system.h monetdb5/mal/mal_import.c sql/backends/monet5/sql_execute.c sql/backends/monet5/sql_scenario.c sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.sql sql/test/Tests/trace.sql sql/test/Tests/trace.stable.out Branch: cmake-monetdblite Log Message:
Merge with cmake-fun. diffs (truncated from 479 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 @@ -281,6 +281,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 @@ -577,12 +577,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 @@ -259,9 +259,10 @@ BAT *virtualize(BAT *bn) __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" : "", \ @@ -273,11 +274,13 @@ BAT *virtualize(BAT *bn) 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 MT_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 MT_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 MT_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 MT_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 MT_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 MT_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 MT_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 MT_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 MT_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 MT_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/gdk/gdk_system.h b/gdk/gdk_system.h --- a/gdk/gdk_system.h +++ b/gdk/gdk_system.h @@ -98,11 +98,6 @@ # include <sys/sysctl.h> #endif -/* new pthread interface, where the thread id changed to a struct */ -#ifdef PTW32_VERSION -#define PTW32 1 -#endif - /* debug and errno integers */ gdk_export int GDKdebug; gdk_export void GDKsetdebug(int debug); @@ -149,7 +144,6 @@ gdk_export int MT_join_thread(MT_Id t); #define THREAD_STACK_SIZE ((size_t)2*1024*1024) #endif - /* * @- MT Lock API */ 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 @@ -315,13 +315,14 @@ evalFile(str fname, int listing) } /* patch a newline character if needed */ -static str mal_cmdline(char *s, int *len) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list