code: public synchronized ApiFuture<FlatRow> add(Query query) {
      Preconditions.checkNotNull(query);
      ReadRowsRequest request = query.toProto(requestContext);
  
      Preconditions.checkArgument(request.getRows().getRowKeysCount() == 1);
      ByteString rowKey = request.getRows().getRowKeysList().get(0);
      Preconditions.checkArgument(!rowKey.equals(ByteString.EMPTY));
  
      final RowFilter filter = request.getFilter();
      Batch batch = batches.get(filter);
      if (batch == null) {
        batch = new Batch(filter);
        batches.put(filter, batch);
      }
      return batch.addKey(rowKey);
    }
docs: Adds the key in the request to a batch read. The future will be resolved when the batch response
  is received.
  
  @param query a {@link Query} with a single row key.
  @return a {@link ApiFuture} that will be populated with the {@link FlatRow} that
  corresponds to the request