public async Task Generates_sequential_values <TValue>(bool async)
        {
            const int blockSize = 4;

            var sequence = new Model().SqlServer().GetOrAddSequence("Foo");

            sequence.IncrementBy = blockSize;
            var state = new SqlServerSequenceValueGeneratorState(sequence);

            var generator = new SqlServerSequenceHiLoValueGenerator <TValue>(
                new FakeRawSqlCommandBuilder(blockSize),
                new SqlServerUpdateSqlGenerator(
                    new UpdateSqlGeneratorDependencies(
                        new SqlServerSqlGenerationHelper(
                            new RelationalSqlGenerationHelperDependencies())),
                    new SqlServerTypeMapper(
                        new RelationalTypeMapperDependencies())),
                state,
                CreateConnection());

            for (var i = 1; i <= 27; i++)
            {
                var value = async
                    ? await generator.NextAsync(null)
                    : generator.Next(null);

                Assert.Equal(i, (int)Convert.ChangeType(value, typeof(int), CultureInfo.InvariantCulture));
            }
        }
        public async Task Generates_sequential_values <TValue>(bool async)
        {
            const int blockSize = 4;

            var sequence = ((IMutableModel) new Model()).AddSequence("Foo");

            sequence.IncrementBy = blockSize;
            var state = new SqlServerSequenceValueGeneratorState(sequence);

            var generator = new SqlServerSequenceHiLoValueGenerator <TValue>(
                new FakeRawSqlCommandBuilder(blockSize),
                new SqlServerUpdateSqlGenerator(
                    new UpdateSqlGeneratorDependencies(
                        new SqlServerSqlGenerationHelper(
                            new RelationalSqlGenerationHelperDependencies()),
                        new SqlServerTypeMappingSource(
                            TestServiceFactory.Instance.Create <TypeMappingSourceDependencies>(),
                            TestServiceFactory.Instance.Create <RelationalTypeMappingSourceDependencies>()))),
                state,
                CreateConnection(),
                new FakeDiagnosticsLogger <DbLoggerCategory.Database.Command>());

            for (var i = 1; i <= 27; i++)
            {
                var value = async
                    ? await generator.NextAsync(null)
                    : generator.Next(null);

                Assert.Equal(i, (int)Convert.ChangeType(value, typeof(int), CultureInfo.InvariantCulture));
            }
        }
        private async Task <IEnumerable <List <long> > > GenerateValuesInMultipleThreads(int threadCount, int valueCount)
        {
            const int blockSize = 10;

            var serviceProvider = SqlServerTestHelpers.Instance.CreateServiceProvider();

            var sequence = ((IMutableModel) new Model()).AddSequence("Foo");

            sequence.IncrementBy = blockSize;
            var state = new SqlServerSequenceValueGeneratorState(sequence);

            var executor     = new FakeRawSqlCommandBuilder(blockSize);
            var sqlGenerator = new SqlServerUpdateSqlGenerator(
                new UpdateSqlGeneratorDependencies(
                    new SqlServerSqlGenerationHelper(
                        new RelationalSqlGenerationHelperDependencies()),
                    new SqlServerTypeMappingSource(
                        TestServiceFactory.Instance.Create <TypeMappingSourceDependencies>(),
                        TestServiceFactory.Instance.Create <RelationalTypeMappingSourceDependencies>())));

            var logger = new FakeDiagnosticsLogger <DbLoggerCategory.Database.Command>();

            var tests           = new Func <Task> [threadCount];
            var generatedValues = new List <long> [threadCount];

            for (var i = 0; i < tests.Length; i++)
            {
                var testNumber = i;
                generatedValues[testNumber] = new List <long>();
                tests[testNumber]           = async() =>
                {
                    for (var j = 0; j < valueCount; j++)
                    {
                        var connection = CreateConnection(serviceProvider);
                        var generator  = new SqlServerSequenceHiLoValueGenerator <long>(executor, sqlGenerator, state, connection, logger);

                        var value = j % 2 == 0
                            ? await generator.NextAsync(null)
                            : generator.Next(null);

                        generatedValues[testNumber].Add(value);
                    }
                };
            }

            var tasks = tests.Select(Task.Run).ToArray();

            foreach (var t in tasks)
            {
                await t;
            }

            return(generatedValues);
        }
