From 97d68f96eb6ef00dd274a9f80516926599122d3a Mon Sep 17 00:00:00 2001 From: Andrii Shvaika Date: Wed, 24 Jun 2020 12:04:30 +0300 Subject: [PATCH] Entity Data Query Improvements for SearchText --- .../query/DefaultEntityQueryRepository.java | 29 +++++++------------ 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/query/DefaultEntityQueryRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/query/DefaultEntityQueryRepository.java index 86f5e183e8..2b351baa79 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/query/DefaultEntityQueryRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/query/DefaultEntityQueryRepository.java @@ -130,7 +130,8 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { String entityWhereClause = this.buildEntityWhere(ctx, tenantId, customerId, query.getEntityFilter(), entityFieldsFiltersMapping, entityType); String latestJoins = EntityKeyMapping.buildLatestJoins(ctx, query.getEntityFilter(), entityType, allLatestMappings); - String whereClause = this.buildWhere(ctx, selectionMapping, latestFiltersMapping, pageLink.getTextSearch()); + String whereClause = this.buildWhere(ctx, latestFiltersMapping); + String textSearchQuery = this.buildTextSearchQuery(ctx, selectionMapping, pageLink.getTextSearch()); String entityFieldsSelection = EntityKeyMapping.buildSelections(entityFieldsSelectionMapping); String entityTypeStr; if (query.getEntityFilter().getType().equals(EntityFilterType.RELATIONS_QUERY)) { @@ -149,14 +150,14 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { topSelection = topSelection + ", " + latestSelection; } - String fromClause = String.format("from (select %s from (select %s from %s e where %s) entities %s %s) result", + String fromClause = String.format("from (select %s from (select %s from %s e where %s) entities %s %s) result %s", topSelection, entityFieldsSelection, addEntityTableQuery(ctx, query.getEntityFilter(), entityType), entityWhereClause, latestJoins, - whereClause); - + whereClause, + textSearchQuery); int totalElements = jdbcTemplate.queryForObject(String.format("select count(*) %s", fromClause), ctx, Integer.class); @@ -435,19 +436,10 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { " END as label"; } - private String buildWhere(EntityQueryContext ctx, List selectionMapping, List latestFiltersMapping, String searchText) { + private String buildWhere(EntityQueryContext ctx, List latestFiltersMapping) { String latestFilters = EntityKeyMapping.buildQuery(ctx, latestFiltersMapping); - String textSearchQuery = this.buildTextSearchQuery(ctx, selectionMapping, searchText); - String query; - if (!StringUtils.isEmpty(latestFilters) && !StringUtils.isEmpty(textSearchQuery)) { - query = String.join(" AND ", latestFilters, textSearchQuery); - } else if (!StringUtils.isEmpty(latestFilters)) { - query = latestFilters; - } else { - query = textSearchQuery; - } - if (!StringUtils.isEmpty(query)) { - return String.format("where %s", query); + if (!StringUtils.isEmpty(latestFilters)) { + return String.format("where %s", latestFilters); } else { return ""; } @@ -462,11 +454,10 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { return String.format("LOWER(%s) LIKE :%s", mapping.getValueAlias(), paramName); } ).collect(Collectors.toList()); - return String.format("(%s)", String.join(" or ", searchPredicates)); + return String.format(" WHERE %s", String.join(" or ", searchPredicates)); } else { - return null; + return ""; } - } private String singleEntityQuery(EntityQueryContext ctx, SingleEntityFilter filter) {