public List execute()

in persistence-commons/persistence-commons-jpa-base/src/main/java/org/kie/kogito/persistence/postgresql/PostgresQuery.java [109:163]


    public List<T> execute() {
        //Get type information from filters/sorting to cast JSON document fields in query
        fields = addFilters(new HashMap<>(), filters);
        if (sortBy != null && !sortBy.isEmpty()) {
            sortBy.stream().filter(sortBy -> !fields.containsKey(sortBy.getAttribute()))
                    .forEach(sortBy -> fields.put(sortBy.getAttribute(),
                            new JsonField(sortBy.getAttribute())));
        }

        // Build the query to retrieve the filtered data from the temporary table above.
        StringBuilder queryString = new StringBuilder("SELECT * FROM kogito_data_cache")
                .append(" WHERE cache_name = '")
                .append(name)
                .append("'");
        if (filters != null && !filters.isEmpty()) {
            queryString.append(" AND ");
            queryString.append(filters.stream()
                    .map(filter -> new StringBuilder()
                            .append(filterStringFunction(filter)))
                    .collect(joining(AND)));
        }

        // Sorting
        if (sortBy != null && !sortBy.isEmpty()) {
            queryString.append(" ORDER BY ");
            queryString.append(sortBy.stream().map(f -> {
                final JsonField field = fields.get(f.getAttribute());
                return cast(field, format(ATTRIBUTE_ACCESSOR, f.getAttribute())).append(" ").append(f.getSort().name());
            }).collect(joining(", ")));
        }

        LOGGER.debug("Executing PostgreSQL query: {}", queryString);
        jakarta.persistence.Query query = repository.getEntityManager().createNativeQuery(queryString.toString());
        query.unwrap(org.hibernate.query.NativeQuery.class).addScalar("json_value", new CustomType<>(new JsonBinaryType(), new TypeConfiguration()));

        if (limit != null) {
            query.setMaxResults(limit);
        }
        if (offset != null) {
            query.setFirstResult(offset);
        }

        List<?> results = query.getResultList();

        return results.stream().map(r -> {
            if (r == null) {
                return null;
            }
            try {
                return objectMapper.readValue(objectMapper.writeValueAsString(r), type);
            } catch (JsonProcessingException e) {
                throw new RuntimeException(e);
            }
        }).collect(Collectors.toList());
    }