Showing
40 changed files
with
320 additions
and
258 deletions
@@ -47,7 +47,7 @@ public final class AdminSettingsEntity implements BaseEntity<AdminSettings> { | @@ -47,7 +47,7 @@ public final class AdminSettingsEntity implements BaseEntity<AdminSettings> { | ||
47 | private String key; | 47 | private String key; |
48 | 48 | ||
49 | @Type(type = "json") | 49 | @Type(type = "json") |
50 | - @Column(name = ADMIN_SETTINGS_JSON_VALUE_PROPERTY, columnDefinition = "json") | 50 | + @Column(name = ADMIN_SETTINGS_JSON_VALUE_PROPERTY) |
51 | private JsonNode jsonValue; | 51 | private JsonNode jsonValue; |
52 | 52 | ||
53 | public AdminSettingsEntity() { | 53 | public AdminSettingsEntity() { |
@@ -82,7 +82,7 @@ public final class AlarmEntity implements BaseEntity<Alarm> { | @@ -82,7 +82,7 @@ public final class AlarmEntity implements BaseEntity<Alarm> { | ||
82 | private Long clearTs; | 82 | private Long clearTs; |
83 | 83 | ||
84 | @Type(type = "json") | 84 | @Type(type = "json") |
85 | - @Column(name = ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") | 85 | + @Column(name = ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY) |
86 | private JsonNode details; | 86 | private JsonNode details; |
87 | 87 | ||
88 | @Column(name = ALARM_PROPAGATE_PROPERTY) | 88 | @Column(name = ALARM_PROPAGATE_PROPERTY) |
@@ -62,7 +62,7 @@ public final class AssetEntity implements SearchTextEntity<Asset> { | @@ -62,7 +62,7 @@ public final class AssetEntity implements SearchTextEntity<Asset> { | ||
62 | private String searchText; | 62 | private String searchText; |
63 | 63 | ||
64 | @Type(type = "json") | 64 | @Type(type = "json") |
65 | - @Column(name = ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") | 65 | + @Column(name = ModelConstants.ASSET_ADDITIONAL_INFO_PROPERTY) |
66 | private JsonNode additionalInfo; | 66 | private JsonNode additionalInfo; |
67 | 67 | ||
68 | public AssetEntity() { | 68 | public AssetEntity() { |
@@ -58,7 +58,7 @@ public class ComponentDescriptorEntity implements SearchTextEntity<ComponentDesc | @@ -58,7 +58,7 @@ public class ComponentDescriptorEntity implements SearchTextEntity<ComponentDesc | ||
58 | private String clazz; | 58 | private String clazz; |
59 | 59 | ||
60 | @Type(type = "json") | 60 | @Type(type = "json") |
61 | - @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_CONFIGURATION_DESCRIPTOR_PROPERTY, columnDefinition = "json") | 61 | + @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_CONFIGURATION_DESCRIPTOR_PROPERTY) |
62 | private JsonNode configurationDescriptor; | 62 | private JsonNode configurationDescriptor; |
63 | 63 | ||
64 | @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_ACTIONS_PROPERTY) | 64 | @Column(name = ModelConstants.COMPONENT_DESCRIPTOR_ACTIONS_PROPERTY) |
@@ -77,7 +77,7 @@ public final class CustomerEntity implements SearchTextEntity<Customer> { | @@ -77,7 +77,7 @@ public final class CustomerEntity implements SearchTextEntity<Customer> { | ||
77 | private String email; | 77 | private String email; |
78 | 78 | ||
79 | @Type(type = "json") | 79 | @Type(type = "json") |
80 | - @Column(name = ModelConstants.CUSTOMER_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") | 80 | + @Column(name = ModelConstants.CUSTOMER_ADDITIONAL_INFO_PROPERTY) |
81 | private JsonNode additionalInfo; | 81 | private JsonNode additionalInfo; |
82 | 82 | ||
83 | public CustomerEntity() { | 83 | public CustomerEntity() { |
@@ -57,7 +57,7 @@ public final class DashboardEntity implements SearchTextEntity<Dashboard> { | @@ -57,7 +57,7 @@ public final class DashboardEntity implements SearchTextEntity<Dashboard> { | ||
57 | private String searchText; | 57 | private String searchText; |
58 | 58 | ||
59 | @Type(type = "json") | 59 | @Type(type = "json") |
60 | - @Column(name = ModelConstants.DASHBOARD_CONFIGURATION_PROPERTY, columnDefinition = "json") | 60 | + @Column(name = ModelConstants.DASHBOARD_CONFIGURATION_PROPERTY) |
61 | private JsonNode configuration; | 61 | private JsonNode configuration; |
62 | 62 | ||
63 | public DashboardEntity() { | 63 | public DashboardEntity() { |
@@ -60,7 +60,7 @@ public final class DeviceEntity implements SearchTextEntity<Device> { | @@ -60,7 +60,7 @@ public final class DeviceEntity implements SearchTextEntity<Device> { | ||
60 | private String searchText; | 60 | private String searchText; |
61 | 61 | ||
62 | @Type(type = "json") | 62 | @Type(type = "json") |
63 | - @Column(name = ModelConstants.DEVICE_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") | 63 | + @Column(name = ModelConstants.DEVICE_ADDITIONAL_INFO_PROPERTY) |
64 | private JsonNode additionalInfo; | 64 | private JsonNode additionalInfo; |
65 | 65 | ||
66 | public DeviceEntity() { | 66 | public DeviceEntity() { |
@@ -63,7 +63,7 @@ public class EventEntity implements BaseEntity<Event> { | @@ -63,7 +63,7 @@ public class EventEntity implements BaseEntity<Event> { | ||
63 | private String eventUid; | 63 | private String eventUid; |
64 | 64 | ||
65 | @Type(type = "json") | 65 | @Type(type = "json") |
66 | - @Column(name = EVENT_BODY_PROPERTY, columnDefinition = "json") | 66 | + @Column(name = EVENT_BODY_PROPERTY) |
67 | private JsonNode body; | 67 | private JsonNode body; |
68 | 68 | ||
69 | public EventEntity(Event event) { | 69 | public EventEntity(Event event) { |
@@ -63,11 +63,11 @@ public class PluginMetaDataEntity implements SearchTextEntity<PluginMetaData> { | @@ -63,11 +63,11 @@ public class PluginMetaDataEntity implements SearchTextEntity<PluginMetaData> { | ||
63 | private ComponentLifecycleState state; | 63 | private ComponentLifecycleState state; |
64 | 64 | ||
65 | @Type(type = "json") | 65 | @Type(type = "json") |
66 | - @Column(name = ModelConstants.PLUGIN_CONFIGURATION_PROPERTY, columnDefinition = "json") | 66 | + @Column(name = ModelConstants.PLUGIN_CONFIGURATION_PROPERTY) |
67 | private JsonNode configuration; | 67 | private JsonNode configuration; |
68 | 68 | ||
69 | @Type(type = "json") | 69 | @Type(type = "json") |
70 | - @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") | 70 | + @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY) |
71 | private JsonNode additionalInfo; | 71 | private JsonNode additionalInfo; |
72 | 72 | ||
73 | @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) | 73 | @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) |
@@ -62,7 +62,7 @@ public final class RelationEntity implements ToData<EntityRelation> { | @@ -62,7 +62,7 @@ public final class RelationEntity implements ToData<EntityRelation> { | ||
62 | private String relationType; | 62 | private String relationType; |
63 | 63 | ||
64 | @Type(type = "json") | 64 | @Type(type = "json") |
65 | - @Column(name = ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") | 65 | + @Column(name = ADDITIONAL_INFO_PROPERTY) |
66 | private JsonNode additionalInfo; | 66 | private JsonNode additionalInfo; |
67 | 67 | ||
68 | public RelationEntity() { | 68 | public RelationEntity() { |
@@ -64,19 +64,19 @@ public class RuleMetaDataEntity implements SearchTextEntity<RuleMetaData> { | @@ -64,19 +64,19 @@ public class RuleMetaDataEntity implements SearchTextEntity<RuleMetaData> { | ||
64 | private String pluginToken; | 64 | private String pluginToken; |
65 | 65 | ||
66 | @Type(type = "json") | 66 | @Type(type = "json") |
67 | - @Column(name = ModelConstants.RULE_FILTERS, columnDefinition = "json") | 67 | + @Column(name = ModelConstants.RULE_FILTERS) |
68 | private JsonNode filters; | 68 | private JsonNode filters; |
69 | 69 | ||
70 | @Type(type = "json") | 70 | @Type(type = "json") |
71 | - @Column(name = ModelConstants.RULE_PROCESSOR, columnDefinition = "json") | 71 | + @Column(name = ModelConstants.RULE_PROCESSOR) |
72 | private JsonNode processor; | 72 | private JsonNode processor; |
73 | 73 | ||
74 | @Type(type = "json") | 74 | @Type(type = "json") |
75 | - @Column(name = ModelConstants.RULE_ACTION, columnDefinition = "json") | 75 | + @Column(name = ModelConstants.RULE_ACTION) |
76 | private JsonNode action; | 76 | private JsonNode action; |
77 | 77 | ||
78 | @Type(type = "json") | 78 | @Type(type = "json") |
79 | - @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") | 79 | + @Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY) |
80 | private JsonNode additionalInfo; | 80 | private JsonNode additionalInfo; |
81 | 81 | ||
82 | public RuleMetaDataEntity() { | 82 | public RuleMetaDataEntity() { |
@@ -76,7 +76,7 @@ public final class TenantEntity implements SearchTextEntity<Tenant> { | @@ -76,7 +76,7 @@ public final class TenantEntity implements SearchTextEntity<Tenant> { | ||
76 | private String email; | 76 | private String email; |
77 | 77 | ||
78 | @Type(type="json") | 78 | @Type(type="json") |
79 | - @Column(name = ModelConstants.TENANT_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") | 79 | + @Column(name = ModelConstants.TENANT_ADDITIONAL_INFO_PROPERTY) |
80 | private JsonNode additionalInfo; | 80 | private JsonNode additionalInfo; |
81 | 81 | ||
82 | public TenantEntity() { | 82 | public TenantEntity() { |
@@ -70,7 +70,7 @@ public class UserEntity implements SearchTextEntity<User> { | @@ -70,7 +70,7 @@ public class UserEntity implements SearchTextEntity<User> { | ||
70 | private String lastName; | 70 | private String lastName; |
71 | 71 | ||
72 | @Type(type="json") | 72 | @Type(type="json") |
73 | - @Column(name = ModelConstants.USER_ADDITIONAL_INFO_PROPERTY, columnDefinition = "json") | 73 | + @Column(name = ModelConstants.USER_ADDITIONAL_INFO_PROPERTY) |
74 | private JsonNode additionalInfo; | 74 | private JsonNode additionalInfo; |
75 | 75 | ||
76 | public UserEntity() { | 76 | public UserEntity() { |
@@ -56,7 +56,7 @@ public final class WidgetTypeEntity implements BaseEntity<WidgetType> { | @@ -56,7 +56,7 @@ public final class WidgetTypeEntity implements BaseEntity<WidgetType> { | ||
56 | private String name; | 56 | private String name; |
57 | 57 | ||
58 | @Type(type="json") | 58 | @Type(type="json") |
59 | - @Column(name = ModelConstants.WIDGET_TYPE_DESCRIPTOR_PROPERTY, columnDefinition = "json") | 59 | + @Column(name = ModelConstants.WIDGET_TYPE_DESCRIPTOR_PROPERTY) |
60 | private JsonNode descriptor; | 60 | private JsonNode descriptor; |
61 | 61 | ||
62 | public WidgetTypeEntity() { | 62 | public WidgetTypeEntity() { |
@@ -51,9 +51,6 @@ public final class WidgetsBundleEntity implements SearchTextEntity<WidgetsBundle | @@ -51,9 +51,6 @@ public final class WidgetsBundleEntity implements SearchTextEntity<WidgetsBundle | ||
51 | @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) | 51 | @Column(name = ModelConstants.SEARCH_TEXT_PROPERTY) |
52 | private String searchText; | 52 | private String searchText; |
53 | 53 | ||
54 | - @Column(name = ModelConstants.WIDGETS_BUNDLE_IMAGE_PROPERTY) | ||
55 | - private byte[] image; | ||
56 | - | ||
57 | public WidgetsBundleEntity() { | 54 | public WidgetsBundleEntity() { |
58 | super(); | 55 | super(); |
59 | } | 56 | } |
@@ -67,9 +64,6 @@ public final class WidgetsBundleEntity implements SearchTextEntity<WidgetsBundle | @@ -67,9 +64,6 @@ public final class WidgetsBundleEntity implements SearchTextEntity<WidgetsBundle | ||
67 | } | 64 | } |
68 | this.alias = widgetsBundle.getAlias(); | 65 | this.alias = widgetsBundle.getAlias(); |
69 | this.title = widgetsBundle.getTitle(); | 66 | this.title = widgetsBundle.getTitle(); |
70 | - if (widgetsBundle.getImage() != null) { | ||
71 | - this.image = widgetsBundle.getImage(); | ||
72 | - } | ||
73 | } | 67 | } |
74 | 68 | ||
75 | @Override | 69 | @Override |
@@ -101,7 +95,6 @@ public final class WidgetsBundleEntity implements SearchTextEntity<WidgetsBundle | @@ -101,7 +95,6 @@ public final class WidgetsBundleEntity implements SearchTextEntity<WidgetsBundle | ||
101 | } | 95 | } |
102 | widgetsBundle.setAlias(alias); | 96 | widgetsBundle.setAlias(alias); |
103 | widgetsBundle.setTitle(title); | 97 | widgetsBundle.setTitle(title); |
104 | - widgetsBundle.setImage(image); | ||
105 | return widgetsBundle; | 98 | return widgetsBundle; |
106 | } | 99 | } |
107 | } | 100 | } |
@@ -15,12 +15,15 @@ | @@ -15,12 +15,15 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.sql.alarm; | 16 | package org.thingsboard.server.dao.sql.alarm; |
17 | 17 | ||
18 | +import org.springframework.data.domain.Pageable; | ||
18 | import org.springframework.data.jpa.repository.Query; | 19 | import org.springframework.data.jpa.repository.Query; |
19 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.data.repository.query.Param; | 21 | import org.springframework.data.repository.query.Param; |
22 | +import org.thingsboard.server.common.data.EntityType; | ||
21 | import org.thingsboard.server.dao.annotation.SqlDao; | 23 | import org.thingsboard.server.dao.annotation.SqlDao; |
22 | import org.thingsboard.server.dao.model.sql.AlarmEntity; | 24 | import org.thingsboard.server.dao.model.sql.AlarmEntity; |
23 | 25 | ||
26 | +import java.util.List; | ||
24 | import java.util.UUID; | 27 | import java.util.UUID; |
25 | 28 | ||
26 | /** | 29 | /** |
@@ -29,10 +32,11 @@ import java.util.UUID; | @@ -29,10 +32,11 @@ import java.util.UUID; | ||
29 | @SqlDao | 32 | @SqlDao |
30 | public interface AlarmRepository extends CrudRepository<AlarmEntity, UUID> { | 33 | public interface AlarmRepository extends CrudRepository<AlarmEntity, UUID> { |
31 | 34 | ||
32 | - @Query(nativeQuery = true, value = "SELECT * FROM ALARM WHERE TENANT_ID = :tenantId AND ORIGINATOR_ID = :originatorId " + | ||
33 | - "AND ORIGINATOR_TYPE = :entityType AND TYPE = :alarmType ORDER BY TYPE ASC, ID DESC LIMIT 1") | ||
34 | - AlarmEntity findLatestByOriginatorAndType(@Param("tenantId") UUID tenantId, | ||
35 | - @Param("originatorId") UUID originatorId, | ||
36 | - @Param("entityType") int entityType, | ||
37 | - @Param("alarmType") String alarmType); | 35 | + @Query("SELECT a FROM AlarmEntity a WHERE a.tenantId = :tenantId AND a.originatorId = :originatorId " + |
36 | + "AND a.originatorType = :entityType AND a.type = :alarmType ORDER BY a.type ASC, a.id DESC") | ||
37 | + List<AlarmEntity> findLatestByOriginatorAndType(@Param("tenantId") UUID tenantId, | ||
38 | + @Param("originatorId") UUID originatorId, | ||
39 | + @Param("entityType") EntityType entityType, | ||
40 | + @Param("alarmType") String alarmType, | ||
41 | + Pageable pageable); | ||
38 | } | 42 | } |
@@ -21,6 +21,7 @@ import com.google.common.util.concurrent.Futures; | @@ -21,6 +21,7 @@ import com.google.common.util.concurrent.Futures; | ||
21 | import com.google.common.util.concurrent.ListenableFuture; | 21 | import com.google.common.util.concurrent.ListenableFuture; |
22 | import lombok.extern.slf4j.Slf4j; | 22 | import lombok.extern.slf4j.Slf4j; |
23 | import org.springframework.beans.factory.annotation.Autowired; | 23 | import org.springframework.beans.factory.annotation.Autowired; |
24 | +import org.springframework.data.domain.PageRequest; | ||
24 | import org.springframework.data.repository.CrudRepository; | 25 | import org.springframework.data.repository.CrudRepository; |
25 | import org.springframework.stereotype.Component; | 26 | import org.springframework.stereotype.Component; |
26 | import org.springframework.transaction.annotation.Transactional; | 27 | import org.springframework.transaction.annotation.Transactional; |
@@ -74,12 +75,15 @@ public class JpaAlarmDao extends JpaAbstractDao<AlarmEntity, Alarm> implements A | @@ -74,12 +75,15 @@ public class JpaAlarmDao extends JpaAbstractDao<AlarmEntity, Alarm> implements A | ||
74 | @Override | 75 | @Override |
75 | @Transactional(propagation = REQUIRES_NEW) | 76 | @Transactional(propagation = REQUIRES_NEW) |
76 | public ListenableFuture<Alarm> findLatestByOriginatorAndType(TenantId tenantId, EntityId originator, String type) { | 77 | public ListenableFuture<Alarm> findLatestByOriginatorAndType(TenantId tenantId, EntityId originator, String type) { |
77 | - return service.submit(() -> | ||
78 | - DaoUtil.getData(alarmRepository.findLatestByOriginatorAndType( | ||
79 | - tenantId.getId(), | ||
80 | - originator.getId(), | ||
81 | - originator.getEntityType().ordinal(), | ||
82 | - type))); | 78 | + return service.submit(() -> { |
79 | + List<AlarmEntity> latest = alarmRepository.findLatestByOriginatorAndType( | ||
80 | + tenantId.getId(), | ||
81 | + originator.getId(), | ||
82 | + originator.getEntityType(), | ||
83 | + type, | ||
84 | + new PageRequest(0, 1)); | ||
85 | + return latest.isEmpty() ? null : DaoUtil.getData(latest.get(0)); | ||
86 | + }); | ||
83 | } | 87 | } |
84 | 88 | ||
85 | @Override | 89 | @Override |
@@ -15,6 +15,8 @@ | @@ -15,6 +15,8 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.sql.asset; | 16 | package org.thingsboard.server.dao.sql.asset; |
17 | 17 | ||
18 | +import org.springframework.data.domain.Page; | ||
19 | +import org.springframework.data.domain.Pageable; | ||
18 | import org.springframework.data.jpa.repository.Query; | 20 | import org.springframework.data.jpa.repository.Query; |
19 | import org.springframework.data.repository.CrudRepository; | 21 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.data.repository.query.Param; | 22 | import org.springframework.data.repository.query.Param; |
@@ -31,23 +33,23 @@ import java.util.UUID; | @@ -31,23 +33,23 @@ import java.util.UUID; | ||
31 | @SqlDao | 33 | @SqlDao |
32 | public interface AssetRepository extends CrudRepository<AssetEntity, UUID> { | 34 | public interface AssetRepository extends CrudRepository<AssetEntity, UUID> { |
33 | 35 | ||
34 | - @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = :tenantId " + | ||
35 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
36 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
37 | - List<AssetEntity> findByTenantId(@Param("limit") int limit, | ||
38 | - @Param("tenantId") UUID tenantId, | 36 | + @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " + |
37 | + "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
38 | + "AND a.id > :idOffset ORDER BY a.id") | ||
39 | + List<AssetEntity> findByTenantId(@Param("tenantId") UUID tenantId, | ||
39 | @Param("textSearch") String textSearch, | 40 | @Param("textSearch") String textSearch, |
40 | - @Param("idOffset") UUID idOffset); | 41 | + @Param("idOffset") UUID idOffset, |
42 | + Pageable pageable); | ||
41 | 43 | ||
42 | - @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = :tenantId " + | ||
43 | - "AND CUSTOMER_ID = :customerId " + | ||
44 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
45 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
46 | - List<AssetEntity> findByTenantIdAndCustomerId(@Param("limit") int limit, | ||
47 | - @Param("tenantId") UUID tenantId, | 44 | + @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " + |
45 | + "AND a.customerId = :customerId " + | ||
46 | + "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
47 | + "AND a.id > :idOffset ORDER BY a.id") | ||
48 | + List<AssetEntity> findByTenantIdAndCustomerId(@Param("tenantId") UUID tenantId, | ||
48 | @Param("customerId") UUID customerId, | 49 | @Param("customerId") UUID customerId, |
49 | @Param("textSearch") String textSearch, | 50 | @Param("textSearch") String textSearch, |
50 | - @Param("idOffset") UUID idOffset); | 51 | + @Param("idOffset") UUID idOffset, |
52 | + Pageable pageable); | ||
51 | 53 | ||
52 | List<AssetEntity> findByTenantIdAndIdIn(UUID tenantId, List<UUID> assetIds); | 54 | List<AssetEntity> findByTenantIdAndIdIn(UUID tenantId, List<UUID> assetIds); |
53 | 55 | ||
@@ -55,27 +57,27 @@ public interface AssetRepository extends CrudRepository<AssetEntity, UUID> { | @@ -55,27 +57,27 @@ public interface AssetRepository extends CrudRepository<AssetEntity, UUID> { | ||
55 | 57 | ||
56 | AssetEntity findByTenantIdAndName(UUID tenantId, String name); | 58 | AssetEntity findByTenantIdAndName(UUID tenantId, String name); |
57 | 59 | ||
58 | - @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = :tenantId " + | ||
59 | - "AND TYPE = :type " + | ||
60 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
61 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
62 | - List<AssetEntity> findByTenantIdAndType(@Param("limit") int limit, | ||
63 | - @Param("tenantId") UUID tenantId, | 60 | + @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " + |
61 | + "AND a.type = :type " + | ||
62 | + "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
63 | + "AND a.id > :idOffset ORDER BY a.id") | ||
64 | + List<AssetEntity> findByTenantIdAndType(@Param("tenantId") UUID tenantId, | ||
64 | @Param("type") String type, | 65 | @Param("type") String type, |
65 | @Param("textSearch") String textSearch, | 66 | @Param("textSearch") String textSearch, |
66 | - @Param("idOffset") UUID idOffset); | 67 | + @Param("idOffset") UUID idOffset, |
68 | + Pageable pageable); | ||
67 | 69 | ||
68 | - @Query(nativeQuery = true, value = "SELECT * FROM ASSET WHERE TENANT_ID = :tenantId " + | ||
69 | - "AND CUSTOMER_ID = :customerId AND TYPE = :type " + | ||
70 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
71 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
72 | - List<AssetEntity> findByTenantIdAndCustomerIdAndType(@Param("limit") int limit, | ||
73 | - @Param("tenantId") UUID tenantId, | 70 | + @Query("SELECT a FROM AssetEntity a WHERE a.tenantId = :tenantId " + |
71 | + "AND a.customerId = :customerId AND a.type = :type " + | ||
72 | + "AND LOWER(a.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
73 | + "AND a.id > :idOffset ORDER BY a.id") | ||
74 | + List<AssetEntity> findByTenantIdAndCustomerIdAndType(@Param("tenantId") UUID tenantId, | ||
74 | @Param("customerId") UUID customerId, | 75 | @Param("customerId") UUID customerId, |
75 | @Param("type") String type, | 76 | @Param("type") String type, |
76 | @Param("textSearch") String textSearch, | 77 | @Param("textSearch") String textSearch, |
77 | - @Param("idOffset") UUID idOffset); | 78 | + @Param("idOffset") UUID idOffset, |
79 | + Pageable pageable); | ||
78 | 80 | ||
79 | - @Query(value = "SELECT NEW org.thingsboard.server.common.data.asset.TenantAssetType(a.type, a.tenantId) FROM AssetEntity a GROUP BY a.tenantId, a.type") | 81 | + @Query("SELECT NEW org.thingsboard.server.common.data.asset.TenantAssetType(a.type, a.tenantId) FROM AssetEntity a GROUP BY a.tenantId, a.type") |
80 | List<TenantAssetType> findTenantAssetTypes(); | 82 | List<TenantAssetType> findTenantAssetTypes(); |
81 | } | 83 | } |
@@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.asset; | @@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.asset; | ||
17 | 17 | ||
18 | import com.google.common.util.concurrent.ListenableFuture; | 18 | import com.google.common.util.concurrent.ListenableFuture; |
19 | import org.springframework.beans.factory.annotation.Autowired; | 19 | import org.springframework.beans.factory.annotation.Autowired; |
20 | +import org.springframework.data.domain.PageRequest; | ||
20 | import org.springframework.data.repository.CrudRepository; | 21 | import org.springframework.data.repository.CrudRepository; |
21 | import org.springframework.stereotype.Component; | 22 | import org.springframework.stereotype.Component; |
22 | import org.thingsboard.server.common.data.asset.Asset; | 23 | import org.thingsboard.server.common.data.asset.Asset; |
@@ -29,6 +30,7 @@ import org.thingsboard.server.dao.model.sql.AssetEntity; | @@ -29,6 +30,7 @@ import org.thingsboard.server.dao.model.sql.AssetEntity; | ||
29 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; | 30 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; |
30 | 31 | ||
31 | import java.util.List; | 32 | import java.util.List; |
33 | +import java.util.Objects; | ||
32 | import java.util.Optional; | 34 | import java.util.Optional; |
33 | import java.util.UUID; | 35 | import java.util.UUID; |
34 | 36 | ||
@@ -58,10 +60,10 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | @@ -58,10 +60,10 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | ||
58 | public List<Asset> findAssetsByTenantId(UUID tenantId, TextPageLink pageLink) { | 60 | public List<Asset> findAssetsByTenantId(UUID tenantId, TextPageLink pageLink) { |
59 | return DaoUtil.convertDataList(assetRepository | 61 | return DaoUtil.convertDataList(assetRepository |
60 | .findByTenantId( | 62 | .findByTenantId( |
61 | - pageLink.getLimit(), | ||
62 | tenantId, | 63 | tenantId, |
63 | - pageLink.getTextSearch(), | ||
64 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); | 64 | + Objects.toString(pageLink.getTextSearch(), ""), |
65 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
66 | + new PageRequest(0, pageLink.getLimit()))); | ||
65 | } | 67 | } |
66 | 68 | ||
67 | @Override | 69 | @Override |
@@ -74,11 +76,11 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | @@ -74,11 +76,11 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | ||
74 | public List<Asset> findAssetsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { | 76 | public List<Asset> findAssetsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { |
75 | return DaoUtil.convertDataList(assetRepository | 77 | return DaoUtil.convertDataList(assetRepository |
76 | .findByTenantIdAndCustomerId( | 78 | .findByTenantIdAndCustomerId( |
77 | - pageLink.getLimit(), | ||
78 | tenantId, | 79 | tenantId, |
79 | customerId, | 80 | customerId, |
80 | - pageLink.getTextSearch(), | ||
81 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); | 81 | + Objects.toString(pageLink.getTextSearch(), ""), |
82 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
83 | + new PageRequest(0, pageLink.getLimit()))); | ||
82 | } | 84 | } |
83 | 85 | ||
84 | @Override | 86 | @Override |
@@ -97,23 +99,23 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | @@ -97,23 +99,23 @@ public class JpaAssetDao extends JpaAbstractSearchTextDao<AssetEntity, Asset> im | ||
97 | public List<Asset> findAssetsByTenantIdAndType(UUID tenantId, String type, TextPageLink pageLink) { | 99 | public List<Asset> findAssetsByTenantIdAndType(UUID tenantId, String type, TextPageLink pageLink) { |
98 | return DaoUtil.convertDataList(assetRepository | 100 | return DaoUtil.convertDataList(assetRepository |
99 | .findByTenantIdAndType( | 101 | .findByTenantIdAndType( |
100 | - pageLink.getLimit(), | ||
101 | tenantId, | 102 | tenantId, |
102 | type, | 103 | type, |
103 | - pageLink.getTextSearch(), | ||
104 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); | 104 | + Objects.toString(pageLink.getTextSearch(), ""), |
105 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
106 | + new PageRequest(0, pageLink.getLimit()))); | ||
105 | } | 107 | } |
106 | 108 | ||
107 | @Override | 109 | @Override |
108 | public List<Asset> findAssetsByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, TextPageLink pageLink) { | 110 | public List<Asset> findAssetsByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, TextPageLink pageLink) { |
109 | return DaoUtil.convertDataList(assetRepository | 111 | return DaoUtil.convertDataList(assetRepository |
110 | .findByTenantIdAndCustomerIdAndType( | 112 | .findByTenantIdAndCustomerIdAndType( |
111 | - pageLink.getLimit(), | ||
112 | tenantId, | 113 | tenantId, |
113 | customerId, | 114 | customerId, |
114 | type, | 115 | type, |
115 | - pageLink.getTextSearch(), | ||
116 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); | 116 | + Objects.toString(pageLink.getTextSearch(), ""), |
117 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
118 | + new PageRequest(0, pageLink.getLimit()))); | ||
117 | } | 119 | } |
118 | 120 | ||
119 | @Override | 121 | @Override |
@@ -15,6 +15,7 @@ | @@ -15,6 +15,7 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.sql.component; | 16 | package org.thingsboard.server.dao.sql.component; |
17 | 17 | ||
18 | +import org.springframework.data.domain.Pageable; | ||
18 | import org.springframework.data.jpa.repository.Query; | 19 | import org.springframework.data.jpa.repository.Query; |
19 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.data.repository.query.Param; | 21 | import org.springframework.data.repository.query.Param; |
@@ -32,22 +33,22 @@ public interface ComponentDescriptorRepository extends CrudRepository<ComponentD | @@ -32,22 +33,22 @@ public interface ComponentDescriptorRepository extends CrudRepository<ComponentD | ||
32 | 33 | ||
33 | ComponentDescriptorEntity findByClazz(String clazz); | 34 | ComponentDescriptorEntity findByClazz(String clazz); |
34 | 35 | ||
35 | - @Query(nativeQuery = true, value = "SELECT * FROM COMPONENT_DESCRIPTOR WHERE TYPE = :type " + | ||
36 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
37 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
38 | - List<ComponentDescriptorEntity> findByType(@Param("limit") int limit, | ||
39 | - @Param("type") String type, | 36 | + @Query("SELECT cd FROM ComponentDescriptorEntity cd WHERE cd.type = :type " + |
37 | + "AND LOWER(cd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
38 | + "AND cd.id > :idOffset ORDER BY cd.id") | ||
39 | + List<ComponentDescriptorEntity> findByType(@Param("type") String type, | ||
40 | @Param("textSearch") String textSearch, | 40 | @Param("textSearch") String textSearch, |
41 | - @Param("idOffset") UUID idOffset); | 41 | + @Param("idOffset") UUID idOffset, |
42 | + Pageable pageable); | ||
42 | 43 | ||
43 | - @Query(nativeQuery = true, value = "SELECT * FROM COMPONENT_DESCRIPTOR WHERE TYPE = :type " + | ||
44 | - "AND SCOPE = :scope AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
45 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
46 | - List<ComponentDescriptorEntity> findByScopeAndType(@Param("limit") int limit, | ||
47 | - @Param("type") String type, | 44 | + @Query("SELECT cd FROM ComponentDescriptorEntity cd WHERE cd.type = :type " + |
45 | + "AND cd.scope = :scope AND LOWER(cd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
46 | + "AND cd.id > :idOffset ORDER BY cd.id") | ||
47 | + List<ComponentDescriptorEntity> findByScopeAndType(@Param("type") String type, | ||
48 | @Param("scope") String scope, | 48 | @Param("scope") String scope, |
49 | @Param("textSearch") String textSearch, | 49 | @Param("textSearch") String textSearch, |
50 | - @Param("idOffset") UUID idOffset); | 50 | + @Param("idOffset") UUID idOffset, |
51 | + Pageable pageable); | ||
51 | 52 | ||
52 | void deleteByClazz(String clazz); | 53 | void deleteByClazz(String clazz); |
53 | } | 54 | } |
@@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.component; | @@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.component; | ||
17 | 17 | ||
18 | import com.datastax.driver.core.utils.UUIDs; | 18 | import com.datastax.driver.core.utils.UUIDs; |
19 | import org.springframework.beans.factory.annotation.Autowired; | 19 | import org.springframework.beans.factory.annotation.Autowired; |
20 | +import org.springframework.data.domain.PageRequest; | ||
20 | import org.springframework.data.repository.CrudRepository; | 21 | import org.springframework.data.repository.CrudRepository; |
21 | import org.springframework.stereotype.Component; | 22 | import org.springframework.stereotype.Component; |
22 | import org.thingsboard.server.common.data.id.ComponentDescriptorId; | 23 | import org.thingsboard.server.common.data.id.ComponentDescriptorId; |
@@ -31,6 +32,7 @@ import org.thingsboard.server.dao.model.sql.ComponentDescriptorEntity; | @@ -31,6 +32,7 @@ import org.thingsboard.server.dao.model.sql.ComponentDescriptorEntity; | ||
31 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; | 32 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; |
32 | 33 | ||
33 | import java.util.List; | 34 | import java.util.List; |
35 | +import java.util.Objects; | ||
34 | import java.util.Optional; | 36 | import java.util.Optional; |
35 | import java.util.UUID; | 37 | import java.util.UUID; |
36 | 38 | ||
@@ -83,21 +85,21 @@ public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<Comp | @@ -83,21 +85,21 @@ public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<Comp | ||
83 | public List<ComponentDescriptor> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) { | 85 | public List<ComponentDescriptor> findByTypeAndPageLink(ComponentType type, TextPageLink pageLink) { |
84 | return DaoUtil.convertDataList(componentDescriptorRepository | 86 | return DaoUtil.convertDataList(componentDescriptorRepository |
85 | .findByType( | 87 | .findByType( |
86 | - pageLink.getLimit(), | ||
87 | type.toString(), | 88 | type.toString(), |
88 | - pageLink.getTextSearch(), | ||
89 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); | 89 | + Objects.toString(pageLink.getTextSearch(), ""), |
90 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
91 | + new PageRequest(0, pageLink.getLimit()))); | ||
90 | } | 92 | } |
91 | 93 | ||
92 | @Override | 94 | @Override |
93 | public List<ComponentDescriptor> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) { | 95 | public List<ComponentDescriptor> findByScopeAndTypeAndPageLink(ComponentScope scope, ComponentType type, TextPageLink pageLink) { |
94 | return DaoUtil.convertDataList(componentDescriptorRepository | 96 | return DaoUtil.convertDataList(componentDescriptorRepository |
95 | .findByScopeAndType( | 97 | .findByScopeAndType( |
96 | - pageLink.getLimit(), | ||
97 | type.toString(), | 98 | type.toString(), |
98 | scope.toString(), | 99 | scope.toString(), |
99 | - pageLink.getTextSearch(), | ||
100 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); | 100 | + Objects.toString(pageLink.getTextSearch(), ""), |
101 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
102 | + new PageRequest(0, pageLink.getLimit()))); | ||
101 | } | 103 | } |
102 | 104 | ||
103 | @Override | 105 | @Override |
@@ -15,6 +15,7 @@ | @@ -15,6 +15,7 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.sql.customer; | 16 | package org.thingsboard.server.dao.sql.customer; |
17 | 17 | ||
18 | +import org.springframework.data.domain.Pageable; | ||
18 | import org.springframework.data.jpa.repository.Query; | 19 | import org.springframework.data.jpa.repository.Query; |
19 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.data.repository.query.Param; | 21 | import org.springframework.data.repository.query.Param; |
@@ -30,13 +31,13 @@ import java.util.UUID; | @@ -30,13 +31,13 @@ import java.util.UUID; | ||
30 | @SqlDao | 31 | @SqlDao |
31 | public interface CustomerRepository extends CrudRepository<CustomerEntity, UUID> { | 32 | public interface CustomerRepository extends CrudRepository<CustomerEntity, UUID> { |
32 | 33 | ||
33 | - @Query(nativeQuery = true, value = "SELECT * FROM CUSTOMER WHERE TENANT_ID = :tenantId " + | ||
34 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
35 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
36 | - List<CustomerEntity> findByTenantId(@Param("limit") int limit, | ||
37 | - @Param("tenantId") UUID tenantId, | 34 | + @Query("SELECT c FROM CustomerEntity c WHERE c.tenantId = :tenantId " + |
35 | + "AND LOWER(c.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
36 | + "AND c.id > :idOffset ORDER BY c.id") | ||
37 | + List<CustomerEntity> findByTenantId(@Param("tenantId") UUID tenantId, | ||
38 | @Param("textSearch") String textSearch, | 38 | @Param("textSearch") String textSearch, |
39 | - @Param("idOffset") UUID idOffset); | 39 | + @Param("idOffset") UUID idOffset, |
40 | + Pageable pageable); | ||
40 | 41 | ||
41 | CustomerEntity findByTenantIdAndTitle(UUID tenantId, String title); | 42 | CustomerEntity findByTenantIdAndTitle(UUID tenantId, String title); |
42 | 43 |
@@ -16,6 +16,7 @@ | @@ -16,6 +16,7 @@ | ||
16 | package org.thingsboard.server.dao.sql.customer; | 16 | package org.thingsboard.server.dao.sql.customer; |
17 | 17 | ||
18 | import org.springframework.beans.factory.annotation.Autowired; | 18 | import org.springframework.beans.factory.annotation.Autowired; |
19 | +import org.springframework.data.domain.PageRequest; | ||
19 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.stereotype.Component; | 21 | import org.springframework.stereotype.Component; |
21 | import org.thingsboard.server.common.data.Customer; | 22 | import org.thingsboard.server.common.data.Customer; |
@@ -27,6 +28,7 @@ import org.thingsboard.server.dao.model.sql.CustomerEntity; | @@ -27,6 +28,7 @@ import org.thingsboard.server.dao.model.sql.CustomerEntity; | ||
27 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; | 28 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; |
28 | 29 | ||
29 | import java.util.List; | 30 | import java.util.List; |
31 | +import java.util.Objects; | ||
30 | import java.util.Optional; | 32 | import java.util.Optional; |
31 | import java.util.UUID; | 33 | import java.util.UUID; |
32 | 34 | ||
@@ -54,8 +56,11 @@ public class JpaCustomerDao extends JpaAbstractSearchTextDao<CustomerEntity, Cus | @@ -54,8 +56,11 @@ public class JpaCustomerDao extends JpaAbstractSearchTextDao<CustomerEntity, Cus | ||
54 | 56 | ||
55 | @Override | 57 | @Override |
56 | public List<Customer> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink) { | 58 | public List<Customer> findCustomersByTenantId(UUID tenantId, TextPageLink pageLink) { |
57 | - return DaoUtil.convertDataList(customerRepository.findByTenantId(pageLink.getLimit(), tenantId, | ||
58 | - pageLink.getTextSearch(), pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); | 59 | + return DaoUtil.convertDataList(customerRepository.findByTenantId( |
60 | + tenantId, | ||
61 | + Objects.toString(pageLink.getTextSearch(), ""), | ||
62 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
63 | + new PageRequest(0, pageLink.getLimit()))); | ||
59 | } | 64 | } |
60 | 65 | ||
61 | @Override | 66 | @Override |
@@ -15,6 +15,7 @@ | @@ -15,6 +15,7 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.sql.dashboard; | 16 | package org.thingsboard.server.dao.sql.dashboard; |
17 | 17 | ||
18 | +import org.springframework.data.domain.Pageable; | ||
18 | import org.springframework.data.jpa.repository.Query; | 19 | import org.springframework.data.jpa.repository.Query; |
19 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.data.repository.query.Param; | 21 | import org.springframework.data.repository.query.Param; |
@@ -30,20 +31,20 @@ import java.util.UUID; | @@ -30,20 +31,20 @@ import java.util.UUID; | ||
30 | @SqlDao | 31 | @SqlDao |
31 | public interface DashboardInfoRepository extends CrudRepository<DashboardInfoEntity, UUID> { | 32 | public interface DashboardInfoRepository extends CrudRepository<DashboardInfoEntity, UUID> { |
32 | 33 | ||
33 | - @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = :tenantId " + | ||
34 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
35 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
36 | - List<DashboardInfoEntity> findByTenantId(@Param("limit") int limit, | ||
37 | - @Param("tenantId") UUID tenantId, | ||
38 | - @Param("textSearch") String textSearch, | ||
39 | - @Param("idOffset") UUID idOffset); | 34 | + @Query("SELECT di FROM DashboardInfoEntity di WHERE di.tenantId = :tenantId " + |
35 | + "AND LOWER(di.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " + | ||
36 | + "AND di.id > :idOffset ORDER BY di.id") | ||
37 | + List<DashboardInfoEntity> findByTenantId(@Param("tenantId") UUID tenantId, | ||
38 | + @Param("searchText") String searchText, | ||
39 | + @Param("idOffset") UUID idOffset, | ||
40 | + Pageable pageable); | ||
40 | 41 | ||
41 | - @Query(nativeQuery = true, value = "SELECT * FROM DASHBOARD WHERE TENANT_ID = :tenantId " + | ||
42 | - "AND CUSTOMER_ID = :customerId AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
43 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
44 | - List<DashboardInfoEntity> findByTenantIdAndCustomerId(@Param("limit") int limit, | ||
45 | - @Param("tenantId") UUID tenantId, | 42 | + @Query("SELECT di FROM DashboardInfoEntity di WHERE di.tenantId = :tenantId " + |
43 | + "AND di.customerId = :customerId AND LOWER(di.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " + | ||
44 | + "AND di.id > :idOffset ORDER BY di.id") | ||
45 | + List<DashboardInfoEntity> findByTenantIdAndCustomerId(@Param("tenantId") UUID tenantId, | ||
46 | @Param("customerId") UUID customerId, | 46 | @Param("customerId") UUID customerId, |
47 | - @Param("textSearch") String textSearch, | ||
48 | - @Param("idOffset") UUID idOffset); | 47 | + @Param("searchText") String searchText, |
48 | + @Param("idOffset") UUID idOffset, | ||
49 | + Pageable pageable); | ||
49 | } | 50 | } |
@@ -16,6 +16,7 @@ | @@ -16,6 +16,7 @@ | ||
16 | package org.thingsboard.server.dao.sql.dashboard; | 16 | package org.thingsboard.server.dao.sql.dashboard; |
17 | 17 | ||
18 | import org.springframework.beans.factory.annotation.Autowired; | 18 | import org.springframework.beans.factory.annotation.Autowired; |
19 | +import org.springframework.data.domain.PageRequest; | ||
19 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.stereotype.Component; | 21 | import org.springframework.stereotype.Component; |
21 | import org.thingsboard.server.common.data.DashboardInfo; | 22 | import org.thingsboard.server.common.data.DashboardInfo; |
@@ -27,6 +28,7 @@ import org.thingsboard.server.dao.model.sql.DashboardInfoEntity; | @@ -27,6 +28,7 @@ import org.thingsboard.server.dao.model.sql.DashboardInfoEntity; | ||
27 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; | 28 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; |
28 | 29 | ||
29 | import java.util.List; | 30 | import java.util.List; |
31 | +import java.util.Objects; | ||
30 | import java.util.UUID; | 32 | import java.util.UUID; |
31 | 33 | ||
32 | import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; | 34 | import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; |
@@ -55,20 +57,20 @@ public class JpaDashboardInfoDao extends JpaAbstractSearchTextDao<DashboardInfoE | @@ -55,20 +57,20 @@ public class JpaDashboardInfoDao extends JpaAbstractSearchTextDao<DashboardInfoE | ||
55 | public List<DashboardInfo> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink) { | 57 | public List<DashboardInfo> findDashboardsByTenantId(UUID tenantId, TextPageLink pageLink) { |
56 | return DaoUtil.convertDataList(dashboardInfoRepository | 58 | return DaoUtil.convertDataList(dashboardInfoRepository |
57 | .findByTenantId( | 59 | .findByTenantId( |
58 | - pageLink.getLimit(), | ||
59 | tenantId, | 60 | tenantId, |
60 | - pageLink.getTextSearch(), | ||
61 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); | 61 | + Objects.toString(pageLink.getTextSearch(), ""), |
62 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
63 | + new PageRequest(0, pageLink.getLimit()))); | ||
62 | } | 64 | } |
63 | 65 | ||
64 | @Override | 66 | @Override |
65 | public List<DashboardInfo> findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { | 67 | public List<DashboardInfo> findDashboardsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { |
66 | return DaoUtil.convertDataList(dashboardInfoRepository | 68 | return DaoUtil.convertDataList(dashboardInfoRepository |
67 | .findByTenantIdAndCustomerId( | 69 | .findByTenantIdAndCustomerId( |
68 | - pageLink.getLimit(), | ||
69 | tenantId, | 70 | tenantId, |
70 | customerId, | 71 | customerId, |
71 | - pageLink.getTextSearch(), | ||
72 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); | 72 | + Objects.toString(pageLink.getTextSearch(), ""), |
73 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
74 | + new PageRequest(0, pageLink.getLimit()))); | ||
73 | } | 75 | } |
74 | } | 76 | } |
@@ -15,6 +15,7 @@ | @@ -15,6 +15,7 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.sql.device; | 16 | package org.thingsboard.server.dao.sql.device; |
17 | 17 | ||
18 | +import org.springframework.data.domain.Pageable; | ||
18 | import org.springframework.data.jpa.repository.Query; | 19 | import org.springframework.data.jpa.repository.Query; |
19 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.data.repository.query.Param; | 21 | import org.springframework.data.repository.query.Param; |
@@ -32,47 +33,47 @@ import java.util.UUID; | @@ -32,47 +33,47 @@ import java.util.UUID; | ||
32 | public interface DeviceRepository extends CrudRepository<DeviceEntity, UUID> { | 33 | public interface DeviceRepository extends CrudRepository<DeviceEntity, UUID> { |
33 | 34 | ||
34 | 35 | ||
35 | - @Query(nativeQuery = true, value = "SELECT * FROM DEVICE WHERE TENANT_ID = :tenantId " + | ||
36 | - "AND CUSTOMER_ID = :customerId " + | ||
37 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:searchText, '%')) " + | ||
38 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
39 | - List<DeviceEntity> findByTenantIdAndCustomerId(@Param("limit") int limit, | ||
40 | - @Param("tenantId") UUID tenantId, | 36 | + @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " + |
37 | + "AND d.customerId = :customerId " + | ||
38 | + "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " + | ||
39 | + "AND d.id > :idOffset ORDER BY d.id") | ||
40 | + List<DeviceEntity> findByTenantIdAndCustomerId(@Param("tenantId") UUID tenantId, | ||
41 | @Param("customerId") UUID customerId, | 41 | @Param("customerId") UUID customerId, |
42 | @Param("searchText") String searchText, | 42 | @Param("searchText") String searchText, |
43 | - @Param("idOffset") UUID idOffset); | 43 | + @Param("idOffset") UUID idOffset, |
44 | + Pageable pageable); | ||
44 | 45 | ||
45 | - @Query(nativeQuery = true, value = "SELECT * FROM DEVICE WHERE TENANT_ID = :tenantId " + | ||
46 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
47 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
48 | - List<DeviceEntity> findByTenantId(@Param("limit") int limit, | ||
49 | - @Param("tenantId") UUID tenantId, | 46 | + @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " + |
47 | + "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
48 | + "AND d.id > :idOffset ORDER BY d.id") | ||
49 | + List<DeviceEntity> findByTenantId(@Param("tenantId") UUID tenantId, | ||
50 | @Param("textSearch") String textSearch, | 50 | @Param("textSearch") String textSearch, |
51 | - @Param("idOffset") UUID idOffset); | 51 | + @Param("idOffset") UUID idOffset, |
52 | + Pageable pageable); | ||
52 | 53 | ||
53 | - @Query(nativeQuery = true, value = "SELECT * FROM DEVICE WHERE TENANT_ID = :tenantId " + | ||
54 | - "AND TYPE = :type " + | ||
55 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
56 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
57 | - List<DeviceEntity> findByTenantIdAndType(@Param("limit") int limit, | ||
58 | - @Param("tenantId") UUID tenantId, | 54 | + @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " + |
55 | + "AND d.type = :type " + | ||
56 | + "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
57 | + "AND d.id > :idOffset ORDER BY d.id") | ||
58 | + List<DeviceEntity> findByTenantIdAndType(@Param("tenantId") UUID tenantId, | ||
59 | @Param("type") String type, | 59 | @Param("type") String type, |
60 | @Param("textSearch") String textSearch, | 60 | @Param("textSearch") String textSearch, |
61 | - @Param("idOffset") UUID idOffset); | 61 | + @Param("idOffset") UUID idOffset, |
62 | + Pageable pageable); | ||
62 | 63 | ||
63 | - @Query(nativeQuery = true, value = "SELECT * FROM DEVICE WHERE TENANT_ID = :tenantId " + | ||
64 | - "AND CUSTOMER_ID = :customerId " + | ||
65 | - "AND TYPE = :type " + | ||
66 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
67 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
68 | - List<DeviceEntity> findByTenantIdAndCustomerIdAndType(@Param("limit") int limit, | ||
69 | - @Param("tenantId") UUID tenantId, | 64 | + @Query("SELECT d FROM DeviceEntity d WHERE d.tenantId = :tenantId " + |
65 | + "AND d.customerId = :customerId " + | ||
66 | + "AND d.type = :type " + | ||
67 | + "AND LOWER(d.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
68 | + "AND d.id > :idOffset ORDER BY d.id") | ||
69 | + List<DeviceEntity> findByTenantIdAndCustomerIdAndType(@Param("tenantId") UUID tenantId, | ||
70 | @Param("customerId") UUID customerId, | 70 | @Param("customerId") UUID customerId, |
71 | @Param("type") String type, | 71 | @Param("type") String type, |
72 | @Param("textSearch") String textSearch, | 72 | @Param("textSearch") String textSearch, |
73 | - @Param("idOffset") UUID idOffset); | 73 | + @Param("idOffset") UUID idOffset, |
74 | + Pageable pageable); | ||
74 | 75 | ||
75 | - @Query(value = "SELECT DISTINCT NEW org.thingsboard.server.dao.model.sql.TenantDeviceTypeEntity(d.tenantId, d.type) FROM DeviceEntity d") | 76 | + @Query("SELECT DISTINCT NEW org.thingsboard.server.dao.model.sql.TenantDeviceTypeEntity(d.tenantId, d.type) FROM DeviceEntity d") |
76 | List<TenantDeviceTypeEntity> findTenantDeviceTypes(); | 77 | List<TenantDeviceTypeEntity> findTenantDeviceTypes(); |
77 | 78 | ||
78 | DeviceEntity findByTenantIdAndName(UUID tenantId, String name); | 79 | DeviceEntity findByTenantIdAndName(UUID tenantId, String name); |
@@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.device; | @@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.device; | ||
17 | 17 | ||
18 | import com.google.common.util.concurrent.ListenableFuture; | 18 | import com.google.common.util.concurrent.ListenableFuture; |
19 | import org.springframework.beans.factory.annotation.Autowired; | 19 | import org.springframework.beans.factory.annotation.Autowired; |
20 | +import org.springframework.data.domain.PageRequest; | ||
20 | import org.springframework.data.repository.CrudRepository; | 21 | import org.springframework.data.repository.CrudRepository; |
21 | import org.springframework.stereotype.Component; | 22 | import org.springframework.stereotype.Component; |
22 | import org.thingsboard.server.common.data.Device; | 23 | import org.thingsboard.server.common.data.Device; |
@@ -58,11 +59,10 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device> | @@ -58,11 +59,10 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device> | ||
58 | public List<Device> findDevicesByTenantId(UUID tenantId, TextPageLink pageLink) { | 59 | public List<Device> findDevicesByTenantId(UUID tenantId, TextPageLink pageLink) { |
59 | return DaoUtil.convertDataList( | 60 | return DaoUtil.convertDataList( |
60 | deviceRepository.findByTenantId( | 61 | deviceRepository.findByTenantId( |
61 | - pageLink.getLimit(), | ||
62 | tenantId, | 62 | tenantId, |
63 | - pageLink.getTextSearch(), | ||
64 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()) | ||
65 | - ); | 63 | + Objects.toString(pageLink.getTextSearch(), ""), |
64 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
65 | + new PageRequest(0, pageLink.getLimit()))); | ||
66 | } | 66 | } |
67 | 67 | ||
68 | @Override | 68 | @Override |
@@ -74,12 +74,11 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device> | @@ -74,12 +74,11 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device> | ||
74 | public List<Device> findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { | 74 | public List<Device> findDevicesByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) { |
75 | return DaoUtil.convertDataList( | 75 | return DaoUtil.convertDataList( |
76 | deviceRepository.findByTenantIdAndCustomerId( | 76 | deviceRepository.findByTenantIdAndCustomerId( |
77 | - pageLink.getLimit(), | ||
78 | tenantId, | 77 | tenantId, |
79 | customerId, | 78 | customerId, |
80 | - pageLink.getTextSearch(), | ||
81 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()) | ||
82 | - ); | 79 | + Objects.toString(pageLink.getTextSearch(), ""), |
80 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
81 | + new PageRequest(0, pageLink.getLimit()))); | ||
83 | } | 82 | } |
84 | 83 | ||
85 | @Override | 84 | @Override |
@@ -98,25 +97,23 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device> | @@ -98,25 +97,23 @@ public class JpaDeviceDao extends JpaAbstractSearchTextDao<DeviceEntity, Device> | ||
98 | public List<Device> findDevicesByTenantIdAndType(UUID tenantId, String type, TextPageLink pageLink) { | 97 | public List<Device> findDevicesByTenantIdAndType(UUID tenantId, String type, TextPageLink pageLink) { |
99 | return DaoUtil.convertDataList( | 98 | return DaoUtil.convertDataList( |
100 | deviceRepository.findByTenantIdAndType( | 99 | deviceRepository.findByTenantIdAndType( |
101 | - pageLink.getLimit(), | ||
102 | tenantId, | 100 | tenantId, |
103 | type, | 101 | type, |
104 | - pageLink.getTextSearch(), | ||
105 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()) | ||
106 | - ); | 102 | + Objects.toString(pageLink.getTextSearch(), ""), |
103 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
104 | + new PageRequest(0, pageLink.getLimit()))); | ||
107 | } | 105 | } |
108 | 106 | ||
109 | @Override | 107 | @Override |
110 | public List<Device> findDevicesByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, TextPageLink pageLink) { | 108 | public List<Device> findDevicesByTenantIdAndCustomerIdAndType(UUID tenantId, UUID customerId, String type, TextPageLink pageLink) { |
111 | return DaoUtil.convertDataList( | 109 | return DaoUtil.convertDataList( |
112 | deviceRepository.findByTenantIdAndCustomerIdAndType( | 110 | deviceRepository.findByTenantIdAndCustomerIdAndType( |
113 | - pageLink.getLimit(), | ||
114 | tenantId, | 111 | tenantId, |
115 | customerId, | 112 | customerId, |
116 | type, | 113 | type, |
117 | - pageLink.getTextSearch(), | ||
118 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()) | ||
119 | - ); | 114 | + Objects.toString(pageLink.getTextSearch(), ""), |
115 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
116 | + new PageRequest(0, pageLink.getLimit()))); | ||
120 | } | 117 | } |
121 | 118 | ||
122 | @Override | 119 | @Override |
@@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.plugin; | @@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.plugin; | ||
17 | 17 | ||
18 | import lombok.extern.slf4j.Slf4j; | 18 | import lombok.extern.slf4j.Slf4j; |
19 | import org.springframework.beans.factory.annotation.Autowired; | 19 | import org.springframework.beans.factory.annotation.Autowired; |
20 | +import org.springframework.data.domain.PageRequest; | ||
20 | import org.springframework.data.repository.CrudRepository; | 21 | import org.springframework.data.repository.CrudRepository; |
21 | import org.springframework.stereotype.Component; | 22 | import org.springframework.stereotype.Component; |
22 | import org.thingsboard.server.common.data.id.PluginId; | 23 | import org.thingsboard.server.common.data.id.PluginId; |
@@ -31,6 +32,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; | @@ -31,6 +32,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; | ||
31 | 32 | ||
32 | import java.util.Arrays; | 33 | import java.util.Arrays; |
33 | import java.util.List; | 34 | import java.util.List; |
35 | +import java.util.Objects; | ||
34 | import java.util.UUID; | 36 | import java.util.UUID; |
35 | 37 | ||
36 | import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; | 38 | import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; |
@@ -96,10 +98,10 @@ public class JpaBasePluginDao extends JpaAbstractSearchTextDao<PluginMetaDataEnt | @@ -96,10 +98,10 @@ public class JpaBasePluginDao extends JpaAbstractSearchTextDao<PluginMetaDataEnt | ||
96 | log.debug("Try to find plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink); | 98 | log.debug("Try to find plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink); |
97 | List<PluginMetaDataEntity> entities = pluginMetaDataRepository | 99 | List<PluginMetaDataEntity> entities = pluginMetaDataRepository |
98 | .findByTenantIdAndPageLink( | 100 | .findByTenantIdAndPageLink( |
99 | - pageLink.getLimit(), | ||
100 | tenantId.getId(), | 101 | tenantId.getId(), |
101 | - pageLink.getTextSearch(), | ||
102 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()); | 102 | + Objects.toString(pageLink.getTextSearch(), ""), |
103 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
104 | + new PageRequest(0, pageLink.getLimit())); | ||
103 | if (log.isTraceEnabled()) { | 105 | if (log.isTraceEnabled()) { |
104 | log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); | 106 | log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); |
105 | } else { | 107 | } else { |
@@ -113,11 +115,11 @@ public class JpaBasePluginDao extends JpaAbstractSearchTextDao<PluginMetaDataEnt | @@ -113,11 +115,11 @@ public class JpaBasePluginDao extends JpaAbstractSearchTextDao<PluginMetaDataEnt | ||
113 | log.debug("Try to find all tenant plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink); | 115 | log.debug("Try to find all tenant plugins by tenantId [{}] and pageLink [{}]", tenantId, pageLink); |
114 | List<PluginMetaDataEntity> entities = pluginMetaDataRepository | 116 | List<PluginMetaDataEntity> entities = pluginMetaDataRepository |
115 | .findAllTenantPluginsByTenantId( | 117 | .findAllTenantPluginsByTenantId( |
116 | - pageLink.getLimit(), | ||
117 | tenantId, | 118 | tenantId, |
118 | NULL_UUID, | 119 | NULL_UUID, |
119 | - pageLink.getTextSearch(), | ||
120 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()); | 120 | + Objects.toString(pageLink.getTextSearch(), ""), |
121 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
122 | + new PageRequest(0, pageLink.getLimit())); | ||
121 | if (log.isTraceEnabled()) { | 123 | if (log.isTraceEnabled()) { |
122 | log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); | 124 | log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); |
123 | } else { | 125 | } else { |
@@ -15,6 +15,7 @@ | @@ -15,6 +15,7 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.sql.plugin; | 16 | package org.thingsboard.server.dao.sql.plugin; |
17 | 17 | ||
18 | +import org.springframework.data.domain.Pageable; | ||
18 | import org.springframework.data.jpa.repository.Query; | 19 | import org.springframework.data.jpa.repository.Query; |
19 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.data.repository.query.Param; | 21 | import org.springframework.data.repository.query.Param; |
@@ -32,20 +33,20 @@ public interface PluginMetaDataRepository extends CrudRepository<PluginMetaDataE | @@ -32,20 +33,20 @@ public interface PluginMetaDataRepository extends CrudRepository<PluginMetaDataE | ||
32 | 33 | ||
33 | PluginMetaDataEntity findByApiToken(String apiToken); | 34 | PluginMetaDataEntity findByApiToken(String apiToken); |
34 | 35 | ||
35 | - @Query(nativeQuery = true, value = "SELECT * FROM PLUGIN WHERE TENANT_ID = :tenantId " + | ||
36 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
37 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
38 | - List<PluginMetaDataEntity> findByTenantIdAndPageLink(@Param("limit") int limit, | ||
39 | - @Param("tenantId") UUID tenantId, | 36 | + @Query("SELECT pmd FROM PluginMetaDataEntity pmd WHERE pmd.tenantId = :tenantId " + |
37 | + "AND LOWER(pmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
38 | + "AND pmd.id > :idOffset ORDER BY pmd.id") | ||
39 | + List<PluginMetaDataEntity> findByTenantIdAndPageLink(@Param("tenantId") UUID tenantId, | ||
40 | @Param("textSearch") String textSearch, | 40 | @Param("textSearch") String textSearch, |
41 | - @Param("idOffset") UUID idOffset); | 41 | + @Param("idOffset") UUID idOffset, |
42 | + Pageable pageable); | ||
42 | 43 | ||
43 | - @Query(nativeQuery = true, value = "SELECT * FROM PLUGIN WHERE TENANT_ID IN (:tenantId, :nullTenantId) " + | ||
44 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
45 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
46 | - List<PluginMetaDataEntity> findAllTenantPluginsByTenantId(@Param("limit") int limit, | ||
47 | - @Param("tenantId") UUID tenantId, | 44 | + @Query("SELECT pmd FROM PluginMetaDataEntity pmd WHERE pmd.tenantId IN (:tenantId, :nullTenantId) " + |
45 | + "AND LOWER(pmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
46 | + "AND pmd.id > :idOffset ORDER BY pmd.id") | ||
47 | + List<PluginMetaDataEntity> findAllTenantPluginsByTenantId(@Param("tenantId") UUID tenantId, | ||
48 | @Param("nullTenantId") UUID nullTenantId, | 48 | @Param("nullTenantId") UUID nullTenantId, |
49 | @Param("textSearch") String textSearch, | 49 | @Param("textSearch") String textSearch, |
50 | - @Param("idOffset") UUID idOffset); | 50 | + @Param("idOffset") UUID idOffset, |
51 | + Pageable pageable); | ||
51 | } | 52 | } |
@@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.rule; | @@ -17,6 +17,7 @@ package org.thingsboard.server.dao.sql.rule; | ||
17 | 17 | ||
18 | import lombok.extern.slf4j.Slf4j; | 18 | import lombok.extern.slf4j.Slf4j; |
19 | import org.springframework.beans.factory.annotation.Autowired; | 19 | import org.springframework.beans.factory.annotation.Autowired; |
20 | +import org.springframework.data.domain.PageRequest; | ||
20 | import org.springframework.data.repository.CrudRepository; | 21 | import org.springframework.data.repository.CrudRepository; |
21 | import org.springframework.stereotype.Component; | 22 | import org.springframework.stereotype.Component; |
22 | import org.thingsboard.server.common.data.id.RuleId; | 23 | import org.thingsboard.server.common.data.id.RuleId; |
@@ -31,6 +32,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; | @@ -31,6 +32,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; | ||
31 | 32 | ||
32 | import java.util.Arrays; | 33 | import java.util.Arrays; |
33 | import java.util.List; | 34 | import java.util.List; |
35 | +import java.util.Objects; | ||
34 | import java.util.UUID; | 36 | import java.util.UUID; |
35 | 37 | ||
36 | import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; | 38 | import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; |
@@ -73,10 +75,10 @@ public class JpaBaseRuleDao extends JpaAbstractSearchTextDao<RuleMetaDataEntity, | @@ -73,10 +75,10 @@ public class JpaBaseRuleDao extends JpaAbstractSearchTextDao<RuleMetaDataEntity, | ||
73 | List<RuleMetaDataEntity> entities = | 75 | List<RuleMetaDataEntity> entities = |
74 | ruleMetaDataRepository | 76 | ruleMetaDataRepository |
75 | .findByTenantIdAndPageLink( | 77 | .findByTenantIdAndPageLink( |
76 | - pageLink.getLimit(), | ||
77 | tenantId.getId(), | 78 | tenantId.getId(), |
78 | - pageLink.getTextSearch(), | ||
79 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()); | 79 | + Objects.toString(pageLink.getTextSearch(), ""), |
80 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
81 | + new PageRequest(0, pageLink.getLimit())); | ||
80 | if (log.isTraceEnabled()) { | 82 | if (log.isTraceEnabled()) { |
81 | log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); | 83 | log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); |
82 | } else { | 84 | } else { |
@@ -91,11 +93,11 @@ public class JpaBaseRuleDao extends JpaAbstractSearchTextDao<RuleMetaDataEntity, | @@ -91,11 +93,11 @@ public class JpaBaseRuleDao extends JpaAbstractSearchTextDao<RuleMetaDataEntity, | ||
91 | List<RuleMetaDataEntity> entities = | 93 | List<RuleMetaDataEntity> entities = |
92 | ruleMetaDataRepository | 94 | ruleMetaDataRepository |
93 | .findAllTenantRulesByTenantId( | 95 | .findAllTenantRulesByTenantId( |
94 | - pageLink.getLimit(), | ||
95 | tenantId, | 96 | tenantId, |
96 | NULL_UUID, | 97 | NULL_UUID, |
97 | - pageLink.getTextSearch(), | ||
98 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset()); | 98 | + Objects.toString(pageLink.getTextSearch(), ""), |
99 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
100 | + new PageRequest(0, pageLink.getLimit())); | ||
99 | 101 | ||
100 | if (log.isTraceEnabled()) { | 102 | if (log.isTraceEnabled()) { |
101 | log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); | 103 | log.trace("Search result: [{}]", Arrays.toString(entities.toArray())); |
@@ -15,6 +15,7 @@ | @@ -15,6 +15,7 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.sql.rule; | 16 | package org.thingsboard.server.dao.sql.rule; |
17 | 17 | ||
18 | +import org.springframework.data.domain.Pageable; | ||
18 | import org.springframework.data.jpa.repository.Query; | 19 | import org.springframework.data.jpa.repository.Query; |
19 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.data.repository.query.Param; | 21 | import org.springframework.data.repository.query.Param; |
@@ -32,20 +33,20 @@ public interface RuleMetaDataRepository extends CrudRepository<RuleMetaDataEntit | @@ -32,20 +33,20 @@ public interface RuleMetaDataRepository extends CrudRepository<RuleMetaDataEntit | ||
32 | 33 | ||
33 | List<RuleMetaDataEntity> findByPluginToken(String pluginToken); | 34 | List<RuleMetaDataEntity> findByPluginToken(String pluginToken); |
34 | 35 | ||
35 | - @Query(nativeQuery = true, value = "SELECT * FROM RULE WHERE TENANT_ID = :tenantId " + | ||
36 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
37 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
38 | - List<RuleMetaDataEntity> findByTenantIdAndPageLink(@Param("limit") int limit, | ||
39 | - @Param("tenantId") UUID tenantId, | 36 | + @Query("SELECT rmd FROM RuleMetaDataEntity rmd WHERE rmd.tenantId = :tenantId " + |
37 | + "AND LOWER(rmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
38 | + "AND rmd.id > :idOffset ORDER BY rmd.id") | ||
39 | + List<RuleMetaDataEntity> findByTenantIdAndPageLink(@Param("tenantId") UUID tenantId, | ||
40 | @Param("textSearch") String textSearch, | 40 | @Param("textSearch") String textSearch, |
41 | - @Param("idOffset") UUID idOffset); | 41 | + @Param("idOffset") UUID idOffset, |
42 | + Pageable pageable); | ||
42 | 43 | ||
43 | - @Query(nativeQuery = true, value = "SELECT * FROM RULE WHERE TENANT_ID IN (:tenantId, :nullTenantId) " + | ||
44 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
45 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
46 | - List<RuleMetaDataEntity> findAllTenantRulesByTenantId(@Param("limit") int limit, | ||
47 | - @Param("tenantId") UUID tenantId, | 44 | + @Query("SELECT rmd FROM RuleMetaDataEntity rmd WHERE rmd.tenantId IN (:tenantId, :nullTenantId) " + |
45 | + "AND LOWER(rmd.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
46 | + "AND rmd.id > :idOffset ORDER BY rmd.id") | ||
47 | + List<RuleMetaDataEntity> findAllTenantRulesByTenantId(@Param("tenantId") UUID tenantId, | ||
48 | @Param("nullTenantId") UUID nullTenantId, | 48 | @Param("nullTenantId") UUID nullTenantId, |
49 | @Param("textSearch") String textSearch, | 49 | @Param("textSearch") String textSearch, |
50 | - @Param("idOffset") UUID idOffset); | 50 | + @Param("idOffset") UUID idOffset, |
51 | + Pageable pageable); | ||
51 | } | 52 | } |
@@ -16,6 +16,7 @@ | @@ -16,6 +16,7 @@ | ||
16 | package org.thingsboard.server.dao.sql.tenant; | 16 | package org.thingsboard.server.dao.sql.tenant; |
17 | 17 | ||
18 | import org.springframework.beans.factory.annotation.Autowired; | 18 | import org.springframework.beans.factory.annotation.Autowired; |
19 | +import org.springframework.data.domain.PageRequest; | ||
19 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.stereotype.Component; | 21 | import org.springframework.stereotype.Component; |
21 | import org.thingsboard.server.common.data.Tenant; | 22 | import org.thingsboard.server.common.data.Tenant; |
@@ -27,6 +28,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; | @@ -27,6 +28,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; | ||
27 | import org.thingsboard.server.dao.tenant.TenantDao; | 28 | import org.thingsboard.server.dao.tenant.TenantDao; |
28 | 29 | ||
29 | import java.util.List; | 30 | import java.util.List; |
31 | +import java.util.Objects; | ||
30 | import java.util.UUID; | 32 | import java.util.UUID; |
31 | 33 | ||
32 | import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; | 34 | import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; |
@@ -55,9 +57,9 @@ public class JpaTenantDao extends JpaAbstractSearchTextDao<TenantEntity, Tenant> | @@ -55,9 +57,9 @@ public class JpaTenantDao extends JpaAbstractSearchTextDao<TenantEntity, Tenant> | ||
55 | public List<Tenant> findTenantsByRegion(String region, TextPageLink pageLink) { | 57 | public List<Tenant> findTenantsByRegion(String region, TextPageLink pageLink) { |
56 | return DaoUtil.convertDataList(tenantRepository | 58 | return DaoUtil.convertDataList(tenantRepository |
57 | .findByRegionNextPage( | 59 | .findByRegionNextPage( |
58 | - pageLink.getLimit(), | ||
59 | region, | 60 | region, |
60 | - pageLink.getTextSearch(), | ||
61 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); | 61 | + Objects.toString(pageLink.getTextSearch(), ""), |
62 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
63 | + new PageRequest(0, pageLink.getLimit()))); | ||
62 | } | 64 | } |
63 | } | 65 | } |
@@ -15,6 +15,7 @@ | @@ -15,6 +15,7 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.sql.tenant; | 16 | package org.thingsboard.server.dao.sql.tenant; |
17 | 17 | ||
18 | +import org.springframework.data.domain.Pageable; | ||
18 | import org.springframework.data.jpa.repository.Query; | 19 | import org.springframework.data.jpa.repository.Query; |
19 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.data.repository.query.Param; | 21 | import org.springframework.data.repository.query.Param; |
@@ -30,11 +31,11 @@ import java.util.UUID; | @@ -30,11 +31,11 @@ import java.util.UUID; | ||
30 | @SqlDao | 31 | @SqlDao |
31 | public interface TenantRepository extends CrudRepository<TenantEntity, UUID> { | 32 | public interface TenantRepository extends CrudRepository<TenantEntity, UUID> { |
32 | 33 | ||
33 | - @Query(nativeQuery = true, value = "SELECT * FROM TENANT WHERE REGION = :region " + | ||
34 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
35 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
36 | - List<TenantEntity> findByRegionNextPage(@Param("limit") int limit, | ||
37 | - @Param("region") String region, | 34 | + @Query("SELECT t FROM TenantEntity t WHERE t.region = :region " + |
35 | + "AND LOWER(t.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
36 | + "AND t.id > :idOffset ORDER BY t.id") | ||
37 | + List<TenantEntity> findByRegionNextPage(@Param("region") String region, | ||
38 | @Param("textSearch") String textSearch, | 38 | @Param("textSearch") String textSearch, |
39 | - @Param("idOffset") UUID idOffset); | 39 | + @Param("idOffset") UUID idOffset, |
40 | + Pageable pageable); | ||
40 | } | 41 | } |
@@ -15,12 +15,15 @@ | @@ -15,12 +15,15 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.sql.timeseries; | 16 | package org.thingsboard.server.dao.sql.timeseries; |
17 | 17 | ||
18 | +import com.google.common.base.Function; | ||
18 | import com.google.common.collect.Lists; | 19 | import com.google.common.collect.Lists; |
20 | +import com.google.common.util.concurrent.Futures; | ||
19 | import com.google.common.util.concurrent.ListenableFuture; | 21 | import com.google.common.util.concurrent.ListenableFuture; |
20 | import lombok.extern.slf4j.Slf4j; | 22 | import lombok.extern.slf4j.Slf4j; |
21 | import org.springframework.beans.factory.annotation.Autowired; | 23 | import org.springframework.beans.factory.annotation.Autowired; |
22 | import org.springframework.stereotype.Component; | 24 | import org.springframework.stereotype.Component; |
23 | import org.thingsboard.server.common.data.id.EntityId; | 25 | import org.thingsboard.server.common.data.id.EntityId; |
26 | +import org.thingsboard.server.common.data.kv.Aggregation; | ||
24 | import org.thingsboard.server.common.data.kv.TsKvEntry; | 27 | import org.thingsboard.server.common.data.kv.TsKvEntry; |
25 | import org.thingsboard.server.common.data.kv.TsKvQuery; | 28 | import org.thingsboard.server.common.data.kv.TsKvQuery; |
26 | import org.thingsboard.server.dao.DaoUtil; | 29 | import org.thingsboard.server.dao.DaoUtil; |
@@ -31,7 +34,9 @@ import org.thingsboard.server.dao.model.sql.TsKvLatestEntity; | @@ -31,7 +34,9 @@ import org.thingsboard.server.dao.model.sql.TsKvLatestEntity; | ||
31 | import org.thingsboard.server.dao.sql.JpaAbstractDaoListeningExecutorService; | 34 | import org.thingsboard.server.dao.sql.JpaAbstractDaoListeningExecutorService; |
32 | import org.thingsboard.server.dao.timeseries.TimeseriesDao; | 35 | import org.thingsboard.server.dao.timeseries.TimeseriesDao; |
33 | 36 | ||
37 | +import javax.annotation.Nullable; | ||
34 | import java.util.List; | 38 | import java.util.List; |
39 | +import java.util.stream.Collectors; | ||
35 | 40 | ||
36 | @Component | 41 | @Component |
37 | @Slf4j | 42 | @Slf4j |
@@ -46,12 +51,34 @@ public class JpaTimeseriesDao extends JpaAbstractDaoListeningExecutorService imp | @@ -46,12 +51,34 @@ public class JpaTimeseriesDao extends JpaAbstractDaoListeningExecutorService imp | ||
46 | 51 | ||
47 | @Override | 52 | @Override |
48 | public ListenableFuture<List<TsKvEntry>> findAllAsync(EntityId entityId, List<TsKvQuery> queries) { | 53 | public ListenableFuture<List<TsKvEntry>> findAllAsync(EntityId entityId, List<TsKvQuery> queries) { |
49 | - // TODO - Add implementation | ||
50 | - return service.submit(() -> null); | 54 | + List<ListenableFuture<List<TsKvEntry>>> futures = queries |
55 | + .stream() | ||
56 | + .map(query -> findAllAsync(entityId, query)) | ||
57 | + .collect(Collectors.toList()); | ||
58 | + return Futures.transform(Futures.allAsList(futures), new Function<List<List<TsKvEntry>>, List<TsKvEntry>>() { | ||
59 | + @Nullable | ||
60 | + @Override | ||
61 | + public List<TsKvEntry> apply(@Nullable List<List<TsKvEntry>> results) { | ||
62 | + if (results == null || results.isEmpty()) { | ||
63 | + return null; | ||
64 | + } | ||
65 | + return results.stream() | ||
66 | + .flatMap(List::stream) | ||
67 | + .collect(Collectors.toList()); | ||
68 | + } | ||
69 | + }, service); | ||
51 | } | 70 | } |
52 | 71 | ||
53 | private ListenableFuture<List<TsKvEntry>> findAllAsync(EntityId entityId, TsKvQuery query) { | 72 | private ListenableFuture<List<TsKvEntry>> findAllAsync(EntityId entityId, TsKvQuery query) { |
54 | - return null; | 73 | + if (query.getAggregation() == Aggregation.NONE) { |
74 | + return findAllAsyncWithLimit(entityId, query); | ||
75 | + } else { | ||
76 | + return service.submit(() -> null); | ||
77 | + } | ||
78 | + } | ||
79 | + | ||
80 | + private ListenableFuture<List<TsKvEntry>> findAllAsyncWithLimit(EntityId entityId, TsKvQuery query) { | ||
81 | + return service.submit(() -> null); | ||
55 | } | 82 | } |
56 | 83 | ||
57 | @Override | 84 | @Override |
@@ -16,6 +16,7 @@ | @@ -16,6 +16,7 @@ | ||
16 | package org.thingsboard.server.dao.sql.user; | 16 | package org.thingsboard.server.dao.sql.user; |
17 | 17 | ||
18 | import org.springframework.beans.factory.annotation.Autowired; | 18 | import org.springframework.beans.factory.annotation.Autowired; |
19 | +import org.springframework.data.domain.PageRequest; | ||
19 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.stereotype.Component; | 21 | import org.springframework.stereotype.Component; |
21 | import org.thingsboard.server.common.data.User; | 22 | import org.thingsboard.server.common.data.User; |
@@ -24,11 +25,11 @@ import org.thingsboard.server.common.data.security.Authority; | @@ -24,11 +25,11 @@ import org.thingsboard.server.common.data.security.Authority; | ||
24 | import org.thingsboard.server.dao.DaoUtil; | 25 | import org.thingsboard.server.dao.DaoUtil; |
25 | import org.thingsboard.server.dao.annotation.SqlDao; | 26 | import org.thingsboard.server.dao.annotation.SqlDao; |
26 | import org.thingsboard.server.dao.model.sql.UserEntity; | 27 | import org.thingsboard.server.dao.model.sql.UserEntity; |
27 | -import org.thingsboard.server.dao.sql.JpaAbstractDao; | ||
28 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; | 28 | import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; |
29 | import org.thingsboard.server.dao.user.UserDao; | 29 | import org.thingsboard.server.dao.user.UserDao; |
30 | 30 | ||
31 | import java.util.List; | 31 | import java.util.List; |
32 | +import java.util.Objects; | ||
32 | import java.util.UUID; | 33 | import java.util.UUID; |
33 | 34 | ||
34 | import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; | 35 | import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; |
@@ -66,9 +67,9 @@ public class JpaUserDao extends JpaAbstractSearchTextDao<UserEntity, User> imple | @@ -66,9 +67,9 @@ public class JpaUserDao extends JpaAbstractSearchTextDao<UserEntity, User> imple | ||
66 | tenantId, | 67 | tenantId, |
67 | NULL_UUID, | 68 | NULL_UUID, |
68 | pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | 69 | pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), |
69 | - pageLink.getTextSearch(), | ||
70 | - Authority.TENANT_ADMIN.name(), | ||
71 | - pageLink.getLimit())); | 70 | + Objects.toString(pageLink.getTextSearch(), ""), |
71 | + Authority.TENANT_ADMIN, | ||
72 | + new PageRequest(0, pageLink.getLimit()))); | ||
72 | } | 73 | } |
73 | 74 | ||
74 | @Override | 75 | @Override |
@@ -79,9 +80,9 @@ public class JpaUserDao extends JpaAbstractSearchTextDao<UserEntity, User> imple | @@ -79,9 +80,9 @@ public class JpaUserDao extends JpaAbstractSearchTextDao<UserEntity, User> imple | ||
79 | tenantId, | 80 | tenantId, |
80 | customerId, | 81 | customerId, |
81 | pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | 82 | pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), |
82 | - pageLink.getTextSearch(), | ||
83 | - Authority.CUSTOMER_USER.name(), | ||
84 | - pageLink.getLimit())); | 83 | + Objects.toString(pageLink.getTextSearch(), ""), |
84 | + Authority.CUSTOMER_USER, | ||
85 | + new PageRequest(0, pageLink.getLimit()))); | ||
85 | 86 | ||
86 | } | 87 | } |
87 | } | 88 | } |
@@ -15,9 +15,11 @@ | @@ -15,9 +15,11 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.sql.user; | 16 | package org.thingsboard.server.dao.sql.user; |
17 | 17 | ||
18 | +import org.springframework.data.domain.Pageable; | ||
18 | import org.springframework.data.jpa.repository.Query; | 19 | import org.springframework.data.jpa.repository.Query; |
19 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.data.repository.query.Param; | 21 | import org.springframework.data.repository.query.Param; |
22 | +import org.thingsboard.server.common.data.security.Authority; | ||
21 | import org.thingsboard.server.dao.annotation.SqlDao; | 23 | import org.thingsboard.server.dao.annotation.SqlDao; |
22 | import org.thingsboard.server.dao.model.sql.UserEntity; | 24 | import org.thingsboard.server.dao.model.sql.UserEntity; |
23 | 25 | ||
@@ -32,15 +34,15 @@ public interface UserRepository extends CrudRepository<UserEntity, UUID> { | @@ -32,15 +34,15 @@ public interface UserRepository extends CrudRepository<UserEntity, UUID> { | ||
32 | 34 | ||
33 | UserEntity findByEmail(String email); | 35 | UserEntity findByEmail(String email); |
34 | 36 | ||
35 | - @Query(nativeQuery = true, value = "SELECT * FROM TB_USER WHERE TENANT_ID = :tenantId " + | ||
36 | - "AND CUSTOMER_ID = :customerId AND AUTHORITY = :authority " + | ||
37 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:searchText, '%'))" + | ||
38 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | 37 | + @Query("SELECT u FROM UserEntity u WHERE u.tenantId = :tenantId " + |
38 | + "AND u.customerId = :customerId AND u.authority = :authority " + | ||
39 | + "AND LOWER(u.searchText) LIKE LOWER(CONCAT(:searchText, '%'))" + | ||
40 | + "AND u.id > :idOffset ORDER BY u.id") | ||
39 | List<UserEntity> findUsersByAuthority(@Param("tenantId") UUID tenantId, | 41 | List<UserEntity> findUsersByAuthority(@Param("tenantId") UUID tenantId, |
40 | @Param("customerId") UUID customerId, | 42 | @Param("customerId") UUID customerId, |
41 | @Param("idOffset") UUID idOffset, | 43 | @Param("idOffset") UUID idOffset, |
42 | @Param("searchText") String searchText, | 44 | @Param("searchText") String searchText, |
43 | - @Param("authority") String authority, | ||
44 | - @Param("limit") int limit); | 45 | + @Param("authority") Authority authority, |
46 | + Pageable pageable); | ||
45 | 47 | ||
46 | } | 48 | } |
@@ -16,6 +16,7 @@ | @@ -16,6 +16,7 @@ | ||
16 | package org.thingsboard.server.dao.sql.widget; | 16 | package org.thingsboard.server.dao.sql.widget; |
17 | 17 | ||
18 | import org.springframework.beans.factory.annotation.Autowired; | 18 | import org.springframework.beans.factory.annotation.Autowired; |
19 | +import org.springframework.data.domain.PageRequest; | ||
19 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.stereotype.Component; | 21 | import org.springframework.stereotype.Component; |
21 | import org.thingsboard.server.common.data.page.TextPageLink; | 22 | import org.thingsboard.server.common.data.page.TextPageLink; |
@@ -27,6 +28,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; | @@ -27,6 +28,7 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao; | ||
27 | import org.thingsboard.server.dao.widget.WidgetsBundleDao; | 28 | import org.thingsboard.server.dao.widget.WidgetsBundleDao; |
28 | 29 | ||
29 | import java.util.List; | 30 | import java.util.List; |
31 | +import java.util.Objects; | ||
30 | import java.util.UUID; | 32 | import java.util.UUID; |
31 | 33 | ||
32 | import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; | 34 | import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; |
@@ -61,10 +63,10 @@ public class JpaWidgetsBundleDao extends JpaAbstractSearchTextDao<WidgetsBundleE | @@ -61,10 +63,10 @@ public class JpaWidgetsBundleDao extends JpaAbstractSearchTextDao<WidgetsBundleE | ||
61 | return DaoUtil.convertDataList( | 63 | return DaoUtil.convertDataList( |
62 | widgetsBundleRepository | 64 | widgetsBundleRepository |
63 | .findSystemWidgetsBundles( | 65 | .findSystemWidgetsBundles( |
64 | - pageLink.getLimit(), | ||
65 | NULL_UUID, | 66 | NULL_UUID, |
66 | - pageLink.getTextSearch(), | ||
67 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); | 67 | + Objects.toString(pageLink.getTextSearch(), ""), |
68 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
69 | + new PageRequest(0, pageLink.getLimit()))); | ||
68 | } | 70 | } |
69 | 71 | ||
70 | @Override | 72 | @Override |
@@ -72,10 +74,10 @@ public class JpaWidgetsBundleDao extends JpaAbstractSearchTextDao<WidgetsBundleE | @@ -72,10 +74,10 @@ public class JpaWidgetsBundleDao extends JpaAbstractSearchTextDao<WidgetsBundleE | ||
72 | return DaoUtil.convertDataList( | 74 | return DaoUtil.convertDataList( |
73 | widgetsBundleRepository | 75 | widgetsBundleRepository |
74 | .findTenantWidgetsBundlesByTenantId( | 76 | .findTenantWidgetsBundlesByTenantId( |
75 | - pageLink.getLimit(), | ||
76 | tenantId, | 77 | tenantId, |
77 | - pageLink.getTextSearch(), | ||
78 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); | 78 | + Objects.toString(pageLink.getTextSearch(), ""), |
79 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
80 | + new PageRequest(0, pageLink.getLimit()))); | ||
79 | } | 81 | } |
80 | 82 | ||
81 | @Override | 83 | @Override |
@@ -83,10 +85,10 @@ public class JpaWidgetsBundleDao extends JpaAbstractSearchTextDao<WidgetsBundleE | @@ -83,10 +85,10 @@ public class JpaWidgetsBundleDao extends JpaAbstractSearchTextDao<WidgetsBundleE | ||
83 | return DaoUtil.convertDataList( | 85 | return DaoUtil.convertDataList( |
84 | widgetsBundleRepository | 86 | widgetsBundleRepository |
85 | .findAllTenantWidgetsBundlesByTenantId( | 87 | .findAllTenantWidgetsBundlesByTenantId( |
86 | - pageLink.getLimit(), | ||
87 | tenantId, | 88 | tenantId, |
88 | NULL_UUID, | 89 | NULL_UUID, |
89 | - pageLink.getTextSearch(), | ||
90 | - pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset())); | 90 | + Objects.toString(pageLink.getTextSearch(), ""), |
91 | + pageLink.getIdOffset() == null ? NULL_UUID : pageLink.getIdOffset(), | ||
92 | + new PageRequest(0, pageLink.getLimit()))); | ||
91 | } | 93 | } |
92 | } | 94 | } |
@@ -15,6 +15,7 @@ | @@ -15,6 +15,7 @@ | ||
15 | */ | 15 | */ |
16 | package org.thingsboard.server.dao.sql.widget; | 16 | package org.thingsboard.server.dao.sql.widget; |
17 | 17 | ||
18 | +import org.springframework.data.domain.Pageable; | ||
18 | import org.springframework.data.jpa.repository.Query; | 19 | import org.springframework.data.jpa.repository.Query; |
19 | import org.springframework.data.repository.CrudRepository; | 20 | import org.springframework.data.repository.CrudRepository; |
20 | import org.springframework.data.repository.query.Param; | 21 | import org.springframework.data.repository.query.Param; |
@@ -32,28 +33,28 @@ public interface WidgetsBundleRepository extends CrudRepository<WidgetsBundleEnt | @@ -32,28 +33,28 @@ public interface WidgetsBundleRepository extends CrudRepository<WidgetsBundleEnt | ||
32 | 33 | ||
33 | WidgetsBundleEntity findWidgetsBundleByTenantIdAndAlias(UUID tenantId, String alias); | 34 | WidgetsBundleEntity findWidgetsBundleByTenantIdAndAlias(UUID tenantId, String alias); |
34 | 35 | ||
35 | - @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE TENANT_ID = :systemTenantId " + | ||
36 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:searchText, '%')) " + | ||
37 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
38 | - List<WidgetsBundleEntity> findSystemWidgetsBundles(@Param("limit") int limit, | ||
39 | - @Param("systemTenantId") UUID systemTenantId, | 36 | + @Query("SELECT wb FROM WidgetsBundleEntity wb WHERE wb.tenantId = :systemTenantId " + |
37 | + "AND LOWER(wb.searchText) LIKE LOWER(CONCAT(:searchText, '%')) " + | ||
38 | + "AND wb.id > :idOffset ORDER BY wb.id") | ||
39 | + List<WidgetsBundleEntity> findSystemWidgetsBundles(@Param("systemTenantId") UUID systemTenantId, | ||
40 | @Param("searchText") String searchText, | 40 | @Param("searchText") String searchText, |
41 | - @Param("idOffset") UUID idOffset); | 41 | + @Param("idOffset") UUID idOffset, |
42 | + Pageable pageable); | ||
42 | 43 | ||
43 | - @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE TENANT_ID = :tenantId " + | ||
44 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
45 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
46 | - List<WidgetsBundleEntity> findTenantWidgetsBundlesByTenantId(@Param("limit") int limit, | ||
47 | - @Param("tenantId") UUID tenantId, | 44 | + @Query("SELECT wb FROM WidgetsBundleEntity wb WHERE wb.tenantId = :tenantId " + |
45 | + "AND LOWER(wb.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
46 | + "AND wb.id > :idOffset ORDER BY wb.id") | ||
47 | + List<WidgetsBundleEntity> findTenantWidgetsBundlesByTenantId(@Param("tenantId") UUID tenantId, | ||
48 | @Param("textSearch") String textSearch, | 48 | @Param("textSearch") String textSearch, |
49 | - @Param("idOffset") UUID idOffset); | 49 | + @Param("idOffset") UUID idOffset, |
50 | + Pageable pageable); | ||
50 | 51 | ||
51 | - @Query(nativeQuery = true, value = "SELECT * FROM WIDGETS_BUNDLE WHERE TENANT_ID IN (:tenantId, :nullTenantId) " + | ||
52 | - "AND LOWER(SEARCH_TEXT) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
53 | - "AND ID > :idOffset ORDER BY ID LIMIT :limit") | ||
54 | - List<WidgetsBundleEntity> findAllTenantWidgetsBundlesByTenantId(@Param("limit") int limit, | ||
55 | - @Param("tenantId") UUID tenantId, | 52 | + @Query("SELECT wb FROM WidgetsBundleEntity wb WHERE wb.tenantId IN (:tenantId, :nullTenantId) " + |
53 | + "AND LOWER(wb.searchText) LIKE LOWER(CONCAT(:textSearch, '%')) " + | ||
54 | + "AND wb.id > :idOffset ORDER BY wb.id") | ||
55 | + List<WidgetsBundleEntity> findAllTenantWidgetsBundlesByTenantId(@Param("tenantId") UUID tenantId, | ||
56 | @Param("nullTenantId") UUID nullTenantId, | 56 | @Param("nullTenantId") UUID nullTenantId, |
57 | @Param("textSearch") String textSearch, | 57 | @Param("textSearch") String textSearch, |
58 | - @Param("idOffset") UUID idOffset); | 58 | + @Param("idOffset") UUID idOffset, |
59 | + Pageable pageable); | ||
59 | } | 60 | } |
@@ -18,6 +18,7 @@ package org.thingsboard.server.dao.sql.alarm; | @@ -18,6 +18,7 @@ package org.thingsboard.server.dao.sql.alarm; | ||
18 | import com.google.common.util.concurrent.ListenableFuture; | 18 | import com.google.common.util.concurrent.ListenableFuture; |
19 | import org.junit.Test; | 19 | import org.junit.Test; |
20 | import org.springframework.beans.factory.annotation.Autowired; | 20 | import org.springframework.beans.factory.annotation.Autowired; |
21 | +import org.springframework.data.domain.PageRequest; | ||
21 | import org.thingsboard.server.common.data.EntityType; | 22 | import org.thingsboard.server.common.data.EntityType; |
22 | import org.thingsboard.server.common.data.alarm.Alarm; | 23 | import org.thingsboard.server.common.data.alarm.Alarm; |
23 | import org.thingsboard.server.common.data.alarm.AlarmId; | 24 | import org.thingsboard.server.common.data.alarm.AlarmId; |
@@ -59,7 +60,7 @@ public class JpaAlarmDaoTest extends AbstractJpaDaoTest { | @@ -59,7 +60,7 @@ public class JpaAlarmDaoTest extends AbstractJpaDaoTest { | ||
59 | saveAlarm(alarm3Id, tenantId, originator2Id, "TEST_ALARM"); | 60 | saveAlarm(alarm3Id, tenantId, originator2Id, "TEST_ALARM"); |
60 | assertEquals(3, alarmDao.find().size()); | 61 | assertEquals(3, alarmDao.find().size()); |
61 | AlarmEntity alarmEntity = alarmRepository.findLatestByOriginatorAndType( | 62 | AlarmEntity alarmEntity = alarmRepository.findLatestByOriginatorAndType( |
62 | - tenantId, originator1Id, EntityType.DEVICE.ordinal(), "TEST_ALARM"); | 63 | + tenantId, originator1Id, EntityType.DEVICE, "TEST_ALARM", new PageRequest(0, 1)).get(0); |
63 | assertNotNull(alarmEntity); | 64 | assertNotNull(alarmEntity); |
64 | ListenableFuture<Alarm> future = alarmDao | 65 | ListenableFuture<Alarm> future = alarmDao |
65 | .findLatestByOriginatorAndType(new TenantId(tenantId), new DeviceId(originator1Id), "TEST_ALARM"); | 66 | .findLatestByOriginatorAndType(new TenantId(tenantId), new DeviceId(originator1Id), "TEST_ALARM"); |
@@ -7,4 +7,8 @@ spring.jpa.hibernate.ddl-auto=validate | @@ -7,4 +7,8 @@ spring.jpa.hibernate.ddl-auto=validate | ||
7 | 7 | ||
8 | spring.datasource.url=jdbc:postgresql://localhost:5432/thingsboard | 8 | spring.datasource.url=jdbc:postgresql://localhost:5432/thingsboard |
9 | spring.datasource.username=postgres | 9 | spring.datasource.username=postgres |
10 | -spring.datasource.password=postgres | ||
10 | +spring.datasource.password=postgres | ||
11 | + | ||
12 | +#spring.datasource.url=jdbc:h2:mem:test;MODE=PostgreSQL | ||
13 | +#spring.datasource.schema=classpath:postgres/schema.sql | ||
14 | +#spring.datasource.data=classpath:postgres/system-data.sql;classpath:system-test.sql |