From 0f5dfa5088dc1a97d91ca4ddc0ba7bfde4bb09d7 Mon Sep 17 00:00:00 2001 From: J-N-K Date: Sat, 18 Mar 2023 13:31:41 +0100 Subject: [PATCH] Fix "empty range" exception when querying InfluxDB2 (#14627) Signed-off-by: Jan N. Klug --- .../InfluxDB2FilterCriteriaQueryCreatorImpl.java | 4 +++- ...InfluxFilterCriteriaQueryCreatorImplTest.java | 16 ++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/bundles/org.openhab.persistence.influxdb/src/main/java/org/openhab/persistence/influxdb/internal/influx2/InfluxDB2FilterCriteriaQueryCreatorImpl.java b/bundles/org.openhab.persistence.influxdb/src/main/java/org/openhab/persistence/influxdb/internal/influx2/InfluxDB2FilterCriteriaQueryCreatorImpl.java index 76c1528c5..1f89901dc 100644 --- a/bundles/org.openhab.persistence.influxdb/src/main/java/org/openhab/persistence/influxdb/internal/influx2/InfluxDB2FilterCriteriaQueryCreatorImpl.java +++ b/bundles/org.openhab.persistence.influxdb/src/main/java/org/openhab/persistence/influxdb/internal/influx2/InfluxDB2FilterCriteriaQueryCreatorImpl.java @@ -54,10 +54,12 @@ public class InfluxDB2FilterCriteriaQueryCreatorImpl implements FilterCriteriaQu if (criteria.getBeginDate() != null) { range.withStart(criteria.getBeginDate().toInstant()); } else { - range = flux.range(-100L, ChronoUnit.YEARS); // Flux needs a mandatory start range + range.withStart(-100L, ChronoUnit.YEARS); // Flux needs a mandatory start range } if (criteria.getEndDate() != null) { range.withStop(criteria.getEndDate().toInstant()); + } else { + range.withStop(100L, ChronoUnit.YEARS); } flux = range; diff --git a/bundles/org.openhab.persistence.influxdb/src/test/java/org/openhab/persistence/influxdb/internal/InfluxFilterCriteriaQueryCreatorImplTest.java b/bundles/org.openhab.persistence.influxdb/src/test/java/org/openhab/persistence/influxdb/internal/InfluxFilterCriteriaQueryCreatorImplTest.java index 79f1e504e..a6a724307 100644 --- a/bundles/org.openhab.persistence.influxdb/src/test/java/org/openhab/persistence/influxdb/internal/InfluxFilterCriteriaQueryCreatorImplTest.java +++ b/bundles/org.openhab.persistence.influxdb/src/test/java/org/openhab/persistence/influxdb/internal/InfluxFilterCriteriaQueryCreatorImplTest.java @@ -82,7 +82,7 @@ public class InfluxFilterCriteriaQueryCreatorImplTest { String queryV2 = instanceV2.createQuery(criteria, RETENTION_POLICY); assertThat(queryV2, equalTo(""" from(bucket:"origin") - \t|> range(start:-100y) + \t|> range(start:-100y, stop:100y) \t|> filter(fn: (r) => r["_measurement"] == "sampleItem") \t|> keep(columns:["_measurement", "_time", "_value"])""")); } @@ -96,7 +96,7 @@ public class InfluxFilterCriteriaQueryCreatorImplTest { assertThat(queryV1, equalTo("SELECT \"value\"::field,\"item\"::tag FROM \"origin\"./.*/;")); String queryV2 = instanceV2.createQuery(criteria, RETENTION_POLICY); - assertThat(queryV2, equalTo("from(bucket:\"origin\")\n\t" + "|> range(start:-100y)")); + assertThat(queryV2, equalTo("from(bucket:\"origin\")\n\t" + "|> range(start:-100y, stop:100y)")); } @Test @@ -136,7 +136,7 @@ public class InfluxFilterCriteriaQueryCreatorImplTest { String queryV2 = instanceV2.createQuery(criteria, RETENTION_POLICY); assertThat(queryV2, equalTo(""" from(bucket:"origin") - \t|> range(start:-100y) + \t|> range(start:-100y, stop:100y) \t|> filter(fn: (r) => r["_measurement"] == "sampleItem") \t|> keep(columns:["_measurement", "_time", "_value"]) \t|> filter(fn: (r) => (r["_field"] == "value" and r["_value"] <= 90))""")); @@ -155,7 +155,7 @@ public class InfluxFilterCriteriaQueryCreatorImplTest { String queryV2 = instanceV2.createQuery(criteria, RETENTION_POLICY); assertThat(queryV2, equalTo(""" from(bucket:"origin") - \t|> range(start:-100y) + \t|> range(start:-100y, stop:100y) \t|> filter(fn: (r) => r["_measurement"] == "sampleItem") \t|> keep(columns:["_measurement", "_time", "_value"]) \t|> limit(n:10, offset:20)""")); @@ -173,7 +173,7 @@ public class InfluxFilterCriteriaQueryCreatorImplTest { String queryV2 = instanceV2.createQuery(criteria, RETENTION_POLICY); assertThat(queryV2, equalTo(""" from(bucket:"origin") - \t|> range(start:-100y) + \t|> range(start:-100y, stop:100y) \t|> filter(fn: (r) => r["_measurement"] == "sampleItem") \t|> keep(columns:["_measurement", "_time", "_value"]) \t|> sort(desc:false, columns:["_time"])""")); @@ -187,7 +187,7 @@ public class InfluxFilterCriteriaQueryCreatorImplTest { String queryV2 = instanceV2.createQuery(criteria, RETENTION_POLICY); assertThat(queryV2, equalTo(""" from(bucket:"origin") - \t|> range(start:-100y) + \t|> range(start:-100y, stop:100y) \t|> filter(fn: (r) => r["_measurement"] == "sampleItem") \t|> keep(columns:["_measurement", "_time", "_value"]) \t|> last()""")); @@ -215,7 +215,7 @@ public class InfluxFilterCriteriaQueryCreatorImplTest { String queryV2 = instanceV2.createQuery(criteria, RETENTION_POLICY); assertThat(queryV2, equalTo(""" from(bucket:"origin") - \t|> range(start:-100y) + \t|> range(start:-100y, stop:100y) \t|> filter(fn: (r) => r["_measurement"] == "measurementName") \t|> filter(fn: (r) => r["item"] == "sampleItem") \t|> keep(columns:["_measurement", "_time", "_value", "item"])""")); @@ -228,7 +228,7 @@ public class InfluxFilterCriteriaQueryCreatorImplTest { queryV2 = instanceV2.createQuery(criteria, RETENTION_POLICY); assertThat(queryV2, equalTo(""" from(bucket:"origin") - \t|> range(start:-100y) + \t|> range(start:-100y, stop:100y) \t|> filter(fn: (r) => r["_measurement"] == "sampleItem") \t|> keep(columns:["_measurement", "_time", "_value"])""")); }