Exemplo n.º 1
0
        public void ShouldInsertData(Type fixtureType)
        {
            var fixture = Activator.CreateInstance(fixtureType) as CrudCommandFixtureBase;

            fixture.CreateDatabase();
            fixture.CreateTables();

            var insertCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateInsertCommandBuilder(fixture.GetParentDescriptor());

            var entityToInsert = fixture.CreateNewEntity();

            entityToInsert.Should().NotBeNull();
            insertCommandBuilder.Should().NotBeNull();

            var valueProvider = new ClassValueProvider(fixture.Connector, new List <object> {
                entityToInsert
            });

            valueProvider.MoveNext();

            var insertCommand = insertCommandBuilder.GetCommand(valueProvider);

            if (fixtureType == typeof(CqlCrudCommandFixture))
            {
                insertCommand.ExecuteNonQuery().Should().Be(-1);
            }
            else
            {
                insertCommand.ExecuteNonQuery().Should().Be(1);
            }

            fixture.DropDatabase();
        }
Exemplo n.º 2
0
        public void ShouldGetTheLastInsertedIdData(Type fixtureType)
        {
            var fixture = Activator.CreateInstance(fixtureType) as CrudCommandFixtureBase;

            fixture.Should().NotBeNull();
            fixture.CreateDatabase();
            fixture.CreateTables();

            var valueProvider = new ClassValueProvider(fixture.Connector, new List <object> {
                fixture.CreateNewEntity()
            });

            valueProvider.MoveNext();

            var insertCommandBuilder       = fixture.Connector.GetCommandBuilderFactory().CreateInsertCommandBuilder(fixture.GetParentDescriptor());
            var lastInsertIdCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateLastInsertIdCommandBuilder(fixture.GetParentDescriptor());

            var insertCommand     = insertCommandBuilder.GetCommand(valueProvider);
            var lastInsertCommand = lastInsertIdCommandBuilder.GetCommand();

            insertCommand.CommandText += fixture.Connector.GetCommandFormatProvider().GetQuerySeparator() + lastInsertCommand.CommandText;

            using (var reader = insertCommand.ExecuteReader())
            {
                reader.Should().NotBeNull();
                reader.Read().Should().BeTrue();
                Convert.ToInt32(reader.GetValue(0)).Should().BeGreaterThan(0);
            }


            fixture.DropDatabase();
        }
Exemplo n.º 3
0
        /// <summary>
        /// Deletes a list of objects from the table or view.
        /// </summary>
        /// <param name="entities">List of entities to delete.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentException">entities can not be null.</exception>
        /// <remarks>
        /// This method utilizes batching to prevent unnecessary roundtrips to the database.
        /// </remarks>
        public virtual async Task DeleteAsync(IEnumerable <object> entities)
        {
            if (entities == null)
            {
                throw new ArgumentException(nameof(entities), $"{nameof(entities)} can not be null.");
            }

            var entityList = entities as List <object> ?? entities.ToList();

            if (!entityList.Any())
            {
                return;
            }

            foreach (var x in this.NavigationDatabaseAccesses)
            {
                await x.DeleteBeforeAsync(entityList);
            }

            var valueProvider = new ClassValueProvider(this.Connector, entityList);

            await this.Connector.ExecuteNonQueryAsync(this.CommandBuilderManager.DeleteCommandBuilder.GetCommand(valueProvider));

            foreach (var x in this.NavigationDatabaseAccesses)
            {
                await x.DeleteAfterAsync(entityList);
            }
        }
