Пример #1
0
        public void EagerGqlQuery()
        {
            string projectId   = _fixture.ProjectId;
            string namespaceId = _fixture.NamespaceId;

            // Snippet: RunQuery(GqlQuery,*)
            DatastoreDb db         = DatastoreDb.Create(projectId, namespaceId);
            KeyFactory  keyFactory = db.CreateKeyFactory("player");

            // Prepare the data: a player with two game child entities
            Entity player = new Entity
            {
                Key      = keyFactory.CreateIncompleteKey(),
                ["name"] = "Sophie"
            };
            Key    playerKey = db.Insert(player);
            Entity game1     = new Entity
            {
                Key = playerKey.WithElement(new PathElement {
                    Kind = "game"
                }),
                ["score"]     = 10,
                ["timestamp"] = new DateTime(2017, 2, 16, 8, 35, 0, DateTimeKind.Utc)
            };
            Entity game2 = new Entity
            {
                Key = playerKey.WithElement(new PathElement {
                    Kind = "game"
                }),
                ["score"]     = 25,
                ["timestamp"] = new DateTime(2017, 3, 15, 10, 35, 0, DateTimeKind.Utc)
            };

            db.Insert(game1, game2);

            // Perform a query within a transaction
            using (DatastoreTransaction transaction = db.BeginTransaction())
            {
                // Any query executed in a transaction must at least have an ancestor filter.
                GqlQuery query = new GqlQuery
                {
                    QueryString   = "SELECT * FROM game WHERE __key__ HAS ANCESTOR @player LIMIT @limit",
                    NamedBindings =
                    {
                        { "player", playerKey },
                        { "limit",         10 }
                    }
                };
                DatastoreQueryResults results = db.RunQuery(query);
                // RunQuery fetches all the results into memory in a single call.
                // Constrast this with RunQueryLazily, which merely prepares an enumerable
                // query. Always specify a limit when you use RunQuery, to avoid running
                // out of memory.
                foreach (Entity entity in results.Entities)
                {
                    Console.WriteLine(entity);
                }
            }
            // End snippet
        }
Пример #2
0
        public void StructuredQuery()
        {
            string projectId   = _fixture.ProjectId;
            string namespaceId = _fixture.NamespaceId;

            // Snippet: RunQuery(Query,*,*)
            DatastoreDb db    = DatastoreDb.Create(projectId, namespaceId);
            Query       query = new Query("book")
            {
                Filter = Filter.Equal("author", "Jane Austen")
            };
            DatastoreQueryResults results = db.RunQuery(query);

            // DatastoreQueryResults implements IEnumerable<Entity>, but you can
            // call AsEntityResults(), AsBatches() or AsResponses() to see the query
            // results in whatever way makes most sense for your application.
            foreach (Entity entity in results)
            {
                Console.WriteLine(entity);
            }
            // End snippet

            // This will run the query again, admittedly...
            List <Entity> entities = results.ToList();

            Assert.Equal(1, entities.Count);
            Entity book = entities[0];

            Assert.Equal("Jane Austen", (string)book["author"]);
            Assert.Equal("Pride and Prejudice", (string)book["title"]);
        }
Пример #3
0
        public async Task EagerStructuredQueryAsync()
        {
            string projectId   = _fixture.ProjectId;
            string namespaceId = _fixture.NamespaceId;

            // Snippet: RunQueryAsync(Query,*,*)
            DatastoreDb db    = DatastoreDb.Create(projectId, namespaceId);
            Query       query = new Query("book")
            {
                Filter = Filter.Equal("author", "Jane Austen")
            };
            DatastoreQueryResults results = await db.RunQueryAsync(query);

            // RunQuery fetches all the results into memory in a single call.
            // Constrast this with RunQueryLazily, which merely prepares an enumerable
            // query. Always specify a limit when you use RunQuery, to avoid running
            // out of memory.
            foreach (Entity entity in results.Entities)
            {
                Console.WriteLine(entity);
            }
            // End snippet

            // This will run the query again, admittedly...
            Assert.Equal(1, results.Entities.Count);
            Entity book = results.Entities[0];

            Assert.Equal("Jane Austen", (string)book["author"]);
            Assert.Equal("Pride and Prejudice", (string)book["title"]);
        }
