Changeset: b0a4ba35d226 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b0a4ba35d226
Modified Files:
        gdk/gdk_calc.c
Branch: qcancel
Log Message:

timeout gdk_calc if then else


diffs (118 lines):

diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -14616,6 +14616,8 @@ VARcalcbetween(ValPtr ret, const ValReco
 #define IFTHENELSELOOP(TYPE)                                           \
        do {                                                            \
                for (i = 0; i < cnt; i++) {                             \
+                       GDK_CHECK_TIMEOUT(timeoffset, counter,          \
+                                       GOTO_LABEL_TIMEOUT_HANDLER(bailout)); \
                        if (src[i] && !is_bit_nil(src[i])) {            \
                                ((TYPE *) dst)[i] = ((TYPE *) col1)[k]; \
                        } else {                                        \
@@ -14628,6 +14630,8 @@ VARcalcbetween(ValPtr ret, const ValReco
 #define IFTHENELSELOOP_msk(TYPE)                               \
        do {                                                    \
                for (i = 0; i < cnt; i++) {                     \
+                       GDK_CHECK_TIMEOUT(timeoffset, counter,          \
+                                       GOTO_LABEL_TIMEOUT_HANDLER(bailout)); \
                        if (n == 32) {                          \
                                n = 0;                          \
                                mask = src[i / 32];             \
@@ -14655,6 +14659,13 @@ BATcalcifthenelse_intern(BAT *b,
        const void *p;
        BUN cnt = b->batCount;
 
+       size_t counter = 0;
+       lng timeoffset = 0;
+       QryCtx *qry_ctx = MT_thread_get_qry_ctx();
+       if (qry_ctx != NULL) {
+               timeoffset = (qry_ctx->starttime && qry_ctx->querytimeout) ? 
(qry_ctx->starttime + qry_ctx->querytimeout) : 0;
+       }
+
        /* col1 and col2 can only be NULL for void columns */
        assert(col1 != NULL || ATOMtype(tpe) == TYPE_oid);
        assert(col2 != NULL || ATOMtype(tpe) == TYPE_oid);
@@ -14678,6 +14689,8 @@ BATcalcifthenelse_intern(BAT *b,
                        const uint32_t *src = Tloc(b, 0);
                        BUN n = cnt / 32;
                        for (i = 0; i <= n; i++) {
+                               GDK_CHECK_TIMEOUT(timeoffset, counter,
+                                               
GOTO_LABEL_TIMEOUT_HANDLER(bailout));
                                BUN rem = i == n ? cnt % 32 : 32;
                                uint32_t mask = rem != 0 ? src[i] : 0;
                                for (BUN j = 0; j < rem; j++) {
@@ -14703,6 +14716,8 @@ BATcalcifthenelse_intern(BAT *b,
                } else {
                        const bit *src = Tloc(b, 0);
                        for (i = 0; i < cnt; i++) {
+                               GDK_CHECK_TIMEOUT(timeoffset, counter,
+                                               
GOTO_LABEL_TIMEOUT_HANDLER(bailout));
                                if (src[i] && !is_bit_nil(src[i])) {
                                        if (heap1)
                                                p = heap1 + VarHeapVal(col1, k, 
width1);
@@ -14731,6 +14746,8 @@ BATcalcifthenelse_intern(BAT *b,
                        BUN n = 32;
                        if (ATOMtype(tpe) == TYPE_oid) {
                                for (i = 0; i < cnt; i++) {
+                                       GDK_CHECK_TIMEOUT(timeoffset, counter,
+                                                       
GOTO_LABEL_TIMEOUT_HANDLER(bailout));
                                        if (n == 32) {
                                                n = 0;
                                                mask = src[i / 32];
@@ -14758,6 +14775,8 @@ BATcalcifthenelse_intern(BAT *b,
                                }
                                n = (cnt + 31) / 32;
                                for (i = 0; i < n; i++) {
+                                       GDK_CHECK_TIMEOUT(timeoffset, counter,
+                                                       
GOTO_LABEL_TIMEOUT_HANDLER(bailout));
                                        if (incr1)
                                                v1 = ((uint32_t *) col1)[i];
                                        if (incr2)
@@ -14788,6 +14807,8 @@ BATcalcifthenelse_intern(BAT *b,
                                        break;
                                default:
                                        for (i = 0; i < cnt; i++) {
+                                               GDK_CHECK_TIMEOUT(timeoffset, 
counter,
+                                                               
GOTO_LABEL_TIMEOUT_HANDLER(bailout));
                                                if (n == 32) {
                                                        n = 0;
                                                        mask = src[i / 32];
@@ -14808,6 +14829,8 @@ BATcalcifthenelse_intern(BAT *b,
                        const bit *src = Tloc(b, 0);
                        if (ATOMtype(tpe) == TYPE_oid) {
                                for (i = 0; i < cnt; i++) {
+                                       GDK_CHECK_TIMEOUT(timeoffset, counter,
+                                                       
GOTO_LABEL_TIMEOUT_HANDLER(bailout));
                                        if (src[i] && !is_bit_nil(src[i])) {
                                                ((oid *) dst)[i] = col1 ? ((oid 
*) col1)[k] : seq1;
                                        } else {
@@ -14833,6 +14856,8 @@ BATcalcifthenelse_intern(BAT *b,
                                }
                                i = 0;
                                while (i < cnt) {
+                                       GDK_CHECK_TIMEOUT(timeoffset, counter,
+                                                       
GOTO_LABEL_TIMEOUT_HANDLER(bailout));
                                        uint32_t mask = 0;
                                        if (incr1)
                                                v1 = ((uint32_t *) col1)[i/32];
@@ -14868,6 +14893,8 @@ BATcalcifthenelse_intern(BAT *b,
                                        break;
                                default:
                                        for (i = 0; i < cnt; i++) {
+                                               GDK_CHECK_TIMEOUT(timeoffset, 
counter,
+                                                               
GOTO_LABEL_TIMEOUT_HANDLER(bailout));
                                                if (src[i] && 
!is_bit_nil(src[i])) {
                                                        p = ((const char *) 
col1) + k * width1;
                                                } else {
@@ -14893,6 +14920,10 @@ BATcalcifthenelse_intern(BAT *b,
        bn->tnonil = nonil1 && nonil2;
 
        return bn;
+bailout:
+       BBPreclaim(bn);
+       return NULL;
+
 }
 
 BAT *
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to