Changeset: 2ca33821a803 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2ca33821a803
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:
        NT/monetdb_config.h.in
        debian/monetdb5-sql.default
        debian/monetdb5-sql.init.d
        gdk/gdk_aggr.c
        gdk/gdk_calc.c
        monetdb5/mal/mal_dataflow.c
        monetdb5/mal/mal_interpreter.c
        monetdb5/mal/mal_resource.c
        monetdb5/mal/mal_resource.h
        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_psm.c
        sql/server/rel_updates.c
        sql/storage/bat/bat_storage.c
        sql/storage/store.c
        sql/test/Users/Tests/All
        testing/Mtest.py.in
        tools/merovingian/client/monetdb.1
Branch: ssdb
Log Message:

merged with Feb2013


diffs (truncated from 2360 to 300 lines):

diff --git a/NT/monetdb_config.h.in b/NT/monetdb_config.h.in
--- a/NT/monetdb_config.h.in
+++ b/NT/monetdb_config.h.in
@@ -611,6 +611,11 @@
 /* Define to 1 if the system has the type `_Bool'. */
 #define HAVE__BOOL 1
 
+#ifdef _WIN64
+/* Define to 1 if you have the `_mul128' function. */
+#define HAVE__MUL128 1
+#endif
+
 /* Define if you have _sys_siglist */
 /* #undef HAVE__SYS_SIGLIST */
 
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_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_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -3382,6 +3382,48 @@ mul_##TYPE1##_##TYPE2##_##TYPE3(const TY
        return nils;                                                    \
 }
 
+#ifdef HAVE__MUL128
+#include <intrin.h>
+#pragma intrinsic(_mul128)
+
+#define MUL_2TYPE_lng(TYPE1, TYPE2)                                    \
+static BUN                                                             \
+mul_##TYPE1##_##TYPE2##_lng(const TYPE1 *lft, int incr1,               \
+                           const TYPE2 *rgt, int incr2,                \
+                           lng *dst, BUN cnt, BUN start,               \
+                           BUN end, const oid *cand,                   \
+                           const oid *candend, oid candoff,            \
+                           int abort_on_error)                         \
+{                                                                      \
+       BUN i, j, k;                                                    \
+       BUN nils = 0;                                                   \
+       lng clo, chi;                                                   \
+                                                                       \
+       CANDLOOP(dst, k, lng_nil, 0, start);                            \
+       for (i = start * incr1, j = start * incr2, k = start;           \
+            k < end; i += incr1, j += incr2, k++) {                    \
+               CHECKCAND(dst, k, candoff, lng_nil);                    \
+               if (lft[i] == TYPE1##_nil || rgt[j] == TYPE2##_nil) {   \
+                       dst[k] = lng_nil;                               \
+                       nils++;                                         \
+               } else {                                                \
+                       clo = _mul128((lng) lft[i],                     \
+                                     (lng) rgt[j], &chi);              \
+                       if ((chi == 0 && clo >= 0) ||                   \
+                           (chi == -1 && clo < 0 && clo != lng_nil)) { \
+                               dst[k] = clo;                           \
+                       } else {                                        \
+                               if (abort_on_error)                     \
+                                       ON_OVERFLOW(TYPE1, TYPE2, "*"); \
+                               dst[k] = lng_nil;                       \
+                               nils++;                                 \
+                       }                                               \
+               }                                                       \
+       }                                                               \
+       CANDLOOP(dst, k, lng_nil, end, cnt);                            \
+       return nils;                                                    \
+}
+#else
 #define MUL_2TYPE_lng(TYPE1, TYPE2)                                    \
 static BUN                                                             \
 mul_##TYPE1##_##TYPE2##_lng(const TYPE1 *lft, int incr1,               \
@@ -3411,6 +3453,7 @@ mul_##TYPE1##_##TYPE2##_lng(const TYPE1 
        CANDLOOP(dst, k, lng_nil, end, cnt);                            \
        return nils;                                                    \
 }
+#endif
 
 #define MUL_2TYPE_float(TYPE1, TYPE2, TYPE3)                           \
 static BUN                                                             \
diff --git a/monetdb5/mal/mal_dataflow.c b/monetdb5/mal/mal_dataflow.c
--- a/monetdb5/mal/mal_dataflow.c
+++ b/monetdb5/mal/mal_dataflow.c
@@ -323,13 +323,8 @@ DFLOWworker(void *t)
                                flow->status[i].blocks = 0;
                                flow->status[i].hotclaim = fe->hotclaim;
                                flow->status[i].argclaim += fe->hotclaim;
-                               if (fnxt) {
-                                       if (flow->error)
-                                               q_enqueue(flow->done, fnxt);
-                                       else
-                                               q_enqueue(todo, fnxt);
-                               }
                                fnxt = flow->status + i;
+                               break;
                        }
                MT_lock_unset(&flow->flowlock, "MALworker");
 
diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -560,8 +560,9 @@ str runMALsequence(Client cntxt, MalBlkP
                        }
                }
 
-               if ( cntxt->idx > 1 )
-                       MALresourceFairness(cntxt,mb,0);
+               //Ensure we spread system resources over multiple users as well.
+               //if ( cntxt->idx > 1 )
+                       //MALresourceFairness(cntxt,mb,0);
                runtimeProfileBegin(cntxt, mb, stk, stkpc, &runtimeProfile, 1);
                if (pci->recycle > 0)
                        stk->clk = GDKusec();
