private Cursor createCursor(List<FieldOrder> order, Object[] fieldValues, boolean before) { Cursor.Builder result = Cursor.newBuilder(); Preconditions.checkState( fieldValues.length != 0, "At least one cursor value must be specified."); Preconditions.checkState( fieldValues.length <= order.size(), "Too many cursor values specified. The specified values must match the " + "orderBy() constraints of the query."); Iterator<FieldOrder> fieldOrderIterator = order.iterator(); for (Object fieldValue : fieldValues) { Object sanitizedValue; FieldPath fieldPath = fieldOrderIterator.next().fieldPath; if (fieldPath.equals(FieldPath.DOCUMENT_ID)) { sanitizedValue = convertReference(fieldValue); } else { sanitizedValue = CustomClassMapper.serialize(fieldValue); } Value encodedValue = UserDataConverter.encodeValue(fieldPath, sanitizedValue, UserDataConverter.ARGUMENT); if (encodedValue == null) { throw FirestoreException.invalidState( "Cannot use FieldValue.delete() or FieldValue.serverTimestamp() in a query boundary"); } result.addValues(encodedValue); } result.setBefore(before); return result.build(); }
setBefore(other.getBefore());
private Cursor createCursor(List<FieldOrder> order, Object[] fieldValues, boolean before) { Cursor.Builder result = Cursor.newBuilder(); Preconditions.checkState( fieldValues.length != 0, "At least one cursor value must be specified."); Preconditions.checkState( fieldValues.length <= order.size(), "Too many cursor values specified. The specified values must match the " + "orderBy() constraints of the query."); Iterator<FieldOrder> fieldOrderIterator = order.iterator(); for (Object fieldValue : fieldValues) { Object sanitizedValue; FieldPath fieldPath = fieldOrderIterator.next().fieldPath; if (fieldPath.equals(FieldPath.DOCUMENT_ID)) { sanitizedValue = convertReference(fieldValue); } else { sanitizedValue = CustomClassMapper.serialize(fieldValue); } Value encodedValue = UserDataConverter.encodeValue(fieldPath, sanitizedValue, UserDataConverter.ARGUMENT); if (encodedValue == null) { throw FirestoreException.invalidState( "Cannot use FieldValue.delete() or FieldValue.serverTimestamp() in a query boundary"); } result.addValues(encodedValue); } result.setBefore(before); return result.build(); }
public static StructuredQuery endAt(Value value, boolean before) { StructuredQuery.Builder structuredQuery = StructuredQuery.newBuilder(); structuredQuery.setEndAt(Cursor.newBuilder().setBefore(before).addValues(value)); return structuredQuery.build(); }
public static StructuredQuery startAt(Value value, boolean before) { StructuredQuery.Builder structuredQuery = StructuredQuery.newBuilder(); structuredQuery.setStartAt(Cursor.newBuilder().setBefore(before).addValues(value)); return structuredQuery.build(); }