private void compareMergedQuery(StructuredQuery<?> expected, StructuredQuery<?> actual) { assertEquals(expected.getKind(), actual.getKind()); assertEquals(expected.getStartCursor(), actual.getStartCursor()); assertEquals(expected.getEndCursor(), actual.getEndCursor()); assertEquals(expected.getOffset(), actual.getOffset()); assertEquals(expected.getLimit(), actual.getLimit()); assertEquals(expected.getFilter(), actual.getFilter()); assertEquals(expected.getOrderBy(), actual.getOrderBy()); assertEquals(expected.getProjection(), actual.getProjection()); assertEquals(expected.getDistinctOn(), actual.getDistinctOn()); }
private void compareBaseBuilderFields(StructuredQuery<?> query) { assertEquals(NAMESPACE, query.getNamespace()); assertEquals(KIND, query.getKind()); assertEquals(START_CURSOR, query.getStartCursor()); assertEquals(END_CURSOR, query.getEndCursor()); assertEquals(OFFSET, query.getOffset()); assertEquals(LIMIT, query.getLimit()); assertEquals(FILTER, query.getFilter()); assertEquals(ORDER_BY, query.getOrderBy()); }
/** * Copy all the behavior characteristics of the orignial query into the builder. */ public static <T, B extends StructuredQuery.Builder<T>> B clone(final StructuredQuery<?> orig, final Supplier<B> into) { final B builder = into.get(); builder.setNamespace(orig.getNamespace()); builder.setEndCursor(orig.getEndCursor()); builder.setFilter(orig.getFilter()); builder.setKind(orig.getKind()); builder.setLimit(orig.getLimit()); builder.setOffset(orig.getOffset()); builder.setStartCursor(orig.getStartCursor()); addOrderBy(builder, orig.getOrderBy()); return builder; }
private Slice executeSliceQuery(Object[] parameters) { EntityQuery.Builder builder = StructuredQuery.newEntityQueryBuilder() .setKind(this.datastorePersistentEntity.kindName()); StructuredQuery query = applyQueryBody(parameters, builder, false); List items = this.datastoreTemplate.query((query), (x) -> x); Integer limit = (query.getLimit() == null) ? null : query.getLimit() - 1; boolean exceedsLimit = false; if (limit != null) { //for slice queries we retrieve one additional item to check if the next slice exists //the additional item will not be converted on read exceedsLimit = items.size() > limit; if (exceedsLimit) { items = items.subList(0, limit); } } ParameterAccessor paramAccessor = new ParametersParameterAccessor(getQueryMethod().getParameters(), parameters); Pageable pageable = paramAccessor.getPageable(); List entities = (List) this.datastoreTemplate .convertEntitiesForRead(items.iterator(), this.entityType).stream() .map((o) -> this.processRawObjectForProjection((T) o)).collect(Collectors.toList()); return new SliceImpl(entities, pageable, exceedsLimit); }
private Slice executeSliceQuery(Object[] parameters) { EntityQuery.Builder builder = StructuredQuery.newEntityQueryBuilder() .setKind(this.datastorePersistentEntity.kindName()); StructuredQuery query = applyQueryBody(parameters, builder, false); List items = this.datastoreTemplate.query((query), (x) -> x); Integer limit = (query.getLimit() == null) ? null : query.getLimit() - 1; boolean exceedsLimit = false; if (limit != null) { //for slice queries we retrieve one additional item to check if the next slice exists //the additional item will not be converted on read exceedsLimit = items.size() > limit; if (exceedsLimit) { items = items.subList(0, limit); } } ParameterAccessor paramAccessor = new ParametersParameterAccessor(getQueryMethod().getParameters(), parameters); Pageable pageable = paramAccessor.getPageable(); List entities = (List) this.datastoreTemplate .convertEntitiesForRead(items.iterator(), this.entityType).stream() .map((o) -> this.processRawObjectForProjection((T) o)).collect(Collectors.toList()); return new SliceImpl(entities, pageable, exceedsLimit); }