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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list