Changeset: 1a075181fcf7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1a075181fcf7
Added Files:
sql/test/Users/Tests/privs.sql.src
sql/test/Users/Tests/privs.stable.err
sql/test/Users/Tests/privs.stable.out
sql/test/Users/Tests/privs2.sql.src
sql/test/Users/Tests/privs2.stable.err
sql/test/Users/Tests/privs2.stable.out
sql/test/Users/Tests/test_privs2_p1.SQL.py
sql/test/Users/Tests/test_privs2_p1.stable.err
sql/test/Users/Tests/test_privs2_p1.stable.out
sql/test/Users/Tests/test_privs2_p2.SQL.py
sql/test/Users/Tests/test_privs2_p2.stable.err
sql/test/Users/Tests/test_privs2_p2.stable.out
sql/test/Users/Tests/test_privs_p1.SQL.py
sql/test/Users/Tests/test_privs_p1.stable.err
sql/test/Users/Tests/test_privs_p1.stable.out
sql/test/Users/Tests/test_privs_p2.SQL.py
sql/test/Users/Tests/test_privs_p2.stable.err
sql/test/Users/Tests/test_privs_p2.stable.out
sql/test/Users/privs.sql
sql/test/Users/privs2.sql
sql/test/Users/test_privs.sql
sql/test/Users/test_privs2.sql
Modified Files:
clients/Tests/exports.stable.out
debian/monetdb5-sql.default
debian/monetdb5-sql.init.d
gdk/gdk.h
gdk/gdk_aggr.c
gdk/gdk_imprints.c
gdk/gdk_join.c
gdk/gdk_select.c
gdk/gdk_system.c
gdk/gdk_system.h
gdk/gdk_utils.c
monetdb5/mal/mal.c
monetdb5/mal/mal_dataflow.c
monetdb5/mal/mal_dataflow.h
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_profiler.c
monetdb5/mal/mal_profiler.h
monetdb5/mal/mal_resource.c
monetdb5/mal/mal_session.c
monetdb5/modules/mal/mat.h
monetdb5/optimizer/opt_centipede.c
monetdb5/optimizer/opt_pipes.c
sql/backends/monet5/datacell/opt_datacell.h
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.mx
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_gencode.h
sql/backends/monet5/sql_scenario.c
sql/common/sql_backend.c
sql/common/sql_backend.h
sql/server/rel_dump.c
sql/server/rel_dump.h
sql/server/rel_optimizer.c
sql/server/rel_updates.c
sql/storage/bat/bat_storage.c
sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out.32bit
sql/test/Tests/setoptimizer.stable.out
sql/test/Users/Tests/All
Branch: sciql
Log Message:
merged from default
diffs (truncated from 3496 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
@@ -170,6 +170,7 @@ BAT *BATprev(BAT *b);
int BATprint(BAT *b);
int BATprintf(stream *f, BAT *b);
gdk_return BATprod(void *res, int tp, BAT *b, BAT *s, int skip_nils, int
abort_on_error, int nil_if_empty);
+BAT *BATproject(BAT *l, BAT *r);
BAT *BATrangejoin(BAT *l, BAT *rl, BAT *rh, bit li, bit hi);
BAT *BATreplace(BAT *b, BAT *n, bit force);
BAT *BATrestrict(BAT *b, const void *hl, const void *hh, const void *tl, const
void *th);
@@ -194,6 +195,7 @@ BAT *BATsort(BAT *b);
BAT *BATsort_rev(BAT *b);
BAT *BATssort(BAT *b);
BAT *BATssort_rev(BAT *b);
+gdk_return BATsubjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr,
BUN estimate);
gdk_return BATsubleftjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT
*sr, BUN estimate);
gdk_return BATsubouterjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT
*sr, BUN estimate);
BAT *BATsubselect(BAT *b, BAT *s, const void *tl, const void *th, int li, int
hi, int anti);
@@ -307,6 +309,7 @@ int MT_check_nr_cores(void);
unsigned long long MT_clock(void);
int MT_create_thread(MT_Id *t, void( *function)(void *), void *arg, enum
MT_thr_detach d);
void MT_exit_thread(int status) __attribute__((__noreturn__));
+void MT_exiting_thread(void);
MT_Id MT_getpid(void);
size_t MT_getrss(void);
void MT_global_exit(int status) __attribute__((__noreturn__));
@@ -3068,6 +3071,8 @@ str srvpoolRef;
int stableProp;
str startProfiling(void);
str startRef;
+void stopHeartbeat(void);
+void stopMALdataflow(void);
str stopProfiling(void);
str stopRef;
void strAfterCall(ValPtr v, ValPtr bak);
diff --git a/debian/monetdb5-sql.default b/debian/monetdb5-sql.default
--- a/debian/monetdb5-sql.default
+++ b/debian/monetdb5-sql.default
@@ -5,8 +5,5 @@
# should monetdbd be started at system startup (yes/no)
STARTUP="no"
-# should all databases be started (yes/no)
-START_ALL_DBS="no"
-
# the database farm where databases are kept
DBFARM=/var/lib/monetdb
diff --git a/debian/monetdb5-sql.init.d b/debian/monetdb5-sql.init.d
--- a/debian/monetdb5-sql.init.d
+++ b/debian/monetdb5-sql.init.d
@@ -71,7 +71,7 @@ case "$1" in
if running; then
echo "$NAME is already running"
- exit 1
+ exit 0
fi
init
@@ -83,10 +83,6 @@ case "$1" in
else
echo " ERROR, $NAME didn't start"
fi
-
- if [ "$START_ALL_DBS" = "yes" ]; then
- sudo -u monetdb "/usr/bin/monetdb start -a"
- fi
;;
stop)
if running ; then
@@ -94,7 +90,7 @@ case "$1" in
start-stop-daemon --stop --pidfile $PIDFILE --exec $DAEMON -c
monetdb:monetdb -- stop ${DBFARM}
echo "$NAME."
else
- echo "$NAME not running (${PIDFILE}."
+ echo "$NAME not running."
fi
;;
restart)
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2199,7 +2199,6 @@ gdk_export BAT *BAThashjoin(BAT *l, BAT
*
*/
-#define BATprepareImprints(X) (((X)->T->imprints == NULL) && !BATimprints(X))
gdk_export void IMPSdestroy(BAT *b);
gdk_export BAT *BATimprints(BAT *b);
@@ -3190,6 +3189,8 @@ gdk_export BAT *BATcross(BAT *l, BAT *r)
gdk_export gdk_return BATsubleftjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT
*sl, BAT *sr, BUN estimate);
gdk_export gdk_return BATsubouterjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r,
BAT *sl, BAT *sr, BUN estimate);
gdk_export gdk_return BATsubthetajoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r,
BAT *sl, BAT *sr, const char *op, BUN estimate);
+gdk_export gdk_return BATsubjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT
*sl, BAT *sr, BUN estimate);
+gdk_export BAT *BATproject(BAT *l, BAT *r);
gdk_export BAT *BATslice(BAT *b, BUN low, BUN high);
gdk_export BAT *BATfetch(BAT *b, BAT *s);
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -406,7 +406,10 @@ dosum(const void *values, int nonil, oid
if (nils == 0 && nil_if_empty) {
/* figure out whether there were any empty groups
* (that result in a nil value) */
- seen[ngrp >> 5] |= ~0U << (ngrp & 0x1F); /* fill last slot */
+ if (ngrp & 0x1F) {
+ /* fill last slot */
+ seen[ngrp >> 5] |= ~0U << (ngrp & 0x1F);
+ }
for (i = 0, ngrp = (ngrp + 31) / 32; i < ngrp; i++) {
if (seen[i] != ~0U) {
nils = 1;
@@ -888,7 +891,10 @@ doprod(const void *values, oid seqb, BUN
if (nils == 0 && nil_if_empty) {
/* figure out whether there were any empty groups
* (that result in a nil value) */
- seen[ngrp >> 5] |= ~0U << (ngrp & 0x1F); /* fill last slot */
+ if (ngrp & 0x1F) {
+ /* fill last slot */
+ seen[ngrp >> 5] |= ~0U << (ngrp & 0x1F);
+ }
for (i = 0, ngrp = (ngrp + 31) / 32; i < ngrp; i++) {
if (seen[i] != ~0U) {
nils = 1;
diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c
--- a/gdk/gdk_imprints.c
+++ b/gdk/gdk_imprints.c
@@ -721,7 +721,9 @@ do {
MT_lock_unset(&GDKimprintsLock(ABS(b->batCacheid)), "BATimprints");
if (o != NULL) {
- o->T->imprints = b->T->imprints;
+ o->T->imprints = NULL; /* views always keep null pointer and
+ need to obtain the latest imprint
+ from the parent at query time */
BBPunfix(b->batCacheid);
b = o;
}
@@ -783,36 +785,35 @@ IMPSgetbin(int tpe, bte bits, char *inbi
void
IMPSremove(BAT *b) {
+ Imprints *imprints;
assert(BAThdense(b)); /* assert void head */
+ assert(b->T->imprints != NULL);
+ assert(!VIEWtparent(b));
MT_lock_set(&GDKimprintsLock(ABS(b->batCacheid)),
"BATimprints");
- if (VIEWtparent(b)) {
- b->T->imprints = NULL;
- } else if (b->T->imprints != NULL) {
- Imprints *imprints = b->T->imprints;
+ imprints = b->T->imprints;
+ b->T->imprints = NULL;
- if (imprints->imps->storage != STORE_MEM)
- HEAPdelete(imprints->imps,
- BBP_physical(b->batCacheid), "imps");
- else
- HEAPfree(imprints->imps);
- if (imprints->dict->storage != STORE_MEM)
- HEAPdelete(imprints->dict,
- BBP_physical(b->batCacheid), "dict");
- else
- HEAPfree(imprints->dict);
- if (imprints->bins->storage != STORE_MEM)
- HEAPdelete(imprints->bins,
- BBP_physical(b->batCacheid), "bins");
- else
- HEAPfree(imprints->bins);
+ if (imprints->imps->storage != STORE_MEM)
+ HEAPdelete(imprints->imps,
+ BBP_physical(b->batCacheid), "imps");
+ else
+ HEAPfree(imprints->imps);
+ if (imprints->dict->storage != STORE_MEM)
+ HEAPdelete(imprints->dict,
+ BBP_physical(b->batCacheid), "dict");
+ else
+ HEAPfree(imprints->dict);
+ if (imprints->bins->storage != STORE_MEM)
+ HEAPdelete(imprints->bins,
+ BBP_physical(b->batCacheid), "bins");
+ else
+ HEAPfree(imprints->bins);
+ GDKfree(imprints);
- GDKfree(imprints);
- b->T->imprints = NULL;
- }
MT_lock_unset(&GDKimprintsLock(ABS(b->batCacheid)),
"BATimprints");
@@ -822,11 +823,12 @@ IMPSremove(BAT *b) {
void
IMPSdestroy(BAT *b) {
- /* imprints are build on tails of BATs with void head */
if (b) {
- if (BAThdense(b) && (b->T->imprints != NULL)) {
+ if (b->T->imprints != NULL && !VIEWtparent(b)) {
IMPSremove(b);
- } else if (BATtdense(b) && (b->H->imprints != NULL)) {
+ }
+
+ if (b->H->imprints != NULL && !VIEWhparent(b)) {
IMPSremove(BATmirror(b));
}
}
@@ -842,7 +844,7 @@ IMPSprint(BAT *b) {
BUN icnt, dcnt, l, pages;
bte j;
- if (BATprepareImprints(b))
+ if (!BATimprints(b))
return;
imprints = b->T->imprints;
d = (cchdc_t *) imprints->dict->base;
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -852,9 +852,9 @@ thetajoin(BAT *r1, BAT *r2, BAT *l, BAT
if (cmp(vr, nil) == 0)
continue;
c = cmp(vl, vr);
- if (!((c < 0 && opcode & MASK_LT) ||
- (c > 0 && opcode & MASK_GT) ||
- (c == 0 && opcode & MASK_EQ)))
+ if (!((opcode & MASK_LT && c < 0) ||
+ (opcode & MASK_GT && c > 0) ||
+ (opcode & MASK_EQ && c == 0)))
continue;
if (BUNlast(r1) == BATcapacity(r1)) {
newcap = BATgrows(r1);
@@ -953,3 +953,163 @@ BATsubthetajoin(BAT **r1p, BAT **r2p, BA
*r2p = r2;
return thetajoin(r1, r2, l, r, sl, sr, op);
}
+
+gdk_return
+BATsubjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, BUN
estimate)
+{
+ BAT *r1, *r2;
+ BUN lcount, rcount;
+ int swap;
+
+ *r1p = NULL;
+ *r2p = NULL;
+ if (joinparamcheck(l, r, sl, sr, "BATsubjoin") == GDK_FAIL)
+ return GDK_FAIL;
+ lcount = BATcount(l);
+ if (sl)
+ lcount = MIN(lcount, BATcount(sl));
+ rcount = BATcount(r);
+ if (sr)
+ rcount = MIN(rcount, BATcount(sr));
+ if (lcount == 0 || rcount == 0) {
+ r1 = BATnew(TYPE_void, TYPE_void, 0);
+ BATseqbase(r1, 0);
+ BATseqbase(BATmirror(r1), 0);
+ r2 = BATnew(TYPE_void, TYPE_void, 0);
+ BATseqbase(r2, 0);
+ BATseqbase(BATmirror(r2), 0);
+ *r1p = r1;
+ *r2p = r2;
+ return GDK_SUCCEED;
+ }
+ if (joininitresults(&r1, &r2, estimate != BUN_NONE ? estimate : sl ?
BATcount(sl) : BATcount(l), "BATsubjoin") == GDK_FAIL)
+ return GDK_FAIL;
+ *r1p = r1;
+ *r2p = r2;
+ swap = 0;
+ if ((l->tsorted || l->trevsorted) && (r->tsorted || r->trevsorted)) {
+ /* both sorted, don't swap */
+ return mergejoin(r1, r2, l, r, sl, sr, 0, 0, 0);
+ } else if (l->T->hash && r->T->hash) {
+ /* both have hash, smallest on right */
+ if (lcount < rcount)
+ swap = 1;
+ } else if (l->T->hash) {
+ /* only left has hash, swap */
+ swap = 1;
+ } else if (r->T->hash) {
+ /* only right has hash, don't swap */
+ swap = 0;
+ } else if (l->tsorted || l->trevsorted) {
+ /* left is sorted, swap */
+ return mergejoin(r2, r1, r, l, sr, sl, 0, 0, 0);
+ } else if (r->tsorted || r->trevsorted) {
+ /* right is sorted, don't swap */
+ return mergejoin(r1, r2, l, r, sl, sr, 0, 0, 0);
+ } else if (BATcount(r1) < BATcount(r2)) {
+ /* no hashes, not sorted, create hash on smallest BAT */
+ swap = 1;
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list