Changeset: db9678cc8b05 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=db9678cc8b05
Added Files:
        monetdb5/mal/Tests/tst880.mal
        sql/test/BugTracker-2013/Tests/bogus_aggregation_casts.Bug-3342.sql
        
sql/test/BugTracker-2013/Tests/bogus_aggregation_casts.Bug-3342.stable.err
        
sql/test/BugTracker-2013/Tests/bogus_aggregation_casts.Bug-3342.stable.out
        sql/test/BugTracker-2013/Tests/nestedcalls.sql
        sql/test/BugTracker-2013/Tests/recursion.sql
        sql/test/BugTracker-2013/Tests/sort_void_crash.Bug-3341.sql
        sql/test/BugTracker-2013/Tests/sort_void_crash.Bug-3341.stable.err
        sql/test/BugTracker-2013/Tests/sort_void_crash.Bug-3341.stable.out
        sql/test/LSST/Tests/cleanup.reqtests
        sql/test/LSST/Tests/dbQuery000.reqtests
        sql/test/LSST/Tests/dbQuery001.reqtests
        sql/test/LSST/Tests/dbQuery002.reqtests
        sql/test/LSST/Tests/dbQuery003.reqtests
        sql/test/LSST/Tests/dbQuery004.reqtests
        sql/test/LSST/Tests/dbQuery005.reqtests
        sql/test/LSST/Tests/dbQuery007.reqtests
        sql/test/LSST/Tests/dbQuery008.reqtests
        sql/test/LSST/Tests/dbQuery009.reqtests
        sql/test/LSST/Tests/dbQuery010.reqtests
        sql/test/LSST/Tests/dbQuery011.reqtests
        sql/test/LSST/Tests/dbQuery012.reqtests
        sql/test/LSST/Tests/dbQuery013.reqtests
        sql/test/LSST/Tests/dbQuery014.reqtests
        sql/test/LSST/Tests/dbQuery015.reqtests
        sql/test/LSST/Tests/dbQuery016.reqtests
        sql/test/LSST/Tests/dbQuery017.reqtests
        sql/test/LSST/Tests/dbQuery018.reqtests
        sql/test/LSST/Tests/dbQuery019.reqtests
        sql/test/LSST/Tests/dbQuery020.reqtests
        sql/test/LSST/Tests/dbQuery022.reqtests
        sql/test/LSST/Tests/dbQuery024.reqtests
        sql/test/LSST/Tests/dbQuery025.reqtests
        sql/test/LSST/Tests/dbQuery026.reqtests
        sql/test/LSST/Tests/dbQuery027.reqtests
        sql/test/LSST/Tests/dbQuery028.reqtests
        sql/test/LSST/Tests/dbQuery029.reqtests
        sql/test/LSST/Tests/dbQuery030.reqtests
        sql/test/LSST/Tests/dbQuery031.reqtests
        sql/test/LSST/Tests/dbQuery032.reqtests
        sql/test/LSST/Tests/dbQuery034.reqtests
        sql/test/LSST/Tests/dbQuery035.reqtests
        sql/test/LSST/Tests/dbQuery036.reqtests
        sql/test/LSST/Tests/dbQuery037.reqtests
        sql/test/LSST/Tests/dbQuery038.reqtests
        sql/test/LSST/Tests/dbQuery041.reqtests
        sql/test/LSST/Tests/dbQuery042.reqtests
        sql/test/LSST/Tests/dbQuery043.reqtests
        sql/test/LSST/Tests/dbQuery044.reqtests
        sql/test/LSST/Tests/dbQuery045.reqtests
        sql/test/LSST/Tests/dbQuery046.reqtests
        sql/test/LSST/Tests/dbQuery047.reqtests
        sql/test/LSST/Tests/dbQuery048.reqtests
        sql/test/LSST/Tests/dbQuery053.reqtests
        sql/test/LSST/Tests/dbQuery054.reqtests
        sql/test/LSST/Tests/dbQuery055.reqtests
        sql/test/LSST/Tests/dbQuery056.reqtests
        sql/test/LSST/Tests/dbQuery066.reqtests
        sql/test/Users/Tests/privs.reqtests
        sql/test/Users/Tests/privs2.reqtests
        sql/test/Users/Tests/role1.reqtests
        sql/test/Users/Tests/role2.reqtests
        sql/test/Users/Tests/table.reqtests
        sql/test/Users/Tests/test_privs2_p1.reqtests
        sql/test/Users/Tests/test_privs2_p2.reqtests
        sql/test/Users/Tests/test_privs_p1.reqtests
        sql/test/Users/Tests/test_privs_p2.reqtests
        sql/test/Users/Tests/unknown_user.reqtests
        sql/test/broken_delete/Tests/broken_delete_1.reqtests
        sql/test/broken_delete/Tests/broken_delete_2.reqtests
        sql/test/broken_delete/Tests/broken_delete_3.reqtests
        sql/test/broken_delete/Tests/broken_delete_4.reqtests
        sql/test/broken_delete/Tests/broken_delete_5.reqtests
        sql/test/rdf/Tests/drop_tables_t.reqtests
        sql/test/rdf/Tests/drop_tables_v.reqtests
        sql/test/rdf/Tests/q1_t.reqtests
        sql/test/rdf/Tests/q1_v.reqtests
        sql/test/rdf/Tests/q2_28_t.reqtests
        sql/test/rdf/Tests/q2_28_v.reqtests
        sql/test/rdf/Tests/q2_t.reqtests
        sql/test/rdf/Tests/q2_v.reqtests
        sql/test/rdf/Tests/q3_28_t.reqtests
        sql/test/rdf/Tests/q3_28_v.reqtests
        sql/test/rdf/Tests/q3_t.reqtests
        sql/test/rdf/Tests/q3_v.reqtests
        sql/test/rdf/Tests/q4_28_t.reqtests
        sql/test/rdf/Tests/q4_28_v.reqtests
        sql/test/rdf/Tests/q4_t.reqtests
        sql/test/rdf/Tests/q4_v.reqtests
        sql/test/rdf/Tests/q5_t.reqtests
        sql/test/rdf/Tests/q5_v.reqtests
        sql/test/rdf/Tests/q6_28_t.reqtests
        sql/test/rdf/Tests/q6_28_v.reqtests
        sql/test/rdf/Tests/q6_t.reqtests
        sql/test/rdf/Tests/q6_v.reqtests
        sql/test/rdf/Tests/q7_t.reqtests
        sql/test/rdf/Tests/q7_v.reqtests
        sql/test/rdf/Tests/q8_t.reqtests
        sql/test/rdf/Tests/q8_v.reqtests
        sql/test/sql_xml/Tests/xml.reqtests
        sql/test/sql_xml/Tests/xml_attribute_parsing.SF-1855673.reqtests
        sql/test/sql_xml/Tests/xmlelement_segfault.SF-2812767.reqtests
        sql/test/testdb/Tests/testdb-dump.reqtests