Example #4
0
        public void Does_not_generate_temp_values()
        {
            var sequence = Sequence.GetOrAddSequence(new Model(), RelationalFullAnnotationNames.Instance.SequencePrefix, "Foo");

            sequence.IncrementBy = 4;
            var state = new SqlServerSequenceValueGeneratorState(sequence);

            var generator = new SqlServerSequenceHiLoValueGenerator <int>(
                new FakeRawSqlCommandBuilder(4),
                new SqlServerUpdateSqlGenerator(new SqlServerSqlGenerationHelper(), new SqlServerTypeMapper()),
                state,
                CreateConnection());

            Assert.False(generator.GeneratesTemporaryValues);
        }
Example #5
0
        public void Does_not_generate_temp_values()
        {
            var state = new SqlServerSequenceValueGeneratorState(
                new Sequence(
                    new Model(), RelationalAnnotationNames.Prefix, "Foo")
            {
                IncrementBy = 4
            });

            var generator = new SqlServerSequenceHiLoValueGenerator <int>(
                new FakeSqlStatementExecutor(4),
                new SqlServerUpdateSqlGenerator(new SqlServerSqlGenerator()),
                state,
                CreateConnection());

            Assert.False(generator.GeneratesTemporaryValues);
        }
Example #6
0
        private async Task <IEnumerable <List <long> > > GenerateValuesInMultipleThreads(int threadCount, int valueCount)
        {
            const int blockSize = 10;

            var serviceProvider = SqlServerTestHelpers.Instance.CreateServiceProvider();

            var sequence = Sequence.GetOrAddSequence(new Model(), RelationalFullAnnotationNames.Instance.SequencePrefix, "Foo");

            sequence.IncrementBy = blockSize;
            var state = new SqlServerSequenceValueGeneratorState(sequence);

            var executor     = new FakeRawSqlCommandBuilder(blockSize);
            var sqlGenerator = new SqlServerUpdateSqlGenerator(new SqlServerSqlGenerationHelper(), new SqlServerTypeMapper());

            var tests           = new Func <Task> [threadCount];
            var generatedValues = new List <long> [threadCount];

            for (var i = 0; i < tests.Length; i++)
            {
                var testNumber = i;
                generatedValues[testNumber] = new List <long>();
                tests[testNumber]           = async() =>
                {
                    for (var j = 0; j < valueCount; j++)
                    {
                        var connection = CreateConnection(serviceProvider);
                        var generator  = new SqlServerSequenceHiLoValueGenerator <long>(executor, sqlGenerator, state, connection);

                        var value = j % 2 == 0
                                ? await generator.NextAsync(null)
                                : generator.Next(null);

                        generatedValues[testNumber].Add(value);
                    }
                };
            }

            var tasks = tests.Select(Task.Run).ToArray();

            foreach (var t in tasks)
            {
                await t;
            }

            return(generatedValues);
        }
Example #7
0
        public void Does_not_generate_temp_values()
        {
            var sequence = new Model().SqlServer().GetOrAddSequence("Foo");

            sequence.IncrementBy = 4;
            var state = new SqlServerSequenceValueGeneratorState(sequence);

            var generator = new SqlServerSequenceHiLoValueGenerator <int>(
                new FakeRawSqlCommandBuilder(4),
                new SqlServerUpdateSqlGenerator(
                    new UpdateSqlGeneratorDependencies(
                        new SqlServerSqlGenerationHelper(
                            new RelationalSqlGenerationHelperDependencies()),
                        TestServiceFactory.Instance.Create <SqlServerTypeMapper>())),
                state,
                CreateConnection());

            Assert.False(generator.GeneratesTemporaryValues);
        }