Exemplo n.º 4
0
        public void ShouldSelectOneMultipleKeyData(Type fixtureType)
        {
            var fixture = Activator.CreateInstance(fixtureType) as CrudCommandFixtureBase;

            fixture.CreateDatabase();
            fixture.CreateTables();

            var first  = fixture.CreateNewTwoKeysEntity();
            var second = fixture.CreateNewTwoKeysEntity();

            var valueProvider = new ClassValueProvider(fixture.Connector, new List <object> {
                first, second
            });

            var insertCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateInsertCommandBuilder(fixture.GetMultipleKeyDescriptor());

            valueProvider.MoveNext();
            insertCommandBuilder.GetCommand(valueProvider).ExecuteNonQuery();
            valueProvider.MoveNext();
            insertCommandBuilder.GetCommand(valueProvider).ExecuteNonQuery();

            var selectOneCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateSelectOneCommandBuilder(fixture.GetMultipleKeyDescriptor());
            var selectCommand           = (fixtureType == typeof(CqlCrudCommandFixture))
                ? selectOneCommandBuilder.GetCommand(1, 2, ((Mocks.Cql.TwoPrimaryKeyTable)first).Date)
                : selectOneCommandBuilder.GetCommand(1, 2);

            using (var reader = selectCommand.ExecuteReader())
            {
                var mapper  = new DatabaseReaderMapper(fixture.Connector, fixture.GetMultipleKeyDescriptor());
                var results = mapper.Map(reader);
                results.Should().NotBeNull().And.HaveCount(1);
            }

            fixture.DropDatabase();
        }
Exemplo n.º 5
0
        public void ShouldSelectAllMultipleKeyData(Type fixtureType)
        {
            var fixture = Activator.CreateInstance(fixtureType) as CrudCommandFixtureBase;

            fixture.CreateDatabase();
            fixture.CreateTables();

            var valueProvider = new ClassValueProvider(fixture.Connector, new List <object> {
                fixture.CreateNewTwoKeysEntity(), fixture.CreateNewTwoKeysEntity()
            });

            var insertCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateInsertCommandBuilder(fixture.GetMultipleKeyDescriptor());

            valueProvider.MoveNext();
            insertCommandBuilder.GetCommand(valueProvider).ExecuteNonQuery();
            valueProvider.MoveNext();
            insertCommandBuilder.GetCommand(valueProvider).ExecuteNonQuery();

            var selectCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateSelectCommandBuilder(fixture.GetMultipleKeyDescriptor());
            var selectCommand        = selectCommandBuilder.GetCommand();

            using (var reader = selectCommand.ExecuteReader())
            {
                var mapper  = new DatabaseReaderMapper(fixture.Connector, fixture.GetMultipleKeyDescriptor());
                var results = mapper.Map(reader);

                results.Should().NotBeNull().And.HaveCount(2);
            }

            fixture.DropDatabase();
        }
        /// <summary>
        /// Inserts a list of objects into the table or view.
        /// </summary>
        /// <param name="entities">List of entities to insert.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException">entities can not be null.</exception>
        /// <remarks>
        /// This method utilizes batching to prevent unnecessary round trips to the database.
        /// </remarks>
        public virtual async Task InsertAsync(IEnumerable <object> entities)
        {
            if (entities == null)
            {
                throw new ArgumentNullException(nameof(entities), $"{nameof(entities)} can not be null.");
            }

            var entityList = entities as List <object> ?? entities.ToList();

            if (!entityList.Any())
            {
                return;
            }

            // 1. Save 1-1 relationships first, as we'll need the ids of the related entities
            //    for the main entities to be stored later.
            foreach (var navigationDatabaseAccess in this.NavigationDatabaseAccesses)
            {
                await navigationDatabaseAccess.SaveBeforeAsync(entityList);
            }

            // 2. Use a batch manager to save the main entities
            using (var batchManager = this.CreateBatchManager())
            {
                var valueProvider = new ClassValueProvider(this.Connector, entityList);

                // don't use the async move next because the class provider
                // is not really async right now.
                while (valueProvider.MoveNext())
                {
                    using (var command = this.CommandBuilderManager.InsertCommandBuilder.GetCommand(valueProvider))
                    {
                        batchManager.Add(new CommandBatchStep(command));
                    }

                    // if the entity has an auto incremental property,
                    // queue a command to retrieve the id from the last insertion.
                    if (this.Descriptor.IdentityProperty != null)
                    {
                        var entity = valueProvider.CurrentEntity;
                        using (var command = this.CommandBuilderManager.LastInsertIdCommandBuilder.GetCommand())
                        {
                            batchManager.Add(new CommandBatchStep(command, async reader => await this.SetEntityIdAsync(entity, reader)));
                        }
                    }
                }

                await batchManager.ExecuteAsync();
            }

            // 3. Save the 1-Many relationship at last, as they'll need the
            //    main entity id before being stored.
            foreach (var navigationDatabaseAccess in this.NavigationDatabaseAccesses)
            {
                await navigationDatabaseAccess.SaveAfterAsync(entityList);
            }
        }
