summaryrefslogtreecommitdiffstats
path: root/web/api/queries
diff options
context:
space:
mode:
Diffstat (limited to 'web/api/queries')
-rw-r--r--web/api/queries/query.c28
-rw-r--r--web/api/queries/rrdr.h2
-rw-r--r--web/api/queries/weights.c3
3 files changed, 23 insertions, 10 deletions
diff --git a/web/api/queries/query.c b/web/api/queries/query.c
index 1f10c5137..df7e09799 100644
--- a/web/api/queries/query.c
+++ b/web/api/queries/query.c
@@ -2273,9 +2273,11 @@ RRDR *rrd2rrdr(ONEWAYALLOC *owa, QUERY_TARGET *qt) {
r->internal.grouping_reset(r);
if(ops[c]) {
- r->od[c] |= RRDR_DIMENSION_SELECTED;
+ r->od[c] |= RRDR_DIMENSION_QUERIED;
rrd2rrdr_query_execute(r, c, ops[c]);
}
+ else
+ continue;
global_statistics_rrdr_query_completed(
1,
@@ -2385,15 +2387,23 @@ RRDR *rrd2rrdr(ONEWAYALLOC *owa, QUERY_TARGET *qt) {
// free all resources used by the grouping method
r->internal.grouping_free(r);
- // when all the dimensions are zero, we should return all of them
- if(unlikely((qt->window.options & RRDR_OPTION_NONZERO) && !dimensions_nonzero && !(r->result_options & RRDR_RESULT_OPTION_CANCEL))) {
- // all the dimensions are zero
- // mark them as NONZERO to send them all
- for(size_t c = 0, max = qt->query.used; c < max ; c++) {
- if(unlikely(r->od[c] & RRDR_DIMENSION_HIDDEN)) continue;
- r->od[c] |= RRDR_DIMENSION_NONZERO;
+ if(likely(dimensions_used)) {
+ // when all the dimensions are zero, we should return all of them
+ if (unlikely((qt->window.options & RRDR_OPTION_NONZERO) && !dimensions_nonzero &&
+ !(r->result_options & RRDR_RESULT_OPTION_CANCEL))) {
+ // all the dimensions are zero
+ // mark them as NONZERO to send them all
+ for (size_t c = 0, max = qt->query.used; c < max; c++) {
+ if (unlikely(r->od[c] & RRDR_DIMENSION_HIDDEN)) continue;
+ if (unlikely(!(r->od[c] & RRDR_DIMENSION_QUERIED))) continue;
+ r->od[c] |= RRDR_DIMENSION_NONZERO;
+ }
}
+
+ return r;
}
- return r;
+ // we couldn't query any dimension
+ rrdr_free(owa, r);
+ return NULL;
}
diff --git a/web/api/queries/rrdr.h b/web/api/queries/rrdr.h
index e31a98099..2d982b136 100644
--- a/web/api/queries/rrdr.h
+++ b/web/api/queries/rrdr.h
@@ -58,7 +58,7 @@ typedef enum rrdr_dimension_flag {
RRDR_DIMENSION_DEFAULT = 0x00,
RRDR_DIMENSION_HIDDEN = 0x04, // the dimension is hidden (not to be presented to callers)
RRDR_DIMENSION_NONZERO = 0x08, // the dimension is non zero (contains non-zero values)
- RRDR_DIMENSION_SELECTED = 0x10, // the dimension is selected for evaluation in this RRDR
+ RRDR_DIMENSION_QUERIED = 0x10, // the dimension is selected for evaluation in this RRDR
} RRDR_DIMENSION_FLAGS;
// RRDR result options
diff --git a/web/api/queries/weights.c b/web/api/queries/weights.c
index dc98aeedf..485aaca26 100644
--- a/web/api/queries/weights.c
+++ b/web/api/queries/weights.c
@@ -541,6 +541,9 @@ NETDATA_DOUBLE *rrd2rrdr_ks2(
if(unlikely(r->od[0] & RRDR_DIMENSION_HIDDEN))
goto cleanup;
+ if(unlikely(!(r->od[0] & RRDR_DIMENSION_QUERIED)))
+ goto cleanup;
+
if(unlikely(!(r->od[0] & RRDR_DIMENSION_NONZERO)))
goto cleanup;