123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- using PetaPoco.Providers;
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Xunit;
- using Shouldly;
- namespace PetaPoco.Tests.Integration.Databases.MSSQL
- {
- [Collection("Mssql")]
- public class MssqlPreExecuteTests : BaseDatabase
- {
- public MsssqlPreExecuteDatabaseProvider Provider => DB.Provider as MsssqlPreExecuteDatabaseProvider;
- public MssqlPreExecuteTests() : base(new MssqlPreExecuteDBTestProvider())
- {
- Provider.ThrowExceptions = true;
- }
- [Fact]
- public void Query_Calls_PreExecute()
- {
- var expected = Guid.NewGuid().ToString();
- var sql = Sql.Builder
- .Select("*")
- .From("sometable")
- .Where("foo = @0", expected);
- void act() => DB.Query<string>(sql).First();
- Should.Throw<PreExecuteException>(act);
- Provider.Parameters.Count().ShouldBe(1);
- Provider.Parameters.First().Value.ShouldBe(expected);
- }
- [Fact]
- public void Execute_Calls_PreExecute()
- {
- var expected = Guid.NewGuid().ToString();
- var sql = Sql.Builder
- .Select("*")
- .From("sometable")
- .Where("foo = @0", expected);
- void act() => DB.Execute(sql);
- Should.Throw<PreExecuteException>(act);
- Provider.Parameters.Count().ShouldBe(1);
- Provider.Parameters.First().Value.ShouldBe(expected);
- }
- [Fact]
- public void Insert_Calls_PreExecute()
- {
- var expected = Guid.NewGuid().ToString();
- void act() => DB.Insert("sometable", new { Foo = expected });
- Should.Throw<PreExecuteException>(act);
- Provider.Parameters.Count().ShouldBe(1);
- Provider.Parameters.First().Value.ShouldBe(expected);
- }
- [Fact]
- public void Update_Calls_PreExecute()
- {
- var expected = Guid.NewGuid().ToString();
- void act() => DB.Update("sometable", "id", new { ID = 3, Foo = expected });
- Should.Throw<PreExecuteException>(act);
- Provider.Parameters.Count().ShouldBe(2);
- Provider.Parameters.First().Value.ShouldBe(expected);
- }
- [Fact]
- public void ExecuteScalar_Calls_PreExecute()
- {
- var expected = Guid.NewGuid().ToString();
- var sql = Sql.Builder
- .Select("count(*)")
- .From("sometable")
- .Where("foo = @0", expected);
- void act() => DB.ExecuteScalar<int>(sql);
- Should.Throw<PreExecuteException>(act);
- Provider.Parameters.Count().ShouldBe(1);
- Provider.Parameters.First().Value.ShouldBe(expected);
- }
- [Fact]
- public void QueryAsync_Calls_PreExecute()
- {
- var expected = Guid.NewGuid().ToString();
- var sql = Sql.Builder
- .Select("*")
- .From("sometable")
- .Where("foo = @0", expected);
- async Task act() => await DB.QueryAsync<string>(sql).Result.ReadAsync();
- Should.Throw<PreExecuteException>(act);
- Provider.Parameters.Count().ShouldBe(1);
- Provider.Parameters.First().Value.ShouldBe(expected);
- }
- [Fact]
- public void ExecuteAsync_Calls_PreExecute()
- {
- var expected = Guid.NewGuid().ToString();
- var sql = Sql.Builder
- .Select("*")
- .From("sometable")
- .Where("foo = @0", expected);
- async Task act() => await DB.ExecuteAsync(sql);
- Should.Throw<PreExecuteException>(act);
- Provider.Parameters.Count().ShouldBe(1);
- Provider.Parameters.First().Value.ShouldBe(expected);
- }
- [Fact]
- public void InsertAsync_Calls_PreExecute()
- {
- var expected = Guid.NewGuid().ToString();
- async Task act() => await DB.InsertAsync("sometable", new { Foo = expected });
- Should.Throw<PreExecuteException>(act);
- Provider.Parameters.Count().ShouldBe(1);
- Provider.Parameters.First().Value.ShouldBe(expected);
- }
- [Fact]
- public void UpdateAsync_Calls_PreExecute()
- {
- var expected = Guid.NewGuid().ToString();
- async Task act() => await DB.UpdateAsync("sometable", "id", new { ID = 3, Foo = expected });
- Should.Throw<PreExecuteException>(act);
- Provider.Parameters.Count().ShouldBe(2);
- Provider.Parameters.First().Value.ShouldBe(expected);
- }
- [Fact]
- public void ExecuteScalarAsync_Calls_PreExecute()
- {
- var expected = Guid.NewGuid().ToString();
- var sql = Sql.Builder
- .Select("count(*)")
- .From("sometable")
- .Where("foo = @0", expected);
- async Task act() => await DB.ExecuteScalarAsync<int>(sql);
- Should.Throw<PreExecuteException>(act);
- Provider.Parameters.Count().ShouldBe(1);
- Provider.Parameters.First().Value.ShouldBe(expected);
- }
- public class MssqlPreExecuteDBTestProvider : MssqlDBTestProvider
- {
- protected override IDatabase LoadFromConnectionName(string name)
- {
- var config = BuildFromConnectionName(name);
- config.UsingProvider<MsssqlPreExecuteDatabaseProvider>();
- return config.Create();
- }
- }
- public class MsssqlPreExecuteDatabaseProvider : SqlServerDatabaseProvider
- {
- public bool ThrowExceptions { get; set; }
- public List<IDataParameter> Parameters { get; set; } = new List<IDataParameter>();
- public override void PreExecute(IDbCommand cmd)
- {
- Parameters.Clear();
- if (ThrowExceptions)
- {
- Parameters = cmd.Parameters.Cast<IDataParameter>().ToList();
- throw new PreExecuteException();
- }
- }
- }
- public class PreExecuteException : Exception { }
- }
-
- }
|