Пример #4
0
        public void GqlQuery()
        {
            string projectId   = _fixture.ProjectId;
            string namespaceId = _fixture.NamespaceId;

            // Snippet: RunQuery(GqlQuery,*,*)
            DatastoreDb db       = DatastoreDb.Create(projectId, namespaceId);
            GqlQuery    gqlQuery = new GqlQuery
            {
                QueryString   = "SELECT * FROM book WHERE author = @author",
                NamedBindings = { { "author", new GqlQueryParameter {
                                        Value = "Jane Austen"
                                    } } },
            };
            DatastoreQueryResults results = db.RunQuery(gqlQuery);

            // DatastoreQueryResults implements IEnumerable<Entity>, but you can
            // call AsEntityResults(), AsBatches() or AsResponses() to see the query
            // results in whatever way makes most sense for your application.
            foreach (Entity entity in results)
            {
                Console.WriteLine(entity);
            }
            // End snippet

            // This will run the query again, admittedly...
            List <Entity> entities = results.ToList();

            Assert.Equal(1, entities.Count);
            Entity book = entities[0];

            Assert.Equal("Jane Austen", (string)book["author"]);
            Assert.Equal("Pride and Prejudice", (string)book["title"]);
        }
Пример #5
0
        public async Task EagerGqlQueryAsync()
        {
            string projectId   = _fixture.ProjectId;
            string namespaceId = _fixture.NamespaceId;

            // Snippet: RunQueryAsync(GqlQuery,*,*)
            DatastoreDb db       = DatastoreDb.Create(projectId, namespaceId);
            GqlQuery    gqlQuery = new GqlQuery
            {
                QueryString   = "SELECT * FROM book WHERE author = @author",
                NamedBindings = { { "author", new GqlQueryParameter {
                                        Value = "Jane Austen"
                                    } } },
            };
            DatastoreQueryResults results = await db.RunQueryAsync(gqlQuery);

            // RunQuery fetches all the results into memory in a single call.
            // Constrast this with RunQueryLazily, which merely prepares an enumerable
            // query. Always specify a limit when you use RunQuery, to avoid running
            // out of memory.
            foreach (Entity entity in results.Entities)
            {
                Console.WriteLine(entity);
            }
            // End snippet

            // This will run the query again, admittedly...
            Assert.Equal(1, results.Entities.Count);
            Entity book = results.Entities[0];

            Assert.Equal("Jane Austen", (string)book["author"]);
            Assert.Equal("Pride and Prejudice", (string)book["title"]);
        }
        public void AsBatches()
        {
            var results  = new DatastoreQueryResults(_responses.Select(r => r.Clone()));
            var expected = new[] { _responses[0].Batch, _responses[1].Batch, _responses[2].Batch, _responses[3].Batch };

            Assert.Equal(expected, results.AsBatches());
        }
Пример #7
0
        public void PaginateWithCursor()
        {
            string projectId   = _fixture.ProjectId;
            string namespaceId = _fixture.NamespaceId;

            ByteString pageCursor = null;
            int        pageSize   = 5;
            // Sample: PaginateWithCursor
            Query query = new Query("Task")
            {
                Limit = pageSize, StartCursor = pageCursor ?? ByteString.Empty
            };
            DatastoreDb db = DatastoreDb.Create(projectId, namespaceId);

            DatastoreQueryResults results = db.RunQueryLazily(query, ReadConsistency.Eventual).GetAllResults();

            foreach (Entity entity in results.Entities)
            {
                // Do something with the task entity
            }
            if (results.MoreResults == MoreResultsType.MoreResultsAfterLimit)
            {
                ByteString nextPageCursor = results.EndCursor;
                // Store nextPageCursor to get the next page later.
            }
            // End sample
        }
Пример #8
0
 private static bool IsEmpty(DatastoreQueryResults results)
 {
     foreach (var result in results)
     {
         return(false);
     }
     return(true);
 }
