Commit 4525174b0efd7fdcf328489b563c2a6eabec88da
1 parent
ea0e59f7
Aggregation function fixes to the SQL DAO layer
Showing
3 changed files
with
24 additions
and
17 deletions
... | ... | @@ -34,7 +34,9 @@ public final class TsKvEntity implements ToData<TsKvEntry> { |
34 | 34 | } |
35 | 35 | |
36 | 36 | public TsKvEntity(Double avgLongValue, Double avgDoubleValue) { |
37 | - this.longValue = avgLongValue.longValue(); | |
37 | + if(avgLongValue != null) { | |
38 | + this.longValue = avgLongValue.longValue(); | |
39 | + } | |
38 | 40 | this.doubleValue = avgDoubleValue; |
39 | 41 | } |
40 | 42 | |
... | ... | @@ -104,4 +106,8 @@ public final class TsKvEntity implements ToData<TsKvEntry> { |
104 | 106 | } |
105 | 107 | return new BasicTsKvEntry(ts, kvEntry); |
106 | 108 | } |
109 | + | |
110 | + public boolean isNotEmpty() { | |
111 | + return strValue != null || longValue != null || doubleValue != null || booleanValue != null; | |
112 | + } | |
107 | 113 | } | ... | ... |
... | ... | @@ -19,12 +19,14 @@ import org.springframework.data.domain.Pageable; |
19 | 19 | import org.springframework.data.jpa.repository.Query; |
20 | 20 | import org.springframework.data.repository.CrudRepository; |
21 | 21 | import org.springframework.data.repository.query.Param; |
22 | +import org.springframework.scheduling.annotation.Async; | |
22 | 23 | import org.thingsboard.server.common.data.EntityType; |
23 | 24 | import org.thingsboard.server.dao.model.sql.TsKvCompositeKey; |
24 | 25 | import org.thingsboard.server.dao.model.sql.TsKvEntity; |
25 | 26 | import org.thingsboard.server.dao.util.SqlDao; |
26 | 27 | |
27 | 28 | import java.util.List; |
29 | +import java.util.concurrent.Future; | |
28 | 30 | |
29 | 31 | @SqlDao |
30 | 32 | public interface TsKvRepository extends CrudRepository<TsKvEntity, TsKvCompositeKey> { |
... | ... | @@ -39,49 +41,52 @@ public interface TsKvRepository extends CrudRepository<TsKvEntity, TsKvComposite |
39 | 41 | @Param("endTs") long endTs, |
40 | 42 | Pageable pageable); |
41 | 43 | |
44 | + @Async | |
42 | 45 | @Query("SELECT new TsKvEntity(MAX(tskv.strValue), MAX(tskv.longValue), MAX(tskv.doubleValue)) FROM TsKvEntity tskv " + |
43 | 46 | "WHERE tskv.entityId = :entityId AND tskv.entityType = :entityType " + |
44 | 47 | "AND tskv.key = :entityKey AND tskv.ts > :startTs AND tskv.ts < :endTs") |
45 | - TsKvEntity findMax(@Param("entityId") String entityId, | |
48 | + Future<TsKvEntity> findMax(@Param("entityId") String entityId, | |
46 | 49 | @Param("entityType") EntityType entityType, |
47 | 50 | @Param("entityKey") String entityKey, |
48 | 51 | @Param("startTs") long startTs, |
49 | 52 | @Param("endTs") long endTs); |
50 | 53 | |
54 | + @Async | |
51 | 55 | @Query("SELECT new TsKvEntity(MIN(tskv.strValue), MIN(tskv.longValue), MIN(tskv.doubleValue)) FROM TsKvEntity tskv " + |
52 | 56 | "WHERE tskv.entityId = :entityId AND tskv.entityType = :entityType " + |
53 | 57 | "AND tskv.key = :entityKey AND tskv.ts > :startTs AND tskv.ts < :endTs") |
54 | - TsKvEntity findMin(@Param("entityId") String entityId, | |
58 | + Future<TsKvEntity> findMin(@Param("entityId") String entityId, | |
55 | 59 | @Param("entityType") EntityType entityType, |
56 | 60 | @Param("entityKey") String entityKey, |
57 | 61 | @Param("startTs") long startTs, |
58 | 62 | @Param("endTs") long endTs); |
59 | 63 | |
60 | - | |
64 | + @Async | |
61 | 65 | @Query("SELECT new TsKvEntity(COUNT(tskv.booleanValue), COUNT(tskv.strValue), COUNT(tskv.longValue), COUNT(tskv.doubleValue)) FROM TsKvEntity tskv " + |
62 | 66 | "WHERE tskv.entityId = :entityId AND tskv.entityType = :entityType " + |
63 | 67 | "AND tskv.key = :entityKey AND tskv.ts > :startTs AND tskv.ts < :endTs") |
64 | - TsKvEntity findCount(@Param("entityId") String entityId, | |
65 | - @Param("entityType") EntityType entityType, | |
66 | - @Param("entityKey") String entityKey, | |
67 | - @Param("startTs") long startTs, | |
68 | - @Param("endTs") long endTs); | |
69 | - | |
68 | + Future<TsKvEntity> findCount(@Param("entityId") String entityId, | |
69 | + @Param("entityType") EntityType entityType, | |
70 | + @Param("entityKey") String entityKey, | |
71 | + @Param("startTs") long startTs, | |
72 | + @Param("endTs") long endTs); | |
70 | 73 | |
74 | + @Async | |
71 | 75 | @Query("SELECT new TsKvEntity(AVG(tskv.longValue), AVG(tskv.doubleValue)) FROM TsKvEntity tskv " + |
72 | 76 | "WHERE tskv.entityId = :entityId AND tskv.entityType = :entityType " + |
73 | 77 | "AND tskv.key = :entityKey AND tskv.ts > :startTs AND tskv.ts < :endTs") |
74 | - TsKvEntity findAvg(@Param("entityId") String entityId, | |
78 | + Future<TsKvEntity> findAvg(@Param("entityId") String entityId, | |
75 | 79 | @Param("entityType") EntityType entityType, |
76 | 80 | @Param("entityKey") String entityKey, |
77 | 81 | @Param("startTs") long startTs, |
78 | 82 | @Param("endTs") long endTs); |
79 | 83 | |
80 | 84 | |
85 | + @Async | |
81 | 86 | @Query("SELECT new TsKvEntity(SUM(tskv.longValue), SUM(tskv.doubleValue)) FROM TsKvEntity tskv " + |
82 | 87 | "WHERE tskv.entityId = :entityId AND tskv.entityType = :entityType " + |
83 | 88 | "AND tskv.key = :entityKey AND tskv.ts > :startTs AND tskv.ts < :endTs") |
84 | - TsKvEntity findSum(@Param("entityId") String entityId, | |
89 | + Future<TsKvEntity> findSum(@Param("entityId") String entityId, | |
85 | 90 | @Param("entityType") EntityType entityType, |
86 | 91 | @Param("entityKey") String entityKey, |
87 | 92 | @Param("startTs") long startTs, | ... | ... |
... | ... | @@ -32,11 +32,7 @@ public class SubscriptionUpdate { |
32 | 32 | this.subscriptionId = subscriptionId; |
33 | 33 | this.data = new TreeMap<>(); |
34 | 34 | for (TsKvEntry tsEntry : data) { |
35 | - List<Object> values = this.data.get(tsEntry.getKey()); | |
36 | - if (values == null) { | |
37 | - values = new ArrayList<>(); | |
38 | - this.data.put(tsEntry.getKey(), values); | |
39 | - } | |
35 | + List<Object> values = this.data.computeIfAbsent(tsEntry.getKey(), k -> new ArrayList<>()); | |
40 | 36 | Object[] value = new Object[2]; |
41 | 37 | value[0] = tsEntry.getTs(); |
42 | 38 | value[1] = tsEntry.getValueAsString(); | ... | ... |