Visitar URL original
Updating offset during life of a datastore query iterator. · googleapis/google-cloud-python@49d9503 · GitHub
Skip to content

Commit 49d9503

Browse files
committed
Updating offset during life of a datastore query iterator.
1 parent 2a72031 commit 49d9503

2 files changed

Lines changed: 12 additions & 7 deletions

File tree

‎gcloud/datastore/query.py‎

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -363,8 +363,7 @@ class Iterator(object):
363363
:param limit: (Optional) Limit the number of results returned.
364364
365365
:type offset: integer
366-
:param offset: (Optional) Defaults to 0. Offset used to begin
367-
a query.
366+
:param offset: (Optional) Offset used to begin a query.
368367
369368
:type start_cursor: bytes
370369
:param start_cursor: (Optional) Cursor to begin paging through
@@ -382,7 +381,7 @@ class Iterator(object):
382381
_query_pb2.QueryResultBatch.MORE_RESULTS_AFTER_LIMIT,
383382
)
384383

385-
def __init__(self, query, client, limit=None, offset=0,
384+
def __init__(self, query, client, limit=None, offset=None,
386385
start_cursor=None, end_cursor=None):
387386
self._query = query
388387
self._client = client
@@ -413,7 +412,8 @@ def next_page(self):
413412
if self._limit is not None:
414413
pb.limit.value = self._limit
415414

416-
pb.offset = self._offset
415+
if self._offset is not None:
416+
pb.offset = self._offset
417417

418418
transaction = self._client.current_transaction
419419

@@ -463,8 +463,11 @@ def __iter__(self):
463463
yield entity
464464
if not self._more_results:
465465
break
466+
num_results = len(self._page)
466467
if self._limit is not None:
467-
self._limit -= len(self._page)
468+
self._limit -= num_results
469+
if self._offset is not None:
470+
self._offset += num_results
468471
self.next_page()
469472

470473

‎gcloud/datastore/test_query.py‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ def test_ctor_defaults(self):
374374
iterator = self._makeOne(query, connection)
375375
self.assertTrue(iterator._query is query)
376376
self.assertEqual(iterator._limit, None)
377-
self.assertEqual(iterator._offset, 0)
377+
self.assertEqual(iterator._offset, None)
378378

379379
def test_ctor_explicit(self):
380380
client = self._makeClient()
@@ -549,7 +549,7 @@ def test___iter___w_limit(self):
549549
query = _Query(client, self._KIND, self._PROJECT, self._NAMESPACE)
550550
self._addQueryResults(connection, more=True)
551551
self._addQueryResults(connection)
552-
iterator = self._makeOne(query, client, limit=2)
552+
iterator = self._makeOne(query, client, limit=2, offset=13)
553553
entities = list(iterator)
554554

555555
self.assertFalse(iterator._more_results)
@@ -561,9 +561,11 @@ def test___iter___w_limit(self):
561561
self.assertEqual(entities[1]['foo'], u'Foo')
562562
qpb1 = _pb_from_query(query)
563563
qpb1.limit.value = 2
564+
qpb1.offset = 13
564565
qpb2 = _pb_from_query(query)
565566
qpb2.start_cursor = self._END
566567
qpb2.limit.value = 1
568+
qpb2.offset = 14
567569
EXPECTED1 = {
568570
'project': self._PROJECT,
569571
'query_pb': qpb1,

0 commit comments

Comments
 (0)