Modified Files:
        gdk/gdk_batop.c
        gdk/gdk_imprints.c
        gdk/gdk_select.c
        monetdb5/mal/Tests/All
        monetdb5/mal/mal_dataflow.c
        monetdb5/mal/mal_debugger.c
        monetdb5/mal/mal_http_daemon.c
        monetdb5/mal/mal_recycle.c
        monetdb5/mal/mal_recycle.h
        monetdb5/modules/atoms/mcurl.c
        monetdb5/modules/atoms/mcurl.mal
        monetdb5/optimizer/Tests/cst01.stable.out
        monetdb5/optimizer/opt_evaluate.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/rest/rest_jsonstore.c
        sql/backends/monet5/rest/rest_jsonstore.h
        sql/backends/monet5/rest/rest_jsonstore_handle_get.c
        sql/backends/monet5/rest/rest_jsonstore_handle_get.h
        sql/backends/monet5/sql_result.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_statistics.c
        sql/server/rel_optimizer.c
        sql/server/rel_select.c
        
sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out.32bit
        sql/test/BugTracker-2011/Tests/copy-into-file-error.Bug-2722.stable.out
        sql/test/BugTracker-2012/Tests/create_function.Bug-3172.stable.err
        sql/test/BugTracker-2013/Tests/All
        sql/test/BugTracker/Tests/cardinality_violation.SF-1240701.stable.err
        
sql/test/BugTracker/Tests/cardinality_violation.SF-1240701.stable.err.Windows
        
sql/test/BugTracker/Tests/set_sql_debug_64__breaking_the_DB.SF-1906287.stable.out
        sql/test/leaks/Tests/check0.stable.out
        sql/test/leaks/Tests/check0_nogeom.stable.out
        sql/test/leaks/Tests/check1.stable.out
        sql/test/leaks/Tests/check1_nogeom.stable.out
        sql/test/leaks/Tests/check2.stable.out
        sql/test/leaks/Tests/check2_nogeom.stable.out
        sql/test/leaks/Tests/check3.stable.out
        sql/test/leaks/Tests/check3_nogeom.stable.out
        sql/test/leaks/Tests/check4.stable.out
        sql/test/leaks/Tests/check4_nogeom.stable.out
        sql/test/leaks/Tests/check5.stable.out
        sql/test/leaks/Tests/check5_nogeom.stable.out
        sql/test/leaks/Tests/drop3.stable.out
        sql/test/leaks/Tests/drop3_nogeom.stable.out
        sql/test/leaks/Tests/select1.stable.out
        sql/test/leaks/Tests/select1_nogeom.stable.out
        sql/test/leaks/Tests/select2.stable.out
        sql/test/leaks/Tests/select2_nogeom.stable.out
        sql/test/leaks/Tests/temp1.stable.out
        sql/test/leaks/Tests/temp1_nogeom.stable.out
        sql/test/leaks/Tests/temp2.stable.out
        sql/test/leaks/Tests/temp2_nogeom.stable.out
        sql/test/leaks/Tests/temp3.stable.out
        sql/test/leaks/Tests/temp3_nogeom.stable.out
        sql/test/mapi/Tests/php_monetdb.stable.out
        sql/test/mapi/Tests/php_monetdb_nogeom.stable.out
Branch: mutation
Log Message:

Merge with default


diffs (truncated from 4472 to 300 lines):

diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -1176,7 +1176,8 @@ BATorder_internal(BAT *b, int stable, in
                 * column needs to be key) */
                return BATrevert(b);
        }