Example #8
0
        public void Generates_sequential_values <TValue>()
        {
            const int blockSize = 4;

            var sequence = Sequence.GetOrAddSequence(new Model(), RelationalFullAnnotationNames.Instance.SequencePrefix, "Foo");

            sequence.IncrementBy = blockSize;
            var state = new SqlServerSequenceValueGeneratorState(sequence);

            var generator = new SqlServerSequenceHiLoValueGenerator <TValue>(
                new FakeRawSqlCommandBuilder(blockSize),
                new SqlServerUpdateSqlGenerator(new SqlServerSqlGenerationHelper(), new SqlServerTypeMapper()),
                state,
                CreateConnection());

            for (var i = 1; i <= 27; i++)
            {
                Assert.Equal(i, (int)Convert.ChangeType(generator.Next(null), typeof(int), CultureInfo.InvariantCulture));
            }
        }
        public void Does_not_generate_temp_values()
        {
            var sequence = ((IMutableModel)new Model()).AddSequence("Foo");
            sequence.IncrementBy = 4;
            var state = new SqlServerSequenceValueGeneratorState(sequence);

            var generator = new SqlServerSequenceHiLoValueGenerator<int>(
                new FakeRawSqlCommandBuilder(4),
                new SqlServerUpdateSqlGenerator(
                    new UpdateSqlGeneratorDependencies(
                        new SqlServerSqlGenerationHelper(
                            new RelationalSqlGenerationHelperDependencies()),
                        new SqlServerTypeMappingSource(
                            TestServiceFactory.Instance.Create<TypeMappingSourceDependencies>(),
                            TestServiceFactory.Instance.Create<RelationalTypeMappingSourceDependencies>()))),
                state,
                CreateConnection(),
                new FakeDiagnosticsLogger<DbLoggerCategory.Database.Command>());

            Assert.False(generator.GeneratesTemporaryValues);
        }
Example #10
0
        private IEnumerable <List <long> > GenerateValuesInMultipleThreads(int threadCount, int valueCount)
        {
            const int blockSize = 10;

            var serviceProvider = SqlServerTestHelpers.Instance.CreateServiceProvider();

            var state = new SqlServerSequenceValueGeneratorState(
                new Sequence(
                    new Model(), RelationalAnnotationNames.Prefix, "Foo")
            {
                IncrementBy = blockSize
            });

            var executor     = new FakeSqlStatementExecutor(blockSize);
            var sqlGenerator = new SqlServerUpdateSqlGenerator(new SqlServerSqlGenerator());

            var tests           = new Action[threadCount];
            var generatedValues = new List <long> [threadCount];

            for (var i = 0; i < tests.Length; i++)
            {
                var testNumber = i;
                generatedValues[testNumber] = new List <long>();
                tests[testNumber]           = () =>
                {
                    for (var j = 0; j < valueCount; j++)
                    {
                        var connection = CreateConnection(serviceProvider);
                        var generator  = new SqlServerSequenceHiLoValueGenerator <long>(executor, sqlGenerator, state, connection);

                        generatedValues[testNumber].Add(generator.Next());
                    }
                };
            }

            Parallel.Invoke(tests);

            return(generatedValues);
        }
Example #11
0
        public void Generates_sequential_values <TValue>()
        {
            const int blockSize = 4;

            var state = new SqlServerSequenceValueGeneratorState(
                new Sequence(
                    new Model(), RelationalAnnotationNames.Prefix, "Foo")
            {
                IncrementBy = blockSize
            });

            var generator = new SqlServerSequenceHiLoValueGenerator <TValue>(
                new FakeSqlStatementExecutor(blockSize),
                new SqlServerUpdateSqlGenerator(new SqlServerSqlGenerator()),
                state,
                CreateConnection());

            for (var i = 1; i <= 27; i++)
            {
                Assert.Equal(i, (int)Convert.ChangeType(generator.Next(), typeof(int), CultureInfo.InvariantCulture));
            }
        }