thingsboard-memoizeit

Details

diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationCompositeKey.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationCompositeKey.java
index 31fc832..4333c5e 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationCompositeKey.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/RelationCompositeKey.java
@@ -36,8 +36,8 @@ public class RelationCompositeKey implements Serializable {
     private String fromType;
     private UUID toId;
     private String toType;
-    private String relationTypeGroup;
     private String relationType;
+    private String relationTypeGroup;
 
     public RelationCompositeKey(EntityRelation relation) {
         this.fromId = relation.getFrom().getId();
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvLatestEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvLatestEntity.java
index 803b89a..9abcdb9 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvLatestEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/sql/TsKvLatestEntity.java
@@ -18,7 +18,7 @@ package org.thingsboard.server.dao.model.sql;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
-import org.thingsboard.server.common.data.kv.TsKvEntry;
+import org.thingsboard.server.common.data.kv.*;
 import org.thingsboard.server.dao.model.ToData;
 
 import javax.persistence.*;
@@ -63,6 +63,16 @@ public final class TsKvLatestEntity implements ToData<TsKvEntry> {
 
     @Override
     public TsKvEntry toData() {
-        return null;
+        KvEntry kvEntry = null;
+        if (strValue != null) {
+            kvEntry = new StringDataEntry(key, strValue);
+        } else if (longValue != null) {
+            kvEntry = new LongDataEntry(key, longValue);
+        } else if (doubleValue != null) {
+            kvEntry = new DoubleDataEntry(key, doubleValue);
+        } else if (booleanValue != null) {
+            kvEntry = new BooleanDataEntry(key, booleanValue);
+        }
+        return new BasicTsKvEntry(ts, kvEntry);
     }
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java
index 37ef058..20fba3a 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java
@@ -100,7 +100,7 @@ public class JpaBaseEventDao extends JpaAbstractSearchTimeDao<EventEntity, Event
     }
     @Override
     public List<Event> findEvents(UUID tenantId, EntityId entityId, String eventType, TimePageLink pageLink) {
-        Specification<EventEntity> timeSearchSpec = JpaAbstractSearchTimeDao.<EventEntity>getTimeSearchPageSpec(pageLink, ID_PROPERTY);
+        Specification<EventEntity> timeSearchSpec = JpaAbstractSearchTimeDao.<EventEntity>getTimeSearchPageSpec(pageLink, "id");
         Specification<EventEntity> fieldsSpec = getEntityFieldsSpec(tenantId, entityId, eventType);
         Sort.Direction sortDirection = pageLink.isAscOrder() ? Sort.Direction.ASC : Sort.Direction.DESC;
         Pageable pageable = new PageRequest(0, pageLink.getLimit(), sortDirection, ID_PROPERTY);
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/relation/JpaRelationDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/relation/JpaRelationDao.java
index 8fca908..169bc6d 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/relation/JpaRelationDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/relation/JpaRelationDao.java
@@ -144,29 +144,25 @@ public class JpaRelationDao extends JpaAbstractDaoListeningExecutorService imple
 
     @Override
     public ListenableFuture<Boolean> deleteOutboundRelations(EntityId entity) {
-        RelationEntity relationEntity = new RelationEntity();
-        relationEntity.setFromId(entity.getId());
-        relationEntity.setFromType(entity.getEntityType().name());
-
         return service.submit(
                 () -> {
                     boolean relationExistsBeforeDelete = relationRepository
-                            .findAllByFromIdAndFromType(relationEntity.getFromId(), relationEntity.getFromType())
+                            .findAllByFromIdAndFromType(entity.getId(), entity.getEntityType().name())
                             .size() > 0;
-                    relationRepository.delete(relationEntity);
+                    relationRepository.deleteByFromIdAndFromType(entity.getId(), entity.getEntityType().name());
                     return relationExistsBeforeDelete;
                 });
     }
 
     @Override
     public ListenableFuture<List<EntityRelation>> findRelations(EntityId from, String relationType, RelationTypeGroup typeGroup, EntityType childType, TimePageLink pageLink) {
-        Specification<RelationEntity> timeSearchSpec = JpaAbstractSearchTimeDao.<RelationEntity>getTimeSearchPageSpec(pageLink, RELATION_TO_ID_PROPERTY);
+        Specification<RelationEntity> timeSearchSpec = JpaAbstractSearchTimeDao.<RelationEntity>getTimeSearchPageSpec(pageLink, "toId");
         Specification<RelationEntity> fieldsSpec = getEntityFieldsSpec(from, relationType, typeGroup, childType);
         Pageable pageable = new PageRequest(0, pageLink.getLimit(),
                 new Sort(
-                        new Order(ASC, RELATION_TYPE_GROUP_PROPERTY),
-                        new Order(ASC, RELATION_TYPE_PROPERTY),
-                        new Order(ASC, RELATION_TO_TYPE_PROPERTY))
+                        new Order(ASC, "relationTypeGroup"),
+                        new Order(ASC, "relationType"),
+                        new Order(ASC, "toType"))
         );
         return service.submit(() ->
                 DaoUtil.convertDataList(relationRepository.findAll(where(timeSearchSpec).and(fieldsSpec), pageable).getContent()));
@@ -188,7 +184,7 @@ public class JpaRelationDao extends JpaAbstractDaoListeningExecutorService imple
                     predicates.add(relationTypePredicate);
                 }
                 if (typeGroup != null) {
-                    Predicate typeGroupPredicate = criteriaBuilder.equal(root.get("relationTypeGroup"), typeGroup);
+                    Predicate typeGroupPredicate = criteriaBuilder.equal(root.get("relationTypeGroup"), typeGroup.name());
                     predicates.add(typeGroupPredicate);
                 }
                 if (childType != null) {
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/relation/RelationRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/relation/RelationRepository.java
index 2f0cd7a..5f453b4 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/relation/RelationRepository.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/relation/RelationRepository.java
@@ -21,6 +21,7 @@ import org.thingsboard.server.dao.annotation.SqlDao;
 import org.thingsboard.server.dao.model.sql.RelationCompositeKey;
 import org.thingsboard.server.dao.model.sql.RelationEntity;
 
+import javax.transaction.Transactional;
 import java.util.List;
 import java.util.UUID;
 
@@ -48,4 +49,7 @@ public interface RelationRepository
 
     List<RelationEntity> findAllByFromIdAndFromType(UUID fromId,
                                                     String fromType);
+
+    @Transactional
+    List<RelationEntity> deleteByFromIdAndFromType(UUID fromId, String fromType);
 }
diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java
index df37ae7..7df7605 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/sql/timeseries/JpaTimeseriesDao.java
@@ -46,7 +46,8 @@ public class JpaTimeseriesDao extends JpaAbstractDaoListeningExecutorService imp
 
     @Override
     public ListenableFuture<List<TsKvEntry>> findAllAsync(EntityId entityId, List<TsKvQuery> queries) {
-       return null;
+        // TODO - Add implementation
+        return service.submit(() -> null);
     }
 
     private ListenableFuture<List<TsKvEntry>> findAllAsync(EntityId entityId, TsKvQuery query) {
@@ -92,7 +93,7 @@ public class JpaTimeseriesDao extends JpaAbstractDaoListeningExecutorService imp
 
     @Override
     public ListenableFuture<Void> savePartition(EntityId entityId, long tsKvEntryTs, String key, long ttl) {
-        return null;
+        return service.submit(() -> null);
     }
 
     @Override