diff --git a/monetdb5/mal/mal_resource.c b/monetdb5/mal/mal_resource.c
--- a/monetdb5/mal/mal_resource.c
+++ b/monetdb5/mal/mal_resource.c
@@ -190,7 +190,6 @@ MALresourceFairness(Client cntxt, MalBlk
        unsigned int delay;
        lng clk;
        int threads;
-       double factor;
        int delayed= 0;
 #ifdef ATOMIC_LOCK
 #ifndef PTHREAD_MUTEX_INITIALIZER
@@ -225,27 +224,26 @@ MALresourceFairness(Client cntxt, MalBlk
 
        if ( clk > DELAYUNIT ) {
                PARDEBUG mnstr_printf(GDKstdout, "#delay %d initial "LLFMT"n", 
cntxt->idx, clk);
+               ATOMIC_DEC_int(running, runningLock, "MALresourceFairness");
                while (clk > 0) {
-                       /* always keep one running to avoid all waiting  */
-                       if (ATOMIC_GET_int(running, runningLock, 
"MALresourceFairness") < 2)
-                               break;
                        /* speed up wake up when we have memory */
-                       rss = GDKmem_cursize();
                        if (rss < MEMORY_THRESHOLD * monet_memory)
                                break;
-                       factor = ((double) rss) / (MEMORY_THRESHOLD * 
monet_memory);
-                       delay = (unsigned int) (DELAYUNIT * (factor > 1.0 ? 1.0 
: factor));
-                       delay = (unsigned int) ( ((double)delay) * 
ATOMIC_GET_int(running, runningLock, "MALresourceFairness") / threads);
-                       ATOMIC_DEC_int(running, runningLock, 
"MALresourceFairness");
+                       /* always keep one running to avoid all waiting  */
+                       if ( running < 2) /* dirty read of shared variable is 
safe  here */
+                       //if ( (r =ATOMIC_GET_int(running, runningLock, 
"MALresourceFairness")) < 2)
+                               break;
+                       delay = (unsigned int) ( ((double)DELAYUNIT * running) 
/ threads);
                        if (delay) {
                                if ( delayed++ == 0){
                                                mnstr_printf(GDKstdout, "#delay 
%d initial %u["LLFMT"] memory  "SZFMT"[%f]\n", cntxt->idx, delay, clk, rss, 
MEMORY_THRESHOLD * monet_memory);
                                                mnstr_flush(GDKstdout);
                                }
                                MT_sleep_ms(delay);
+                               rss = GDKmem_cursize();
                        }
-                       ATOMIC_INC_int(running, runningLock, 
"MALresourceFairness");
                        clk -= DELAYUNIT;
                }
+               ATOMIC_INC_int(running, runningLock, "MALresourceFairness");
        }
 }
diff --git a/monetdb5/mal/mal_resource.h b/monetdb5/mal/mal_resource.h
--- a/monetdb5/mal/mal_resource.h
+++ b/monetdb5/mal/mal_resource.h
@@ -23,7 +23,7 @@
 #include "mal_interpreter.h"
 
 #define TIMESLICE  2000 /* ms */
-#define DELAYUNIT 100 /* ms delay in parallel processing decissions */
+#define DELAYUNIT 5 /* ms delay in parallel processing decisions */
 
 #define USE_MAL_ADMISSION
 #ifdef USE_MAL_ADMISSION
diff --git a/sql/backends/monet5/datacell/opt_datacell.h 
b/sql/backends/monet5/datacell/opt_datacell.h
--- a/sql/backends/monet5/datacell/opt_datacell.h
+++ b/sql/backends/monet5/datacell/opt_datacell.h
@@ -23,7 +23,7 @@
 #include "opt_support.h"
 #include "opt_pipes.h"
 
-#define OPTDEBUGdatacell   if (1)
-//#define OPTDEBUGdatacell  if (optDebug & (1 << DEBUG_OPT_DATACELL))
+//#define OPTDEBUGdatacell   if (1)
+#define OPTDEBUGdatacell  if (optDebug & (1 << DEBUG_OPT_DATACELL))
 opt_export int OPTdatacellImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr pci);
 #endif
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1124,8 +1124,6 @@ rel_parse_value(mvc *m, char *query, cha
        m->argc = 0;
        m->sym = NULL;
        m->errstr[0] = '\0';
-       /* via views we give access to protected objects */
-       m->user_id = USER_MONETDB;
 
        (void) sqlparse(m);     /* blindly ignore errors */
        
@@ -2741,8 +2739,6 @@ sql_parse(mvc *m, sql_allocator *sa, cha
        m->sym = NULL;
        m->errstr[0] = '\0';
        m->errstr[ERRSIZE-1] = '\0';
-       /* via views we give access to protected objects */
-       m->user_id = USER_MONETDB;
 
        /* create private allocator */
        m->sa = (sa)?sa:sa_create();
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -7614,21 +7614,20 @@ RAstatement(Client cntxt, MalBlkPtr mb, 
        mvc *m = NULL;
        str msg = getSQLContext(cntxt, mb, &m, &b);
        sql_rel *rel;
-
-       assert(m->sa == NULL);
-       m->sa = sa_create();
-       rel = rel_read(m, *expr, &pos);
+       list *refs;
+
+       if (!m->sa)
+               m->sa = sa_create();
+       refs = sa_list(m->sa);
+       rel = rel_read(m, *expr, &pos, refs);
        if (rel) {
                int oldvtop = cntxt->curprg->def->vtop;
                int oldstop = cntxt->curprg->def->stop;
                stmt *s;
                char *msg;
 
-               rel_print(m, rel, 0);
-               if (*opt) { 
+               if (*opt) 
                        rel = rel_optimizer(m, rel);
-                       rel_print(m, rel, 0);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to