Exemplo n.º 1
0
    def Query(self, query, filters, orders):
        """Perform a query on this pseudo-kind.

    Args:
      query: the original datastore_pb.Query
      filters: the filters from query
      orders: the orders from query

    Returns:
      A query cursor to iterate over the query results, or None if the query
      is invalid.
    """
        namespace_range = datastore_stub_util.ParseNamespaceQuery(
            query, filters, orders)
        app_str = query.app()

        namespace_entities = []

        namespaces = self._stub._DatastoreSqliteStub__namespaces
        for app_id, namespace in sorted(namespaces):
            if app_id == app_str and namespace_range.Contains(namespace):
                if namespace:
                    ns_id = namespace
                else:
                    ns_id = datastore_types._EMPTY_NAMESPACE_ID
                namespace_entities.append(
                    MakeEntityForQuery(query, self.name, ns_id))

        return datastore_stub_util._ExecuteQuery(namespace_entities, query, [],
                                                 [], [])
    def Query(self, entities, query, filters, orders):
        """Perform a query on this pseudo-kind.

    Args:
      entities: all the app's entities.
      query: the original datastore_pb.Query.
      filters: the filters from query.
      orders: the orders from query.

    Returns:
      (results, remaining_filters, remaining_orders)
      results is a list of entity_pb.EntityProto
      remaining_filters and remaining_orders are the filters and orders that
      should be applied in memory
    """
        namespace_range = datastore_stub_util.ParseNamespaceQuery(
            query, filters, orders)
        app_str = query.app()

        namespaces = set()

        for app_namespace, _ in entities:
            (app_id,
             namespace) = datastore_types.DecodeAppIdNamespace(app_namespace)
            if app_id == app_str and namespace_range.Contains(namespace):
                namespaces.add(namespace)

        namespace_entities = []
        for namespace in namespaces:
            if namespace:
                namespace_e = datastore.Entity(self.name,
                                               name=namespace,
                                               _app=query.app())
            else:
                namespace_e = datastore.Entity(
                    self.name,
                    id=datastore_types._EMPTY_NAMESPACE_ID,
                    _app=query.app())
            namespace_entities.append(namespace_e._ToPb())

        return (namespace_entities, [], [])