Search in sources :

Example 1 with Query

use of org.kie.kogito.persistence.api.query.Query in project kogito-apps by kiegroup.

the class ExplainerServiceHandlerRegistryTest method testCounterfactual_getExplainabilityResultByIdWithFinalResult.

@Test
@SuppressWarnings({ "rawtypes", "unchecked" })
public void testCounterfactual_getExplainabilityResultByIdWithFinalResult() {
    Query query = mock(Query.class);
    CounterfactualExplainabilityResult result = mock(CounterfactualExplainabilityResult.class);
    when(result.getStage()).thenReturn(CounterfactualExplainabilityResult.Stage.FINAL);
    when(storageCounterfactual.containsKey(eq(EXECUTION_ID))).thenReturn(true);
    when(storageCounterfactual.query()).thenReturn(query);
    when(query.filter(any())).thenReturn(query);
    when(query.execute()).thenReturn(List.of(result));
    CounterfactualExplainabilityResult actual = registry.getExplainabilityResultById(EXECUTION_ID, CounterfactualExplainabilityResult.class);
    verify(counterfactualExplainerServiceHandler).getExplainabilityResultById(eq(EXECUTION_ID));
    assertEquals(result, actual);
}
Also used : Query(org.kie.kogito.persistence.api.query.Query) CounterfactualExplainabilityResult(org.kie.kogito.explainability.api.CounterfactualExplainabilityResult) Test(org.junit.jupiter.api.Test)

Example 2 with Query

use of org.kie.kogito.persistence.api.query.Query in project kogito-apps by kiegroup.

the class PostgreSqlQuery method execute.

@Override
public List<T> execute() {
    CriteriaBuilder builder = repository.getEntityManager().getCriteriaBuilder();
    CriteriaQuery<E> criteriaQuery = builder.createQuery(entityClass);
    Root<E> root = criteriaQuery.from(entityClass);
    if (filters != null && !filters.isEmpty()) {
        List<Predicate> predicates = getPredicates(builder, root);
        criteriaQuery.where(predicates.toArray(new Predicate[] {}));
    }
    if (sortBy != null && !sortBy.isEmpty()) {
        List<Order> orderBy = sortBy.stream().map(f -> {
            Path attributePath = getAttributePath(root, f.getAttribute());
            return f.getSort() == SortDirection.ASC ? builder.asc(attributePath) : builder.desc(attributePath);
        }).collect(toList());
        criteriaQuery.orderBy(orderBy);
    }
    javax.persistence.Query query = repository.getEntityManager().createQuery(criteriaQuery);
    if (limit != null) {
        query.setMaxResults(limit);
    }
    if (offset != null) {
        query.setFirstResult(offset);
    }
    return (List<T>) query.getResultList().stream().map(mapper).collect(toList());
}
Also used : CriteriaBuilder(javax.persistence.criteria.CriteriaBuilder) Order(javax.persistence.criteria.Order) CriteriaQuery(javax.persistence.criteria.CriteriaQuery) Join(javax.persistence.criteria.Join) Collection(java.util.Collection) Query(org.kie.kogito.persistence.api.query.Query) Function(java.util.function.Function) List(java.util.List) PluralAttributePath(org.hibernate.query.criteria.internal.path.PluralAttributePath) Collectors.toList(java.util.stream.Collectors.toList) Predicate(javax.persistence.criteria.Predicate) CriteriaBuilder(javax.persistence.criteria.CriteriaBuilder) Order(javax.persistence.criteria.Order) AbstractEntity(org.kie.kogito.index.postgresql.model.AbstractEntity) AttributeSort(org.kie.kogito.persistence.api.query.AttributeSort) PanacheRepositoryBase(io.quarkus.hibernate.orm.panache.PanacheRepositoryBase) Path(javax.persistence.criteria.Path) Root(javax.persistence.criteria.Root) SortDirection(org.kie.kogito.persistence.api.query.SortDirection) AttributeFilter(org.kie.kogito.persistence.api.query.AttributeFilter) PluralAttributePath(org.hibernate.query.criteria.internal.path.PluralAttributePath) Path(javax.persistence.criteria.Path) Predicate(javax.persistence.criteria.Predicate) List(java.util.List) Collectors.toList(java.util.stream.Collectors.toList)

Example 3 with Query

use of org.kie.kogito.persistence.api.query.Query in project kogito-apps by kiegroup.

the class RedisQuery method execute.

@Override
public List<V> execute() {
    io.redisearch.Query query = new io.redisearch.Query(RedisQueryFactory.buildQueryBody(indexName, filters));
    setQueryLimitAndOffset(query);
    if (sortBy != null) {
        query.setSortBy(sortBy.getAttribute(), SortDirection.ASC.equals(sortBy.getSort()));
    }
    RedisQueryFactory.addFilters(query, filters);
    SearchResult search = redisClient.search(query);
    LOGGER.debug(String.format("%d documets have been found for the query.", search.totalResults));
    return search.docs.stream().map(x -> {
        try {
            return JsonUtils.getMapper().readValue((String) x.get(RAW_OBJECT_FIELD), type);
        } catch (IOException e) {
            throw new RuntimeException("Could not deserialize a retrieved object.", e);
        }
    }).collect(Collectors.toList());
}
Also used : List(java.util.List) Logger(org.slf4j.Logger) SearchResult(io.redisearch.SearchResult) LoggerFactory(org.slf4j.LoggerFactory) RAW_OBJECT_FIELD(org.kie.kogito.persistence.redis.Constants.RAW_OBJECT_FIELD) IOException(java.io.IOException) AttributeSort(org.kie.kogito.persistence.api.query.AttributeSort) Query(org.kie.kogito.persistence.api.query.Query) Collectors(java.util.stream.Collectors) Client(io.redisearch.Client) SortDirection(org.kie.kogito.persistence.api.query.SortDirection) AttributeFilter(org.kie.kogito.persistence.api.query.AttributeFilter) Query(org.kie.kogito.persistence.api.query.Query) SearchResult(io.redisearch.SearchResult) IOException(java.io.IOException)

