Mercurial > pub > bltoolkit
diff UnitTests/Linq/ProviderSpecific/MySqlSprocParameterPrefixTests.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/UnitTests/Linq/ProviderSpecific/MySqlSprocParameterPrefixTests.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,183 @@ +using System; + +using BLToolkit.Data; +using BLToolkit.Data.DataProvider; + +using NUnit.Framework; + +namespace Data.Linq.ProviderSpecific +{ + using Model; + + [TestFixture] + [Category("MySql")] + public class MySqlSprocParameterPrefixTests : TestBase + { + [Test] + public void ParameterPrefixTest([IncludeDataContexts(ProviderName.MySql)] string context) + { + var oldPrefix = MySqlDataProvider.SprocParameterPrefix; + MySqlDataProvider.SprocParameterPrefix = "_"; + + try + { + using (var db = new TestDbManager(context)) + { + var person = db.SetSpCommand("GetPersonById", db.Parameter("?ID", 1)).ExecuteObject<Person>(); + Assert.IsNotNull(person); + + var person2 = db.SetSpCommand("GetPersonByName", db.CreateParameters(person)).ExecuteObject<Person>(); + Assert.IsNotNull(person2); + + Assert.AreEqual(person, person2); + } + } + finally + { + MySqlDataProvider.SprocParameterPrefix = oldPrefix; + } + } + + [Test] + public void SetCommandWorksCorrectlyWithSprocParameterPrefixSet([IncludeDataContexts(ProviderName.MySql)] string context) + { + var oldPrefix = MySqlDataProvider.SprocParameterPrefix; + MySqlDataProvider.SprocParameterPrefix = "_"; + + try + { + using (var db = new DbManager(context)) + { + var person = db.SetCommand( + "SELECT * FROM Person WHERE PersonID = ?PersonID", + db.Parameter("?PersonID", 1)) + .ExecuteObject<Person>(); + + Assert.IsNotNull(person); + Assert.AreEqual(1, person.ID); + + var person2 = db.SetCommand( + "SELECT * FROM Person WHERE FirstName = ?firstName AND LastName = ?lastName", + db.CreateParameters(person)) + .ExecuteObject<Person>(); + + Assert.IsNotNull(person2); + Assert.AreEqual(person, person2); + } + } + finally + { + MySqlDataProvider.SprocParameterPrefix = oldPrefix; + } + } + + [Test] + public void SprocParameterPrefixShouldBeSpecifiedManuallyWhenItIsNotSet([IncludeDataContexts(ProviderName.MySql)] string context) + { + using (var db = new DbManager(context)) + { + var person = db.SetSpCommand("GetPersonById", db.Parameter("?_ID", 1)).ExecuteObject<Person>(); + Assert.IsNotNull(person); + + var person2 = db.SetSpCommand( + "GetPersonByName", + db.Parameter("?_lastName", person.LastName), + db.Parameter("?_firstName", person.FirstName)) + .ExecuteObject<Person>(); + Assert.IsNotNull(person2); + } + } + + [Test] + public void ParameterSymbolMayBeOmitedForSpCommand([IncludeDataContexts(ProviderName.MySql)] string context) + { + // I am not sure this is a good thing though + // Maybe we need to be more strict on syntax and on the library users + // and do not allow different syntax (omiting parameter symbol)? + + using (var db = new DbManager(context)) + { + var person = db.SetSpCommand("GetPersonById", db.Parameter("_ID", 1)).ExecuteObject<Person>(); + Assert.IsNotNull(person); + + var person2 = db.SetSpCommand( + "GetPersonByName", + db.Parameter("_lastName", person.LastName), + db.Parameter("_firstName", person.FirstName)) + .ExecuteObject<Person>(); + Assert.IsNotNull(person2); + Assert.AreEqual(person, person2); + + var oldPrefix = MySqlDataProvider.SprocParameterPrefix; + MySqlDataProvider.SprocParameterPrefix = "_"; + + try + { + var person3 = db.SetSpCommand("GetPersonById", db.Parameter("ID", 1)).ExecuteObject<Person>(); + Assert.AreEqual(person, person3); + } + finally + { + MySqlDataProvider.SprocParameterPrefix = oldPrefix; + } + } + } + + [Test] + public void SpecifyingParameterPrefixManuallyIsAlsoOk([IncludeDataContexts(ProviderName.MySql)] string context) + { + var oldPrefix = MySqlDataProvider.SprocParameterPrefix; + MySqlDataProvider.SprocParameterPrefix = "_"; + + try + { + using (var db = new DbManager(context)) + { + // we specify parameter name with a prefix, though SprocParameterPrefix is specified + // in this case additional parameter prefix will not be added, so everything will be ok + var person = db.SetSpCommand("GetPersonById", db.Parameter("?_ID", 1)).ExecuteObject<Person>(); + Assert.IsNotNull(person); + } + } + finally + { + MySqlDataProvider.SprocParameterPrefix = oldPrefix; + } + } + + [Test] + public void PrefixIsAddedWhenRetrievingParameterFromDbManager([IncludeDataContexts(ProviderName.MySql)] string context) + { + var oldPrefix = MySqlDataProvider.SprocParameterPrefix; + MySqlDataProvider.SprocParameterPrefix = "_"; + + try + { + using (var db = new DbManager(context)) + { + db.SetSpCommand("GetPersonById", db.Parameter("?ID", 1)).Prepare(); + + foreach (var personID in new[] { 1, 2 }) + { + // prefix is not specified but it will be added internally before retrieving parameter from + // command parameters + db.Parameter("?ID").Value = personID; + var person = db.ExecuteObject<Person>(); + Assert.IsNotNull(person); + Assert.AreEqual(personID, person.ID); + + // specifying prefix is also ok + db.Parameter("?_ID").Value = personID; + person = db.ExecuteObject<Person>(); + Assert.IsNotNull(person); + Assert.AreEqual(personID, person.ID); + } + } + } + finally + { + MySqlDataProvider.SprocParameterPrefix = oldPrefix; + } + } + } +}