diff --git a/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java index 3b56dedea2..6d509f0517 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java @@ -170,7 +170,7 @@ public class BaseTimeseriesService implements TimeseriesService { } else { endTs = query.getEndTs(); } - return new BaseReadTsKvQuery(query.getKey(), startTs, endTs, query.getInterval(), query.getLimit(), query.getAggregation()); + return new BaseReadTsKvQuery(query.getKey(), startTs, endTs, query.getInterval(), query.getLimit(), query.getAggregation(), query.getOrderBy()); }).collect(Collectors.toList()); } diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java index 1abfb8f148..fedd95ed94 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java @@ -31,6 +31,7 @@ import org.thingsboard.server.common.data.kv.BooleanDataEntry; import org.thingsboard.server.common.data.kv.DoubleDataEntry; import org.thingsboard.server.common.data.kv.KvEntry; import org.thingsboard.server.common.data.kv.LongDataEntry; +import org.thingsboard.server.common.data.kv.ReadTsKvQuery; import org.thingsboard.server.common.data.kv.StringDataEntry; import org.thingsboard.server.common.data.kv.TsKvEntry; import org.thingsboard.server.common.data.objects.TelemetryEntityView; @@ -148,6 +149,58 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { Assert.assertEquals(toTsEntry(TS, stringKvEntry), entries.get(0)); } + @Test + public void testFindByQueryAscOrder() throws Exception { + DeviceId deviceId = new DeviceId(UUIDs.timeBased()); + + saveEntries(deviceId, TS - 2); + saveEntries(deviceId, TS - 1); + saveEntries(deviceId, TS); + + List queries = new ArrayList<>(); + queries.add(new BaseReadTsKvQuery(STRING_KEY, TS - 3, TS, 0, 1000, Aggregation.NONE, "ASC")); + + List entries = tsService.findAll(tenantId, deviceId, queries).get(); + Assert.assertEquals(3, entries.size()); + Assert.assertEquals(toTsEntry(TS - 2, stringKvEntry), entries.get(0)); + Assert.assertEquals(toTsEntry(TS - 1, stringKvEntry), entries.get(1)); + Assert.assertEquals(toTsEntry(TS, stringKvEntry), entries.get(2)); + + EntityView entityView = saveAndCreateEntityView(deviceId, Arrays.asList(STRING_KEY)); + + entries = tsService.findAll(tenantId, entityView.getId(), queries).get(); + Assert.assertEquals(3, entries.size()); + Assert.assertEquals(toTsEntry(TS - 2, stringKvEntry), entries.get(0)); + Assert.assertEquals(toTsEntry(TS - 1, stringKvEntry), entries.get(1)); + Assert.assertEquals(toTsEntry(TS, stringKvEntry), entries.get(2)); + } + + @Test + public void testFindByQueryDescOrder() throws Exception { + DeviceId deviceId = new DeviceId(UUIDs.timeBased()); + + saveEntries(deviceId, TS - 2); + saveEntries(deviceId, TS - 1); + saveEntries(deviceId, TS); + + List queries = new ArrayList<>(); + queries.add(new BaseReadTsKvQuery(STRING_KEY, TS - 3, TS, 0, 1000, Aggregation.NONE, "DESC")); + + List entries = tsService.findAll(tenantId, deviceId, queries).get(); + Assert.assertEquals(3, entries.size()); + Assert.assertEquals(toTsEntry(TS, stringKvEntry), entries.get(0)); + Assert.assertEquals(toTsEntry(TS - 1, stringKvEntry), entries.get(1)); + Assert.assertEquals(toTsEntry(TS - 2, stringKvEntry), entries.get(2)); + + EntityView entityView = saveAndCreateEntityView(deviceId, Arrays.asList(STRING_KEY)); + + entries = tsService.findAll(tenantId, entityView.getId(), queries).get(); + Assert.assertEquals(3, entries.size()); + Assert.assertEquals(toTsEntry(TS, stringKvEntry), entries.get(0)); + Assert.assertEquals(toTsEntry(TS - 1, stringKvEntry), entries.get(1)); + Assert.assertEquals(toTsEntry(TS - 2, stringKvEntry), entries.get(2)); + } + @Test public void testDeleteDeviceTsDataWithoutOverwritingLatest() throws Exception { DeviceId deviceId = new DeviceId(UUIDs.timeBased());