Changeset: 8381efe32b72 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8381efe32b72
Modified Files:
gdk/gdk.h
gdk/gdk_cross.c
gdk/gdk_join.c
gdk/gdk_select.c
Branch: qcancel
Log Message:
hashselect
diffs (121 lines):
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2115,7 +2115,13 @@ gdk_export BAT *BATsample_with_seed(BAT
#define CHECK_QRY_TIMEOUT_STEP 10000
-#define DEFAULT_TIMEOUT_HANDLER() \
+#define NULL_TIMEOUT_HANDLER() \
+ do { \
+ GDKerror("Timeout was reached!"); \
+ return NULL; \
+ } while(0)
+
+#define GDK_FAIL_TIMEOUT_HANDLER() \
do { \
GDKerror("Timeout was reached!"); \
return GDK_FAIL; \
diff --git a/gdk/gdk_cross.c b/gdk/gdk_cross.c
--- a/gdk/gdk_cross.c
+++ b/gdk/gdk_cross.c
@@ -56,7 +56,7 @@ BATsubcross(BAT **r1p, BAT **r2p, BAT *l
for (i = 0; i < cnt1; i++) {
oid x = canditer_next(&ci1);
for (j = 0; j < cnt2; j++) {
- GDK_CHECK_TIMEOUT(timeoffset, counter,
DEFAULT_TIMEOUT_HANDLER());
+ GDK_CHECK_TIMEOUT(timeoffset, counter,
GDK_FAIL_TIMEOUT_HANDLER());
*p++ = x;
}
}
@@ -73,7 +73,7 @@ BATsubcross(BAT **r1p, BAT **r2p, BAT *l
counter = 0;
for (i = 0; i < cnt1; i++) {
for (j = 0; j < cnt2; j++) {
- GDK_CHECK_TIMEOUT(timeoffset, counter,
DEFAULT_TIMEOUT_HANDLER());
+ GDK_CHECK_TIMEOUT(timeoffset, counter,
GDK_FAIL_TIMEOUT_HANDLER());
*p++ = canditer_next(&ci2);
}
canditer_reset(&ci2);
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -375,7 +375,7 @@ selectjoin(BAT **r1p, BAT **r2p, BAT *l,
do {
GDK_CHECK_TIMEOUT(timeoffset, counter,
- DEFAULT_TIMEOUT_HANDLER());
+ GDK_FAIL_TIMEOUT_HANDLER());
for (p = 0; p < q; p++) {
*o1p++ = o;
}
@@ -394,7 +394,7 @@ selectjoin(BAT **r1p, BAT **r2p, BAT *l,
do {
GDK_CHECK_TIMEOUT(timeoffset, counter,
- DEFAULT_TIMEOUT_HANDLER());
+ GDK_FAIL_TIMEOUT_HANDLER());
for (p = 0; p < q; p++) {
*o1p++ = o;
}
@@ -716,7 +716,7 @@ mergejoin_void(BAT **r1p, BAT **r2p, BAT
if (l->ttype == TYPE_void && l->tvheap != NULL) {
for (i = 0; i < lci->ncand; i++) {
GDK_CHECK_TIMEOUT(timeoffset, counter,
- DEFAULT_TIMEOUT_HANDLER());
+ GDK_FAIL_TIMEOUT_HANDLER());
oid c = canditer_next(lci);
o = BUNtoid(l, c - l->hseqbase);
@@ -732,7 +732,7 @@ mergejoin_void(BAT **r1p, BAT **r2p, BAT
} else {
for (i = 0; i < lci->ncand; i++) {
GDK_CHECK_TIMEOUT(timeoffset, counter,
- DEFAULT_TIMEOUT_HANDLER());
+ GDK_FAIL_TIMEOUT_HANDLER());
oid c = canditer_next(lci);
o = lvals[c - l->hseqbase];
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -88,6 +88,10 @@ hashselect(BAT *b, struct canditer *rest
oid seq;
int (*cmp)(const void *, const void *);
+ size_t counter = 0;
+ QryCtx *qry_ctx = MT_thread_get_qry_ctx();
+ lng timeoffset = (qry_ctx->starttime && qry_ctx->querytimeout) ?
(qry_ctx->starttime + qry_ctx->querytimeout) : 0;
+
assert(bn->ttype == TYPE_oid);
seq = b->hseqbase;
l = ci->seq - seq;
@@ -126,6 +130,8 @@ hashselect(BAT *b, struct canditer *rest
cnt = 0;
if (ci->tpe != cand_dense) {
HASHloop_bound(bi, b->thash, i, tl, l, h) {
+ GDK_CHECK_TIMEOUT(timeoffset, counter,
+ GOTO_LABEL_TIMEOUT_HANDLER(bailout));
o = (oid) (i + seq - d);
if (canditer_contains(ci, o)) {
buninsfix(bn, dst, cnt, o,
@@ -136,6 +142,8 @@ hashselect(BAT *b, struct canditer *rest
}
} else {
HASHloop_bound(bi, b->thash, i, tl, l, h) {
+ GDK_CHECK_TIMEOUT(timeoffset, counter,
+ GOTO_LABEL_TIMEOUT_HANDLER(bailout));
o = (oid) (i + seq - d);
buninsfix(bn, dst, cnt, o,
maximum - BATcapacity(bn),
@@ -158,6 +166,10 @@ hashselect(BAT *b, struct canditer *rest
bn->trevsorted = bn->batCount <= 1;
bn->tseqbase = bn->batCount == 0 ? 0 : bn->batCount == 1 ? *dst :
oid_nil;
return bn;
+
+ bailout:
+ BBPreclaim(bn);
+ return NULL;
}
/* Imprints select code */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list