Exemplo n.º 7
0
        public void ShouldDeleteData(Type fixtureType)
        {
            var fixture = Activator.CreateInstance(fixtureType) as CrudCommandFixtureBase;

            fixture.Should().NotBeNull();
            fixture.CreateDatabase();
            fixture.CreateTables();

            var first  = fixture.CreateNewEntity();
            var second = fixture.CreateNewEntity();

            var insertCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateInsertCommandBuilder(fixture.GetParentDescriptor());
            {
                var valueProvider = new ClassValueProvider(fixture.Connector, new List <object> {
                    first, second
                });

                valueProvider.MoveNext();
                insertCommandBuilder.GetCommand(valueProvider).ExecuteNonQuery();

                valueProvider.MoveNext();
                insertCommandBuilder.GetCommand(valueProvider).ExecuteNonQuery();
            }

            var deleteCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateDeleteCommandBuilder(fixture.GetParentDescriptor());
            {
                fixture.SetEntityId(first, second);
                var valueProvider = new ClassValueProvider(fixture.Connector, new List <object> {
                    first, second
                });

                valueProvider.MoveNext();
                var deleteCommand = deleteCommandBuilder.GetCommand(valueProvider);
                deleteCommand.Invoking(c => c.ExecuteNonQuery()).Should().NotThrow();

                valueProvider.MoveNext();
                deleteCommand = deleteCommandBuilder.GetCommand(valueProvider);
                deleteCommand.Invoking(c => c.ExecuteNonQuery()).Should().NotThrow();
            }

            var selectCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateSelectCommandBuilder(fixture.GetParentDescriptor());

            {
                var selectCommand = selectCommandBuilder.GetCommand();

                using (var reader = selectCommand.ExecuteReader())
                {
                    var mapper  = new DatabaseReaderMapper(fixture.Connector, fixture.GetParentDescriptor());
                    var results = mapper.Map(reader);
                    results.Should().NotBeNull().And.HaveCount(0);
                }
            }

            fixture.DropDatabase();
        }
Exemplo n.º 8
0
        /// <summary>
        /// Inserts a list of objects into the table or view.
        /// </summary>
        /// <param name="entities">List of entities to insert.</param>
        /// <exception cref="System.ArgumentNullException">entities can not be null.</exception>
        /// <remarks>
        /// This method utilizes batching to prevent unnecessary roundtrips to the database.
        /// </remarks>
        public virtual void Insert(IEnumerable <object> entities)
        {
            if (entities == null)
            {
                throw new ArgumentNullException(nameof(entities), $"{nameof(entities)} can not be null.");
            }

            var entityList = entities as List <object> ?? entities.ToList();

            if (!entityList.Any())
            {
                return;
            }

            // 1. Save 1-1 relationships first, as we'll need the ids of the related entities
            //    for the main entities to be stored later.
            foreach (var navigationDatabaseAccess in this.NavigationDatabaseAccesses)
            {
                if (!navigationDatabaseAccess.NavigationPropertyDescriptor.IsAggregateRoot)
                {
                    navigationDatabaseAccess.SaveBefore(entityList);
                }
            }

            // 2. Save the main entities, and batch the queries.
            this.BatchManager.Reset();

            var valueProvider = new ClassValueProvider(this.Connector, entityList);

            while (valueProvider.MoveNext())
            {
                this.BatchManager.Add(new CommandBatchStep(this.CommandBuilderManager.InsertCommandBuilder.GetCommand(valueProvider)));

                // if the entity has an auto incremental property,
                // queue a command to retrieve the id from the last insertion.
                if (this.Descriptor.IdentityProperty != null)
                {
                    var entity = valueProvider.CurrentEntity;
                    this.BatchManager.Add(new CommandBatchStep(this.CommandBuilderManager.LastInsertIdCommandBuilder.GetCommand(), reader => this.SetEntityId(entity, reader)));
                }
            }

            this.BatchManager.Execute();

            // 3. Save the 1-Many relationship at last, as they'll need the
            //    main entity id before being stored.
            foreach (var navigationDatabaseAccess in this.NavigationDatabaseAccesses)
            {
                if (navigationDatabaseAccess.NavigationPropertyDescriptor.IsAggregateRoot)
                {
                    navigationDatabaseAccess.SaveAfter(entityList);
                }
            }
        }
