From 5ede741892fa8c76e447354847f6294f3afcb995 Mon Sep 17 00:00:00 2001 From: Andrii Shvaika Date: Mon, 30 Oct 2023 13:44:17 +0200 Subject: [PATCH] Optimize DAO layer for Widget Bundles --- .../dao/sql/widget/JpaWidgetsBundleDao.java | 37 +++++++------------ .../sql/widget/WidgetsBundleRepository.java | 35 +++--------------- 2 files changed, 20 insertions(+), 52 deletions(-) diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java index 96ad4bd299..85d7c35618 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/JpaWidgetsBundleDao.java @@ -30,6 +30,9 @@ import org.thingsboard.server.dao.sql.JpaAbstractDao; import org.thingsboard.server.dao.util.SqlDao; import org.thingsboard.server.dao.widget.WidgetsBundleDao; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -92,40 +95,28 @@ public class JpaWidgetsBundleDao extends JpaAbstractDao findAllTenantWidgetsBundlesByTenantId(UUID tenantId, boolean fullSearch, PageLink pageLink) { - if (fullSearch) { - return DaoUtil.toPageData( - widgetsBundleRepository - .findAllTenantWidgetsBundlesByTenantIdFullSearch( - tenantId, - NULL_UUID, - pageLink.getTextSearch(), - DaoUtil.toPageable(pageLink))); - } else { - return DaoUtil.toPageData( - widgetsBundleRepository - .findAllTenantWidgetsBundlesByTenantId( - tenantId, - NULL_UUID, - pageLink.getTextSearch(), - DaoUtil.toPageable(pageLink))); - } + return findTenantWidgetsBundlesByTenantIds(Arrays.asList(tenantId, NULL_UUID), fullSearch, pageLink); } @Override public PageData findTenantWidgetsBundlesByTenantId(UUID tenantId, boolean fullSearch, PageLink pageLink) { + return findTenantWidgetsBundlesByTenantIds(Collections.singletonList(tenantId), fullSearch, pageLink); + } + + private PageData findTenantWidgetsBundlesByTenantIds(List tenantIds, boolean fullSearch, PageLink pageLink) { if (fullSearch) { return DaoUtil.toPageData( widgetsBundleRepository - .findTenantWidgetsBundlesByTenantIdFullSearch( - tenantId, - Objects.toString(pageLink.getTextSearch(), ""), + .findAllTenantWidgetsBundlesByTenantIdFullSearch( + tenantIds, + pageLink.getTextSearch(), DaoUtil.toPageable(pageLink))); } else { return DaoUtil.toPageData( widgetsBundleRepository - .findTenantWidgetsBundlesByTenantId( - tenantId, - Objects.toString(pageLink.getTextSearch(), ""), + .findAllTenantWidgetsBundlesByTenantId( + tenantIds, + pageLink.getTextSearch(), DaoUtil.toPageable(pageLink))); } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetsBundleRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetsBundleRepository.java index 13aadf6119..61a447c3ae 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetsBundleRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/widget/WidgetsBundleRepository.java @@ -23,6 +23,7 @@ import org.springframework.data.repository.query.Param; import org.thingsboard.server.dao.ExportableEntityRepository; import org.thingsboard.server.dao.model.sql.WidgetsBundleEntity; +import java.util.List; import java.util.UUID; /** @@ -66,15 +67,14 @@ public interface WidgetsBundleRepository extends JpaRepository findAllTenantWidgetsBundlesByTenantId(@Param("tenantId") UUID tenantId, - @Param("nullTenantId") UUID nullTenantId, + Page findAllTenantWidgetsBundlesByTenantId(@Param("tenantIds") List tenantIds, @Param("textSearch") String textSearch, Pageable pageable); @Query(nativeQuery = true, - value = "SELECT * FROM widgets_bundle wb WHERE wb.tenant_id IN (:tenantId, :nullTenantId) " + + value = "SELECT * FROM widgets_bundle wb WHERE wb.tenant_id IN (:tenantIds) " + "AND (wb.title ILIKE CONCAT('%', :textSearch, '%') " + "OR wb.description ILIKE CONCAT('%', :textSearch, '%') " + "OR wb.id in (SELECT wbw.widgets_bundle_id FROM widgets_bundle_widget wbw, widget_type wtd " + @@ -82,7 +82,7 @@ public interface WidgetsBundleRepository extends JpaRepository findAllTenantWidgetsBundlesByTenantIdFullSearch(@Param("tenantId") UUID tenantId, - @Param("nullTenantId") UUID nullTenantId, - @Param("textSearch") String textSearch, - Pageable pageable); - - @Query(nativeQuery = true, - value = "SELECT * FROM widgets_bundle wb WHERE wb.tenant_id IN (:tenantId) " + - "AND (wb.title ILIKE CONCAT('%', :textSearch, '%') " + - "OR wb.description ILIKE CONCAT('%', :textSearch, '%') " + - "OR wb.id in (SELECT wbw.widgets_bundle_id FROM widgets_bundle_widget wbw, widget_type wtd " + - "WHERE wtd.id = wbw.widget_type_id " + - "AND (wtd.name ILIKE CONCAT('%', :textSearch, '%') " + - "OR wtd.description ILIKE CONCAT('%', :textSearch, '%') " + - "OR lower(wtd.tags\\:\\:text)\\:\\:text[] && string_to_array(lower(:textSearch), ' '))))", - countQuery = "SELECT count(*) FROM widgets_bundle wb WHERE wb.tenant_id IN (:tenantId, :nullTenantId) " + - "AND (wb.title ILIKE CONCAT('%', :textSearch, '%') " + - "OR wb.description ILIKE CONCAT('%', :textSearch, '%') " + - "OR wb.id in (SELECT wbw.widgets_bundle_id FROM widgets_bundle_widget wbw, widget_type wtd " + - "WHERE wtd.id = wbw.widget_type_id " + - "AND (wtd.name ILIKE CONCAT('%', :textSearch, '%') " + - "OR wtd.description ILIKE CONCAT('%', :textSearch, '%') " + - "OR lower(wtd.tags\\:\\:text)\\:\\:text[] && string_to_array(lower(:textSearch), ' '))))" - ) - Page findTenantWidgetsBundlesByTenantIdFullSearch(@Param("tenantId") UUID tenantId, + Page findAllTenantWidgetsBundlesByTenantIdFullSearch(@Param("tenantIds") List tenantIds, @Param("textSearch") String textSearch, Pageable pageable);