-       if (do_sort(Hloc(b, BUNfirst(b)), Tloc(b, BUNfirst(b)),
+       if ((!(reverse && b->hrevsorted) && !(!reverse && b->hsorted)) &&
+           do_sort(Hloc(b, BUNfirst(b)), Tloc(b, BUNfirst(b)),
                    b->H->vheap ? b->H->vheap->base : NULL,
                    BATcount(b), Hsize(b), Tsize(b), b->htype,
                    reverse, stable) == GDK_FAIL) {
@@ -1419,7 +1420,15 @@ BATsubsort(BAT **sorted, BAT **order, BA
                bn->tsorted = r == 0 && !reverse;
                bn->trevsorted = r == 0 && reverse;
        } else {
-               if (do_sort(Tloc(bn, BUNfirst(bn)),
+               if (b->ttype == TYPE_void) {
+                       b->tsorted = 1;
+                       b->trevsorted = b->tseqbase == oid_nil || b->U->count 
<= 1;
+                       b->tkey |= b->tseqbase != oid_nil;
+               } else if (b->U->count <= 1) {
+                       b->tsorted = b->trevsorted = 1;
+               }
+               if ((!(reverse && bn->trevsorted) && !(!reverse && 
bn->tsorted)) &&
+                   do_sort(Tloc(bn, BUNfirst(bn)),
                            on ? Tloc(on, BUNfirst(on)) : NULL,
                            bn->T->vheap ? bn->T->vheap->base : NULL,
                            BATcount(bn), Tsize(bn), on ? Tsize(on) : 0,
diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c
--- a/gdk/gdk_imprints.c
+++ b/gdk/gdk_imprints.c
@@ -727,6 +727,7 @@ do {                                    
                BBPunfix(b->batCacheid);
                b = o;
        }
+       assert(b->batCapacity >= BATcount(b));
        return b;
 };
 
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -186,26 +186,26 @@ do {                                                      
                    \
        e = i+limit-pr_off;                                                 \
        if (im[icnt] & mask) {                                              \
                if ((im[icnt] & ~innermask) == 0) {                         \
-                       while (o < e && p <= q) {                           \
+                       while (o < e && p < q) {                            \
                                v = src[o];                                 \
                                ADD;                                        \
                                cnt++;                                      \
+                               p++;                                        \
                                CAND;                                       \
-                               p++;                                        \
                        }                                                   \
                } else {                                                    \
-                       while (o < e && p <= q) {                           \
+                       while (o < e && p < q) {                            \
                                v = src[o];                                 \
                                ADD;                                        \
                                cnt += (TEST);                              \
+                               p++;                                        \
                                CAND;                                       \
-                               p++;                                        \
                        }                                                   \
                }                                                           \
        } else {                                                            \
                while (o < e && p <= q) {                                   \
+                       p++;                                                \
                        CAND;                                               \
-                       p++;                                                \
                }                                                           \
        }                                                                   \
 } while (0)
@@ -222,7 +222,6 @@ do {                                                        
                    \
        cchdc_t *d = (cchdc_t *) imprints->dict->base;                      \
        bte rpp    = ATOMelmshift(IMPS_PAGE >> b->T->shift);                \
        CAND;                                                               \
-       p++;                                                                \
        for (i=0, dcnt=0, icnt=0;                                           \
             (dcnt < imprints->dictcnt) && (i < w+pr_off);                  \
             dcnt++) {                                                      \
@@ -660,6 +659,8 @@ BAT_scanselect(BAT *b, BAT *s, BAT *bn, 
                 * BUNlast(s) (i.e. s not fully used)? */
                candlist = (const oid *) Tloc(s, p);
                /* call type-specific core scan select function */
+               assert(b->batCapacity >= BATcount(b));
+               assert(s->batCapacity >= BATcount(s));
                switch (ATOMstorage(b->ttype)) {
                case TYPE_bte:
                        cnt = candscan_bte(scanargs);
@@ -684,6 +685,7 @@ BAT_scanselect(BAT *b, BAT *s, BAT *bn, 
                }
                if (cnt == BUN_NONE)
                        return NULL;
+               assert(bn->batCapacity >= cnt);
        } else {
                if (s) {
                        assert(BATtdense(s));
@@ -725,6 +727,7 @@ BAT_scanselect(BAT *b, BAT *s, BAT *bn, 
                }
                if (cnt == BUN_NONE)
                        return NULL;
+               assert(bn->batCapacity >= cnt);
        }
        BATsetcount(bn, cnt);
        bn->tsorted = 1;
diff --git a/monetdb5/mal/Tests/All b/monetdb5/mal/Tests/All
--- a/monetdb5/mal/Tests/All
+++ b/monetdb5/mal/Tests/All
@@ -201,6 +201,7 @@ tst850
 tst866
 tst867
 tst870
+#tst880 requested feature
 tst890
 tst900
 tst901
diff --git a/monetdb5/mal/Tests/tst880.mal b/monetdb5/mal/Tests/tst880.mal
new file mode 100644
--- /dev/null
+++ b/monetdb5/mal/Tests/tst880.mal
@@ -0,0 +1,25 @@
+#min/max over two BATs
+
+b:= bat.new(:oid,:int);
+bat.append(b,-5);
+bat.append(b,0);
+bat.append(b,5);
+bat.append(b,nil:int);
+bat.append(c,nil:int);
+bat.append(c,7);
+bat.append(c,8);
+
+c:= bat.new(:oid,:int);
+bat.append(c,-5);
+bat.append(c,0);
+bat.append(c,5);
+bat.append(c,nil:int);
+bat.append(c,4);
+bat.append(c,9);
+bat.append(c,nil:int);
+
+
+z:= batcalc.max(b,c);
+io.print(b,c,z);
+z:= batcalc.min(b,c);
+io.print(b,c,z);
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
@@ -37,6 +37,7 @@
  */
 #include "monetdb_config.h"
 #include "mal_dataflow.h"
+#include "mal_client.h"
 
 #define DFLOWpending 0         /* runnable */
 #define DFLOWrunning 1         /* currently in progress */
@@ -62,7 +63,7 @@ typedef struct queue {
        FlowEvent *data;
        MT_Lock l;      /* it's a shared resource, ie we need locks */
        MT_Sema s;      /* threads wait on empty queues */
-} queue;
+} Queue;
 
 /*
  * The dataflow dependency is administered in a graph list structure.
@@ -79,12 +80,14 @@ typedef struct DATAFLOW {
        int *nodes;         /* dependency graph nodes */
        int *edges;         /* dependency graph */
        MT_Lock flowlock;   /* lock to protect the above */
-       queue *done;        /* instructions handled */
+       Queue *done;        /* instructions handled */
 } *DataFlow, DataFlowRec;
 
-static MT_Id workers[THREADS];
-static queue *todo = 0;        /* pending instructions */
-static int volatile exiting;
+#define MAXQ 1024
+static MT_Id workers[THREADS] = {0};
+static int workerqueue[THREADS] = {0}; /* maps workers towards the todo queues 
*/
+static Queue *todo[MAXQ] = {0};        /* pending instructions organized by 
user MAXTODO > #users */
+static int volatile exiting = 0;
 
 /*
  * Calculate the size of the dataflow dependency graph.
@@ -106,12 +109,11 @@ DFLOWgraphSize(MalBlkPtr mb, int start, 
  * can be executed in parallel.
  */
 
-static queue*
+static Queue*
 q_create(int sz, const char *name)
 {
-       queue *q = (queue*)GDKmalloc(sizeof(queue));
+       Queue *q = (Queue*)GDKmalloc(sizeof(Queue));
 
-       (void) name;
        if (q == NULL)
                return NULL;
        q->size = ((sz << 1) >> 1); /* we want a multiple of 2 */
@@ -122,14 +124,16 @@ q_create(int sz, const char *name)
                return NULL;
        }
 
+       (void) name; /* in case MT_LOCK_TRACE is not enabled in gdk_system.h */
        MT_lock_init(&q->l, name);
        MT_sema_init(&q->s, 0, name);
        return q;
 }
 
 static void
-q_destroy(queue *q)
+q_destroy(Queue *q)
 {
+       assert(q);
        MT_lock_destroy(&q->l);
        MT_sema_destroy(&q->s);
        GDKfree(q->data);
@@ -139,8 +143,10 @@ q_destroy(queue *q)
 /* keep a simple LIFO queue. It won't be a large one, so shuffles of requeue 
is possible */
 /* we might actually sort it for better scheduling behavior */
 static void
-q_enqueue_(queue *q, FlowEvent d)
+q_enqueue_(Queue *q, FlowEvent d)
 {
+       assert(q);
+       assert(d);
        if (q->last == q->size) {
                q->size <<= 1;
                q->data = (FlowEvent*) GDKrealloc(q->data, sizeof(FlowEvent) * 
q->size);
@@ -149,7 +155,7 @@ q_enqueue_(queue *q, FlowEvent d)
        q->data[q->last++] = d;
 }
 static void
-q_enqueue(queue *q, FlowEvent d)
+q_enqueue(Queue *q, FlowEvent d)
 {
        assert(q);
        assert(d);
@@ -167,10 +173,12 @@ q_enqueue(queue *q, FlowEvent d)
 
 #ifdef USE_MAL_ADMISSION
 static void
-q_requeue_(queue *q, FlowEvent d)
+q_requeue_(Queue *q, FlowEvent d)
 {
        int i;
 
+       assert(q);
+       assert(d);
        if (q->last == q->size) {
                /* enlarge buffer */
                q->size <<= 1;
@@ -183,7 +191,7 @@ q_requeue_(queue *q, FlowEvent d)
        q->last++;
 }
 static void
-q_requeue(queue *q, FlowEvent d)
+q_requeue(Queue *q, FlowEvent d)
 {
        assert(q);
        assert(d);
@@ -195,7 +203,7 @@ q_requeue(queue *q, FlowEvent d)
 #endif
 
 static void *
-q_dequeue(queue *q)
+q_dequeue(Queue *q)
 {
        void *r = NULL;
 
@@ -273,6 +281,7 @@ DFLOWworker(void *t)
        DataFlow flow;
        FlowEvent fe = 0, fnxt = 0;
        int id = (int) ((MT_Id *) t - workers), last = 0;
+       int wq;
        Thread thr;
        str error = 0;
 
@@ -285,8 +294,10 @@ DFLOWworker(void *t)
        GDKsetbuf(GDKmalloc(GDKMAXERRLEN)); /* where to leave errors */
        GDKerrbuf[0] = 0;
        while (1) {
+               assert(workerqueue[id] > 0);
+               wq = workerqueue[id] - 1;
                if (fnxt == 0)
-                       fe = q_dequeue(todo);
+                       fe = q_dequeue(todo[wq]);
                else
                        fe = fnxt;
                if (exiting) {
@@ -308,10 +319,10 @@ DFLOWworker(void *t)
 #ifdef USE_MAL_ADMISSION
                        if (MALadmission(fe->argclaim, fe->hotclaim)) {
                                fe->hotclaim = 0;   /* don't assume priority 
anymore */
-                               assert(todo);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to