|
|
@ -225,9 +225,9 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { |
|
|
" INNER JOIN related_entities re ON" + |
|
|
" INNER JOIN related_entities re ON" + |
|
|
" r.$in_id = re.$out_id and r.$in_type = re.$out_type and" + |
|
|
" r.$in_id = re.$out_id and r.$in_type = re.$out_type and" + |
|
|
" relation_type_group = 'COMMON' %s)" + |
|
|
" relation_type_group = 'COMMON' %s)" + |
|
|
" SELECT re.$out_id entity_id, re.$out_type entity_type, re.lvl lvl" + |
|
|
" SELECT re.$out_id entity_id, re.$out_type entity_type, max(re.lvl) lvl" + |
|
|
" from related_entities re" + |
|
|
" from related_entities re" + |
|
|
" %s ) entity"; |
|
|
" %s GROUP BY entity_id, entity_type) entity"; |
|
|
private static final String HIERARCHICAL_TO_QUERY_TEMPLATE = HIERARCHICAL_QUERY_TEMPLATE.replace("$in", "to").replace("$out", "from"); |
|
|
private static final String HIERARCHICAL_TO_QUERY_TEMPLATE = HIERARCHICAL_QUERY_TEMPLATE.replace("$in", "to").replace("$out", "from"); |
|
|
private static final String HIERARCHICAL_FROM_QUERY_TEMPLATE = HIERARCHICAL_QUERY_TEMPLATE.replace("$in", "from").replace("$out", "to"); |
|
|
private static final String HIERARCHICAL_FROM_QUERY_TEMPLATE = HIERARCHICAL_QUERY_TEMPLATE.replace("$in", "from").replace("$out", "to"); |
|
|
|
|
|
|
|
|
@ -457,8 +457,6 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { |
|
|
|
|
|
|
|
|
private String entitySearchQuery(QueryContext ctx, EntitySearchQueryFilter entityFilter, EntityType entityType, List<String> types) { |
|
|
private String entitySearchQuery(QueryContext ctx, EntitySearchQueryFilter entityFilter, EntityType entityType, List<String> types) { |
|
|
EntityId rootId = entityFilter.getRootEntity(); |
|
|
EntityId rootId = entityFilter.getRootEntity(); |
|
|
//TODO: fetch last level only.
|
|
|
|
|
|
//TODO: fetch distinct records.
|
|
|
|
|
|
String lvlFilter = getLvlFilter(entityFilter.getMaxLevel()); |
|
|
String lvlFilter = getLvlFilter(entityFilter.getMaxLevel()); |
|
|
String selectFields = "SELECT tenant_id, customer_id, id, created_time, type, name, additional_info " |
|
|
String selectFields = "SELECT tenant_id, customer_id, id, created_time, type, name, additional_info " |
|
|
+ (entityType.equals(EntityType.ENTITY_VIEW) ? "" : ", label ") |
|
|
+ (entityType.equals(EntityType.ENTITY_VIEW) ? "" : ", label ") |
|
|
@ -470,7 +468,9 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { |
|
|
whereFilter += " re.relation_type = :where_relation_type AND"; |
|
|
whereFilter += " re.relation_type = :where_relation_type AND"; |
|
|
} |
|
|
} |
|
|
whereFilter += " re." + (entityFilter.getDirection().equals(EntitySearchDirection.FROM) ? "to" : "from") + "_type = :where_entity_type"; |
|
|
whereFilter += " re." + (entityFilter.getDirection().equals(EntitySearchDirection.FROM) ? "to" : "from") + "_type = :where_entity_type"; |
|
|
|
|
|
if (entityFilter.isFetchLastLevelOnly()) { |
|
|
|
|
|
whereFilter += " and re.lvl = " + entityFilter.getMaxLevel(); |
|
|
|
|
|
} |
|
|
from = String.format(from, lvlFilter, whereFilter); |
|
|
from = String.format(from, lvlFilter, whereFilter); |
|
|
String query = "( " + selectFields + from + ")"; |
|
|
String query = "( " + selectFields + from + ")"; |
|
|
if (types != null && !types.isEmpty()) { |
|
|
if (types != null && !types.isEmpty()) { |
|
|
@ -500,7 +500,7 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { |
|
|
ctx.addStringParameter("relation_root_type", rootId.getEntityType().name()); |
|
|
ctx.addStringParameter("relation_root_type", rootId.getEntityType().name()); |
|
|
|
|
|
|
|
|
StringBuilder whereFilter = new StringBuilder(); |
|
|
StringBuilder whereFilter = new StringBuilder(); |
|
|
; |
|
|
|
|
|
boolean noConditions = true; |
|
|
boolean noConditions = true; |
|
|
if (entityFilter.getFilters() != null && !entityFilter.getFilters().isEmpty()) { |
|
|
if (entityFilter.getFilters() != null && !entityFilter.getFilters().isEmpty()) { |
|
|
boolean single = entityFilter.getFilters().size() == 1; |
|
|
boolean single = entityFilter.getFilters().size() == 1; |
|
|
@ -530,6 +530,9 @@ public class DefaultEntityQueryRepository implements EntityQueryRepository { |
|
|
.append("_type in (:where_entity_types").append(")"); |
|
|
.append("_type in (:where_entity_types").append(")"); |
|
|
ctx.addStringListParameter("where_entity_types", Arrays.stream(RELATION_QUERY_ENTITY_TYPES).map(EntityType::name).collect(Collectors.toList())); |
|
|
ctx.addStringListParameter("where_entity_types", Arrays.stream(RELATION_QUERY_ENTITY_TYPES).map(EntityType::name).collect(Collectors.toList())); |
|
|
} |
|
|
} |
|
|
|
|
|
if (entityFilter.isFetchLastLevelOnly()) { |
|
|
|
|
|
whereFilter.append(" and re.lvl = ").append(entityFilter.getMaxLevel()); |
|
|
|
|
|
} |
|
|
from = String.format(from, lvlFilter, whereFilter); |
|
|
from = String.format(from, lvlFilter, whereFilter); |
|
|
return "( " + selectFields + from + ")"; |
|
|
return "( " + selectFields + from + ")"; |
|
|
} |
|
|
} |
|
|
|