Exemplo n.º 9
0
        public void ShouldCreateADeleteCommandForASingleEntityWithMultipleKeys(Type fixtureType, Type tableDescriptorType)
        {
            var fixture = Activator.CreateInstance(fixtureType) as CommandBuilderFixtureBase;
            var commandBuilderFactory = fixture.Connector.GetCommandBuilderFactory();
            var tableDescription      = DescriptorCache.Instance.GetTableTypeDescriptor(tableDescriptorType);
            var entitiesToDelete      = new[] { fixture.TwoPrimaryKeyEntity1 };
            var valueProvider         = new ClassValueProvider(fixture.Connector, entitiesToDelete.Cast <object>().ToList());

            var deleteCommand = commandBuilderFactory.CreateDeleteCommandBuilder(tableDescription);

            deleteCommand.GetCommand(valueProvider).CommandText.Should().Be(fixture.DeleteOneEntityQueryMultipleKey);
        }
Exemplo n.º 10
0
        public void CorrectDeleteCommandTwoEntities(Type fixtureType, Type tableDescriptorType)
        {
            var fixture = Activator.CreateInstance(fixtureType) as CommandBuilderFixtureBase;
            var commandBuilderFactory = fixture.Connector.GetCommandBuilderFactory();
            var tableDescription      = new TableTypeDescriptor(tableDescriptorType);
            var entitiesToDelete      = new[] { fixture.Entity1, fixture.Entity2 };
            var valueProvider         = new ClassValueProvider(fixture.Connector, entitiesToDelete.Cast <object>().ToList());

            using (var deleteCommand = commandBuilderFactory.CreateDeleteCommandBuilder(tableDescription))
            {
                deleteCommand.GetCommand(valueProvider).CommandText.Should().Be(fixture.DeleteTwoEntitiesQuery);
            }
        }
Exemplo n.º 11
0
        public void ShouldAddACommandToTheCommandBatch(Type fixtureType)
        {
            var fixture               = Activator.CreateInstance(fixtureType) as CommandBatchFixtureBase;
            var commandBatch          = new CommandBatch(fixture.Connector);
            var commandBuilderFactory = fixture.Connector.GetCommandBuilderFactory();
            var tableTypeDescriptor   = DescriptorCache.Instance.GetTableTypeDescriptor(typeof(BatchMock));
            var valueProvider         = new ClassValueProvider(fixture.Connector, new List <object> {
                fixture.CreateMock(), fixture.CreateMock()
            });

            commandBatch.Add(new CommandBatchStep(commandBuilderFactory.CreateInsertCommandBuilder(tableTypeDescriptor).GetCommand(valueProvider)));
            commandBatch.Add(new CommandBatchStep(commandBuilderFactory.CreateInsertCommandBuilder(tableTypeDescriptor).GetCommand(valueProvider)));

            commandBatch.GetCommand().CommandText.Should().Be(fixture.CommandBatchText);
        }
Exemplo n.º 12
0
        /// <summary>
        /// Updates a list of objects stored in the table or view.
        /// </summary>
        /// <param name="entities">List of entities to update.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException">entities can not be null.</exception>
        /// <remarks>
        /// This method utilizes batching to prevent unnecessary roundtrips to the database.
        /// </remarks>
        public virtual async Task UpdateAsync(IEnumerable <object> entities)
        {
            if (entities == null)
            {
                throw new ArgumentNullException(nameof(entities), $"{nameof(entities)} can not be null.");
            }

            var entityList = entities as List <object> ?? entities.ToList();

            if (!entityList.Any())
            {
                return;
            }

            // 1. Save 1-1 relationships first, as we'll need the ids of the related entities
            //    for the main entities to be stored later.
            foreach (var navigationDatabaseAccess in this.NavigationDatabaseAccesses)
            {
                if (!navigationDatabaseAccess.NavigationPropertyDescriptor.IsAggregateRoot)
                {
                    await navigationDatabaseAccess.SaveBeforeAsync(entityList);
                }
            }

            // 2. Save the main entities, and batch the queries.
            this.BatchManager.Reset();

            var valueProvider = new ClassValueProvider(this.Connector, entityList);

            while (valueProvider.MoveNext())
            {
                this.BatchManager.Add(new CommandBatchStep(this.CommandBuilderManager.UpdateCommandBuilder.GetCommand(valueProvider)));
            }

            await this.BatchManager.ExecuteAsync();

            // 3. Save the 1-Many relationship at last, as they'll need the
            //    main entity id before being stored.
            foreach (var navigationDatabaseAccess in this.NavigationDatabaseAccesses)
            {
                if (navigationDatabaseAccess.NavigationPropertyDescriptor.IsAggregateRoot)
                {
                    await navigationDatabaseAccess.SaveAfterAsync(entityList);
                }
            }
        }
Exemplo n.º 13
0
        public void ShouldSelectOneData(Type fixtureType)
        {
            var fixture = Activator.CreateInstance(fixtureType) as CrudCommandFixtureBase;

            fixture.Should().NotBeNull();
            fixture.CreateDatabase();
            fixture.CreateParentTable();
            fixture.CreateChildTable();

            var first  = fixture.CreateNewEntity();
            var second = fixture.CreateNewEntity();

            var valueProvider = new ClassValueProvider(fixture.Connector, new List <object> {
                first, second
            });


            using (var insertCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateInsertCommandBuilder(fixture.GetParentDescriptor()))
            {
                valueProvider.MoveNext();
                insertCommandBuilder.GetCommand(valueProvider).ExecuteNonQuery();
                valueProvider.MoveNext();
                insertCommandBuilder.GetCommand(valueProvider).ExecuteNonQuery();
            }

            using (var selectOneCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateSelectOneCommandBuilder(fixture.GetParentDescriptor()))
            {
                selectOneCommandBuilder.Should().NotBeNull();
                var selectCommand = selectOneCommandBuilder.GetCommand(1);

                selectCommand.Should().NotBeNull();
                selectCommand.CommandText.Should().Be(fixture.SelectOneStatement);

                using (var reader = selectCommand.ExecuteReader())
                {
                    reader.Should().NotBeNull();

                    var mapper  = new DatabaseReaderMapper(fixture.Connector, fixture.GetParentDescriptor());
                    var results = mapper.Map(reader);
                    results.Should().NotBeNull().And.HaveCount(1);
                }
            }

            fixture.DropDatabase();
        }
Exemplo n.º 14
0
        /// <summary>
        /// Updates a list of objects stored in the table or view.
        /// </summary>
        /// <param name="entities">List of entities to update.</param>
        /// <exception cref="System.ArgumentNullException">entities can not be null.</exception>
        /// <remarks>
        /// This method utilizes batching to prevent unnecessary round trips to the database.
        /// </remarks>
        public virtual void Update(IEnumerable <object> entities)
        {
            if (entities == null)
            {
                throw new ArgumentNullException(nameof(entities), $"{nameof(entities)} can not be null.");
            }

            var entityList = entities as List <object> ?? entities.ToList();

            if (!entityList.Any())
            {
                return;
            }

            // 1. Save 1-1 relationships first, as we'll need the ids of the related entities
            //    for the main entities to be stored later.
            foreach (var navigationDatabaseAccess in this.NavigationDatabaseAccesses)
            {
                navigationDatabaseAccess.SaveBefore(entityList);
            }

            // 2. Use a batch manager to save the main entities
            using (var batchManager = this.CreateBatchManager())
            {
                var valueProvider = new ClassValueProvider(this.Connector, entityList);

                while (valueProvider.MoveNext())
                {
                    using (var command = this.CommandBuilderManager.UpdateCommandBuilder.GetCommand(valueProvider))
                    {
                        batchManager.Add(new CommandBatchStep(command));
                    }
                }

                batchManager.Execute();
            }

            // 3. Save the 1-Many relationship at last, as they'll need the
            //    main entity id before being stored.
            foreach (var navigationDatabaseAccess in this.NavigationDatabaseAccesses)
            {
                navigationDatabaseAccess.SaveAfter(entityList);
            }
        }
Exemplo n.º 15
0
        public void CorrectUpdateCommand(Type fixtureType, Type tableDescriptorType)
        {
            var fixture = Activator.CreateInstance(fixtureType) as CommandBuilderFixtureBase;
            var commandBuilderFactory = fixture.Connector.GetCommandBuilderFactory();
            var tableDescription      = new TableTypeDescriptor(tableDescriptorType);

            var entityToUpdate = fixture.Entity1;

            entityToUpdate.Name   = "John Doe Junior";
            entityToUpdate.Amount = 7200m;

            var valueProvider = new ClassValueProvider(fixture.Connector, new List <object> {
                entityToUpdate
            });

            valueProvider.MoveNext();

            using (var updateCommand = commandBuilderFactory.CreateUpdateCommandBuilder(tableDescription))
            {
                var command    = updateCommand.GetCommand(valueProvider);
                var parameters = command.Parameters.ToList();
                command.CommandText.Should().Be(fixture.UpdateQuery);

                if (fixtureType == typeof(CqlCommandBuilderFixture))
                {
                    parameters.Should().HaveCount(5);
                    parameters.Sort((x, y) => string.CompareOrdinal(x.ParameterName, y.ParameterName));
                    parameters[0].Value.Should().Be(7200m);
                    parameters[2].Value.Should().Be(fixture.Entity1.Id);
                    parameters[3].Value.Should().Be(fixture.Entity1.IsActive);
                    parameters[4].Value.Should().Be("John Doe Junior");
                }
                else
                {
                    parameters.Should().HaveCount(5);
                    parameters.Sort((x, y) => string.CompareOrdinal(x.ParameterName, y.ParameterName));
                    parameters[0].Value.Should().Be(7200m);
                    parameters[1].Value.Should().Be(fixture.Entity1.CreatedDate);
                    parameters[2].Value.Should().Be(fixture.Entity1.Id);
                    parameters[3].Value.Should().Be(fixture.Entity1.IsActive);
                    parameters[4].Value.Should().Be("John Doe Junior");
                }
            }
        }
Exemplo n.º 16
0
        /// <summary>
        /// Deletes a list of objects from the table or view.
        /// </summary>
        /// <param name="entities">List of entities to delete.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentException">entities can not be null.</exception>
        /// <remarks>
        /// This method utilizes batching to prevent unnecessary round trips to the database.
        /// </remarks>
        public virtual async Task DeleteAsync(IEnumerable <object> entities)
        {
            if (entities == null)
            {
                throw new ArgumentException(nameof(entities), $"{nameof(entities)} can not be null.");
            }

            var entityList = entities as List <object> ?? entities.ToList();

            if (!entityList.Any())
            {
                return;
            }

            // 1. Delete the children entities.
            foreach (var x in this.NavigationDatabaseAccesses)
            {
                await x.DeleteBeforeAsync(entityList);
            }

            // 2. Use a batch manager to save the main entities
            using (var batchManager = this.CreateBatchManager())
            {
                var valueProvider = new ClassValueProvider(this.Connector, entityList);

                while (valueProvider.MoveNext())
                {
                    using (var command = this.CommandBuilderManager.DeleteCommandBuilder.GetCommand(valueProvider))
                    {
                        batchManager.Add(new CommandBatchStep(command));
                    }
                }

                await batchManager.ExecuteAsync();
            }

            // 3. Delete any parent entity if any.
            foreach (var x in this.NavigationDatabaseAccesses)
            {
                await x.DeleteAfterAsync(entityList);
            }
        }
Exemplo n.º 17
0
        public void ShouldInsertMultipleKeyData(Type fixtureType)
        {
            var fixture = Activator.CreateInstance(fixtureType) as CrudCommandFixtureBase;

            fixture.CreateDatabase();
            fixture.CreateTables();

            var insertCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateInsertCommandBuilder(fixture.GetMultipleKeyDescriptor());

            var entityToInsert = fixture.CreateNewTwoKeysEntity();
            var valueProvider  = new ClassValueProvider(fixture.Connector, new List <object> {
                entityToInsert
            });

            valueProvider.MoveNext();

            var insertCommand = insertCommandBuilder.GetCommand(valueProvider);

            insertCommand.ExecuteNonQuery();

            fixture.DropDatabase();
        }
Exemplo n.º 18
0
        public void ShouldCreateAnInsertCommand(Type fixtureType, Type tableDescriptorType)
        {
            var fixture = Activator.CreateInstance(fixtureType) as CommandBuilderFixtureBase;
            var commandBuilderFactory = fixture.Connector.GetCommandBuilderFactory();
            var tableDescription      = DescriptorCache.Instance.GetTableTypeDescriptor(tableDescriptorType);
            var valueProvider         = new ClassValueProvider(fixture.Connector, new List <object> {
                fixture.Entity1
            });

            valueProvider.MoveNext();

            var insertCommand = commandBuilderFactory.CreateInsertCommandBuilder(tableDescription);

            var command    = insertCommand.GetCommand(valueProvider);
            var parameters = command.Parameters.ToList();

            command.CommandText.Should().Be(fixture.InsertQuery);

            if (fixtureType == typeof(CqlCommandBuilderFixture))
            {
                parameters.Should().HaveCount(5);
                parameters.Sort((x, y) => string.CompareOrdinal(x.ParameterName, y.ParameterName));
                parameters[0].Value.Should().Be(3600m);
                parameters[3].Value.Should().Be(true);
                parameters[4].Value.Should().Be("John Doe");
            }
            else
            {
                parameters.Should().HaveCount(4);
                parameters.Sort((x, y) => string.CompareOrdinal(x.ParameterName, y.ParameterName));
                parameters[0].Value.Should().Be(3600m);
                parameters[1].Value.Should().Be(new DateTime(2017, 5, 23, 13, 55, 43, 0));
                parameters[2].Value.Should().Be(true);
                parameters[3].Value.Should().Be("John Doe");
            }
        }
Exemplo n.º 19
0
        public void ShouldUpdateData(Type fixtureType)
        {
            var fixture = Activator.CreateInstance(fixtureType) as CrudCommandFixtureBase;

            fixture.Should().NotBeNull();
            fixture.CreateDatabase();
            fixture.CreateParentTable();
            fixture.CreateChildTable();

            var first  = fixture.CreateNewEntity();
            var second = fixture.CreateNewEntity();

            using (var insertCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateInsertCommandBuilder(fixture.GetParentDescriptor()))
            {
                var valueProvider = new ClassValueProvider(fixture.Connector, new List <object> {
                    first, second
                });

                valueProvider.MoveNext();
                insertCommandBuilder.GetCommand(valueProvider).ExecuteNonQuery();

                valueProvider.MoveNext();
                insertCommandBuilder.GetCommand(valueProvider).ExecuteNonQuery();
            }

            using (var selectCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateSelectCommandBuilder(fixture.GetParentDescriptor()))
            {
                var selectCommand = selectCommandBuilder.GetCommand();

                using (var reader = selectCommand.ExecuteReader())
                {
                    var mapper  = new DatabaseReaderMapper(fixture.Connector, fixture.GetParentDescriptor());
                    var results = mapper.Map(reader);

                    first  = results[0];
                    second = results[1];
                }
            }

            using (var updateCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateUpdateCommandBuilder(fixture.GetParentDescriptor()))
            {
                fixture.Update(first, second);
                var valueProvider = new ClassValueProvider(fixture.Connector, new List <object> {
                    first, second
                });

                updateCommandBuilder.Should().NotBeNull();

                valueProvider.MoveNext();
                var updateCommand = updateCommandBuilder.GetCommand(valueProvider);
                updateCommand.Should().NotBeNull();
                updateCommand.CommandText.Should().Be(fixture.UpdateStatement);
                updateCommand.Invoking(c => c.ExecuteNonQuery()).ShouldNotThrow();

                valueProvider.MoveNext();
                updateCommand = updateCommandBuilder.GetCommand(valueProvider);
                updateCommand.Should().NotBeNull();
                updateCommand.CommandText.Should().Be(fixture.UpdateStatement);
                updateCommand.Invoking(c => c.ExecuteNonQuery()).ShouldNotThrow();
            }

            using (var selectCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateSelectCommandBuilder(fixture.GetParentDescriptor()))
            {
                var selectCommand = selectCommandBuilder.GetCommand();

                using (var reader = selectCommand.ExecuteReader())
                {
                    var mapper  = new DatabaseReaderMapper(fixture.Connector, fixture.GetParentDescriptor());
                    var results = mapper.Map(reader);

                    first  = results[0];
                    second = results[1];

                    fixture.CheckUpdate(first, second);
                }
            }
            fixture.DropDatabase();
        }
Exemplo n.º 20
0
        public void ShouldUpdateMultipleKeyData(Type fixtureType)
        {
            var fixture = Activator.CreateInstance(fixtureType) as CrudCommandFixtureBase;

            fixture.CreateDatabase();
            fixture.CreateTables();

            var first  = fixture.CreateNewTwoKeysEntity();
            var second = fixture.CreateNewTwoKeysEntity();

            var insertCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateInsertCommandBuilder(fixture.GetMultipleKeyDescriptor());
            var valueProvider        = new ClassValueProvider(fixture.Connector, new List <object> {
                first, second
            });

            valueProvider.MoveNext();
            insertCommandBuilder.GetCommand(valueProvider).ExecuteNonQuery();

            valueProvider.MoveNext();
            insertCommandBuilder.GetCommand(valueProvider).ExecuteNonQuery();

            var selectCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateSelectCommandBuilder(fixture.GetMultipleKeyDescriptor());
            var selectCommand        = selectCommandBuilder.GetCommand();

            using (var reader = selectCommand.ExecuteReader())
            {
                var mapper  = new DatabaseReaderMapper(fixture.Connector, fixture.GetMultipleKeyDescriptor());
                var results = mapper.Map(reader);

                first  = results[0];
                second = results[1];
            }

            var updateCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateUpdateCommandBuilder(fixture.GetMultipleKeyDescriptor());

            valueProvider = new ClassValueProvider(fixture.Connector, new List <object> {
                first, second
            });

            valueProvider.MoveNext();
            var updateCommand = updateCommandBuilder.GetCommand(valueProvider);

            updateCommand.Invoking(c => c.ExecuteNonQuery()).Should().NotThrow();

            valueProvider.MoveNext();
            updateCommand = updateCommandBuilder.GetCommand(valueProvider);
            updateCommand.Invoking(c => c.ExecuteNonQuery()).Should().NotThrow();

            selectCommandBuilder = fixture.Connector.GetCommandBuilderFactory().CreateSelectCommandBuilder(fixture.GetMultipleKeyDescriptor());
            selectCommand        = selectCommandBuilder.GetCommand();

            using (var reader = selectCommand.ExecuteReader())
            {
                var mapper  = new DatabaseReaderMapper(fixture.Connector, fixture.GetMultipleKeyDescriptor());
                var results = mapper.Map(reader);

                results.Should().NotBeNullOrEmpty();
            }

            fixture.DropDatabase();
        }