thirdparty/google_appengine/google/appengine/api/datastore_file_stub.py
changeset 2413 d0b7dac5325c
parent 2309 be1b94099f2d
child 2864 2e0b0af889be
--- a/thirdparty/google_appengine/google/appengine/api/datastore_file_stub.py	Mon Jun 08 22:34:05 2009 +0200
+++ b/thirdparty/google_appengine/google/appengine/api/datastore_file_stub.py	Fri Jun 19 16:13:32 2009 +0200
@@ -508,13 +508,18 @@
 
 
   def _Dynamic_Get(self, get_request, get_response):
+    if get_request.has_transaction():
+      entities = self.__tx_snapshot
+    else:
+      entities = self.__entities
+
     for key in get_request.key_list():
       self.__ValidateAppId(key.app())
       app_kind = self._AppKindForKey(key)
 
       group = get_response.add_entity()
       try:
-        entity = self.__entities[app_kind][key].protobuf
+        entity = entities[app_kind][key].protobuf
       except KeyError:
         entity = None
 
@@ -545,9 +550,13 @@
 
   def _Dynamic_RunQuery(self, query, query_result):
     if not self.__tx_lock.acquire(False):
-      raise apiproxy_errors.ApplicationError(
-          datastore_pb.Error.BAD_REQUEST, 'Can\'t query inside a transaction.')
+      if not query.has_ancestor():
+        raise apiproxy_errors.ApplicationError(
+          datastore_pb.Error.BAD_REQUEST,
+          'Only ancestor queries are allowed inside transactions.')
+      entities = self.__tx_snapshot
     else:
+      entities = self.__entities
       self.__tx_lock.release()
 
     app = query.app()
@@ -598,7 +607,7 @@
 
     try:
       query.set_app(app)
-      results = self.__entities[app, query.kind()].values()
+      results = entities[app, query.kind()].values()
       results = [entity.native for entity in results]
     except KeyError:
       results = []