Example 4 with Query

use of org.kie.kogito.persistence.api.query.Query in project kogito-apps by kiegroup.

the class TrustyServiceTest method givenNoStoredCounterfactualResultsWhenGetCounterfactualResultsThenEmptyCollectionIsReturned.

@Test
@SuppressWarnings({ "unchecked", "rawtypes" })
void givenNoStoredCounterfactualResultsWhenGetCounterfactualResultsThenEmptyCollectionIsReturned() {
    Storage<String, CounterfactualExplainabilityResult> counterfactualStorage = mock(Storage.class);
    Query queryMock = mock(Query.class);
    when(queryMock.filter(any(List.class))).thenReturn(queryMock);
    when(queryMock.execute()).thenReturn(new ArrayList());
    when(counterfactualStorage.query()).thenReturn(queryMock);
    when(trustyStorageServiceMock.getCounterfactualResultStorage()).thenReturn(counterfactualStorage);
    assertTrue(trustyService.getCounterfactualResults(TEST_EXECUTION_ID, TEST_COUNTERFACTUAL_ID).isEmpty());
}
Also used : Query(org.kie.kogito.persistence.api.query.Query) ArrayList(java.util.ArrayList) List(java.util.List) ArrayList(java.util.ArrayList) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) CounterfactualExplainabilityResult(org.kie.kogito.explainability.api.CounterfactualExplainabilityResult) Test(org.junit.jupiter.api.Test)

Example 5 with Query

use of org.kie.kogito.persistence.api.query.Query in project kogito-apps by kiegroup.

the class TrustyServiceTest method givenManyExecutionsThenPaginationWorksProperly.

@Test
@SuppressWarnings("unchecked")
void givenManyExecutionsThenPaginationWorksProperly() {
    List<Decision> decisions = new ArrayList<>();
    IntStream.range(0, 10).forEach(x -> {
        Decision d = new Decision();
        d.setExecutionId(String.valueOf(x));
        decisions.add(d);
    });
    Query queryMock = mock(Query.class);
    when(queryMock.filter(any(List.class))).thenReturn(queryMock);
    when(queryMock.sort(any(List.class))).thenReturn(queryMock);
    when(queryMock.execute()).thenReturn(decisions);
    Storage storageMock = mock(Storage.class);
    decisions.forEach(x -> {
        when(storageMock.put(eq(x.getExecutionId()), any(Object.class))).thenReturn(x);
        when(storageMock.containsKey(eq(x.getExecutionId()))).thenReturn(false);
    });
    when(storageMock.query()).thenReturn(queryMock);
    when(trustyStorageServiceMock.getDecisionsStorage()).thenReturn(storageMock);
    decisions.forEach(x -> trustyService.storeDecision(x.getExecutionId(), x));
    MatchedExecutionHeaders result = trustyService.getExecutionHeaders(OffsetDateTime.now().minusDays(1), OffsetDateTime.now(), 3, 5, "");
    assertEquals(3, result.getExecutions().size());
    assertEquals(decisions.size(), result.getAvailableResults());
    result = trustyService.getExecutionHeaders(OffsetDateTime.now().minusDays(1), OffsetDateTime.now(), 100, 5, "");
    assertEquals(5, result.getExecutions().size());
    assertEquals(decisions.size(), result.getAvailableResults());
}
Also used : Storage(org.kie.kogito.persistence.api.Storage) MatchedExecutionHeaders(org.kie.kogito.trusty.service.common.models.MatchedExecutionHeaders) Query(org.kie.kogito.persistence.api.query.Query) ArrayList(java.util.ArrayList) List(java.util.List) ArrayList(java.util.ArrayList) Decision(org.kie.kogito.trusty.storage.api.model.decision.Decision) Test(org.junit.jupiter.api.Test)

Aggregations

Query (org.kie.kogito.persistence.api.query.Query)17 List (java.util.List)14 Test (org.junit.jupiter.api.Test)12 ArrayList (java.util.ArrayList)9 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)6 CounterfactualExplainabilityResult (org.kie.kogito.explainability.api.CounterfactualExplainabilityResult)5 CounterfactualExplainabilityRequest (org.kie.kogito.explainability.api.CounterfactualExplainabilityRequest)4 Storage (org.kie.kogito.persistence.api.Storage)4 AttributeFilter (org.kie.kogito.persistence.api.query.AttributeFilter)4 AttributeSort (org.kie.kogito.persistence.api.query.AttributeSort)4 Collection (java.util.Collection)3 Collectors.toList (java.util.stream.Collectors.toList)3 MatchedExecutionHeaders (org.kie.kogito.trusty.service.common.models.MatchedExecutionHeaders)3 Logger (org.slf4j.Logger)3 LoggerFactory (org.slf4j.LoggerFactory)3 PanacheRepositoryBase (io.quarkus.hibernate.orm.panache.PanacheRepositoryBase)2 IOException (java.io.IOException)2 String.format (java.lang.String.format)2 Map (java.util.Map)2 Objects (java.util.Objects)2