com.spotify.asyncdatastoreclient.QueryResult Maven / Gradle / Ivy
/*
* Copyright (c) 2011-2015 Spotify AB
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.spotify.asyncdatastoreclient;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.protobuf.ByteString;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
/**
* A query result.
*
* Returned from query operations.
*/
public final class QueryResult implements Result, Iterable {
private final List entities;
private final ByteString cursor;
private QueryResult(final List entities) {
this.entities = entities;
this.cursor = null;
}
private QueryResult(final List entities, final ByteString cursor) {
this.entities = entities;
this.cursor = cursor;
}
static QueryResult build(final com.google.datastore.v1.LookupResponse response) {
return new QueryResult(ImmutableList.copyOf(
response.getFoundList().stream()
.map(entity -> Entity.builder(entity.getEntity()).build())
.collect(Collectors.toList())));
}
static QueryResult build(final com.google.datastore.v1.RunQueryResponse response) {
final com.google.datastore.v1.QueryResultBatch batch = response.getBatch();
return new QueryResult(ImmutableList.copyOf(
response.getBatch().getEntityResultsList().stream()
.map(entity -> Entity.builder(entity.getEntity()).build())
.collect(Collectors.toList())),
batch.getEndCursor());
}
/**
* Build an empty result.
*
* @return a new empty query result.
*/
public static QueryResult build() {
return new QueryResult(ImmutableList.of());
}
/**
* Return the first entity returned from the query or null if not found.
*
* This is a shortcut for {@code getAll().get(0)}
*
* @return an entity returned from the Datastore.
*/
public Entity getEntity() {
return Iterables.getFirst(entities, null);
}
/**
* Return all entities returned from the query.
*
* @return a list of entities returned from the query.
*/
public List getAll() {
return entities;
}
/**
* An iterator for all entities returned from the query.
*
* @return an entity iterator.
*/
@Override
public Iterator iterator() {
return entities.iterator();
}
/**
* The last cursor position after returning all entities for this batch.
*
* This is useful for paging; if you supply a {@code limit()}, then the
* cursor can be used when retrieving the next batch: {@code QueryfromCursor()}.
*
* @return the last cursor position.
*/
public ByteString getCursor() {
return cursor;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy