Ejemplo n.º 1
0
        public async Task QuerySinglePartitionItemStreamTest(int perPKItemCount, int maxItemCount)
        {
            IList <ToDoActivity> deleteList = deleteList = await this.CreateRandomItems(pkCount : 3, perPKItemCount : perPKItemCount, randomPartitionKey : true);

            ToDoActivity find = deleteList.First();

            CosmosSqlQueryDefinition sql = new CosmosSqlQueryDefinition("select * from r");

            int    iterationCount         = 0;
            int    totalReadItem          = 0;
            int    expectedIterationCount = perPKItemCount / maxItemCount;
            string lastContinuationToken  = null;

            do
            {
                iterationCount++;
                CosmosResultSetIterator setIterator = this.Container.Items
                                                      .CreateItemQueryAsStream(sql, 1, find.status,
                                                                               maxItemCount: maxItemCount,
                                                                               continuationToken: lastContinuationToken,
                                                                               requestOptions: new CosmosQueryRequestOptions());

                using (CosmosQueryResponse response = await setIterator.FetchNextSetAsync())
                {
                    lastContinuationToken = response.ContinuationToken;
                    Trace.TraceInformation($"ContinuationToken: {lastContinuationToken}");
                    JsonSerializer serializer = new JsonSerializer();

                    using (StreamReader sr = new StreamReader(response.Content))
                        using (JsonTextReader jtr = new JsonTextReader(sr))
                        {
                            ToDoActivity[] results            = serializer.Deserialize <ToDoActivity[]>(jtr);
                            ToDoActivity[] readTodoActivities = results.OrderBy(e => e.id)
                                                                .ToArray();

                            ToDoActivity[] expectedTodoActivities = deleteList
                                                                    .Where(e => e.status == find.status)
                                                                    .Where(e => readTodoActivities.Any(e1 => e1.id == e.id))
                                                                    .OrderBy(e => e.id)
                                                                    .ToArray();

                            totalReadItem += expectedTodoActivities.Length;
                            string expectedSerialized = JsonConvert.SerializeObject(expectedTodoActivities);
                            string readSerialized     = JsonConvert.SerializeObject(readTodoActivities);
                            Trace.TraceInformation($"Expected: {Environment.NewLine} {expectedSerialized}");
                            Trace.TraceInformation($"Read: {Environment.NewLine} {readSerialized}");

                            int count = results.Length;
                            Assert.AreEqual(maxItemCount, count);

                            Assert.AreEqual(expectedSerialized, readSerialized);

                            Assert.AreEqual(maxItemCount, expectedTodoActivities.Length);
                        }
                }
            }while (lastContinuationToken != null);

            Assert.AreEqual(expectedIterationCount, iterationCount);
            Assert.AreEqual(perPKItemCount, totalReadItem);
        }
        public async Task IteratorTest()
        {
            string sprocBody      = "function() { { var x = 42; } }";
            int    numberOfSprocs = 3;

            string[] sprocIds = new string[numberOfSprocs];

            for (int i = 0; i < numberOfSprocs; i++)
            {
                string sprocId = Guid.NewGuid().ToString();
                sprocIds[i] = sprocId;

                CosmosStoredProcedureResponse storedProcedureResponse =
                    await this.container.StoredProcedures.CreateStoredProceducreAsync(sprocId, sprocBody);

                Assert.AreEqual(HttpStatusCode.Created, storedProcedureResponse.StatusCode);
            }

            List <string> readSprocIds = new List <string>();
            CosmosResultSetIterator <CosmosStoredProcedureSettings> iter = this.container.StoredProcedures.GetStoredProcedureIterator();

            while (iter.HasMoreResults)
            {
                CosmosQueryResponse <CosmosStoredProcedureSettings> currentResultSet = await iter.FetchNextSetAsync();

                {
                    foreach (CosmosStoredProcedureSettings storedProcedureSettingsEntry in currentResultSet)
                    {
                        readSprocIds.Add(storedProcedureSettingsEntry.Id);
                    }
                }
            }

            CollectionAssert.AreEquivalent(sprocIds, readSprocIds);
        }
Ejemplo n.º 3
0
        private static async Task <SalesOrder> QueryItems()
        {
            //******************************************************************************************************************
            // 1.4 - Query for items by a property other than Id
            //
            // NOTE: Operations like AsEnumerable(), ToList(), ToArray() will make as many trips to the database
            //       as required to fetch the entire result-set. Even if you set MaxItemCount to a smaller number.
            //       MaxItemCount just controls how many results to fetch each trip.
            //       If you don't want to fetch the full set of results, then use CreateItemQuery().AsItemQuery()
            //       For more on this please refer to the Queries project.
            //
            // NOTE: If you want to get the RU charge for a query you also need to use CreateItemQuery().AsItemQuery()
            //       and check the RequestCharge property of this IQueryable response
            //       Once again, refer to the Queries project for more information and examples of this
            //******************************************************************************************************************
            Console.WriteLine("\n1.4 - Querying for a item using its AccountNumber property");

            CosmosSqlQueryDefinition query = new CosmosSqlQueryDefinition(
                "select * from sales s where s.AccountNumber = @AccountInput ")
                                             .UseParameter("@AccountInput", "Account1");

            CosmosResultSetIterator <SalesOrder> resultSet = container.Items.CreateItemQuery <SalesOrder>(
                query, maxConcurrency: 1,
                maxItemCount: 1);

            while (resultSet.HasMoreResults)
            {
                SalesOrder sale = (await resultSet.FetchNextSetAsync()).First();
                Console.WriteLine($"Account Number: {sale.AccountNumber}; Id: {sale.Id} ");
                return(sale);
            }

            throw new ArgumentNullException("No Sale order found by query");
        }
        public async Task VerifyCosmosDefaultResultSetStreamIteratorOperationType()
        {
            CosmosClient mockClient = MockDocumentClient.CreateMockCosmosClient();

            CosmosDatabase           database    = new CosmosDatabase(mockClient, "database");
            CosmosContainer          container   = new CosmosContainer(database, "container");
            CosmosItems              item        = new CosmosItems(container);
            CosmosSqlQueryDefinition sql         = new CosmosSqlQueryDefinition("select * from r");
            CosmosResultSetIterator  setIterator = item
                                                   .CreateItemQueryAsStream(sql, "pk", requestOptions: new CosmosQueryRequestOptions());

            TestHandler testHandler = new TestHandler((request, cancellationToken) => {
                Assert.AreEqual(
                    15, //OperationType.SqlQuery
                    (int)request.GetType().GetProperty("OperationType", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(request, null)
                    );
                return(TestHandler.ReturnSuccess());
            });

            mockClient.RequestHandler.InnerHandler = testHandler;
            mockClient.CosmosConfiguration.UseConnectionModeDirect();
            CosmosResponseMessage response = await setIterator.FetchNextSetAsync();

            testHandler = new TestHandler((request, cancellationToken) => {
                Assert.AreEqual(
                    14, //OperationType.Query
                    (int)request.GetType().GetProperty("OperationType", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(request, null)
                    );
                return(TestHandler.ReturnSuccess());
            });
            mockClient.RequestHandler.InnerHandler = testHandler;
            mockClient.CosmosConfiguration.UseConnectionModeGateway();
            response = await setIterator.FetchNextSetAsync();
        }
Ejemplo n.º 5
0
        private static async Task QueryItemsInPartitionAsStreams(CosmosContainer container)
        {
            // SQL
            CosmosResultSetIterator setIterator = container.Items.CreateItemQueryAsStream("SELECT F.id, F.LastName, F.IsRegistered FROM Families F", partitionKey: "Anderson", maxItemCount: 1);

            int count = 0;

            while (setIterator.HasMoreResults)
            {
                using (CosmosResponseMessage response = await setIterator.FetchNextSetAsync())
                {
                    response.EnsureSuccessStatusCode();
                    count++;
                    using (StreamReader sr = new StreamReader(response.Content))
                        using (JsonTextReader jtr = new JsonTextReader(sr))
                        {
                            JsonSerializer jsonSerializer = new JsonSerializer();
                            dynamic        items          = jsonSerializer.Deserialize <dynamic>(jtr);
                            Assert("Expected one family", items.Documents.Count == 1);
                            dynamic item = items.Documents[0];
                            Assert($"Expected LastName: Anderson Actual: {item.LastName}", string.Equals("Anderson", item.LastName.ToString(), StringComparison.InvariantCulture));
                        }
                }
            }

            Assert("Expected 1 family", count == 1);
        }
Ejemplo n.º 6
0
                public bool MoveNext()
                {
                    if (_underlyingEnumerator == null)
                    {
                        if (_query == null)
                        {
                            _query = _cosmosClient.CreateQuery <JObject>(_containerId, _cosmosSqlQuery);
                        }

                        if (!_query.HasMoreResults)
                        {
                            Current = default;
                            return(false);
                        }

                        _underlyingEnumerator = _query.FetchNextSetAsync().GetAwaiter().GetResult().GetEnumerator();
                    }

                    var hasNext = _underlyingEnumerator.MoveNext();

                    if (hasNext)
                    {
                        Current = (JObject)_underlyingEnumerator.Current.First.First;
                        return(true);
                    }

                    _underlyingEnumerator.Dispose();
                    _underlyingEnumerator = null;

                    return(MoveNext());
                }
Ejemplo n.º 7
0
                public async Task <bool> MoveNext(CancellationToken cancellationToken)
                {
                    cancellationToken.ThrowIfCancellationRequested();

                    if (_underlyingEnumerator == null)
                    {
                        if (_query == null)
                        {
                            _query = _cosmosClient.CreateQuery <JObject>(_containerId, _cosmosSqlQuery);
                        }

                        if (!_query.HasMoreResults)
                        {
                            Current = default;
                            return(false);
                        }

                        _underlyingEnumerator = (await _query.FetchNextSetAsync(cancellationToken)).GetEnumerator();
                    }

                    var hasNext = _underlyingEnumerator.MoveNext();

                    if (hasNext)
                    {
                        Current = (JObject)_underlyingEnumerator.Current.First.First;
                        return(true);
                    }

                    _underlyingEnumerator.Dispose();
                    _underlyingEnumerator = null;
                    return(await MoveNext(cancellationToken));
                }
        public async Task ItemIterator()
        {
            IList <ToDoActivity> deleteList = null;
            HashSet <string>     itemIds    = null;

            try
            {
                deleteList = await CreateRandomItems(3, randomPartitionKey : true);

                itemIds = deleteList.Select(x => x.id).ToHashSet <string>();
                CosmosResultSetIterator <ToDoActivity> setIterator =
                    this.Container.Items.GetItemIterator <ToDoActivity>();
                while (setIterator.HasMoreResults)
                {
                    foreach (ToDoActivity toDoActivity in await setIterator.FetchNextSetAsync(this.cancellationToken))
                    {
                        if (itemIds.Contains(toDoActivity.id))
                        {
                            itemIds.Remove(toDoActivity.id);
                        }
                    }
                }
            }
            finally
            {
                foreach (ToDoActivity delete in deleteList)
                {
                    CosmosResponseMessage deleteResponse = await this.Container.Items.DeleteItemStreamAsync(delete.status, delete.id);

                    deleteResponse.Dispose();
                }
            }

            Assert.AreEqual(itemIds.Count, 0);
        }
Ejemplo n.º 9
0
        public async Task IteratorTest()
        {
            string containerName    = Guid.NewGuid().ToString();
            string partitionKeyPath = "/users";

            CosmosContainerResponse containerResponse = await this.cosmosDatabase.Containers.CreateContainerAsync(containerName, partitionKeyPath);

            Assert.AreEqual(HttpStatusCode.Created, containerResponse.StatusCode);
            Assert.AreEqual(containerName, containerResponse.Resource.Id);
            Assert.AreEqual(partitionKeyPath, containerResponse.Resource.PartitionKey.Paths.First());

            HashSet <string> containerIds = new HashSet <string>();
            CosmosResultSetIterator <CosmosContainerSettings> resultSet = this.cosmosDatabase.Containers.GetContainerIterator();

            while (resultSet.HasMoreResults)
            {
                foreach (CosmosContainerSettings setting in await resultSet.FetchNextSetAsync())
                {
                    if (!containerIds.Contains(setting.Id))
                    {
                        containerIds.Add(setting.Id);
                    }
                }
            }

            Assert.IsTrue(containerIds.Count > 0, "The iterator did not find any containers.");
            Assert.IsTrue(containerIds.Contains(containerName), "The iterator did not find the created container");

            containerResponse = await containerResponse.Container.DeleteAsync();

            Assert.AreEqual(HttpStatusCode.NoContent, containerResponse.StatusCode);
        }
Ejemplo n.º 10
0
        public async Task ValidateMaxItemCountOnItemQuery()
        {
            IList <ToDoActivity> deleteList = await this.CreateRandomItems(6, randomPartitionKey : false);

            ToDoActivity             toDoActivity = deleteList.First();
            CosmosSqlQueryDefinition sql          = new CosmosSqlQueryDefinition(
                "select * from toDoActivity t where t.status = @status")
                                                    .UseParameter("@status", toDoActivity.status);

            // Test max size at 1
            CosmosResultSetIterator <ToDoActivity> setIterator =
                this.Container.Items.CreateItemQuery <ToDoActivity>(sql, toDoActivity.status, maxItemCount: 1);

            while (setIterator.HasMoreResults)
            {
                CosmosQueryResponse <ToDoActivity> iter = await setIterator.FetchNextSetAsync();

                Assert.AreEqual(1, iter.Count());
            }

            // Test max size at 2
            CosmosResultSetIterator <ToDoActivity> setIteratorMax2 =
                this.Container.Items.CreateItemQuery <ToDoActivity>(sql, toDoActivity.status, maxItemCount: 2);

            while (setIteratorMax2.HasMoreResults)
            {
                CosmosQueryResponse <ToDoActivity> iter = await setIteratorMax2.FetchNextSetAsync();

                Assert.AreEqual(2, iter.Count());
            }
        }
Ejemplo n.º 11
0
        public async Task ItemMultiplePartitionQuery()
        {
            IList <ToDoActivity> deleteList = await this.CreateRandomItems(3, randomPartitionKey : true);

            ToDoActivity             find = deleteList.First();
            CosmosSqlQueryDefinition sql  = new CosmosSqlQueryDefinition("select * from toDoActivity t where t.id = '" + find.id + "'");

            CosmosQueryRequestOptions requestOptions = new CosmosQueryRequestOptions()
            {
                MaxBufferedItemCount = 10,
                ResponseContinuationTokenLimitInKb = 500
            };

            CosmosResultSetIterator <ToDoActivity> setIterator =
                this.Container.Items.CreateItemQuery <ToDoActivity>(sql, maxConcurrency: 1, maxItemCount: 1, requestOptions: requestOptions);

            while (setIterator.HasMoreResults)
            {
                CosmosQueryResponse <ToDoActivity> iter = await setIterator.FetchNextSetAsync();

                Assert.AreEqual(1, iter.Count());
                ToDoActivity response = iter.First();
                Assert.AreEqual(find.id, response.id);
            }
        }
        public async Task ItemMultiplePartitionOrderByQueryStream()
        {
            IList <ToDoActivity> deleteList = new List <ToDoActivity>();

            try
            {
                deleteList = await CreateRandomItems(300, randomPartitionKey : true);

                CosmosSqlQueryDefinition sql = new CosmosSqlQueryDefinition("SELECT * FROM toDoActivity t ORDER BY t.taskNum ");

                CosmosQueryRequestOptions requestOptions = new CosmosQueryRequestOptions()
                {
                    MaxBufferedItemCount = 10,
                    ResponseContinuationTokenLimitInKb = 500
                };

                List <ToDoActivity> resultList      = new List <ToDoActivity>();
                double totalRequstCharge            = 0;
                CosmosResultSetIterator setIterator =
                    this.Container.Items.CreateItemQueryAsStream(sql, maxConcurrency: 5, maxItemCount: 1, requestOptions: requestOptions);
                while (setIterator.HasMoreResults)
                {
                    using (CosmosQueryResponse iter = await setIterator.FetchNextSetAsync())
                    {
                        Assert.IsTrue(iter.IsSuccess);
                        Assert.IsNull(iter.ErrorMessage);
                        Assert.IsTrue(iter.Count <= 5);
                        totalRequstCharge += iter.RequestCharge;

                        ToDoActivity response = this.jsonSerializer.FromStream <ToDoActivity[]>(iter.Content).First();
                        resultList.Add(response);
                    }
                }

                Assert.AreEqual(deleteList.Count, resultList.Count);
                Assert.IsTrue(totalRequstCharge > 0);

                List <ToDoActivity> verifiedOrderBy = deleteList.OrderBy(x => x.taskNum).ToList();
                for (int i = 0; i < verifiedOrderBy.Count(); i++)
                {
                    Assert.AreEqual(verifiedOrderBy[i].taskNum, resultList[i].taskNum);
                    Assert.AreEqual(verifiedOrderBy[i].id, resultList[i].id);
                }
            }
            finally
            {
                foreach (ToDoActivity delete in deleteList)
                {
                    CosmosResponseMessage deleteResponse = await this.Container.Items.DeleteItemStreamAsync(delete.status, delete.id);

                    deleteResponse.Dispose();
                }
            }
        }
Ejemplo n.º 13
0
        /// <summary>
        ///  The function demonstrates migrating documents that were inserted without a value for partition key, and those inserted
        ///  pre-migration to other logical partitions, those with a value for partition key.
        /// </summary>
        private static async Task MigratedItemsFromNonePartitionKeyToValidPartitionKeyValue(CosmosContainer container)
        {
            // Pre-create a few items in the container to demo the migration
            const int ItemsToCreate = 4;

            // Insert a few items with no Partition Key
            for (int i = 0; i < ItemsToCreate; i++)
            {
                string itemid = Guid.NewGuid().ToString();
                DeviceInformationItem itemWithoutPK = GetDeviceWithNoPartitionKey(itemid);
                CosmosItemResponse <DeviceInformationItem> createResponse = await container.Items.CreateItemAsync <DeviceInformationItem>(
                    partitionKey : CosmosContainerSettings.NonePartitionKeyValue,
                    item : itemWithoutPK);
            }

            // Query items on the container that have no partition key value by supplying NonePartitionKeyValue
            // The operation is made in batches to not lose work in case of partial execution
            int resultsFetched           = 0;
            CosmosSqlQueryDefinition sql = new CosmosSqlQueryDefinition("select * from r");
            CosmosResultSetIterator <DeviceInformationItem> setIterator = container.Items
                                                                          .CreateItemQuery <DeviceInformationItem>(sql, partitionKey: CosmosContainerSettings.NonePartitionKeyValue, maxItemCount: 2);

            while (setIterator.HasMoreResults)
            {
                CosmosQueryResponse <DeviceInformationItem> queryResponse = await setIterator.FetchNextSetAsync();

                resultsFetched += queryResponse.Count();

                // For the items returned with NonePartitionKeyValue
                IEnumerator <DeviceInformationItem> iter = queryResponse.GetEnumerator();
                while (iter.MoveNext())
                {
                    DeviceInformationItem item = iter.Current;
                    if (item.DeviceId != null)
                    {
                        // Using existing deviceID for partition key
                        item.PartitionKey = item.DeviceId;
                        Console.WriteLine("Migrating item {0} to Partition {1}", item.Id, item.DeviceId);
                        // Re-Insert into container with a partition key
                        // This could result in exception if the same item was inserted in a previous run of the program on existing container
                        // and the program stopped before the delete.
                        CosmosItemResponse <DeviceInformationItem> createResponseWithPk = await container.Items.CreateItemAsync <DeviceInformationItem>(
                            partitionKey : item.PartitionKey,
                            item : item);

                        // Deleting item from fixed container with CosmosContainerSettings.NonePartitionKeyValue.
                        CosmosItemResponse <DeviceInformationItem> deleteResponseWithoutPk = await container.Items.DeleteItemAsync <DeviceInformationItem>(
                            partitionKey : CosmosContainerSettings.NonePartitionKeyValue,
                            id : item.Id);
                    }
                }
            }
        }
Ejemplo n.º 14
0
        public static async Task <List <T> > ToList <T>(this CosmosResultSetIterator <T> queryResultSetIterator)
        {
            var results = new List <T>();

            while (queryResultSetIterator.HasMoreResults)
            {
                var currentResultSet = await queryResultSetIterator.FetchNextSetAsync();

                results.AddRange(currentResultSet);
            }

            return(results);
        }
Ejemplo n.º 15
0
        /// <summary>
        /// List the container within a database by calling the GetContainerIterator (scan) API.
        /// </summary>
        /// <returns></returns>
        private static async Task ListContainersInDatabase()
        {
            Console.WriteLine("\n5. Reading all CosmosContainer resources for a database");

            CosmosResultSetIterator <CosmosContainerSettings> resultSetIterator = database.Containers.GetContainerIterator();

            while (resultSetIterator.HasMoreResults)
            {
                foreach (CosmosContainerSettings container in await resultSetIterator.FetchNextSetAsync())
                {
                    Console.WriteLine(container.Id);
                }
            }
        }
        public async Task ValidateUserDefinedFunctionsTest()
        {
            // Prevent failures if previous test did not clean up correctly
            await this.container.UserDefinedFunctions["calculateTax"].DeleteAsync();

            ToDoActivity item = new ToDoActivity()
            {
                id          = Guid.NewGuid().ToString(),
                cost        = 9001,
                description = "udf_test_item",
                status      = "Done",
                taskNum     = 1
            };

            await this.container.Items.CreateItemAsync <ToDoActivity>(item.status, item);

            CosmosUserDefinedFunction cosmosUserDefinedFunction = await this.container.UserDefinedFunctions.CreateUserDefinedFunctionAsync(
                new CosmosUserDefinedFunctionSettings
            {
                Id   = "calculateTax",
                Body = @"function(amt) { return amt * 0.05; }"
            });

            CosmosSqlQueryDefinition sqlQuery = new CosmosSqlQueryDefinition(
                "SELECT t.id, t.status, t.cost, udf.calculateTax(t.cost) as total FROM toDoActivity t where t.cost > @expensive and t.status = @status")
                                                .UseParameter("@expensive", 9000)
                                                .UseParameter("@status", "Done");

            CosmosResultSetIterator <dynamic> setIterator = this.container.Items.CreateItemQuery <dynamic>(
                sqlQueryDefinition: sqlQuery,
                partitionKey: "Done");

            HashSet <string> iterIds = new HashSet <string>();

            while (setIterator.HasMoreResults)
            {
                foreach (var response in await setIterator.FetchNextSetAsync())
                {
                    Assert.IsTrue(response.cost > 9000);
                    Assert.AreEqual(response.cost * .05, response.total);
                    iterIds.Add(response.id.Value);
                }
            }

            Assert.IsTrue(iterIds.Count > 0);
            Assert.IsTrue(iterIds.Contains(item.id));

            // Delete existing user defined functions.
            await cosmosUserDefinedFunction.DeleteAsync();
        }
Ejemplo n.º 17
0
        public async Task ItemQueryStreamSerializationSetting()
        {
            IList <ToDoActivity> deleteList = await this.CreateRandomItems(101, randomPartitionKey : true);

            CosmosSqlQueryDefinition   sql     = new CosmosSqlQueryDefinition("SELECT * FROM toDoActivity t ORDER BY t.taskNum");
            CosmosSerializationOptions options = new CosmosSerializationOptions(
                ContentSerializationFormat.CosmosBinary.ToString(),
                (content) => JsonNavigator.Create(content),
                () => JsonWriter.Create(JsonSerializationFormat.Binary));

            CosmosQueryRequestOptions requestOptions = new CosmosQueryRequestOptions()
            {
                CosmosSerializationOptions = options
            };

            List <ToDoActivity> resultList      = new List <ToDoActivity>();
            double totalRequstCharge            = 0;
            CosmosResultSetIterator setIterator =
                this.Container.Items.CreateItemQueryAsStream(sql, maxConcurrency: 5, maxItemCount: 5, requestOptions: requestOptions);

            while (setIterator.HasMoreResults)
            {
                using (CosmosQueryResponse iter = await setIterator.FetchNextSetAsync())
                {
                    Assert.IsTrue(iter.IsSuccess);
                    Assert.IsNull(iter.ErrorMessage);
                    Assert.IsTrue(iter.Count <= 5);
                    totalRequstCharge += iter.RequestCharge;
                    IJsonReader reader     = JsonReader.Create(iter.Content);
                    IJsonWriter textWriter = JsonWriter.Create(JsonSerializationFormat.Text);
                    textWriter.WriteAll(reader);
                    string json = Encoding.UTF8.GetString(textWriter.GetResult());
                    Assert.IsNotNull(json);
                    ToDoActivity[] responseActivities = JsonConvert.DeserializeObject <ToDoActivity[]>(json);
                    resultList.AddRange(responseActivities);
                }
            }

            Assert.AreEqual(deleteList.Count, resultList.Count);
            Assert.IsTrue(totalRequstCharge > 0);

            List <ToDoActivity> verifiedOrderBy = deleteList.OrderBy(x => x.taskNum).ToList();

            for (int i = 0; i < verifiedOrderBy.Count(); i++)
            {
                Assert.AreEqual(verifiedOrderBy[i].taskNum, resultList[i].taskNum);
                Assert.AreEqual(verifiedOrderBy[i].id, resultList[i].id);
            }
        }
Ejemplo n.º 18
0
        /// <summary>
        /// Run basic database meta data operations as a console application.
        /// </summary>
        /// <returns></returns>
        private static async Task RunDatabaseDemo(CosmosClient client)
        {
            // An object containing relevant information about the response
            CosmosDatabaseResponse databaseResponse = await client.Databases.CreateDatabaseIfNotExistsAsync(databaseId, 10000);

            // A client side reference object that allows additional operations like ReadAsync
            CosmosDatabase database = databaseResponse;

            // The response from Azure Cosmos
            CosmosDatabaseSettings settings = databaseResponse;

            Console.WriteLine($"\n1. Create a database resource with id: {settings.Id} and last modified time stamp: {settings.LastModified}");
            Console.WriteLine($"\n2. Create a database resource request charge: {databaseResponse.RequestCharge} and Activity Id: {databaseResponse.ActivityId}");

            // Read the database from Azure Cosmos
            CosmosDatabaseResponse readResponse = await database.ReadAsync();

            Console.WriteLine($"\n3. Read a database: {readResponse.Resource.Id}");

            await readResponse.Database.Containers.CreateContainerAsync("testContainer", "/pk");

            // Get the current throughput for the database
            int?throughput = await database.ReadProvisionedThroughputAsync();

            if (throughput.HasValue)
            {
                Console.WriteLine($"\n4. Read a database throughput: {throughput.Value}");

                // Update the current throughput for the database
                await database.ReplaceProvisionedThroughputAsync(11000);
            }

            Console.WriteLine("\n5. Reading all databases resources for an account");
            CosmosResultSetIterator <CosmosDatabaseSettings> iterator = client.Databases.GetDatabaseIterator();

            do
            {
                foreach (CosmosDatabaseSettings db in await iterator.FetchNextSetAsync())
                {
                    Console.WriteLine(db.Id);
                }
            } while (iterator.HasMoreResults);

            // Delete the database from Azure Cosmos.
            await database.DeleteAsync();

            Console.WriteLine($"\n6. Database {database.Id} deleted.");
        }
        /*
         * Run a query (using Azure Cosmos DB SQL syntax) against the container
         */
        public async Task <List <MoviesModel> > GetAllMovies()
        {
            List <MoviesModel> movies = new List <MoviesModel>();

            // SQL
            CosmosResultSetIterator <MoviesModel> setIterator = movieContainer.Items.GetItemIterator <MoviesModel>(maxItemCount: 1);

            while (setIterator.HasMoreResults)
            {
                foreach (MoviesModel item in await setIterator.FetchNextSetAsync())
                {
                    movies.Add(item);
                }
            }

            return(movies);
        }
        public async Task VerifyCosmosDefaultResultSetStreamIteratorOperationType()
        {
            CosmosClient mockClient = MockCosmosUtil.CreateMockCosmosClient(
                (cosmosClientBuilder) => cosmosClientBuilder.UseConnectionModeDirect());

            CosmosContainer          container   = mockClient.Databases["database"].Containers["container"];
            CosmosSqlQueryDefinition sql         = new CosmosSqlQueryDefinition("select * from r");
            CosmosResultSetIterator  setIterator = container.Items.CreateItemQueryAsStream(
                sqlQueryDefinition: sql,
                maxConcurrency: 1,
                partitionKey: "pk",
                requestOptions: new CosmosQueryRequestOptions());

            TestHandler testHandler = new TestHandler((request, cancellationToken) => {
                Assert.AreEqual(
                    15, //OperationType.SqlQuery
                    (int)request.GetType().GetProperty("OperationType", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(request, null)
                    );
                return(TestHandler.ReturnSuccess());
            });

            mockClient.RequestHandler.InnerHandler = testHandler;
            CosmosQueryResponse response = await setIterator.FetchNextSetAsync();

            //Test gateway mode
            mockClient = MockCosmosUtil.CreateMockCosmosClient(
                (cosmosClientBuilder) => cosmosClientBuilder.UseConnectionModeGateway());
            container   = mockClient.Databases["database"].Containers["container"];
            setIterator = container.Items.CreateItemQueryAsStream(
                sqlQueryDefinition: sql,
                maxConcurrency: 1,
                partitionKey: "pk",
                requestOptions: new CosmosQueryRequestOptions());
            testHandler = new TestHandler((request, cancellationToken) => {
                Assert.AreEqual(
                    14, //OperationType.Query
                    (int)request.GetType().GetProperty("OperationType", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).GetValue(request, null)
                    );
                return(TestHandler.ReturnSuccess());
            });

            mockClient.RequestHandler.InnerHandler = testHandler;
            response = await setIterator.FetchNextSetAsync();
        }
Ejemplo n.º 21
0
        private static async Task ItemFeed(CosmosContainer container)
        {
            List <Family> families = new List <Family>();

            // SQL
            CosmosResultSetIterator <Family> setIterator = container.Items.GetItemIterator <Family>(maxItemCount: 1);

            while (setIterator.HasMoreResults)
            {
                int count = 0;
                foreach (Family item in await setIterator.FetchNextSetAsync())
                {
                    Assert("Should only return 1 result at a time.", count <= 1);
                    families.Add(item);
                }
            }

            Assert("Expected two families", families.ToList().Count == 2);
        }
Ejemplo n.º 22
0
        private static async Task QueryWithSqlParameters(CosmosContainer container)
        {
            // Query using two properties within each item. WHERE Id == "" AND Address.City == ""
            // notice here how we are doing an equality comparison on the string value of City

            CosmosSqlQueryDefinition query = new CosmosSqlQueryDefinition("SELECT * FROM Families f WHERE f.id = @id AND f.Address.City = @city")
                                             .UseParameter("@id", "AndersonFamily")
                                             .UseParameter("@city", "Seattle");

            List <Family> results = new List <Family>();
            CosmosResultSetIterator <Family> resultSetIterator = container.Items.CreateItemQuery <Family>(query, partitionKey: "Anderson");

            while (resultSetIterator.HasMoreResults)
            {
                results.AddRange((await resultSetIterator.FetchNextSetAsync()));
            }

            Assert("Expected only 1 family", results.Count == 1);
        }
        public async Task <IList <Ad> > GetAdsAsync()
        {
            List <Ad> ads = new List <Ad>();

            try
            {
                var response = await cache.StringGetAsync("1").ConfigureAwait(false);

                if (String.IsNullOrEmpty(response))
                {
                    var sqlQueryText      = "SELECT * FROM c WHERE c.MessageType = 'AD'";
                    var partitionKeyValue = "AD";  // Message type

                    CosmosSqlQueryDefinition     queryDefinition        = new CosmosSqlQueryDefinition(sqlQueryText);
                    CosmosResultSetIterator <Ad> queryResultSetIterator = container.Items.CreateItemQuery <Ad>(queryDefinition, partitionKeyValue);
                    while (queryResultSetIterator.HasMoreResults)
                    {
                        CosmosQueryResponse <Ad> currentResultSet = await queryResultSetIterator.FetchNextSetAsync();

                        ads.AddRange(currentResultSet);
                    }

                    await cache.StringSetAsync("1", JsonConvert.SerializeObject(ads.First()), TimeSpan.FromMinutes(10));
                }
                else
                {
                    ads.Add(JsonConvert.DeserializeObject <Ad>(response));
                }
            }
            catch (Exception ex) when(ex is RedisConnectionException ||
                                      ex is RedisException ||
                                      ex is RedisCommandException ||
                                      ex is RedisServerException ||
                                      ex is RedisTimeoutException ||
                                      ex is CosmosException ||
                                      ex is TimeoutException)
            {
                throw new AdRepositoryException("Repository Connection Exception", ex);
            }

            return(ads);
        }
        public async Task TriggersIteratorTest()
        {
            CosmosTrigger cosmosTrigger = await CreateRandomTrigger();

            HashSet <string> settings = new HashSet <string>();
            CosmosResultSetIterator <CosmosTriggerSettings> iter = this.container.Triggers.GetTriggerIterator();;

            while (iter.HasMoreResults)
            {
                foreach (CosmosTriggerSettings storedProcedureSettingsEntry in await iter.FetchNextSetAsync())
                {
                    settings.Add(storedProcedureSettingsEntry.Id);
                }
            }

            Assert.IsTrue(settings.Contains(cosmosTrigger.Id), "The iterator did not return the user defined function definition.");

            // Delete existing user defined functions.
            await cosmosTrigger.DeleteAsync();
        }
        public async Task DatabaseIterator()
        {
            List <CosmosDatabase> deleteList  = new List <CosmosDatabase>();
            HashSet <string>      databaseIds = new HashSet <string>();

            try
            {
                for (int i = 0; i < 3; i++)
                {
                    CosmosDatabaseResponse createResponse = await this.CreateDatabaseHelper();

                    deleteList.Add(createResponse.Database);
                    databaseIds.Add(createResponse.Resource.Id);
                }

                CosmosResultSetIterator <CosmosDatabaseSettings> setIterator =
                    this.cosmosClient.Databases.GetDatabaseIterator();
                while (setIterator.HasMoreResults)
                {
                    CosmosQueryResponse <CosmosDatabaseSettings> iterator =
                        await setIterator.FetchNextSetAsync(this.cancellationToken);

                    foreach (CosmosDatabaseSettings databaseSettings in iterator)
                    {
                        if (databaseIds.Contains(databaseSettings.Id))
                        {
                            databaseIds.Remove(databaseSettings.Id);
                        }
                    }
                }
            }
            finally
            {
                foreach (CosmosDatabase database in deleteList)
                {
                    await database.DeleteAsync(cancellationToken : this.cancellationToken);
                }
            }

            Assert.AreEqual(0, databaseIds.Count);
        }
        public async Task ValidateMaxItemCountOnItemQuery()
        {
            IList <ToDoActivity> deleteList = new List <ToDoActivity>();
            HashSet <string>     itemIds    = new HashSet <string>();

            try
            {
                deleteList = await CreateRandomItems(6, randomPartitionKey : false);

                CosmosSqlQueryDefinition sql = new CosmosSqlQueryDefinition("select * from toDoActivity t where t.taskNum = @task").UseParameter("@task", deleteList.First().taskNum);

                // Test max size at 1
                CosmosResultSetIterator <ToDoActivity> setIterator =
                    this.Container.Items.CreateItemQuery <ToDoActivity>(sql, "TBD", maxItemCount: 1);
                while (setIterator.HasMoreResults)
                {
                    CosmosQueryResponse <ToDoActivity> iter = await setIterator.FetchNextSetAsync();

                    Assert.AreEqual(1, iter.Count());
                }

                // Test max size at 2
                CosmosResultSetIterator <ToDoActivity> setIteratorMax2 =
                    this.Container.Items.CreateItemQuery <ToDoActivity>(sql, "TBD", maxItemCount: 2);
                while (setIteratorMax2.HasMoreResults)
                {
                    CosmosQueryResponse <ToDoActivity> iter = await setIteratorMax2.FetchNextSetAsync();

                    Assert.AreEqual(2, iter.Count());
                }
            }
            finally
            {
                foreach (ToDoActivity delete in deleteList)
                {
                    CosmosResponseMessage deleteResponse = await this.Container.Items.DeleteItemStreamAsync(delete.status, delete.id);

                    deleteResponse.Dispose();
                }
            }
        }
Ejemplo n.º 27
0
        public async Task ItemIterator()
        {
            IList <ToDoActivity> deleteList = await this.CreateRandomItems(3, randomPartitionKey : true);

            HashSet <string> itemIds = deleteList.Select(x => x.id).ToHashSet <string>();
            CosmosResultSetIterator <ToDoActivity> setIterator =
                this.Container.Items.GetItemIterator <ToDoActivity>();

            while (setIterator.HasMoreResults)
            {
                foreach (ToDoActivity toDoActivity in await setIterator.FetchNextSetAsync(this.cancellationToken))
                {
                    if (itemIds.Contains(toDoActivity.id))
                    {
                        itemIds.Remove(toDoActivity.id);
                    }
                }
            }

            Assert.AreEqual(itemIds.Count, 0);
        }
        public async Task <GenresModel> GetGenre(string id)
        {
            var sqlQueryText      = ("SELECT * FROM c WHERE c._id = {0}", id).ToString();
            var partitionKeyValue = id;

            CosmosSqlQueryDefinition queryDefinition = new CosmosSqlQueryDefinition(sqlQueryText);


            CosmosResultSetIterator <GenresModel> queryResultSetIterator = this.genreContainer.Items.CreateItemQuery <GenresModel>(queryDefinition, partitionKeyValue);

            List <GenresModel> genres = new List <GenresModel>();

            while (queryResultSetIterator.HasMoreResults)
            {
                CosmosQueryResponse <GenresModel> currentResultSet = await queryResultSetIterator.FetchNextSetAsync();

                foreach (GenresModel genre in currentResultSet)
                {
                    genres.Add(genre);
                }
            }
            return(genres.FirstOrDefault());
        }
        public async Task <MoviesModel> GetMovie(string id)
        {
            var sqlQueryText      = "SELECT * FROM c WHERE c._id = '" + id + "'";
            var partitionKeyValue = id;

            CosmosSqlQueryDefinition queryDefinition = new CosmosSqlQueryDefinition(sqlQueryText);


            CosmosResultSetIterator <MoviesModel> queryResultSetIterator = this.movieContainer.Items.CreateItemQuery <MoviesModel>(queryDefinition, partitionKeyValue);

            List <MoviesModel> movies = new List <MoviesModel>();

            while (queryResultSetIterator.HasMoreResults)
            {
                CosmosQueryResponse <MoviesModel> currentResultSet = await queryResultSetIterator.FetchNextSetAsync();

                foreach (MoviesModel movie in currentResultSet)
                {
                    movies.Add(movie);
                }
            }
            return(movies.FirstOrDefault());
        }
Ejemplo n.º 30
0
        /*
         * Run a query (using Azure Cosmos DB SQL syntax) against the container
         */
        private async Task RunQuery()
        {
            var sqlQueryText      = "SELECT * FROM c WHERE c.LastName = 'Andersen'";
            var partitionKeyValue = "Andersen";

            Console.WriteLine("Running query: {0}\n", sqlQueryText);

            CosmosSqlQueryDefinition         queryDefinition        = new CosmosSqlQueryDefinition(sqlQueryText);
            CosmosResultSetIterator <Family> queryResultSetIterator = this.container.Items.CreateItemQuery <Family>(queryDefinition, partitionKeyValue);

            List <Family> families = new List <Family>();

            while (queryResultSetIterator.HasMoreResults)
            {
                CosmosQueryResponse <Family> currentResultSet = await queryResultSetIterator.FetchNextSetAsync();

                foreach (Family family in currentResultSet)
                {
                    families.Add(family);
                    Console.WriteLine("\tRead {0}\n", family);
                }
            }
        }