Commit 97d68f96eb6ef00dd274a9f80516926599122d3a

Authored by Andrii Shvaika
1 parent befba2bb

Entity Data Query Improvements for SearchText

@@ -130,7 +130,8 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { @@ -130,7 +130,8 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
130 130
131 String entityWhereClause = this.buildEntityWhere(ctx, tenantId, customerId, query.getEntityFilter(), entityFieldsFiltersMapping, entityType); 131 String entityWhereClause = this.buildEntityWhere(ctx, tenantId, customerId, query.getEntityFilter(), entityFieldsFiltersMapping, entityType);
132 String latestJoins = EntityKeyMapping.buildLatestJoins(ctx, query.getEntityFilter(), entityType, allLatestMappings); 132 String latestJoins = EntityKeyMapping.buildLatestJoins(ctx, query.getEntityFilter(), entityType, allLatestMappings);
133 - String whereClause = this.buildWhere(ctx, selectionMapping, latestFiltersMapping, pageLink.getTextSearch()); 133 + String whereClause = this.buildWhere(ctx, latestFiltersMapping);
  134 + String textSearchQuery = this.buildTextSearchQuery(ctx, selectionMapping, pageLink.getTextSearch());
134 String entityFieldsSelection = EntityKeyMapping.buildSelections(entityFieldsSelectionMapping); 135 String entityFieldsSelection = EntityKeyMapping.buildSelections(entityFieldsSelectionMapping);
135 String entityTypeStr; 136 String entityTypeStr;
136 if (query.getEntityFilter().getType().equals(EntityFilterType.RELATIONS_QUERY)) { 137 if (query.getEntityFilter().getType().equals(EntityFilterType.RELATIONS_QUERY)) {
@@ -149,14 +150,14 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { @@ -149,14 +150,14 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
149 topSelection = topSelection + ", " + latestSelection; 150 topSelection = topSelection + ", " + latestSelection;
150 } 151 }
151 152
152 - String fromClause = String.format("from (select %s from (select %s from %s e where %s) entities %s %s) result", 153 + String fromClause = String.format("from (select %s from (select %s from %s e where %s) entities %s %s) result %s",
153 topSelection, 154 topSelection,
154 entityFieldsSelection, 155 entityFieldsSelection,
155 addEntityTableQuery(ctx, query.getEntityFilter(), entityType), 156 addEntityTableQuery(ctx, query.getEntityFilter(), entityType),
156 entityWhereClause, 157 entityWhereClause,
157 latestJoins, 158 latestJoins,
158 - whereClause);  
159 - 159 + whereClause,
  160 + textSearchQuery);
160 161
161 int totalElements = jdbcTemplate.queryForObject(String.format("select count(*) %s", fromClause), ctx, Integer.class); 162 int totalElements = jdbcTemplate.queryForObject(String.format("select count(*) %s", fromClause), ctx, Integer.class);
162 163
@@ -435,19 +436,10 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { @@ -435,19 +436,10 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
435 " END as label"; 436 " END as label";
436 } 437 }
437 438
438 - private String buildWhere(EntityQueryContext ctx, List<EntityKeyMapping> selectionMapping, List<EntityKeyMapping> latestFiltersMapping, String searchText) { 439 + private String buildWhere(EntityQueryContext ctx, List<EntityKeyMapping> latestFiltersMapping) {
439 String latestFilters = EntityKeyMapping.buildQuery(ctx, latestFiltersMapping); 440 String latestFilters = EntityKeyMapping.buildQuery(ctx, latestFiltersMapping);
440 - String textSearchQuery = this.buildTextSearchQuery(ctx, selectionMapping, searchText);  
441 - String query;  
442 - if (!StringUtils.isEmpty(latestFilters) && !StringUtils.isEmpty(textSearchQuery)) {  
443 - query = String.join(" AND ", latestFilters, textSearchQuery);  
444 - } else if (!StringUtils.isEmpty(latestFilters)) {  
445 - query = latestFilters;  
446 - } else {  
447 - query = textSearchQuery;  
448 - }  
449 - if (!StringUtils.isEmpty(query)) {  
450 - return String.format("where %s", query); 441 + if (!StringUtils.isEmpty(latestFilters)) {
  442 + return String.format("where %s", latestFilters);
451 } else { 443 } else {
452 return ""; 444 return "";
453 } 445 }
@@ -462,11 +454,10 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { @@ -462,11 +454,10 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository {
462 return String.format("LOWER(%s) LIKE :%s", mapping.getValueAlias(), paramName); 454 return String.format("LOWER(%s) LIKE :%s", mapping.getValueAlias(), paramName);
463 } 455 }
464 ).collect(Collectors.toList()); 456 ).collect(Collectors.toList());
465 - return String.format("(%s)", String.join(" or ", searchPredicates)); 457 + return String.format(" WHERE %s", String.join(" or ", searchPredicates));
466 } else { 458 } else {
467 - return null; 459 + return "";
468 } 460 }
469 -  
470 } 461 }
471 462
472 private String singleEntityQuery(EntityQueryContext ctx, SingleEntityFilter filter) { 463 private String singleEntityQuery(EntityQueryContext ctx, SingleEntityFilter filter) {