Search in sources :

Example 1 with StructuredQuery

use of com.google.cloud.datastore.StructuredQuery in project spring-cloud-gcp by spring-cloud.

the class DatastoreTemplate method applyPageable.

private StructuredQuery applyPageable(StructuredQuery query, Pageable pageable) {
    if (pageable == Pageable.unpaged()) {
        return query;
    }
    Cursor cursor = null;
    if (pageable instanceof DatastorePageable) {
        cursor = ((DatastorePageable) pageable).toCursor();
    }
    StructuredQuery.Builder builder = query.toBuilder();
    if (cursor != null) {
        builder.setStartCursor(cursor).setOffset(0);
    } else {
        builder.setOffset(Math.toIntExact(pageable.getOffset()));
    }
    return builder.setLimit(pageable.getPageSize()).build();
}
Also used : StructuredQuery(com.google.cloud.datastore.StructuredQuery) Cursor(com.google.cloud.datastore.Cursor) DatastorePageable(org.springframework.cloud.gcp.data.datastore.repository.query.DatastorePageable)

Example 2 with StructuredQuery

use of com.google.cloud.datastore.StructuredQuery in project spring-cloud-gcp by spring-cloud.

the class PartTreeDatastoreQuery method executeSliceQuery.

private Slice executeSliceQuery(Object[] parameters) {
    StructuredQuery structuredQuery = buildSliceQuey(parameters);
    Slice<?> results = structuredQuery instanceof KeyQuery ? this.datastoreOperations.queryKeysSlice((KeyQuery) structuredQuery, this.entityType, getPageable(parameters)) : this.datastoreOperations.queryEntitiesSlice(structuredQuery, this.entityType, getPageable(parameters));
    return (Slice) this.processRawObjectForProjection(results);
}
Also used : StructuredQuery(com.google.cloud.datastore.StructuredQuery) Slice(org.springframework.data.domain.Slice) KeyQuery(com.google.cloud.datastore.KeyQuery)

Example 3 with StructuredQuery

use of com.google.cloud.datastore.StructuredQuery in project spring-cloud-gcp by spring-cloud.

the class PartTreeDatastoreQueryTests method compoundNameConventionProjectionTest.

@Test
public void compoundNameConventionProjectionTest() throws NoSuchMethodException, IntrospectionException {
    ProjectionInformation projectionInformation = mock(ProjectionInformation.class);
    doReturn(TradeProjection.class).when(projectionInformation).getType();
    doReturn(true).when(projectionInformation).isClosed();
    doReturn(Arrays.asList(new PropertyDescriptor("id", null, null), new PropertyDescriptor("symbol", null, null))).when(projectionInformation).getInputProperties();
    queryWithMockResult("findTop333ByActionAndSymbolAndPriceLessThan" + "AndPriceGreaterThanEqual" + "AndEmbeddedEntityStringFieldEquals" + "AndIdIsNullOrderByIdDesc", null, getClass().getMethod("tradeMethodProjection", String.class, String.class, double.class, double.class, String.class), projectionInformation);
    Object[] params = new Object[] { "BUY", "abcd", // this int param requires custom conversion
    8, 3.33, "abc" };
    when(this.datastoreTemplate.queryKeysOrEntities(any(), any())).thenAnswer((invocation) -> {
        StructuredQuery statement = invocation.getArgument(0);
        StructuredQuery expected = StructuredQuery.newProjectionEntityQueryBuilder().addProjection("__key__", "ticker").setFilter(CompositeFilter.and(PropertyFilter.eq("action", "BUY"), PropertyFilter.eq("ticker", "abcd"), PropertyFilter.lt("price", 8L), PropertyFilter.ge("price", 3.33), PropertyFilter.eq("embeddedEntity.stringField", "abc"), PropertyFilter.isNull("__key__"))).setKind("trades").setOrderBy(OrderBy.desc("__key__")).setLimit(333).build();
        assertThat(statement).isEqualTo(expected);
        return EMPTY_RESPONSE;
    });
    when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class);
    this.partTreeDatastoreQuery.execute(params);
    verify(this.datastoreTemplate, times(1)).queryKeysOrEntities(any(), any());
}
Also used : StructuredQuery(com.google.cloud.datastore.StructuredQuery) ProjectionInformation(org.springframework.data.projection.ProjectionInformation) PropertyDescriptor(java.beans.PropertyDescriptor) Test(org.junit.Test)

Example 4 with StructuredQuery

use of com.google.cloud.datastore.StructuredQuery in project spring-cloud-gcp by spring-cloud.

the class DatastoreTemplate method exampleToQuery.

