private String createSQLQuery()

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;
    }