in custos-core/sharing-core-impl/src/main/java/org/apache/custos/sharing/core/persistance/repository/SearchEntityRepositoryImpl.java [85:180]
private String createSQLQuery(String tenantId, List<SearchCriteria> searchCriteriaList, Map<String, Object> valueMap, int limit, int offset) {
String query = "SELECT * FROM entity E WHERE ";
query = query + "E.tenant_id = :" + "TENANT_ID" + " AND ";
valueMap.put("TENANT_ID", tenantId);
for (SearchCriteria searchCriteria : searchCriteriaList) {
if (searchCriteria.getSearchField().equals(EntitySearchField.ID)) {
if (searchCriteria.getCondition().equals(SearchCondition.EQUAL)) {
query = query + "E.external_id = :" + EntitySearchField.ID.name() + " AND ";
} else {
query = query + "E.external_id != :" + EntitySearchField.ID.name() + " AND ";
}
valueMap.put(EntitySearchField.ID.name(), searchCriteria.getValue());
} else if (searchCriteria.getSearchField().equals(EntitySearchField.NAME)) {
if (searchCriteria.getCondition().equals(SearchCondition.EQUAL)) {
query = query + "E.name LIKE :" + EntitySearchField.NAME.name() + " AND ";
} else {
query = query + "E.name NOT LIKE :" + EntitySearchField.NAME.name() + " AND ";
}
valueMap.put(EntitySearchField.NAME.name(), searchCriteria.getValue());
} else if (searchCriteria.getSearchField().equals(EntitySearchField.DESCRIPTION)) {
if (searchCriteria.getCondition().equals(SearchCondition.EQUAL)) {
query = query + "E.description LIKE :" + EntitySearchField.DESCRIPTION.name() + " AND ";
} else {
query = query + "E.description NOT LIKE :" + EntitySearchField.DESCRIPTION.name() + " AND ";
}
valueMap.put(EntitySearchField.DESCRIPTION.name(), searchCriteria.getValue());
} else if (searchCriteria.getSearchField().equals(EntitySearchField.FULL_TEXT)) {
if (searchCriteria.getCondition().equals(SearchCondition.EQUAL)) {
query = query + "E.fullText LIKE :" + EntitySearchField.DESCRIPTION.name() + " AND ";
} else {
query = query + "E.fullText NOT LIKE :" + EntitySearchField.DESCRIPTION.name() + " AND ";
}
valueMap.put(EntitySearchField.FULL_TEXT.name(), searchCriteria.getValue());
} else if (searchCriteria.getSearchField().equals(EntitySearchField.OWNER_ID)) {
if (searchCriteria.getCondition().equals(SearchCondition.EQUAL)) {
query = query + "E.owner_id = :" + EntitySearchField.OWNER_ID.name() + " AND ";
} else {
query = query + "E.owner_id != :" + EntitySearchField.OWNER_ID.name() + " AND ";
}
valueMap.put(EntitySearchField.OWNER_ID.name(), searchCriteria.getValue());
} else if (searchCriteria.getSearchField().equals(EntitySearchField.ENTITY_TYPE_ID)) {
if (searchCriteria.getCondition().equals(SearchCondition.EQUAL)) {
query = query + "E.entity_type_id = :" + EntitySearchField.ENTITY_TYPE_ID.name() + " AND ";
} else {
query = query + "E.entity_type_id != :" + EntitySearchField.ENTITY_TYPE_ID.name() + " AND ";
}
valueMap.put(EntitySearchField.ENTITY_TYPE_ID.name(), searchCriteria.getValue() + "@" + tenantId);
} else if (searchCriteria.getSearchField().equals(EntitySearchField.CREATED_AT)) {
if (searchCriteria.getCondition().equals(SearchCondition.GTE)) {
query = query + "E.created_at >= :" + EntitySearchField.CREATED_AT.name() + " AND ";
} else {
query = query + "E.created_at < :" + EntitySearchField.CREATED_AT.name() + " AND ";
}
valueMap.put(EntitySearchField.CREATED_AT.name(), searchCriteria.getValue());
} else if (searchCriteria.getSearchField().equals(EntitySearchField.LAST_MODIFIED_AT)) {
if (searchCriteria.getCondition().equals(SearchCondition.GTE)) {
query = query + "E.last_modified_at >= :" + EntitySearchField.ENTITY_TYPE_ID.name() + " AND ";
} else {
query = query + "E.last_modified_at < :" + EntitySearchField.ENTITY_TYPE_ID.name() + " AND ";
}
valueMap.put(EntitySearchField.ENTITY_TYPE_ID.name(), searchCriteria.getValue());
} else if (searchCriteria.getSearchField().equals(EntitySearchField.PARENT_ID)) {
if (searchCriteria.getCondition().equals(SearchCondition.EQUAL)) {
query = query + "E.external_parent_id = :" + EntitySearchField.PARENT_ID.name() + " AND ";
} else {
query = query + "E.external_parent_id != :" + EntitySearchField.PARENT_ID.name() + " AND ";
}
valueMap.put(EntitySearchField.PARENT_ID.name(), searchCriteria.getValue());
} else if (searchCriteria.getSearchField().equals(EntitySearchField.SHARED_COUNT)) {
if (searchCriteria.getCondition().equals(SearchCondition.GTE)) {
query = query + "E.shared_count >= :" + EntitySearchField.SHARED_COUNT.name() + " AND ";
} else {
query = query + "E.shared_count < :" + EntitySearchField.SHARED_COUNT.name() + " AND ";
}
valueMap.put(EntitySearchField.SHARED_COUNT.name(), searchCriteria.getValue());
}
}
query = query.substring(0, query.length() - 5);
query = query + " ORDER BY E.created_at DESC";
if (limit > 0) {
query = query + " LIMIT " + ":limit" + " OFFSET " + ":offset";
valueMap.put("limit", limit);
valueMap.put("offset", offset);
}
return query;
}