コード例 #1
0
        public async Task ExecuteReaderAsync_WithAllParametersSet_ExecutesAndReturnsExpectedResult()
        {
            SqlProgram <string, int, decimal, bool> readerTest =
                await SqlProgram <string, int, decimal, bool> .Create((Connection)DifferentLocalDatabaseConnectionString, "spUltimateSproc");

            Task <dynamic> result = readerTest.ExecuteReaderAsync(
                c =>
            {
                c.SetParameter("@stringParam", AString);
                c.SetParameter("@intParam", AInt);
                c.SetParameter("@decimalParam", ADecimal);
                c.SetParameter("@boolParam", ABool);
            },
                async(reader, token) =>
            {
                if (await reader.ReadAsync(token))
                {
                    return(CreateDatabaseResult(reader));
                }

                throw new Exception("Critical Test Error");
            });

            Assert.IsNotNull(result);
            result.Wait();

            Assert.AreEqual(AString, result.Result.Name);
            Assert.AreEqual(AInt, result.Result.Age);
            Assert.AreEqual(ADecimal, result.Result.Balance);
            Assert.AreEqual(ABool, result.Result.IsValued);
        }
コード例 #2
0
        public async Task ExecuteReaderAsync_WithOutputParameters_ExecutesSuccessfully()
        {
            SqlProgram <int, Out <int>, Out <int> > program =
                await SqlProgram <int, Out <int>, Out <int> > .Create((Connection)LocalDatabaseConnectionString, "spOutputParameters");

            const int inputVal       = 123;
            const int inputOutputVal = 321;

            Out <int> inputOutput = new Out <int>(inputOutputVal);
            Out <int> output      = new Out <int>();

            string result = await program.ExecuteReaderAsync(
                async (reader, token) =>
            {
                Assert.IsTrue(await reader.ReadAsync());

                string res = reader.GetString(0);

                Assert.IsFalse(await reader.ReadAsync());
                Assert.IsFalse(await reader.NextResultAsync());

                return(res);
            },
                inputVal,
                inputOutput,
                output);

            Assert.AreEqual("<foo>bar</foo>", result);

            Assert.IsNull(inputOutput.OutputError, inputOutput.OutputError?.Message);
            Assert.IsNull(output.OutputError, output.OutputError?.Message);

            Assert.AreEqual(inputOutputVal * 2, inputOutput.OutputValue.Value);
            Assert.AreEqual(inputVal, output.OutputValue.Value);
        }
コード例 #3
0
        public async Task ExecuteReaderAsync_WithManualDisposal_ExecutesAndAllowsStreaming()
        {
            SqlProgram <byte[]> readerTest =
                await SqlProgram <byte[]> .Create((Connection)DifferentLocalDatabaseConnectionString, "spTakeByteArray");

            byte[] data = Encoding.UTF8.GetBytes(AString);
            string resultString;

            using (Stream stream = await readerTest.ExecuteReaderAsync(
                       async(reader, disposable, token) =>
            {
                if (await reader.ReadAsync(token))
                {
                    return((Stream) new CloseableStream(reader.GetStream(0), disposable));
                }

                throw new Exception("Critical Test Error");
            },
                       data).ConfigureAwait(false))
            {
                Assert.IsNotNull(stream);
                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                    resultString = reader.ReadToEnd();
            }
            Assert.AreEqual(AString, resultString);
        }
コード例 #4
0
        public async Task ExecuteReaderAsync_ExecutesAndReturnsExpectedResult()
        {
            SqlProgram readerTest = await SqlProgram.Create((Connection)DifferentLocalDatabaseConnectionString, "spUltimateSproc");

            Task readerTask = readerTest.ExecuteReaderAsync();

            Assert.IsNotNull(readerTask);
        }
