@@ -69,7 +69,7 @@ def __init__(self, kind=None, dataset=None, namespace=None):
6969 self ._dataset = dataset
7070 self ._namespace = namespace
7171 self ._pb = datastore_pb .Query ()
72- self ._cursor = None
72+ self ._cursor = self . _more_results = None
7373 self ._offset = 0
7474
7575 if kind :
@@ -85,6 +85,7 @@ def _clone(self):
8585 namespace = self ._namespace )
8686 clone ._pb .CopyFrom (self ._pb )
8787 clone ._cursor = self ._cursor
88+ clone ._more_results = self ._more_results
8889 return clone
8990
9091 def namespace (self ):
@@ -347,21 +348,22 @@ def fetch(self, limit=None):
347348 dataset_id = self .dataset ().id (),
348349 namespace = self ._namespace ,
349350 )
350- # NOTE: `query_results` contains two extra values that we don't use,
351- # namely `more_results` and `skipped_results`. The value of
352- # `more_results` is unusable because it always returns an enum
351+ # NOTE: `query_results` contains an extra value that we don't use,
352+ # namely `skipped_results`.
353+ #
354+ # NOTE: The value of `more_results` is not currently useful because
355+ # the back-end always returns an enum
353356 # value of MORE_RESULTS_AFTER_LIMIT even if there are no more
354357 # results. See
355358 # https://github.com/GoogleCloudPlatform/gcloud-python/issues/280
356359 # for discussion.
357- entity_pbs , end_cursor = query_results [:2 ]
360+ entity_pbs , self . _cursor , self . _more_results = query_results [:3 ]
358361
359- self ._cursor = end_cursor
360362 return [helpers .entity_from_protobuf (entity , dataset = self .dataset ())
361363 for entity in entity_pbs ]
362364
363365 def cursor (self ):
364- """Returns cursor ID
366+ """Returns cursor ID from most recent ``fetch()``.
365367
366368 .. warning:: Invoking this method on a query that has not yet
367369 been executed will raise a RuntimeError.
@@ -374,6 +376,28 @@ def cursor(self):
374376 raise RuntimeError ('No cursor' )
375377 return base64 .b64encode (self ._cursor )
376378
379+ def more_results (self ):
380+ """Returns ``more_results`` flag from most recent ``fetch()``.
381+
382+ .. warning:: Invoking this method on a query that has not yet
383+ been executed will raise a RuntimeError.
384+
385+ .. note::
386+
387+ The `more_results` is not currently useful because it is
388+ always returned by the back-end as ``MORE_RESULTS_AFTER_LIMIT``
389+ even if there are no more results. See
390+ https://github.com/GoogleCloudPlatform/gcloud-python/issues/280
391+ for discussion.
392+
393+ :rtype: :class:`gcloud.datastore.datastore_v1_pb2.
394+ QueryResultBatch.MoreResultsType`
395+ :returns: enumerated value: are there more results available.
396+ """
397+ if self ._more_results is None :
398+ raise RuntimeError ('No results' )
399+ return self ._more_results
400+
377401 def with_cursor (self , start_cursor , end_cursor = None ):
378402 """Specifies the starting / ending positions in a query's result set.
379403
0 commit comments