Пример #9
0
        public void TestRunQuery()
        {
            UpsertTaskList();
            // [START run_query]
            Query query = new Query("Task");
            DatastoreQueryResults tasks = _db.RunQuery(query);

            // [END run_query]
            Assert.False(IsEmpty(tasks));
        }
        public void AsEntityResults()
        {
            var results  = new DatastoreQueryResults(_responses.Select(r => r.Clone()));
            var expected = _entityResults.ToList();

            expected[4].Cursor  = _responses[1].Batch.EndCursor;
            expected[14].Cursor = _responses[2].Batch.EndCursor;
            expected[19].Cursor = _responses[3].Batch.EndCursor;
            Assert.Equal(expected, results.AsEntityResults());
        }
Пример #11
0
    public Entity GetOneResult(Query q)
    {
        DatastoreQueryResults results = db.RunQuery(q);

        if (results.Entities.Count == 0)
        {
            return(null);
        }
        else
        {
            return(results.Entities[0]);
        }
    }
Пример #12
0
        // Key - idContent
        // Value - Totals
        public async Task <IDictionary <string, Content> > GetPhotoTotalsByTopic(string topic)
        {
            // select All UserPhoto, where
            var   keyTopic = new Key().WithElement("TopicTotals", topic);
            Query query    = new Query("ContentTotals")
            {
                Filter = Filter.HasAncestor(keyTopic),
            };

            DatastoreQueryResults results = await Db.RunQueryAsync(query, ReadOptions.Types.ReadConsistency.Strong);

            var userPhotos = results.Entities.Select(x => x.ToContent());

            return(userPhotos.ToDictionary(x => x.IdContent, x => x));
        }
Пример #13
0
        // Key - idContent
        // Value - My flags
        public async Task <IDictionary <string, UserPhoto> > GetUserPhotosByTopic(string topic, string idUser)
        {
            // select All UserPhoto, where
            var   keyTopic        = new Key().WithElement("Topic", topic);
            var   keyTopicAndUser = new KeyFactory(keyTopic, "User").CreateKey(idUser);
            Query query           = new Query("UserPhoto")
            {
                Filter = Filter.HasAncestor(keyTopicAndUser),
            };

            DatastoreQueryResults results = await Db.RunQueryAsync(query, ReadOptions.Types.ReadConsistency.Strong);

            var userPhotos = results.Entities.Select(x => x.ToUserPhoto());

            return(userPhotos.ToDictionary(x => x.IdContent, x => x));
        }
Пример #14
0
    public Model_Account FindAccount(string username, string discriminator)
    {
        Query query = new Query(Controller_Account.Enum.account)
        {
            Filter = Filter.And(Filter.Equal(Controller_Account.Enum.username, username),
                                Filter.Equal(Controller_Account.Enum.discriminator, discriminator))
        };
        DatastoreQueryResults results = db.RunQuery(query);

        if (results.Entities.Count == 0)
        {
            return(null);
        }
        else
        {
            return(Controller_Account.BuildController(results.Entities[0]).model);
        }
    }
Пример #15
0
        public Dictionary <string, double> GetMarketOdds(Guid gameId)
        {
            string gameIdString = gameId.ToString();
            Key    key          = _marketOddsKeyFactory.CreateKey(gameIdString);
            string store        = ConfigurationManager.AppSettings["datastoreMarketOddsKey"];
            Query  query        = new Query(store)
            {
                Filter = Filter.Equal("__key__", key)
            };

            DatastoreQueryResults datastoreQueryResults = DatastoreDb.RunQuery(query);

            if (datastoreQueryResults.Entities.Count == 0)
            {
                return(new Dictionary <string, double>());
            }

            string odds = datastoreQueryResults.Entities[0].Properties["odds"].StringValue;
            Dictionary <string, double> oddsDictionary = JsonConvert.DeserializeObject <Dictionary <string, double> >(odds);

            return(oddsDictionary);
        }
Пример #16
0
 private static bool IsEmpty(DatastoreQueryResults results) =>
 results.Entities.Count == 0;
        public void AsEntities()
        {
            var results = new DatastoreQueryResults(_responses.Select(r => r.Clone()));

            Assert.Equal(_entities, results);
        }