コード例 #5
0
        public async Task TestSqlProgram_ExecuteReaderAsync()
        {
            int rowCount = 0;

            // ReSharper disable once PossibleNullReferenceException
            await Task.WhenAll(
                Enumerable.Range(0, Loops)
                .Select(
                    async _ =>
            {
                SqlProgram <string, int, decimal, bool> program =
                    await
                    DatabasesConfiguration.Active.GetSqlProgram <string, int, decimal, bool>(
                        "test",
                        ReturnsTableProcedureName,
                        "@stringParam",
                        "@intParam",
                        "@decimalParam",
                        "@boolParam",
                        true);

                Assert.IsNotNull(program);

                await program.ExecuteReaderAsync(
                    async(dataReader, cancellationToken) =>
                {
                    Assert.IsNotNull(dataReader);
                    Assert.IsNotNull(cancellationToken);

                    while (await dataReader.ReadAsync(cancellationToken))
                    {
                        // Operation modes
                        Interlocked.Increment(ref rowCount);
                        Assert.AreEqual("system", dataReader.GetString(0), "Strings are not equal");
                        Assert.AreEqual(-1, dataReader.GetInt32(1), "Ints are not equal");
                        Assert.AreEqual(100M, dataReader.GetDecimal(2), "decimals are not equal");
                        Assert.AreEqual(true, dataReader.GetBoolean(3), "bools are not equal");
                    }
                    // ReSharper disable once PossibleNullReferenceException
                    await dataReader.NextResultAsync(cancellationToken);

                    // ReSharper disable once PossibleNullReferenceException
                    while (await dataReader.ReadAsync(cancellationToken))
                    {
                        // Guids
                        Interlocked.Increment(ref rowCount);
                    }
                },
                    "system",
                    -1,
                    100M,
                    true);
            }));

            Assert.AreEqual(Loops, rowCount, "Loop count and row count should be equal");
        }
コード例 #6
0
        public async Task ExecuteReaderAsync_WithManualDisposal_Timeouts()
        {
            TimeSpan         commandTimeout = TimeSpan.FromSeconds(1);
            SqlProgram <int> timeoutTest    =
                await
                SqlProgram <int> .Create(
                    (Connection)DifferentLocalDatabaseConnectionString,
                    "spTimeoutTest",
                    defaultCommandTimeout : commandTimeout);

            // Expose all the properties from the inner lambda.
            dynamic result = await timeoutTest.ExecuteReaderAsync(
                (reader, disposable, token) =>
                Task.FromResult(new { Reader = reader, Disposable = disposable, Token = token }),
                10)
                             .ConfigureAwait(false);
        }
コード例 #7
0
        public async Task Test_DatabaseProgramCall_ParamOrderNotImportant_WrongOrderExecutesSuccessfully()
        {
            int rowCount = 0;
            SqlProgram <int, string, decimal, bool> program =
                await
                DatabasesConfiguration.Active.GetSqlProgram <int, string, decimal, bool>(
                    "test",
                    ReturnsTableProcedureName,
                    "@intParam",
                    "@stringParam",
                    "@decimalParam",
                    "@boolParam",
                    true);

            Assert.IsNotNull(program);

            await program.ExecuteReaderAsync(
                async (dataReader, cancellationToken) =>
            {
                Assert.IsNotNull(dataReader);
                Assert.IsNotNull(cancellationToken);

                while (await dataReader.ReadAsync(cancellationToken))
                {
                    // Operation modes
                    Interlocked.Increment(ref rowCount);
                    Assert.AreEqual("system", dataReader.GetString(0), "Strings are not equal");
                    Assert.AreEqual(-1, dataReader.GetInt32(1), "Ints are not equal");
                    Assert.AreEqual(100M, dataReader.GetDecimal(2), "decimals are not equal");
                    Assert.AreEqual(true, dataReader.GetBoolean(3), "bools are not equal");
                }
                // ReSharper disable once PossibleNullReferenceException
                await dataReader.NextResultAsync(cancellationToken);

                // ReSharper disable once PossibleNullReferenceException
                while (await dataReader.ReadAsync(cancellationToken))
                {
                    // Guids
                    Interlocked.Increment(ref rowCount);
                }
            },
                -1,
                "system",
                100M,
                true);
        }
コード例 #8
0
        public async Task ExecuteReaderAsync_WithReturnType_ExecutesAndReturnsExpectedResult()
        {
            SqlProgram readerTest =
                await SqlProgram.Create((Connection)DifferentLocalDatabaseConnectionString, "spUltimateSproc");

            Task <dynamic> result = readerTest.ExecuteReaderAsync(
                async(reader, token) =>
            {
                if (await reader.ReadAsync(token))
                {
                    return(CreateDatabaseResult(reader));
                }

                throw new Exception("Critical Test Error");
            });

            Assert.IsNotNull(result);
            // Read the sproc defaults.
            Assert.AreEqual("A Test String", result.Result.Name);
            Assert.AreEqual(5, result.Result.Age);
            Assert.AreEqual(200.15M, result.Result.Balance);
            Assert.AreEqual(false, result.Result.IsValued);
        }