コード例 #1
0
        public async Task Generates_sequential_values <TValue>(bool async)
        {
            const int blockSize = 4;

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

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

            var generator = new OracleSequenceHiLoValueGenerator <TValue>(
                new FakeRawSqlCommandBuilder(blockSize),
                new OracleUpdateSqlGenerator(
                    new UpdateSqlGeneratorDependencies(
                        new OracleSqlGenerationHelper(
                            new RelationalSqlGenerationHelperDependencies())),
                    new OracleTypeMapper(
                        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));
            }
        }
コード例 #2
0
        private async Task <IEnumerable <List <long> > > GenerateValuesInMultipleThreads(int threadCount, int valueCount)
        {
            const int blockSize = 10;

            var serviceProvider = OracleTestHelpers.Instance.CreateServiceProvider();

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

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

            var executor     = new FakeRawSqlCommandBuilder(blockSize);
            var sqlGenerator = new OracleUpdateSqlGenerator(
                new UpdateSqlGeneratorDependencies(
                    new OracleSqlGenerationHelper(
                        new RelationalSqlGenerationHelperDependencies())),
                new OracleTypeMapper(
                    new RelationalTypeMapperDependencies()));

            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 OracleSequenceHiLoValueGenerator <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);
        }
コード例 #3
0
        public void Does_not_generate_temp_values()
        {
            var sequence = new Model().Oracle().GetOrAddSequence("Foo");

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

            var generator = new OracleSequenceHiLoValueGenerator <int>(
                new FakeRawSqlCommandBuilder(4),
                new OracleUpdateSqlGenerator(
                    new UpdateSqlGeneratorDependencies(
                        new OracleSqlGenerationHelper(
                            new RelationalSqlGenerationHelperDependencies())),
                    new OracleTypeMapper(
                        new RelationalTypeMapperDependencies())),
                state,
                CreateConnection());

            Assert.False(generator.GeneratesTemporaryValues);
        }