use of com.google.cloud.datastore.KeyQuery in project spring-cloud-gcp by spring-cloud.
the class DatastoreTemplateTests method queryKeysTest.
@Test
public void queryKeysTest() {
KeyQuery keyQuery = GqlQuery.newKeyQueryBuilder().build();
this.datastoreTemplate.queryKeys(keyQuery).iterator();
verify(this.datastore, times(1)).run(keyQuery);
}
use of com.google.cloud.datastore.KeyQuery 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);
}
use of com.google.cloud.datastore.KeyQuery in project spring-cloud-gcp by spring-cloud.
the class PartTreeDatastoreQueryTests method preparePageResults.
private void preparePageResults(int offset, Integer limit, Cursor cursor, List<Integer> pageResults, List<Integer> fullResults) {
when(this.datastoreTemplate.queryKeysOrEntities(isA(EntityQuery.class), any())).thenAnswer((invocation) -> {
EntityQuery statement = invocation.getArgument(0);
EntityQuery expected = StructuredQuery.newEntityQueryBuilder().setFilter(FILTER).setKind("trades").setStartCursor(cursor).setOffset(cursor != null ? 0 : offset).setOrderBy(OrderBy.desc("__key__")).setLimit(limit).build();
assertThat(statement).isEqualTo(expected);
return new DatastoreResultsIterable(pageResults.iterator(), Cursor.copyFrom("abc".getBytes()));
});
when(this.datastoreTemplate.queryKeysOrEntities(isA(KeyQuery.class), any())).thenAnswer((invocation) -> {
KeyQuery statement = invocation.getArgument(0);
KeyQuery expected = StructuredQuery.newKeyQueryBuilder().setFilter(FILTER).setKind("trades").setOrderBy(OrderBy.desc("__key__")).build();
assertThat(statement).isEqualTo(expected);
return new DatastoreResultsIterable(fullResults.iterator(), Cursor.copyFrom("def".getBytes()));
});
}
use of com.google.cloud.datastore.KeyQuery in project spring-cloud-gcp by spring-cloud.
the class DatastoreTemplateTests method nextPageTest.
private boolean nextPageTest(boolean hasNextPage) {
QueryResults<Key> queryResults = mock(QueryResults.class);
when(queryResults.getResultClass()).thenReturn((Class) Key.class);
doAnswer((invocation) -> {
Arrays.asList(this.key1, this.key2).iterator().forEachRemaining(invocation.getArgument(0));
return null;
}).when(queryResults).forEachRemaining(any());
Cursor cursor = Cursor.copyFrom("abc".getBytes());
when(queryResults.getCursorAfter()).thenReturn(cursor);
KeyQuery query = Query.newKeyQueryBuilder().setKind("custom_test_kind").setLimit(1).build();
when(this.datastore.run(eq(query))).thenReturn(queryResults);
QueryResults<Key> nextPageQueryResults = mock(QueryResults.class);
when(nextPageQueryResults.hasNext()).thenReturn(hasNextPage);
KeyQuery nextPageQuery = query.toBuilder().setStartCursor(cursor).setOffset(0).setLimit(1).build();
when(this.datastore.run(eq(nextPageQuery))).thenReturn(nextPageQueryResults);
Slice<Key> resultsSlice = this.datastoreTemplate.queryKeysSlice(query, TestEntity.class, PageRequest.of(0, 1));
return resultsSlice.hasNext();
}
use of com.google.cloud.datastore.KeyQuery 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();
}
Aggregations