private <T> StructuredQuery exampleToQuery(Example<T> example, DatastoreQueryOptions queryOptions, boolean keyQuery) {
    validateExample(example);
    T probe = example.getProbe();
    FullEntity.Builder<IncompleteKey> probeEntityBuilder = Entity.newBuilder();
    this.datastoreEntityConverter.write(probe, probeEntityBuilder);
    FullEntity<IncompleteKey> probeEntity = probeEntityBuilder.build();
    DatastorePersistentEntity<?> persistentEntity = this.datastoreMappingContext.getPersistentEntity(example.getProbeType());
    LinkedList<StructuredQuery.Filter> filters = new LinkedList<>();
    NullHandler nullHandler = example.getMatcher().getNullHandler();
    persistentEntity.doWithColumnBackedProperties((persistentProperty) -> {
        if (!ignoredProperty(example, persistentProperty)) {
            Value<?> value = getValue(example, probeEntity, persistentEntity, persistentProperty);
            addFilter(nullHandler, filters, persistentProperty.getFieldName(), value);
        }
    });
    persistentEntity.doWithAssociations((AssociationHandler<DatastorePersistentProperty>) association -> {
        PersistentPropertyAccessor<?> accessor = persistentEntity.getPropertyAccessor(example.getProbe());
        DatastorePersistentProperty property = association.getInverse();
        Object value = accessor.getProperty(property);
        Value<?> key = value == null ? NullValue.of() : KeyValue.of(objectToKeyFactory.getKeyFromObject(value, this.datastoreMappingContext.getPersistentEntity(value.getClass())));
        addFilter(nullHandler, filters, property.getFieldName(), key);
    });
    StructuredQuery.Builder<?> builder = keyQuery ? Query.newKeyQueryBuilder() : Query.newEntityQueryBuilder();
    builder.setKind(persistentEntity.kindName());
    if (!filters.isEmpty()) {
        builder.setFilter(StructuredQuery.CompositeFilter.and(filters.pop(), filters.toArray(new StructuredQuery.Filter[0])));
    }
    applyQueryOptions(builder, queryOptions, persistentEntity);
    return builder.build();
}
Also used : FullEntity(com.google.cloud.datastore.FullEntity) Query(com.google.cloud.datastore.Query) Builder(com.google.cloud.datastore.Entity.Builder) PathElement(com.google.cloud.datastore.PathElement) SliceUtil(org.springframework.cloud.gcp.data.datastore.core.util.SliceUtil) PersistentPropertyAccessor(org.springframework.data.mapping.PersistentPropertyAccessor) TransactionSynchronizationManager(org.springframework.transaction.support.TransactionSynchronizationManager) Filter(com.google.cloud.datastore.StructuredQuery.Filter) AfterQueryEvent(org.springframework.cloud.gcp.data.datastore.core.mapping.event.AfterQueryEvent) KeyQuery(com.google.cloud.datastore.KeyQuery) ClassTypeInformation(org.springframework.data.util.ClassTypeInformation) QueryResults(com.google.cloud.datastore.QueryResults) Map(java.util.Map) ApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher) Pageable(org.springframework.data.domain.Pageable) Sort(org.springframework.data.domain.Sort) PersistentProperty(org.springframework.data.mapping.PersistentProperty) AfterFindByKeyEvent(org.springframework.cloud.gcp.data.datastore.core.mapping.event.AfterFindByKeyEvent) BaseEntity(com.google.cloud.datastore.BaseEntity) DatastoreDataException(org.springframework.cloud.gcp.data.datastore.core.mapping.DatastoreDataException) Collection(java.util.Collection) KeyValue(com.google.cloud.datastore.KeyValue) AfterSaveEvent(org.springframework.cloud.gcp.data.datastore.core.mapping.event.AfterSaveEvent) Set(java.util.Set) DatastorePersistentEntity(org.springframework.cloud.gcp.data.datastore.core.mapping.DatastorePersistentEntity) Example(org.springframework.data.domain.Example) Collectors(java.util.stream.Collectors) IncompleteKey(com.google.cloud.datastore.IncompleteKey) Slice(org.springframework.data.domain.Slice) Objects(java.util.Objects) List(java.util.List) Optional(java.util.Optional) KeyUtil(org.springframework.cloud.gcp.data.datastore.core.util.KeyUtil) ListValue(com.google.cloud.datastore.ListValue) DatastoreMappingContext(org.springframework.cloud.gcp.data.datastore.core.mapping.DatastoreMappingContext) BeforeDeleteEvent(org.springframework.cloud.gcp.data.datastore.core.mapping.event.BeforeDeleteEvent) Key(com.google.cloud.datastore.Key) BeforeSaveEvent(org.springframework.cloud.gcp.data.datastore.core.mapping.event.BeforeSaveEvent) DatastoreEntityConverter(org.springframework.cloud.gcp.data.datastore.core.convert.DatastoreEntityConverter) SliceImpl(org.springframework.data.domain.SliceImpl) HashMap(java.util.HashMap) Datastore(com.google.cloud.datastore.Datastore) ProjectionEntityQuery(com.google.cloud.datastore.ProjectionEntityQuery) Function(java.util.function.Function) Supplier(java.util.function.Supplier) ArrayList(java.util.ArrayList) Cursor(com.google.cloud.datastore.Cursor) HashSet(java.util.HashSet) NullHandler(org.springframework.data.domain.ExampleMatcher.NullHandler) ValueUtil(org.springframework.cloud.gcp.data.datastore.core.util.ValueUtil) Entity(com.google.cloud.datastore.Entity) PropertyFilter(com.google.cloud.datastore.StructuredQuery.PropertyFilter) NullValue(com.google.cloud.datastore.NullValue) StreamSupport(java.util.stream.StreamSupport) Nullable(org.springframework.lang.Nullable) LinkedList(java.util.LinkedList) StructuredQuery(com.google.cloud.datastore.StructuredQuery) ApplicationEventPublisherAware(org.springframework.context.ApplicationEventPublisherAware) Iterator(java.util.Iterator) TypeUtils(org.springframework.util.TypeUtils) ObjectToKeyFactory(org.springframework.cloud.gcp.data.datastore.core.convert.ObjectToKeyFactory) ExampleMatcher(org.springframework.data.domain.ExampleMatcher) DatastoreReaderWriter(com.google.cloud.datastore.DatastoreReaderWriter) EntityQuery(com.google.cloud.datastore.EntityQuery) AfterDeleteEvent(org.springframework.cloud.gcp.data.datastore.core.mapping.event.AfterDeleteEvent) ApplicationEvent(org.springframework.context.ApplicationEvent) AssociationHandler(org.springframework.data.mapping.AssociationHandler) BaseKey(com.google.cloud.datastore.BaseKey) Value(com.google.cloud.datastore.Value) DatastorePersistentProperty(org.springframework.cloud.gcp.data.datastore.core.mapping.DatastorePersistentProperty) Collections(java.util.Collections) DatastorePageable(org.springframework.cloud.gcp.data.datastore.repository.query.DatastorePageable) Assert(org.springframework.util.Assert) StructuredQuery(com.google.cloud.datastore.StructuredQuery) NullHandler(org.springframework.data.domain.ExampleMatcher.NullHandler) PersistentPropertyAccessor(org.springframework.data.mapping.PersistentPropertyAccessor) FullEntity(com.google.cloud.datastore.FullEntity) LinkedList(java.util.LinkedList) IncompleteKey(com.google.cloud.datastore.IncompleteKey) Filter(com.google.cloud.datastore.StructuredQuery.Filter) PropertyFilter(com.google.cloud.datastore.StructuredQuery.PropertyFilter) KeyValue(com.google.cloud.datastore.KeyValue) ListValue(com.google.cloud.datastore.ListValue) NullValue(com.google.cloud.datastore.NullValue) Value(com.google.cloud.datastore.Value) DatastorePersistentProperty(org.springframework.cloud.gcp.data.datastore.core.mapping.DatastorePersistentProperty)

