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

Reply via email to