Example 5 with StructuredQuery

use of com.google.cloud.datastore.StructuredQuery in project spring-cloud-gcp by spring-cloud.

the class PartTreeDatastoreQueryTests method prepareDeleteResults.

private void prepareDeleteResults(boolean isCollection) {
    Cursor cursor = Cursor.copyFrom("abc".getBytes());
    List<Integer> datastoreMatchingRecords = Arrays.asList(3, 4, 5);
    when(this.datastoreTemplate.queryKeysOrEntities(any(), any())).thenAnswer((invocation) -> {
        StructuredQuery<?> statement = invocation.getArgument(0);
        StructuredQuery.Builder builder = isCollection ? StructuredQuery.newEntityQueryBuilder() : StructuredQuery.newKeyQueryBuilder();
        StructuredQuery<?> expected = builder.setFilter(PropertyFilter.eq("action", "BUY")).setKind("trades").build();
        assertThat(statement).isEqualTo(expected);
        return new DatastoreResultsIterable(datastoreMatchingRecords.iterator(), cursor);
    });
}
Also used : StructuredQuery(com.google.cloud.datastore.StructuredQuery) DatastoreResultsIterable(org.springframework.cloud.gcp.data.datastore.core.DatastoreResultsIterable) Cursor(com.google.cloud.datastore.Cursor)

Aggregations

StructuredQuery (com.google.cloud.datastore.StructuredQuery)5 Cursor (com.google.cloud.datastore.Cursor)3 KeyQuery (com.google.cloud.datastore.KeyQuery)2 BaseEntity (com.google.cloud.datastore.BaseEntity)1 BaseKey (com.google.cloud.datastore.BaseKey)1 Datastore (com.google.cloud.datastore.Datastore)1 DatastoreReaderWriter (com.google.cloud.datastore.DatastoreReaderWriter)1 Entity (com.google.cloud.datastore.Entity)1 Builder (com.google.cloud.datastore.Entity.Builder)1 EntityQuery (com.google.cloud.datastore.EntityQuery)1 FullEntity (com.google.cloud.datastore.FullEntity)1 IncompleteKey (com.google.cloud.datastore.IncompleteKey)1 Key (com.google.cloud.datastore.Key)1 KeyValue (com.google.cloud.datastore.KeyValue)1 ListValue (com.google.cloud.datastore.ListValue)1 NullValue (com.google.cloud.datastore.NullValue)1 PathElement (com.google.cloud.datastore.PathElement)1 ProjectionEntityQuery (com.google.cloud.datastore.ProjectionEntityQuery)1 Query (com.google.cloud.datastore.Query)1 QueryResults (com.google.cloud.datastore.QueryResults)1