You can subscribe to this list here.
2004 |
Jan
|
Feb
|
Mar
|
Apr
(248) |
May
(82) |
Jun
(90) |
Jul
(177) |
Aug
(253) |
Sep
(157) |
Oct
(151) |
Nov
(143) |
Dec
(278) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(152) |
Feb
(107) |
Mar
(177) |
Apr
(133) |
May
(259) |
Jun
(81) |
Jul
(119) |
Aug
(306) |
Sep
(416) |
Oct
(240) |
Nov
(329) |
Dec
(206) |
2006 |
Jan
(466) |
Feb
(382) |
Mar
(153) |
Apr
(162) |
May
(133) |
Jun
(21) |
Jul
(18) |
Aug
(37) |
Sep
(97) |
Oct
(114) |
Nov
(110) |
Dec
(28) |
2007 |
Jan
(74) |
Feb
(65) |
Mar
(49) |
Apr
(76) |
May
(43) |
Jun
(15) |
Jul
(68) |
Aug
(55) |
Sep
(63) |
Oct
(59) |
Nov
(70) |
Dec
(66) |
2008 |
Jan
(71) |
Feb
(60) |
Mar
(120) |
Apr
(31) |
May
(48) |
Jun
(81) |
Jul
(107) |
Aug
(51) |
Sep
(80) |
Oct
(83) |
Nov
(83) |
Dec
(79) |
2009 |
Jan
(83) |
Feb
(110) |
Mar
(97) |
Apr
(91) |
May
(291) |
Jun
(250) |
Jul
(197) |
Aug
(58) |
Sep
(54) |
Oct
(122) |
Nov
(68) |
Dec
(34) |
2010 |
Jan
(50) |
Feb
(17) |
Mar
(63) |
Apr
(61) |
May
(84) |
Jun
(81) |
Jul
(138) |
Aug
(144) |
Sep
(78) |
Oct
(26) |
Nov
(30) |
Dec
(61) |
2011 |
Jan
(33) |
Feb
(35) |
Mar
(166) |
Apr
(221) |
May
(109) |
Jun
(76) |
Jul
(27) |
Aug
(37) |
Sep
(1) |
Oct
(4) |
Nov
(2) |
Dec
(1) |
2012 |
Jan
|
Feb
|
Mar
(2) |
Apr
(2) |
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
(1) |
Oct
|
Nov
(1) |
Dec
|
2013 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(1) |
Sep
(3) |
Oct
(2) |
Nov
|
Dec
(1) |
2014 |
Jan
(1) |
Feb
(1) |
Mar
(3) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <pa...@us...> - 2011-05-16 02:07:39
|
Revision: 5828 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5828&view=rev Author: patearl Date: 2011-05-16 02:07:33 +0000 (Mon, 16 May 2011) Log Message: ----------- Tests: Added a test to check for incorrect filtering due to order by. Modified Paths: -------------- trunk/nhibernate/src/NHibernate.DomainModel/Northwind/Entities/Northwind.cs trunk/nhibernate/src/NHibernate.Test/Linq/ByMethod/OrderByTests.cs Modified: trunk/nhibernate/src/NHibernate.DomainModel/Northwind/Entities/Northwind.cs =================================================================== --- trunk/nhibernate/src/NHibernate.DomainModel/Northwind/Entities/Northwind.cs 2011-05-16 00:08:36 UTC (rev 5827) +++ trunk/nhibernate/src/NHibernate.DomainModel/Northwind/Entities/Northwind.cs 2011-05-16 02:07:33 UTC (rev 5828) @@ -54,6 +54,11 @@ get { return _session.Query<Timesheet>(); } } + public IQueryable<Animal> Animals + { + get { return _session.Query<Animal>(); } + } + public IQueryable<Mammal> Mammals { get { return _session.Query<Mammal>(); } Modified: trunk/nhibernate/src/NHibernate.Test/Linq/ByMethod/OrderByTests.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Linq/ByMethod/OrderByTests.cs 2011-05-16 00:08:36 UTC (rev 5827) +++ trunk/nhibernate/src/NHibernate.Test/Linq/ByMethod/OrderByTests.cs 2011-05-16 02:07:33 UTC (rev 5828) @@ -115,5 +115,17 @@ Assert.Greater(ids[0], ids[1]); } } + + [Test] + public void OrderByDoesNotFilterResultsOnJoin() + { + // Check preconditions. + var allAnimalsWithNullFather = from a in db.Animals where a.Father == null select a; + Assert.Greater(allAnimalsWithNullFather.Count(), 0); + // Check join result. + var allAnimals = db.Animals; + var orderedAnimals = from a in db.Animals orderby a.Father.SerialNumber select a; + Assert.AreEqual(allAnimals.Count(), orderedAnimals.Count()); + } } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-05-16 00:08:42
|
Revision: 5827 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5827&view=rev Author: patearl Date: 2011-05-16 00:08:36 +0000 (Mon, 16 May 2011) Log Message: ----------- Tests: Improved a DtcFailures test so it works on more databases. Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/DtcFailures/DtcFailuresFixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/DtcFailures/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/DtcFailures/Person.cs Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/DtcFailures/DtcFailuresFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/DtcFailures/DtcFailuresFixture.cs 2011-05-15 23:58:33 UTC (rev 5826) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/DtcFailures/DtcFailuresFixture.cs 2011-05-16 00:08:36 UTC (rev 5827) @@ -1,9 +1,14 @@ using System; using System.Collections; +using System.Linq; +using System.Reflection; using System.Threading; using System.Transactions; using log4net; using log4net.Repository.Hierarchy; +using NHibernate.Cfg; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Tool.hbm2ddl; using NUnit.Framework; namespace NHibernate.Test.NHSpecificTest.DtcFailures @@ -28,14 +33,39 @@ return TestDialect.GetTestDialect(dialect).SupportsDistributedTransactions; } + protected override void CreateSchema() + { + // Copied from Configure method. + Configuration config = new Configuration(); + if (TestConfigurationHelper.hibernateConfigFile != null) + config.Configure(TestConfigurationHelper.hibernateConfigFile); + + // Our override so we can set nullability on database column without NHibernate knowing about it. + config.BeforeBindMapping += BeforeBindMapping; + + // Copied from AddMappings methods. + Assembly assembly = Assembly.Load(MappingsAssembly); + foreach (string file in Mappings) + config.AddResource(MappingsAssembly + "." + file, assembly); + + // Copied from CreateSchema method, but we use our own config. + new SchemaExport(config).Create(false, true); + } + + private void BeforeBindMapping(object sender, BindMappingEventArgs e) + { + HbmProperty prop = e.Mapping.RootClasses[0].Properties.OfType<HbmProperty>().Single(p => p.Name == "NotNullData"); + prop.notnull = true; + prop.notnullSpecified = true; + } + [Test] public void WillNotCrashOnDtcPrepareFailure() { var tx = new TransactionScope(); using (ISession s = sessions.OpenSession()) { - s.Save(new Person {CreatedAt = DateTime.MinValue // will cause SQL date failure - }); + s.Save(new Person {NotNullData = null}); // Cause a SQL not null constraint violation. } new ForceEscalationToDistributedTx(); Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/DtcFailures/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/DtcFailures/Mappings.hbm.xml 2011-05-15 23:58:33 UTC (rev 5826) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/DtcFailures/Mappings.hbm.xml 2011-05-16 00:08:36 UTC (rev 5827) @@ -8,6 +8,6 @@ <generator class="hilo"/> </id> <property name="CreatedAt"/> - + <property name="NotNullData"/> <!-- NOT NULL will be set on created schema directly to avoid NH checks. --> </class> </hibernate-mapping> Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/DtcFailures/Person.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/DtcFailures/Person.cs 2011-05-15 23:58:33 UTC (rev 5826) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/DtcFailures/Person.cs 2011-05-16 00:08:36 UTC (rev 5827) @@ -7,6 +7,11 @@ { private int id; + public Person() + { + NotNullData = "not-null"; + } + public virtual DateTime CreatedAt { get; set; } public virtual int Id @@ -14,5 +19,7 @@ get { return id; } set { id = value; } } + + public virtual string NotNullData { get; set; } } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2011-05-15 23:58:39
|
Revision: 5826 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5826&view=rev Author: patearl Date: 2011-05-15 23:58:33 +0000 (Sun, 15 May 2011) Log Message: ----------- PostgreSQL: Added a comment. Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Driver/NpgsqlDriver.cs Modified: trunk/nhibernate/src/NHibernate/Driver/NpgsqlDriver.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Driver/NpgsqlDriver.cs 2011-05-15 19:39:11 UTC (rev 5825) +++ trunk/nhibernate/src/NHibernate/Driver/NpgsqlDriver.cs 2011-05-15 23:58:33 UTC (rev 5826) @@ -79,6 +79,7 @@ { base.InitializeParameter(dbParam, name, sqlType); + // Since the .NET currency type has 4 decimal places, we use a decimal type in PostgreSQL instead of its native 2 decimal currency type. if (sqlType.DbType == DbType.Currency) dbParam.DbType = DbType.Decimal; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-15 19:39:17
|
Revision: 5825 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5825&view=rev Author: fabiomaulo Date: 2011-05-15 19:39:11 +0000 (Sun, 15 May 2011) Log Message: ----------- Test ported with bug fix Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/IdMapper.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/IdMapperTest.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/IdMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/IdMapper.cs 2011-05-15 19:33:14 UTC (rev 5824) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/IdMapper.cs 2011-05-15 19:39:11 UTC (rev 5825) @@ -79,7 +79,12 @@ if(hbmId.name == null) { // no member for the id - hbmId.type1 = generator.DefaultReturnType.GetNhTypeName(); + var defaultReturnType = generator.DefaultReturnType; + // where a DefaultReturnType is not available, let NH discover it during the mapping-binding process + if (defaultReturnType != null) + { + hbmId.type1 = defaultReturnType.GetNhTypeName(); + } } object generatorParameters = generator.Params; if (generatorParameters != null) Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/IdMapperTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/IdMapperTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/IdMapperTest.cs 2011-05-15 19:39:11 UTC (rev 5825) @@ -0,0 +1,146 @@ +using System.Linq; +using System.Reflection; +using NHibernate.Mapping.ByCode; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode.Impl; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.MappingByCode.MappersTests +{ + public class IdMapperTest + { + // The strategy Assigned is the default and does not need the "generator" + //public void SetGeneratorAtCtor() + //{ + // var hbmId = new HbmId(); + // new IdMapper(hbmId); + // hbmId.generator.Should().Not.Be.Null(); + //} + + [Test] + public void CanSetGenerator() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.HighLow); + hbmId.generator.@class.Should().Be.EqualTo("hilo"); + } + + [Test] + public void CanSetGeneratorWithParameters() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.HighLow, p => p.Params(new { max_low = 99, where = "TableName" })); + hbmId.generator.@class.Should().Be.EqualTo("hilo"); + hbmId.generator.param.Should().Have.Count.EqualTo(2); + hbmId.generator.param.Select(p => p.name).Should().Have.SameValuesAs("max_low", "where"); + hbmId.generator.param.Select(p => p.GetText()).Should().Have.SameValuesAs("99", "TableName"); + } + + [Test] + public void CanSetGeneratorGuid() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.Guid); + hbmId.generator.@class.Should().Be.EqualTo("guid"); + } + + [Test] + public void CanSetGeneratorGuidComb() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.GuidComb); + hbmId.generator.@class.Should().Be.EqualTo("guid.comb"); + } + + [Test] + public void CanSetGeneratorSequence() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.Sequence); + hbmId.generator.@class.Should().Be.EqualTo("sequence"); + } + + [Test] + public void CanSetGeneratorIdentity() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.Identity); + hbmId.generator.@class.Should().Be.EqualTo("identity"); + } + + private class MyClass + { + public int Id { get; set; } + public Related OneToOne { get; set; } + } + + private class Related + { + public int Id { get; set; } + } + + [Test] + public void CanSetGeneratorForeign() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.Foreign<MyClass>(mc => mc.OneToOne)); + hbmId.generator.@class.Should().Be.EqualTo("foreign"); + hbmId.generator.param.Should().Not.Be.Null().And.Have.Count.EqualTo(1); + hbmId.generator.param.Single().Satisfy(p => p.name == "property" && p.GetText() == "OneToOne"); + } + + [Test] + public void CanSetGeneratorAssigned() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.Assigned); + hbmId.generator.@class.Should().Be.EqualTo("assigned"); + } + + private class BaseEntity + { + private int id; + + public int Id + { + get { return id; } + } + } + + private class Entity : BaseEntity + { + + } + + [Test] + public void WhenHasMemberCanSetAccessor() + { + var member = typeof(Entity).GetProperty("Id", + BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic + | BindingFlags.FlattenHierarchy); + var hbmId = new HbmId(); + var mapper = new IdMapper(member, hbmId); + mapper.Access(Accessor.NoSetter); + hbmId.access.Should().Be("nosetter.camelcase"); + } + + [Test] + public void CanSetColumnName() + { + var hbmId = new HbmId(); + var mapper = new IdMapper(null, hbmId); + mapper.Column("MyName"); + hbmId.Columns.Single().name.Should().Be("MyName"); + } + + [Test] + public void CanSetLength() + { + var hbmId = new HbmId(); + var mapper = new IdMapper(null, hbmId); + mapper.Length(10); + hbmId.length.Should().Be("10"); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 19:33:14 UTC (rev 5824) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 19:39:11 UTC (rev 5825) @@ -553,6 +553,7 @@ <Compile Include="MappingByCode\ExpliticMappingTests\VersionTests.cs" /> <Compile Include="MappingByCode\For.cs" /> <Compile Include="MappingByCode\MappersTests\AnyMapperTest.cs" /> + <Compile Include="MappingByCode\MappersTests\IdMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\ManyToOneMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\AbstractPropertyContainerMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\ClassMapperTests\CheckMixingPOIDStrategiesTests.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-15 19:33:20
|
Revision: 5824 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5824&view=rev Author: fabiomaulo Date: 2011-05-15 19:33:14 +0000 (Sun, 15 May 2011) Log Message: ----------- Test ported with bug fix Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/AnyMapper.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/AnyMapperTest.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/AnyMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/AnyMapper.cs 2011-05-15 19:29:27 UTC (rev 5823) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/AnyMapper.cs 2011-05-15 19:33:14 UTC (rev 5824) @@ -20,7 +20,7 @@ private readonly MemberInfo member; public AnyMapper(MemberInfo member, System.Type foreignIdType, HbmAny any, HbmMapping mapDoc) - : this(member, foreignIdType, new AccessorPropertyMapper(member.DeclaringType, member.Name, x => any.access = x), any, mapDoc) {} + : this(member, foreignIdType, member == null ? (IAccessorPropertyMapper)new NoMemberPropertyMapper() : new AccessorPropertyMapper(member.DeclaringType, member.Name, x => any.access = x), any, mapDoc) { } public AnyMapper(MemberInfo member, System.Type foreignIdType, IAccessorPropertyMapper accessorMapper, HbmAny any, HbmMapping mapDoc) { Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/AnyMapperTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/AnyMapperTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/AnyMapperTest.cs 2011-05-15 19:33:14 UTC (rev 5824) @@ -0,0 +1,302 @@ +using System; +using System.Linq; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode.Impl; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.MappingByCode.MappersTests +{ + public class AnyMapperTest + { + private class MyClass + { + public int Id { get; set; } + public MyReferenceClass MyReferenceClass { get; set; } + } + + private class MyReferenceClass + { + public int Id { get; set; } + } + + [Test] + public void AtCreationSetIdType() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + hbmAny.idtype.Should().Be("Int32"); + } + + [Test] + public void AtCreationSetTheTwoRequiredColumnsNodes() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + hbmAny.Columns.Should().Have.Count.EqualTo(2); + hbmAny.Columns.Select(c => c.name).All(n => n.Satisfy(name => !string.IsNullOrEmpty(name))); + } + + [Test] + public void CanSetIdTypeThroughIType() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.IdType(NHibernateUtil.Int64); + hbmAny.idtype.Should().Be("Int64"); + } + + [Test] + public void CanSetIdTypeThroughGenericMethod() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.IdType<long>(); + hbmAny.idtype.Should().Be("Int64"); + } + + [Test] + public void CanSetIdTypeThroughType() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.IdType(typeof(long)); + hbmAny.idtype.Should().Be("Int64"); + } + + [Test] + public void CanSetMetaTypeThroughIType() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.MetaType(NHibernateUtil.Character); + hbmAny.MetaType.Should().Be("Char"); + } + + [Test] + public void CanSetMetaTypeThroughGenericMethod() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.MetaType<char>(); + hbmAny.MetaType.Should().Be("Char"); + } + + [Test] + public void CanSetMetaTypeThroughType() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.MetaType(typeof(char)); + hbmAny.MetaType.Should().Be("Char"); + } + + [Test] + public void CanSetCascade() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.Cascade(Mapping.ByCode.Cascade.All); + hbmAny.cascade.Should().Be("all"); + } + + [Test] + public void AutoCleanInvalidCascade() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.Cascade(Mapping.ByCode.Cascade.All | Mapping.ByCode.Cascade.DeleteOrphans); + hbmAny.cascade.Should().Be("all"); + } + + [Test] + public void CanSetIndex() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.Index("pizza"); + hbmAny.index.Should().Be("pizza"); + } + + [Test] + public void CanSetLazy() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.Lazy(true); + hbmAny.lazy.Should().Be(true); + } + + [Test] + public void WhenSetIdColumnPropertiesThenWorkOnSameHbmColumnCreatedAtCtor() + { + const int idColumnIndex = 1; + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + var columnsBefore = hbmAny.Columns.ToArray(); + mapper.Columns(idcm => idcm.Length(10), metacm => { }); + var columnsAfter = hbmAny.Columns.ToArray(); + columnsBefore[idColumnIndex].Should().Be.SameInstanceAs(columnsAfter[idColumnIndex]); + columnsBefore[idColumnIndex].length.Should().Be("10"); + } + + [Test] + public void WhenSetMetaColumnPropertiesThenWorkOnSameHbmColumnCreatedAtCtor() + { + // The first column in the mapping is the MetaValue + const int metaValueColumnIndex = 0; + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + var columnsBefore = hbmAny.Columns.ToArray(); + mapper.Columns(idcm => { }, metacm => metacm.Length(500)); + var columnsAfter = hbmAny.Columns.ToArray(); + columnsBefore[metaValueColumnIndex].Should().Be.SameInstanceAs(columnsAfter[metaValueColumnIndex]); + columnsBefore[metaValueColumnIndex].length.Should().Be("500"); + } + + [Test] + public void MetaTypeShouldBeImmutable() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.MetaValue('A', typeof(MyReferenceClass)); + Executing.This(() => mapper.MetaType(NHibernateUtil.Int32)).Should().Throw<ArgumentException>(); + Executing.This(mapper.MetaType<int>).Should().Throw<ArgumentException>(); + } + + [Test] + public void WhenNullParameterThenThrow() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + Executing.This(() => mapper.MetaValue(null, typeof(MyReferenceClass))).Should().Throw<ArgumentNullException>(); + Executing.This(() => mapper.MetaValue('A', null)).Should().Throw<ArgumentNullException>(); + } + + [Test] + public void WhenSetFirstMetaValueThenSetMetaTypeIfNotClass() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.MetaValue('A', typeof(MyReferenceClass)); + hbmAny.MetaType.Should().Be("Char"); + } + + [Test] + public void WhenSetMetaValueWithClassThenThrow() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + Executing.This(() => mapper.MetaValue(typeof(MyReferenceClass), typeof(MyReferenceClass))).Should().Throw<ArgumentOutOfRangeException>(); + } + + [Test] + public void WhenSetSecondMetaValueThenCheckCompatibility() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.MetaValue('A', typeof(MyReferenceClass)); + Executing.This(() => mapper.MetaValue(5, typeof(MyClass))).Should().Throw<ArgumentException>(); + } + + [Test] + public void WhenDuplicatedMetaValueThenRegisterOne() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.MetaValue('A', typeof(MyReferenceClass)); + mapper.MetaValue('A', typeof(MyReferenceClass)); + hbmAny.metavalue.Should().Have.Count.EqualTo(1); + } + + [Test] + public void WhenDuplicatedMetaValueWithDifferentTypeThenThrow() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.MetaValue('A', typeof(MyReferenceClass)); + Executing.This(() => mapper.MetaValue('A', typeof(MyClass))).Should().Throw<ArgumentException>(); + } + + [Test] + public void WhenSetTwoMetaValueThenHasTwoMetaValues() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.MetaValue('A', typeof(MyReferenceClass)); + mapper.MetaValue('B', typeof(MyClass)); + hbmAny.metavalue.Should().Have.Count.EqualTo(2); + hbmAny.metavalue.Select(mv => mv.value).Should().Have.SameValuesAs("A", "B"); + hbmAny.metavalue.Select(mv => mv.@class).Satisfy(c => c.Any(clazz => clazz.Contains("MyReferenceClass"))); + hbmAny.metavalue.Select(mv => mv.@class).Satisfy(c => c.Any(clazz => clazz.Contains("MyClass"))); + } + + [Test] + public void AtCreationSetColumnsUsingMemberName() + { + var member = typeof(MyClass).GetProperty("MyReferenceClass"); + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + new AnyMapper(member, typeof(int), hbmAny, hbmMapping); + hbmAny.Columns.ElementAt(0).name.Should().Contain("MyReferenceClass"); + hbmAny.Columns.ElementAt(1).name.Should().Contain("MyReferenceClass"); + } + + [Test] + public void IdMetaTypeShouldBeImmutableAfterAddMetaValues() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + mapper.MetaValue('A', typeof(MyReferenceClass)); + Executing.This(() => mapper.IdType(NHibernateUtil.Int32)).Should().NotThrow(); + Executing.This(mapper.IdType<int>).Should().NotThrow(); + Executing.This(mapper.IdType<string>).Should().Throw<ArgumentException>(); + Executing.This(() => mapper.IdType(NHibernateUtil.String)).Should().Throw<ArgumentException>(); + } + + [Test] + public void CanSetUpdate() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + + mapper.Update(false); + hbmAny.update.Should().Be.False(); + } + + [Test] + public void CanSetInsert() + { + var hbmMapping = new HbmMapping(); + var hbmAny = new HbmAny(); + var mapper = new AnyMapper(null, typeof(int), hbmAny, hbmMapping); + + mapper.Insert(false); + hbmAny.insert.Should().Be.False(); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 19:29:27 UTC (rev 5823) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 19:33:14 UTC (rev 5824) @@ -552,6 +552,7 @@ <Compile Include="MappingByCode\ExpliticMappingTests\SubclassPropertiesSplitsTests.cs" /> <Compile Include="MappingByCode\ExpliticMappingTests\VersionTests.cs" /> <Compile Include="MappingByCode\For.cs" /> + <Compile Include="MappingByCode\MappersTests\AnyMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\ManyToOneMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\AbstractPropertyContainerMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\ClassMapperTests\CheckMixingPOIDStrategiesTests.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-15 19:29:33
|
Revision: 5823 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5823&view=rev Author: fabiomaulo Date: 2011-05-15 19:29:27 +0000 (Sun, 15 May 2011) Log Message: ----------- Moved test Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/ManyToOneMapperTest.cs Removed Paths: ------------- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ManyToOneMapperTest.cs Deleted: trunk/nhibernate/src/NHibernate.Test/MappingByCode/ManyToOneMapperTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ManyToOneMapperTest.cs 2011-05-15 19:27:43 UTC (rev 5822) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/ManyToOneMapperTest.cs 2011-05-15 19:29:27 UTC (rev 5823) @@ -1,305 +0,0 @@ -using System; -using System.Linq; -using NHibernate.Mapping.ByCode; -using NHibernate.Cfg.MappingSchema; -using NHibernate.Mapping.ByCode.Impl; -using NUnit.Framework; -using SharpTestsEx; - -namespace NHibernate.Test.MappingByCode -{ - public class ManyToOneMapperTest - { - private class MyClass - { - public Relation Relation { get; set; } - public IRelation TheOtherRelation { get; set; } - } - - private interface IRelation - { - - } - - private class Relation : IRelation - { - - } - - private class Whatever - { - - } - - [Test] - public void AssignCascadeStyle() - { - var hbmMapping = new HbmMapping(); - var hbm = new HbmManyToOne(); - var mapper = new ManyToOneMapper(null, hbm, hbmMapping); - mapper.Cascade(Mapping.ByCode.Cascade.Persist | Mapping.ByCode.Cascade.Remove); - hbm.cascade.Split(',').Select(w => w.Trim()).Should().Contain("persist").And.Contain("delete"); - } - - [Test] - public void AutoCleanUnsupportedCascadeStyle() - { - var hbmMapping = new HbmMapping(); - var hbm = new HbmManyToOne(); - var mapper = new ManyToOneMapper(null, hbm, hbmMapping); - mapper.Cascade(Mapping.ByCode.Cascade.Persist | Mapping.ByCode.Cascade.DeleteOrphans | Mapping.ByCode.Cascade.Remove); - hbm.cascade.Split(',').Select(w => w.Trim()).All(w => w.Satisfy(cascade => !cascade.Contains("orphan"))); - } - - [Test] - public void CanSetAccessor() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("Relation"); - var hbm = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, hbm, hbmMapping); - - mapper.Access(Accessor.ReadOnly); - hbm.Access.Should().Be("readonly"); - } - - [Test] - public void WhenSetDifferentColumnNameThenSetTheName() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("Relation"); - var hbm = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, hbm, hbmMapping); - mapper.Column(cm => cm.Name("RelationId")); - - hbm.Columns.Should().Have.Count.EqualTo(1); - hbm.Columns.Single().name.Should().Be("RelationId"); - } - - [Test] - public void WhenSetDefaultColumnNameThenDoesNotSetTheName() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("Relation"); - var mapping = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, mapping, hbmMapping); - mapper.Column(cm => cm.Name("Relation")); - mapping.column.Should().Be.Null(); - mapping.Columns.Should().Be.Empty(); - } - - [Test] - public void WhenSetBasicColumnValuesThenSetPlainValues() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("Relation"); - var mapping = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, mapping, hbmMapping); - mapper.Column(cm => - { - cm.UniqueKey("theUnique"); - cm.NotNullable(true); - }); - mapping.Items.Should().Be.Null(); - mapping.uniquekey.Should().Be("theUnique"); - mapping.notnull.Should().Be(true); - mapping.notnullSpecified.Should().Be(true); - } - - [Test] - public void WhenSetColumnValuesThenAddColumnTag() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("Relation"); - var mapping = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, mapping, hbmMapping); - mapper.Column(cm => - { - cm.SqlType("BIGINT"); - cm.NotNullable(true); - }); - mapping.Items.Should().Not.Be.Null(); - mapping.Columns.Should().Have.Count.EqualTo(1); - } - - [Test] - public void WhenSetBasicColumnValuesMoreThanOnesThenMergeColumn() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("Relation"); - var mapping = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, mapping, hbmMapping); - mapper.Column(cm => cm.UniqueKey("theUnique")); - mapper.Column(cm => cm.NotNullable(true)); - - mapping.Items.Should().Be.Null(); - mapping.uniquekey.Should().Be("theUnique"); - mapping.notnull.Should().Be(true); - mapping.notnullSpecified.Should().Be(true); - } - - [Test] - public void WhenSetMultiColumnsValuesThenAddColumns() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("Relation"); - var mapping = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, mapping, hbmMapping); - mapper.Columns(cm => - { - cm.Name("column1"); - cm.Length(50); - }, cm => - { - cm.Name("column2"); - cm.SqlType("VARCHAR(10)"); - }); - mapping.Columns.Should().Have.Count.EqualTo(2); - } - - [Test] - public void WhenSetMultiColumnsValuesThenAutoassignColumnNames() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("Relation"); - var mapping = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, mapping, hbmMapping); - mapper.Columns(cm => cm.Length(50), cm => cm.SqlType("VARCHAR(10)")); - mapping.Columns.Should().Have.Count.EqualTo(2); - mapping.Columns.All(cm => cm.name.Satisfy(n => !string.IsNullOrEmpty(n))); - } - - [Test] - public void AfterSetMultiColumnsCantSetSimpleColumn() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("Relation"); - var mapping = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, mapping, hbmMapping); - mapper.Columns(cm => cm.Length(50), cm => cm.SqlType("VARCHAR(10)")); - Executing.This(() => mapper.Column(cm => cm.Length(50))).Should().Throw<MappingException>(); - } - - [Test] - public void WhenSetBasicColumnValuesThroughShortCutThenMergeColumn() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("Relation"); - var mapping = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, mapping, hbmMapping); - mapper.Column("pizza"); - mapper.NotNullable(true); - mapper.Unique(true); - mapper.UniqueKey("AA"); - mapper.Index("II"); - - mapping.Items.Should().Be.Null(); - mapping.column.Should().Be("pizza"); - mapping.notnull.Should().Be(true); - mapping.unique.Should().Be(true); - mapping.uniquekey.Should().Be("AA"); - mapping.index.Should().Be("II"); - } - - [Test] - public void WhenSetFetchModeToJoinThenSetFetch() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("Relation"); - var mapping = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, mapping, hbmMapping); - - mapper.Fetch(FetchKind.Join); - - mapping.fetch.Should().Be(HbmFetchMode.Join); - mapping.fetchSpecified.Should().Be.True(); - } - - [Test] - public void WhenSetFetchModeToSelectThenResetFetch() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("Relation"); - var mapping = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, mapping, hbmMapping); - - mapper.Fetch(FetchKind.Select); - - mapping.fetch.Should().Be(HbmFetchMode.Select); - mapping.fetchSpecified.Should().Be.False(); - } - - [Test] - public void CanForceClassRelation() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("TheOtherRelation"); - var mapping = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, mapping, hbmMapping); - - mapper.Class(typeof(Relation)); - - mapping.Class.Should().Contain("Relation").And.Not.Contain("IRelation"); - } - - [Test] - public void WhenForceClassRelationToIncompatibleTypeThenThrows() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("TheOtherRelation"); - var mapping = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, mapping, hbmMapping); - - Executing.This(() => mapper.Class(typeof(Whatever))).Should().Throw<ArgumentOutOfRangeException>(); - } - - [Test] - public void CanSetLazyness() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("TheOtherRelation"); - var mapping = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, mapping, hbmMapping); - mapper.Lazy(LazyRelation.NoProxy); - mapping.Lazy.Should().Have.Value(); - mapping.Lazy.Should().Be(HbmLaziness.NoProxy); - } - - [Test] - public void CanSetUpdate() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("Relation"); - var hbm = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, hbm, hbmMapping); - - mapper.Update(false); - hbm.update.Should().Be.False(); - } - - [Test] - public void CanSetInsert() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("Relation"); - var hbm = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, hbm, hbmMapping); - - mapper.Insert(false); - hbm.insert.Should().Be.False(); - } - - [Test] - public void CanSetFk() - { - var hbmMapping = new HbmMapping(); - var member = typeof(MyClass).GetProperty("Relation"); - var hbm = new HbmManyToOne(); - var mapper = new ManyToOneMapper(member, hbm, hbmMapping); - - mapper.ForeignKey("MyFkName"); - - hbm.foreignkey.Should().Be("MyFkName"); - } - } -} \ No newline at end of file Copied: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/ManyToOneMapperTest.cs (from rev 5822, trunk/nhibernate/src/NHibernate.Test/MappingByCode/ManyToOneMapperTest.cs) =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/ManyToOneMapperTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/ManyToOneMapperTest.cs 2011-05-15 19:29:27 UTC (rev 5823) @@ -0,0 +1,305 @@ +using System; +using System.Linq; +using NHibernate.Mapping.ByCode; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode.Impl; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.MappingByCode.MappersTests +{ + public class ManyToOneMapperTest + { + private class MyClass + { + public Relation Relation { get; set; } + public IRelation TheOtherRelation { get; set; } + } + + private interface IRelation + { + + } + + private class Relation : IRelation + { + + } + + private class Whatever + { + + } + + [Test] + public void AssignCascadeStyle() + { + var hbmMapping = new HbmMapping(); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(null, hbm, hbmMapping); + mapper.Cascade(Mapping.ByCode.Cascade.Persist | Mapping.ByCode.Cascade.Remove); + hbm.cascade.Split(',').Select(w => w.Trim()).Should().Contain("persist").And.Contain("delete"); + } + + [Test] + public void AutoCleanUnsupportedCascadeStyle() + { + var hbmMapping = new HbmMapping(); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(null, hbm, hbmMapping); + mapper.Cascade(Mapping.ByCode.Cascade.Persist | Mapping.ByCode.Cascade.DeleteOrphans | Mapping.ByCode.Cascade.Remove); + hbm.cascade.Split(',').Select(w => w.Trim()).All(w => w.Satisfy(cascade => !cascade.Contains("orphan"))); + } + + [Test] + public void CanSetAccessor() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, hbm, hbmMapping); + + mapper.Access(Accessor.ReadOnly); + hbm.Access.Should().Be("readonly"); + } + + [Test] + public void WhenSetDifferentColumnNameThenSetTheName() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, hbm, hbmMapping); + mapper.Column(cm => cm.Name("RelationId")); + + hbm.Columns.Should().Have.Count.EqualTo(1); + hbm.Columns.Single().name.Should().Be("RelationId"); + } + + [Test] + public void WhenSetDefaultColumnNameThenDoesNotSetTheName() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Column(cm => cm.Name("Relation")); + mapping.column.Should().Be.Null(); + mapping.Columns.Should().Be.Empty(); + } + + [Test] + public void WhenSetBasicColumnValuesThenSetPlainValues() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Column(cm => + { + cm.UniqueKey("theUnique"); + cm.NotNullable(true); + }); + mapping.Items.Should().Be.Null(); + mapping.uniquekey.Should().Be("theUnique"); + mapping.notnull.Should().Be(true); + mapping.notnullSpecified.Should().Be(true); + } + + [Test] + public void WhenSetColumnValuesThenAddColumnTag() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Column(cm => + { + cm.SqlType("BIGINT"); + cm.NotNullable(true); + }); + mapping.Items.Should().Not.Be.Null(); + mapping.Columns.Should().Have.Count.EqualTo(1); + } + + [Test] + public void WhenSetBasicColumnValuesMoreThanOnesThenMergeColumn() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Column(cm => cm.UniqueKey("theUnique")); + mapper.Column(cm => cm.NotNullable(true)); + + mapping.Items.Should().Be.Null(); + mapping.uniquekey.Should().Be("theUnique"); + mapping.notnull.Should().Be(true); + mapping.notnullSpecified.Should().Be(true); + } + + [Test] + public void WhenSetMultiColumnsValuesThenAddColumns() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Columns(cm => + { + cm.Name("column1"); + cm.Length(50); + }, cm => + { + cm.Name("column2"); + cm.SqlType("VARCHAR(10)"); + }); + mapping.Columns.Should().Have.Count.EqualTo(2); + } + + [Test] + public void WhenSetMultiColumnsValuesThenAutoassignColumnNames() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Columns(cm => cm.Length(50), cm => cm.SqlType("VARCHAR(10)")); + mapping.Columns.Should().Have.Count.EqualTo(2); + mapping.Columns.All(cm => cm.name.Satisfy(n => !string.IsNullOrEmpty(n))); + } + + [Test] + public void AfterSetMultiColumnsCantSetSimpleColumn() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Columns(cm => cm.Length(50), cm => cm.SqlType("VARCHAR(10)")); + Executing.This(() => mapper.Column(cm => cm.Length(50))).Should().Throw<MappingException>(); + } + + [Test] + public void WhenSetBasicColumnValuesThroughShortCutThenMergeColumn() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Column("pizza"); + mapper.NotNullable(true); + mapper.Unique(true); + mapper.UniqueKey("AA"); + mapper.Index("II"); + + mapping.Items.Should().Be.Null(); + mapping.column.Should().Be("pizza"); + mapping.notnull.Should().Be(true); + mapping.unique.Should().Be(true); + mapping.uniquekey.Should().Be("AA"); + mapping.index.Should().Be("II"); + } + + [Test] + public void WhenSetFetchModeToJoinThenSetFetch() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + + mapper.Fetch(FetchKind.Join); + + mapping.fetch.Should().Be(HbmFetchMode.Join); + mapping.fetchSpecified.Should().Be.True(); + } + + [Test] + public void WhenSetFetchModeToSelectThenResetFetch() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + + mapper.Fetch(FetchKind.Select); + + mapping.fetch.Should().Be(HbmFetchMode.Select); + mapping.fetchSpecified.Should().Be.False(); + } + + [Test] + public void CanForceClassRelation() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("TheOtherRelation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + + mapper.Class(typeof(Relation)); + + mapping.Class.Should().Contain("Relation").And.Not.Contain("IRelation"); + } + + [Test] + public void WhenForceClassRelationToIncompatibleTypeThenThrows() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("TheOtherRelation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + + Executing.This(() => mapper.Class(typeof(Whatever))).Should().Throw<ArgumentOutOfRangeException>(); + } + + [Test] + public void CanSetLazyness() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("TheOtherRelation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Lazy(LazyRelation.NoProxy); + mapping.Lazy.Should().Have.Value(); + mapping.Lazy.Should().Be(HbmLaziness.NoProxy); + } + + [Test] + public void CanSetUpdate() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, hbm, hbmMapping); + + mapper.Update(false); + hbm.update.Should().Be.False(); + } + + [Test] + public void CanSetInsert() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, hbm, hbmMapping); + + mapper.Insert(false); + hbm.insert.Should().Be.False(); + } + + [Test] + public void CanSetFk() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, hbm, hbmMapping); + + mapper.ForeignKey("MyFkName"); + + hbm.foreignkey.Should().Be("MyFkName"); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 19:27:43 UTC (rev 5822) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 19:29:27 UTC (rev 5823) @@ -552,7 +552,7 @@ <Compile Include="MappingByCode\ExpliticMappingTests\SubclassPropertiesSplitsTests.cs" /> <Compile Include="MappingByCode\ExpliticMappingTests\VersionTests.cs" /> <Compile Include="MappingByCode\For.cs" /> - <Compile Include="MappingByCode\ManyToOneMapperTest.cs" /> + <Compile Include="MappingByCode\MappersTests\ManyToOneMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\AbstractPropertyContainerMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\ClassMapperTests\CheckMixingPOIDStrategiesTests.cs" /> <Compile Include="MappingByCode\MappersTests\ClassMapperTests\ClassMapperWithJoinPropertiesTest.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-15 19:27:49
|
Revision: 5822 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5822&view=rev Author: fabiomaulo Date: 2011-05-15 19:27:43 +0000 (Sun, 15 May 2011) Log Message: ----------- Test ported with bug fix Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ManyToOneMapper.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ManyToOneMapperTest.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ManyToOneMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ManyToOneMapper.cs 2011-05-15 19:22:14 UTC (rev 5821) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ManyToOneMapper.cs 2011-05-15 19:27:43 UTC (rev 5822) @@ -14,7 +14,7 @@ private readonly MemberInfo member; public ManyToOneMapper(MemberInfo member, HbmManyToOne manyToOne, HbmMapping mapDoc) - : this(member, new AccessorPropertyMapper(member.DeclaringType, member.Name, x => manyToOne.access = x), manyToOne, mapDoc) {} + : this(member, member == null ? (IAccessorPropertyMapper)new NoMemberPropertyMapper() : new AccessorPropertyMapper(member.DeclaringType, member.Name, x => manyToOne.access = x), manyToOne, mapDoc) { } public ManyToOneMapper(MemberInfo member, IAccessorPropertyMapper accessorPropertyMapper, HbmManyToOne manyToOne, HbmMapping mapDoc) { Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/ManyToOneMapperTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ManyToOneMapperTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/ManyToOneMapperTest.cs 2011-05-15 19:27:43 UTC (rev 5822) @@ -0,0 +1,305 @@ +using System; +using System.Linq; +using NHibernate.Mapping.ByCode; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode.Impl; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.MappingByCode +{ + public class ManyToOneMapperTest + { + private class MyClass + { + public Relation Relation { get; set; } + public IRelation TheOtherRelation { get; set; } + } + + private interface IRelation + { + + } + + private class Relation : IRelation + { + + } + + private class Whatever + { + + } + + [Test] + public void AssignCascadeStyle() + { + var hbmMapping = new HbmMapping(); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(null, hbm, hbmMapping); + mapper.Cascade(Mapping.ByCode.Cascade.Persist | Mapping.ByCode.Cascade.Remove); + hbm.cascade.Split(',').Select(w => w.Trim()).Should().Contain("persist").And.Contain("delete"); + } + + [Test] + public void AutoCleanUnsupportedCascadeStyle() + { + var hbmMapping = new HbmMapping(); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(null, hbm, hbmMapping); + mapper.Cascade(Mapping.ByCode.Cascade.Persist | Mapping.ByCode.Cascade.DeleteOrphans | Mapping.ByCode.Cascade.Remove); + hbm.cascade.Split(',').Select(w => w.Trim()).All(w => w.Satisfy(cascade => !cascade.Contains("orphan"))); + } + + [Test] + public void CanSetAccessor() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, hbm, hbmMapping); + + mapper.Access(Accessor.ReadOnly); + hbm.Access.Should().Be("readonly"); + } + + [Test] + public void WhenSetDifferentColumnNameThenSetTheName() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, hbm, hbmMapping); + mapper.Column(cm => cm.Name("RelationId")); + + hbm.Columns.Should().Have.Count.EqualTo(1); + hbm.Columns.Single().name.Should().Be("RelationId"); + } + + [Test] + public void WhenSetDefaultColumnNameThenDoesNotSetTheName() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Column(cm => cm.Name("Relation")); + mapping.column.Should().Be.Null(); + mapping.Columns.Should().Be.Empty(); + } + + [Test] + public void WhenSetBasicColumnValuesThenSetPlainValues() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Column(cm => + { + cm.UniqueKey("theUnique"); + cm.NotNullable(true); + }); + mapping.Items.Should().Be.Null(); + mapping.uniquekey.Should().Be("theUnique"); + mapping.notnull.Should().Be(true); + mapping.notnullSpecified.Should().Be(true); + } + + [Test] + public void WhenSetColumnValuesThenAddColumnTag() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Column(cm => + { + cm.SqlType("BIGINT"); + cm.NotNullable(true); + }); + mapping.Items.Should().Not.Be.Null(); + mapping.Columns.Should().Have.Count.EqualTo(1); + } + + [Test] + public void WhenSetBasicColumnValuesMoreThanOnesThenMergeColumn() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Column(cm => cm.UniqueKey("theUnique")); + mapper.Column(cm => cm.NotNullable(true)); + + mapping.Items.Should().Be.Null(); + mapping.uniquekey.Should().Be("theUnique"); + mapping.notnull.Should().Be(true); + mapping.notnullSpecified.Should().Be(true); + } + + [Test] + public void WhenSetMultiColumnsValuesThenAddColumns() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Columns(cm => + { + cm.Name("column1"); + cm.Length(50); + }, cm => + { + cm.Name("column2"); + cm.SqlType("VARCHAR(10)"); + }); + mapping.Columns.Should().Have.Count.EqualTo(2); + } + + [Test] + public void WhenSetMultiColumnsValuesThenAutoassignColumnNames() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Columns(cm => cm.Length(50), cm => cm.SqlType("VARCHAR(10)")); + mapping.Columns.Should().Have.Count.EqualTo(2); + mapping.Columns.All(cm => cm.name.Satisfy(n => !string.IsNullOrEmpty(n))); + } + + [Test] + public void AfterSetMultiColumnsCantSetSimpleColumn() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Columns(cm => cm.Length(50), cm => cm.SqlType("VARCHAR(10)")); + Executing.This(() => mapper.Column(cm => cm.Length(50))).Should().Throw<MappingException>(); + } + + [Test] + public void WhenSetBasicColumnValuesThroughShortCutThenMergeColumn() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Column("pizza"); + mapper.NotNullable(true); + mapper.Unique(true); + mapper.UniqueKey("AA"); + mapper.Index("II"); + + mapping.Items.Should().Be.Null(); + mapping.column.Should().Be("pizza"); + mapping.notnull.Should().Be(true); + mapping.unique.Should().Be(true); + mapping.uniquekey.Should().Be("AA"); + mapping.index.Should().Be("II"); + } + + [Test] + public void WhenSetFetchModeToJoinThenSetFetch() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + + mapper.Fetch(FetchKind.Join); + + mapping.fetch.Should().Be(HbmFetchMode.Join); + mapping.fetchSpecified.Should().Be.True(); + } + + [Test] + public void WhenSetFetchModeToSelectThenResetFetch() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + + mapper.Fetch(FetchKind.Select); + + mapping.fetch.Should().Be(HbmFetchMode.Select); + mapping.fetchSpecified.Should().Be.False(); + } + + [Test] + public void CanForceClassRelation() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("TheOtherRelation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + + mapper.Class(typeof(Relation)); + + mapping.Class.Should().Contain("Relation").And.Not.Contain("IRelation"); + } + + [Test] + public void WhenForceClassRelationToIncompatibleTypeThenThrows() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("TheOtherRelation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + + Executing.This(() => mapper.Class(typeof(Whatever))).Should().Throw<ArgumentOutOfRangeException>(); + } + + [Test] + public void CanSetLazyness() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("TheOtherRelation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Lazy(LazyRelation.NoProxy); + mapping.Lazy.Should().Have.Value(); + mapping.Lazy.Should().Be(HbmLaziness.NoProxy); + } + + [Test] + public void CanSetUpdate() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, hbm, hbmMapping); + + mapper.Update(false); + hbm.update.Should().Be.False(); + } + + [Test] + public void CanSetInsert() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, hbm, hbmMapping); + + mapper.Insert(false); + hbm.insert.Should().Be.False(); + } + + [Test] + public void CanSetFk() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, hbm, hbmMapping); + + mapper.ForeignKey("MyFkName"); + + hbm.foreignkey.Should().Be("MyFkName"); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 19:22:14 UTC (rev 5821) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 19:27:43 UTC (rev 5822) @@ -552,6 +552,7 @@ <Compile Include="MappingByCode\ExpliticMappingTests\SubclassPropertiesSplitsTests.cs" /> <Compile Include="MappingByCode\ExpliticMappingTests\VersionTests.cs" /> <Compile Include="MappingByCode\For.cs" /> + <Compile Include="MappingByCode\ManyToOneMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\AbstractPropertyContainerMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\ClassMapperTests\CheckMixingPOIDStrategiesTests.cs" /> <Compile Include="MappingByCode\MappersTests\ClassMapperTests\ClassMapperWithJoinPropertiesTest.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-15 19:22:20
|
Revision: 5821 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5821&view=rev Author: fabiomaulo Date: 2011-05-15 19:22:14 +0000 (Sun, 15 May 2011) Log Message: ----------- Test ported with bug fix Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/OneToOneMapper.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/OneToOneMapperTest.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/OneToOneMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/OneToOneMapper.cs 2011-05-15 19:15:09 UTC (rev 5820) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/OneToOneMapper.cs 2011-05-15 19:22:14 UTC (rev 5821) @@ -11,7 +11,7 @@ private readonly HbmOneToOne oneToOne; public OneToOneMapper(MemberInfo member, HbmOneToOne oneToOne) - : this(member, new AccessorPropertyMapper(member.DeclaringType, member.Name, x => oneToOne.access = x), oneToOne) {} + : this(member, member == null ? (IAccessorPropertyMapper)new NoMemberPropertyMapper() : new AccessorPropertyMapper(member.DeclaringType, member.Name, x => oneToOne.access = x), oneToOne) { } public OneToOneMapper(MemberInfo member, IAccessorPropertyMapper accessorMapper, HbmOneToOne oneToOne) { Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/OneToOneMapperTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/OneToOneMapperTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/OneToOneMapperTest.cs 2011-05-15 19:22:14 UTC (rev 5821) @@ -0,0 +1,143 @@ +using System; +using System.Linq; +using NHibernate.Mapping.ByCode; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode.Impl; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.MappingByCode.MappersTests +{ + public class OneToOneMapperTest + { + private class MyClass + { + public Relation Relation { get; set; } + } + + private class Relation + { + public string Whatever { get; set; } + } + + [Test] + public void AssignCascadeStyle() + { + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(null, hbm); + mapper.Cascade(Mapping.ByCode.Cascade.Persist | Mapping.ByCode.Cascade.Remove); + hbm.cascade.Split(',').Select(w => w.Trim()).Should().Contain("persist").And.Contain("delete"); + } + + [Test] + public void AutoCleanUnsupportedCascadeStyle() + { + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(null, hbm); + mapper.Cascade(Mapping.ByCode.Cascade.Persist | Mapping.ByCode.Cascade.DeleteOrphans | Mapping.ByCode.Cascade.Remove); + hbm.cascade.Split(',').Select(w => w.Trim()).All(w => w.Satisfy(cascade => !cascade.Contains("orphan"))); + } + + [Test] + public void CanSetAccessor() + { + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(member, hbm); + + mapper.Access(Accessor.ReadOnly); + hbm.Access.Should().Be("readonly"); + } + + [Test] + public void CanSetLazyness() + { + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(null, hbm); + mapper.Lazy(LazyRelation.NoProxy); + hbm.Lazy.Should().Have.Value(); + hbm.Lazy.Should().Be(HbmLaziness.NoProxy); + } + + [Test] + public void CanSetConstrained() + { + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(null, hbm); + mapper.Constrained(true); + hbm.constrained.Should().Be.True(); + } + + [Test] + public void WhenNoMemberPropertyRefAcceptAnything() + { + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(null, hbm); + mapper.PropertyReference(typeof(Array).GetProperty("Length")); + + hbm.propertyref.Should().Be("Length"); + } + + [Test] + public void WhenNullMemberPropertyRefNull() + { + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(null, hbm); + mapper.PropertyReference(null); + + hbm.propertyref.Should().Be.Null(); + } + + [Test] + public void WhenMemberPropertyRefAcceptOnlyMemberOfExpectedType() + { + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(typeof(MyClass).GetProperty("Relation"), hbm); + mapper.PropertyReference(typeof(Relation).GetProperty("Whatever")); + + hbm.propertyref.Should().Be("Whatever"); + + Executing.This(() => mapper.PropertyReference(typeof(Array).GetProperty("Length"))).Should().Throw<ArgumentOutOfRangeException>(); + } + + + [Test] + public void CanSetFormula() + { + var member = For<MyClass>.Property(c => c.Relation); + var mapping = new HbmOneToOne(); + var mapper = new OneToOneMapper(member, mapping); + + mapper.Formula("SomeFormula"); + mapping.formula1.Should().Be("SomeFormula"); + } + + [Test] + public void WhenSetFormulaWithNullThenSetFormulaWithNull() + { + var member = For<MyClass>.Property(c => c.Relation); + var mapping = new HbmOneToOne(); + var mapper = new OneToOneMapper(member, mapping); + mapper.Formula(null); + mapping.formula.Should().Be.Null(); + mapping.formula1.Should().Be.Null(); + } + + [Test] + public void WhenSetFormulaWithMultipleLinesThenSetFormulaNode() + { + var member = For<MyClass>.Property(c => c.Relation); + var mapping = new HbmOneToOne(); + var mapper = new OneToOneMapper(member, mapping); + var formula = @"Line1 +Line2"; + mapper.Formula(formula); + mapping.formula1.Should().Be.Null(); + var hbmFormula = mapping.formula.First(); + hbmFormula.Text.Length.Should().Be(2); + hbmFormula.Text[0].Should().Be("Line1"); + hbmFormula.Text[1].Should().Be("Line2"); + mapping.formula1.Should().Be.Null(); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 19:15:09 UTC (rev 5820) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 19:22:14 UTC (rev 5821) @@ -580,6 +580,7 @@ <Compile Include="MappingByCode\MappersTests\JoinedSubclassMapperTests\TablesSincronizationTests.cs" /> <Compile Include="MappingByCode\MappersTests\JoinMapperTests.cs" /> <Compile Include="MappingByCode\MappersTests\NaturalIdMapperTest.cs" /> + <Compile Include="MappingByCode\MappersTests\OneToOneMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\PropertyMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\SubclassMapperTests\SetPersisterTests.cs" /> <Compile Include="MappingByCode\MappersTests\SubclassMapperTests\TablesSincronizationTests.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-15 19:15:15
|
Revision: 5820 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5820&view=rev Author: fabiomaulo Date: 2011-05-15 19:15:09 +0000 (Sun, 15 May 2011) Log Message: ----------- Test ported Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/NaturalIdMapperTest.cs Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/NaturalIdMapperTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/NaturalIdMapperTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/NaturalIdMapperTest.cs 2011-05-15 19:15:09 UTC (rev 5820) @@ -0,0 +1,29 @@ +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode.Impl; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.MappingByCode.MappersTests +{ + public class NaturalIdMapperTest + { + private class EntitySimpleWithNaturalId + { + public string Something { get; set; } + } + + [Test] + public void CanSetMutable() + { + var mapdoc = new HbmMapping(); + var hbmClass = new HbmClass(); + var nid = new NaturalIdMapper(typeof(EntitySimpleWithNaturalId), hbmClass, mapdoc); + // to have the natural-id assigned ot must have at least a property + nid.Property(For<EntitySimpleWithNaturalId>.Property(x => x.Something), pm => { }); + + var hbmNaturalId = hbmClass.naturalid; + nid.Mutable(true); + hbmNaturalId.mutable.Should().Be.True(); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 14:26:56 UTC (rev 5819) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 19:15:09 UTC (rev 5820) @@ -579,6 +579,7 @@ <Compile Include="MappingByCode\MappersTests\JoinedSubclassMapperTests\SetPersisterTests.cs" /> <Compile Include="MappingByCode\MappersTests\JoinedSubclassMapperTests\TablesSincronizationTests.cs" /> <Compile Include="MappingByCode\MappersTests\JoinMapperTests.cs" /> + <Compile Include="MappingByCode\MappersTests\NaturalIdMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\PropertyMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\SubclassMapperTests\SetPersisterTests.cs" /> <Compile Include="MappingByCode\MappersTests\SubclassMapperTests\TablesSincronizationTests.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ric...@us...> - 2011-05-15 14:27:02
|
Revision: 5819 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5819&view=rev Author: ricbrown Date: 2011-05-15 14:26:56 +0000 (Sun, 15 May 2011) Log Message: ----------- Added constraint to test (failing on SQLite on CI server) Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/SetCommandParameterSizesFalseFixture.cs Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/SetCommandParameterSizesFalseFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/SetCommandParameterSizesFalseFixture.cs 2011-05-15 14:12:10 UTC (rev 5818) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/SetCommandParameterSizesFalseFixture.cs 2011-05-15 14:26:56 UTC (rev 5819) @@ -7,6 +7,11 @@ [TestFixture] public class SetCommandParameterSizesFalseFixture : BugTestCase { + protected override bool AppliesTo(Dialect.Dialect dialect) + { + return dialect is Dialect.MsSql2008Dialect; + } + protected override void OnSetUp() { using (ISession session = Sfi.OpenSession()) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ric...@us...> - 2011-05-15 14:12:16
|
Revision: 5818 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5818&view=rev Author: ricbrown Date: 2011-05-15 14:12:10 +0000 (Sun, 15 May 2011) Log Message: ----------- NH-2683: Added integration test for extension .Year() Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Model.cs Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs 2011-05-15 13:04:02 UTC (rev 5817) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs 2011-05-15 14:12:10 UTC (rev 5818) @@ -70,6 +70,19 @@ Assert.That(actual.Count, Is.EqualTo(1)); } + + using (ISession s = OpenSession()) + { + Person personAlias = null; + + IList<Person> actual = + s.QueryOver<Person>(() => personAlias) + .Where(() => personAlias.Name == "test person 2") + .And(() => personAlias.Age == 30) + .List(); + + Assert.That(actual.Count, Is.EqualTo(1)); + } } [Test] @@ -416,12 +429,13 @@ Assert.That(simpleProjection.First().Name, Is.EqualTo("Name 1.1")); Assert.That(simpleProjection.First().Age, Is.EqualTo(3)); + Child childAlias = null; var listProjection = - s.QueryOver<Child>() + s.QueryOver<Child>(() => childAlias) .JoinQueryOver(c => c.Parent) .Where(p => p.Name == "Name 1" && p.Age == 33) .SelectList(list => list - .Select(c => c.Nickname) + .Select(c => childAlias.Nickname) .Select(c => c.Age)) .List<object[]>() .Select(props => new @@ -554,6 +568,32 @@ } [Test] + public void Functions() + { + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + s.Save(new Person() { Name = "p1", BirthDate = new DateTime(2009, 08, 07) }); + s.Save(new Person() { Name = "p2", BirthDate = new DateTime(2008, 07, 06) }); + s.Save(new Person() { Name = "p3", BirthDate = new DateTime(2007, 06, 05) }); + + t.Commit(); + } + + using (ISession s = OpenSession()) + { + var persons = + s.QueryOver<Person>() + .Where(p => p.BirthDate.Year() == 2008) + .List(); + + persons.Count.Should().Be(1); + persons[0].Name.Should().Be("p2"); + } + + } + + [Test] public void MultiCriteria() { SetupPagingData(); Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Mappings.hbm.xml 2011-05-15 13:04:02 UTC (rev 5817) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Mappings.hbm.xml 2011-05-15 14:12:10 UTC (rev 5818) @@ -10,6 +10,7 @@ <discriminator type="string" /> <property name="Name" /> <property name="Age" /> + <property name="BirthDate" /> <property name="Blood" /> <many-to-one name="Father" class="Person" /> <bag name="Children" inverse="true" cascade="all-delete-orphan"> Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Model.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Model.cs 2011-05-15 13:04:02 UTC (rev 5817) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Model.cs 2011-05-15 14:12:10 UTC (rev 5818) @@ -18,6 +18,7 @@ { Children = new List<Child>(); Blood = 'O'; + BirthDate = new DateTime(1950, 01, 01); } public static string StaticName; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ric...@us...> - 2011-05-15 13:04:09
|
Revision: 5817 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5817&view=rev Author: ricbrown Date: 2011-05-15 13:04:02 +0000 (Sun, 15 May 2011) Log Message: ----------- NH-2683: Started with single extension function .Year() Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Criterion/ProjectionsExtensions.cs trunk/nhibernate/src/NHibernate/Impl/ExpressionProcessor.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Model.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/RestrictionsFixture.cs Modified: trunk/nhibernate/src/NHibernate/Criterion/ProjectionsExtensions.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/ProjectionsExtensions.cs 2011-05-15 13:00:22 UTC (rev 5816) +++ trunk/nhibernate/src/NHibernate/Criterion/ProjectionsExtensions.cs 2011-05-15 13:04:02 UTC (rev 5817) @@ -19,5 +19,20 @@ string aliasContainer = ExpressionProcessor.FindPropertyExpression(alias.Body); return Projections.Alias(projection, aliasContainer); } + + /// <summary> + /// Project SQL function year() + /// Note: throws an exception outside of a QueryOver expression + /// </summary> + public static int Year(this DateTime dateTimeProperty) + { + throw new Exception("Not to be used directly - use inside QueryOver expression"); + } + + internal static IProjection ProcessYear(MethodCallExpression methodCallExpression) + { + IProjection property = ExpressionProcessor.FindMemberProjection(methodCallExpression.Arguments[0]); + return Projections.SqlFunction("year", NHibernateUtil.DateTime, property); + } } } Modified: trunk/nhibernate/src/NHibernate/Impl/ExpressionProcessor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/ExpressionProcessor.cs 2011-05-15 13:00:22 UTC (rev 5816) +++ trunk/nhibernate/src/NHibernate/Impl/ExpressionProcessor.cs 2011-05-15 13:04:02 UTC (rev 5817) @@ -31,14 +31,15 @@ public static class ExpressionProcessor { - private readonly static IDictionary<ExpressionType, Func<string, object, ICriterion>> _simpleExpressionCreators = null; + private readonly static IDictionary<ExpressionType, Func<IProjection, object, ICriterion>> _simpleExpressionCreators = null; private readonly static IDictionary<ExpressionType, Func<string, string, ICriterion>> _propertyExpressionCreators = null; private readonly static IDictionary<LambdaSubqueryType, IDictionary<ExpressionType, Func<string, DetachedCriteria, AbstractCriterion>>> _subqueryExpressionCreatorTypes = null; private readonly static IDictionary<string, Func<MethodCallExpression, ICriterion>> _customMethodCallProcessors = null; + private readonly static IDictionary<string, Func<MethodCallExpression, IProjection>> _customProjectionProcessors = null; static ExpressionProcessor() { - _simpleExpressionCreators = new Dictionary<ExpressionType, Func<string, object, ICriterion>>(); + _simpleExpressionCreators = new Dictionary<ExpressionType, Func<IProjection, object, ICriterion>>(); _simpleExpressionCreators[ExpressionType.Equal] = Eq; _simpleExpressionCreators[ExpressionType.NotEqual] = Ne; _simpleExpressionCreators[ExpressionType.GreaterThan] = Gt; @@ -86,36 +87,39 @@ RegisterCustomMethodCall(() => RestrictionExtensions.IsIn(null, new object[0]), RestrictionExtensions.ProcessIsInArray); RegisterCustomMethodCall(() => RestrictionExtensions.IsIn(null, new List<object>()), RestrictionExtensions.ProcessIsInCollection); RegisterCustomMethodCall(() => RestrictionExtensions.IsBetween(null, null).And(null), RestrictionExtensions.ProcessIsBetween); + + _customProjectionProcessors = new Dictionary<string, Func<MethodCallExpression, IProjection>>(); + RegisterCustomProjection(() => ProjectionsExtensions.Year(default(DateTime)), ProjectionsExtensions.ProcessYear); } - private static ICriterion Eq(string propertyName, object value) + private static ICriterion Eq(IProjection propertyName, object value) { return Restrictions.Eq(propertyName, value); } - private static ICriterion Ne(string propertyName, object value) + private static ICriterion Ne(IProjection propertyName, object value) { return NHibernate.Criterion.Restrictions.Not( NHibernate.Criterion.Restrictions.Eq(propertyName, value)); } - private static ICriterion Gt(string propertyName, object value) + private static ICriterion Gt(IProjection propertyName, object value) { return NHibernate.Criterion.Restrictions.Gt(propertyName, value); } - private static ICriterion Ge(string propertyName, object value) + private static ICriterion Ge(IProjection propertyName, object value) { return NHibernate.Criterion.Restrictions.Ge(propertyName, value); } - private static ICriterion Lt(string propertyName, object value) + private static ICriterion Lt(IProjection propertyName, object value) { return NHibernate.Criterion.Restrictions.Lt(propertyName, value); } - private static ICriterion Le(string propertyName, object value) + private static ICriterion Le(IProjection propertyName, object value) { return NHibernate.Criterion.Restrictions.Le(propertyName, value); } @@ -131,6 +135,23 @@ } /// <summary> + /// Retrieves the projection for the expression + /// </summary> + public static IProjection FindMemberProjection(Expression expression) + { + if (expression is MethodCallExpression) + { + MethodCallExpression methodCallExpression = (MethodCallExpression)expression; + + string signature = Signature(methodCallExpression.Method); + if (_customProjectionProcessors.ContainsKey(signature)) + return _customProjectionProcessors[signature](methodCallExpression); + } + + return Projections.Property(FindMemberExpression(expression)); + } + + /// <summary> /// Retrieves the name of the property from a member expression /// </summary> /// <param name="expression">An expression tree that can contain either a member, or a conversion from a member. @@ -245,7 +266,8 @@ if (expression is MethodCallExpression) { - return typeof(System.Type); + var methodCallExpression = (MethodCallExpression)expression; + return methodCallExpression.Method.ReturnType; } throw new Exception("Could not determine member type from " + expression.ToString()); @@ -320,7 +342,7 @@ private static ICriterion ProcessSimpleExpression(Expression left, Expression right, ExpressionType nodeType) { - string property = FindMemberExpression(left); + IProjection property = FindMemberProjection(left); System.Type propertyType = FindMemberType(left); object value = FindValue(right); @@ -332,7 +354,7 @@ if (!_simpleExpressionCreators.ContainsKey(nodeType)) throw new Exception("Unhandled simple expression type: " + nodeType); - Func<string, object, ICriterion> simpleExpressionCreator = _simpleExpressionCreators[nodeType]; + Func<IProjection, object, ICriterion> simpleExpressionCreator = _simpleExpressionCreators[nodeType]; ICriterion criterion = simpleExpressionCreator(property, value); return criterion; } @@ -347,7 +369,7 @@ return ProcessSimpleExpression(methodCall.Arguments[0], methodCall.Arguments[1], be.NodeType); } - private static ICriterion ProcessSimpleNullExpression(string property, ExpressionType expressionType) + private static ICriterion ProcessSimpleNullExpression(IProjection property, ExpressionType expressionType) { if (expressionType == ExpressionType.Equal) return Restrictions.IsNull(property); @@ -615,6 +637,18 @@ _customMethodCallProcessors.Add(signature, functionProcessor); } + /// <summary> + /// Register a custom projection for use in a QueryOver expression + /// </summary> + /// <param name="function">Lambda expression demonstrating call of custom method</param> + /// <param name="functionProcessor">function to convert MethodCallExpression to IProjection</param> + public static void RegisterCustomProjection<T>(Expression<Func<T>> function, Func<MethodCallExpression, IProjection> functionProcessor) + { + MethodCallExpression functionExpression = (MethodCallExpression)function.Body; + string signature = Signature(functionExpression.Method); + _customProjectionProcessors.Add(signature, functionProcessor); + } + } } Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Model.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Model.cs 2011-05-15 13:00:22 UTC (rev 5816) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Model.cs 2011-05-15 13:04:02 UTC (rev 5817) @@ -31,6 +31,7 @@ public virtual Person Father { get; set; } public virtual bool IsParent { get; set; } public virtual char Blood { get; set; } + public virtual DateTime BirthDate { get; set; } public virtual int? NullableAge { get; set; } public virtual PersonGender? NullableGender { get; set; } Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2011-05-15 13:00:22 UTC (rev 5816) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2011-05-15 13:04:02 UTC (rev 5817) @@ -21,13 +21,13 @@ { ICriteria expected = CreateTestCriteria(typeof(Person)) - .Add(Restrictions.Eq("Name", "test name")) - .Add(Restrictions.Not(Restrictions.Eq("Name", "not test name"))) - .Add(Restrictions.Gt("Age", 10)) - .Add(Restrictions.Ge("Age", 11)) - .Add(Restrictions.Lt("Age", 50)) - .Add(Restrictions.Le("Age", 49)) - .Add(Restrictions.Eq("class", typeof(Person))) + .Add(Restrictions.Eq(Projections.Property("Name"), "test name")) + .Add(Restrictions.Not(Restrictions.Eq(Projections.Property("Name"), "not test name"))) + .Add(Restrictions.Gt(Projections.Property("Age"), 10)) + .Add(Restrictions.Ge(Projections.Property("Age"), 11)) + .Add(Restrictions.Lt(Projections.Property("Age"), 50)) + .Add(Restrictions.Le(Projections.Property("Age"), 49)) + .Add(Restrictions.Eq(Projections.Property("class"), typeof(Person))) .Add(Restrictions.Eq("class", typeof(Person).FullName)); IQueryOver<Person> actual = @@ -55,12 +55,12 @@ { ICriteria expected = CreateTestCriteria(typeof(Person)) - .Add(Restrictions.Eq("Name", "test name")) - .Add(Restrictions.Not(Restrictions.Eq("Name", "test name"))) - .Add(Restrictions.Gt("Name", "test name")) - .Add(Restrictions.Ge("Name", "test name")) - .Add(Restrictions.Lt("Name", "test name")) - .Add(Restrictions.Le("Name", "test name")) + .Add(Restrictions.Eq(Projections.Property("Name"), "test name")) + .Add(Restrictions.Not(Restrictions.Eq(Projections.Property("Name"), "test name"))) + .Add(Restrictions.Gt(Projections.Property("Name"), "test name")) + .Add(Restrictions.Ge(Projections.Property("Name"), "test name")) + .Add(Restrictions.Lt(Projections.Property("Name"), "test name")) + .Add(Restrictions.Le(Projections.Property("Name"), "test name")) .Add(Restrictions.EqProperty("Name", "Name")) .Add(Restrictions.Not(Restrictions.EqProperty("Name", "Name"))) .Add(Restrictions.GtProperty("Name", "Name")) @@ -115,8 +115,8 @@ { ICriteria expected = CreateTestCriteria(typeof(Person)) - .Add(Restrictions.Eq("Blood", 'A')) - .Add(Restrictions.Not(Restrictions.Eq("Blood", 'B'))); + .Add(Restrictions.Eq(Projections.Property("Blood"), 'A')) + .Add(Restrictions.Not(Restrictions.Eq(Projections.Property("Blood"), 'B'))); IQueryOver<Person> actual = CreateTestQueryOver<Person>() @@ -132,9 +132,9 @@ ICriteria expected = CreateTestCriteria(typeof(Person)) .Add(Restrictions.And( - Restrictions.Eq("Name", "test name"), + Restrictions.Eq(Projections.Property("Name"), "test name"), Restrictions.Or( - Restrictions.Gt("Age", 21), + Restrictions.Gt(Projections.Property("Age"), 21), Restrictions.Eq("HasCar", true)))); IQueryOver<Person> actual = @@ -150,7 +150,7 @@ ICriteria expected = CreateTestCriteria(typeof(Person), "personAlias") .Add(Restrictions.Or( - Restrictions.Not(Restrictions.Eq("Name", "test name")), + Restrictions.Not(Restrictions.Eq(Projections.Property("Name"), "test name")), Restrictions.Not(Restrictions.Like("personAlias.Name", "%test%")))); Person personAlias = null; @@ -166,8 +166,8 @@ { ICriteria expected = CreateTestCriteria(typeof(Person), "personAlias") - .Add(Restrictions.Not(Restrictions.Eq("Name", "test name"))) - .Add(Restrictions.Not(Restrictions.Eq("personAlias.Name", "test name"))); + .Add(Restrictions.Not(Restrictions.Eq(Projections.Property("Name"), "test name"))) + .Add(Restrictions.Not(Restrictions.Eq(Projections.Property("personAlias.Name"), "test name"))); Person personAlias = null; IQueryOver<Person> actual = @@ -224,13 +224,13 @@ { ICriteria expected = CreateTestCriteria(typeof(Person), "personAlias") - .Add(Restrictions.Eq("personAlias.Name", "test name")) - .Add(Restrictions.Not(Restrictions.Eq("personAlias.Name", "not test name"))) - .Add(Restrictions.Gt("personAlias.Age", 10)) - .Add(Restrictions.Ge("personAlias.Age", 11)) - .Add(Restrictions.Lt("personAlias.Age", 50)) - .Add(Restrictions.Le("personAlias.Age", 49)) - .Add(Restrictions.Eq("personAlias.class", typeof(Person))) + .Add(Restrictions.Eq(Projections.Property("personAlias.Name"), "test name")) + .Add(Restrictions.Not(Restrictions.Eq(Projections.Property("personAlias.Name"), "not test name"))) + .Add(Restrictions.Gt(Projections.Property("personAlias.Age"), 10)) + .Add(Restrictions.Ge(Projections.Property("personAlias.Age"), 11)) + .Add(Restrictions.Lt(Projections.Property("personAlias.Age"), 50)) + .Add(Restrictions.Le(Projections.Property("personAlias.Age"), 49)) + .Add(Restrictions.Eq(Projections.Property("personAlias.class"), typeof(Person))) .Add(Restrictions.Eq("personAlias.class", typeof(Person).FullName)); Person personAlias = null; @@ -254,7 +254,7 @@ ICriteria expected = CreateTestCriteria(typeof(Person)) .CreateCriteria("Father") - .Add(Expression.Eq("Name", "test name")); + .Add(Expression.Eq(Projections.Property("Name"), "test name")); IQueryOver<Person> actual = CreateTestQueryOver<Person>() @@ -270,7 +270,7 @@ ICriteria expected = CreateTestCriteria(typeof(Person), "personAlias") .CreateCriteria("personAlias.Father") - .Add(Expression.Eq("Name", "test name")); + .Add(Expression.Eq(Projections.Property("Name"), "test name")); Person personAlias = null; IQueryOver<Person> actual = @@ -287,7 +287,7 @@ ICriteria expected = CreateTestCriteria(typeof(Person)) .CreateCriteria("Children") - .Add(Expression.Eq("Nickname", "test name")); + .Add(Expression.Eq(Projections.Property("Nickname"), "test name")); IQueryOver<Person> actual = CreateTestQueryOver<Person>() @@ -303,7 +303,7 @@ ICriteria expected = CreateTestCriteria(typeof(Person), "personAlias") .CreateCriteria("personAlias.Children", JoinType.InnerJoin) - .Add(Expression.Eq("Nickname", "test name")); + .Add(Expression.Eq(Projections.Property("Nickname"), "test name")); Person personAlias = null; IQueryOver<Person> actual = @@ -416,17 +416,17 @@ { ICriteria expected = CreateTestCriteria(typeof(Person)) - .CreateCriteria("PersonList", "alias1", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many func t,bool")) - .CreateCriteria("PersonList", "alias2", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "many func bool")) + .CreateCriteria("PersonList", "alias1", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "many func t,bool")) + .CreateCriteria("PersonList", "alias2", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias1.Name"), "many func bool")) .CreateCriteria("PersonList", "alias3", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many private")) - .CreateCriteria("Father", "alias4", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one func t,bool")) - .CreateCriteria("Father", "alias5", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "one func bool")) + .CreateCriteria("Father", "alias4", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "one func t,bool")) + .CreateCriteria("Father", "alias5", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias4.Name"), "one func bool")) .CreateCriteria("Father", "alias6", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one private")) - .CreateCriteria("alias1.PersonList", "alias7", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many func t,bool")) - .CreateCriteria("alias2.PersonList", "alias8", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "a many func bool")) + .CreateCriteria("alias1.PersonList", "alias7", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "a many func t,bool")) + .CreateCriteria("alias2.PersonList", "alias8", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias1.Name"), "a many func bool")) .CreateCriteria("alias3.PersonList", "alias9", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many private")) - .CreateCriteria("alias4.Father", "alias10", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one func t,bool")) - .CreateCriteria("alias5.Father", "alias11", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "a one func bool")) + .CreateCriteria("alias4.Father", "alias10", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "a one func t,bool")) + .CreateCriteria("alias5.Father", "alias11", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias4.Name"), "a one func bool")) .CreateCriteria("alias6.Father", "alias12", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one private")); Person alias1 = null; @@ -448,13 +448,13 @@ .Left.JoinQueryOver(p => p.PersonList, () => alias3, Restrictions.Eq("Name", "many private")) .Left.JoinQueryOver(p => p.Father, () => alias4, p => p.Name == "one func t,bool") .Left.JoinQueryOver(p => p.Father, () => alias5, () => alias4.Name == "one func bool") - .Left.JoinQueryOver(p => p.Father, () => alias6, p => p.Name == "one private") + .Left.JoinQueryOver(p => p.Father, () => alias6, Restrictions.Eq("Name", "one private")) .Left.JoinQueryOver(() => alias1.PersonList, () => alias7, p => p.Name == "a many func t,bool") .Left.JoinQueryOver(() => alias2.PersonList, () => alias8, () => alias1.Name == "a many func bool") .Left.JoinQueryOver(() => alias3.PersonList, () => alias9, Restrictions.Eq("Name", "a many private")) .Left.JoinQueryOver(() => alias4.Father, () => alias10, p => p.Name == "a one func t,bool") .Left.JoinQueryOver(() => alias5.Father, () => alias11, () => alias4.Name == "a one func bool") - .Left.JoinQueryOver(() => alias6.Father, () => alias12, p => p.Name == "a one private"); + .Left.JoinQueryOver(() => alias6.Father, () => alias12, Restrictions.Eq("Name", "a one private")); AssertCriteriaAreEqual(expected, actual); } @@ -464,17 +464,17 @@ { DetachedCriteria expected = DetachedCriteria.For<Person>() - .CreateCriteria("PersonList", "alias1", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many func t,bool")) - .CreateCriteria("PersonList", "alias2", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "many func bool")) + .CreateCriteria("PersonList", "alias1", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "many func t,bool")) + .CreateCriteria("PersonList", "alias2", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias1.Name"), "many func bool")) .CreateCriteria("PersonList", "alias3", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many private")) - .CreateCriteria("Father", "alias4", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one func t,bool")) - .CreateCriteria("Father", "alias5", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "one func bool")) + .CreateCriteria("Father", "alias4", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "one func t,bool")) + .CreateCriteria("Father", "alias5", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias4.Name"), "one func bool")) .CreateCriteria("Father", "alias6", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one private")) - .CreateCriteria("alias1.PersonList", "alias7", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many func t,bool")) - .CreateCriteria("alias2.PersonList", "alias8", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "a many func bool")) + .CreateCriteria("alias1.PersonList", "alias7", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "a many func t,bool")) + .CreateCriteria("alias2.PersonList", "alias8", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias1.Name"), "a many func bool")) .CreateCriteria("alias3.PersonList", "alias9", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many private")) - .CreateCriteria("alias4.Father", "alias10", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one func t,bool")) - .CreateCriteria("alias5.Father", "alias11", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "a one func bool")) + .CreateCriteria("alias4.Father", "alias10", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "a one func t,bool")) + .CreateCriteria("alias5.Father", "alias11", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias4.Name"), "a one func bool")) .CreateCriteria("alias6.Father", "alias12", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one private")); Person alias1 = null; @@ -496,13 +496,13 @@ .Left.JoinQueryOver(p => p.PersonList, () => alias3, Restrictions.Eq("Name", "many private")) .Left.JoinQueryOver(p => p.Father, () => alias4, p => p.Name == "one func t,bool") .Left.JoinQueryOver(p => p.Father, () => alias5, () => alias4.Name == "one func bool") - .Left.JoinQueryOver(p => p.Father, () => alias6, p => p.Name == "one private") + .Left.JoinQueryOver(p => p.Father, () => alias6, Restrictions.Eq("Name", "one private")) .Left.JoinQueryOver(() => alias1.PersonList, () => alias7, p => p.Name == "a many func t,bool") .Left.JoinQueryOver(() => alias2.PersonList, () => alias8, () => alias1.Name == "a many func bool") .Left.JoinQueryOver(() => alias3.PersonList, () => alias9, Restrictions.Eq("Name", "a many private")) .Left.JoinQueryOver(() => alias4.Father, () => alias10, p => p.Name == "a one func t,bool") .Left.JoinQueryOver(() => alias5.Father, () => alias11, () => alias4.Name == "a one func bool") - .Left.JoinQueryOver(() => alias6.Father, () => alias12, p => p.Name == "a one private"); + .Left.JoinQueryOver(() => alias6.Father, () => alias12, Restrictions.Eq("Name", "a one private")); AssertCriteriaAreEqual(expected, actual); } @@ -512,17 +512,17 @@ { ICriteria expected = CreateTestCriteria(typeof(Person)) - .CreateAlias("PersonList", "alias1", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many func t,bool")) - .CreateAlias("PersonList", "alias2", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "many func bool")) + .CreateAlias("PersonList", "alias1", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "many func t,bool")) + .CreateAlias("PersonList", "alias2", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias1.Name"), "many func bool")) .CreateAlias("PersonList", "alias3", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many private")) - .CreateAlias("Father", "alias4", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one func t,bool")) - .CreateAlias("Father", "alias5", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "one func bool")) + .CreateAlias("Father", "alias4", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "one func t,bool")) + .CreateAlias("Father", "alias5", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias4.Name"), "one func bool")) .CreateAlias("Father", "alias6", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one private")) - .CreateAlias("alias1.PersonList", "alias7", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many func t,bool")) - .CreateAlias("alias2.PersonList", "alias8", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "a many func bool")) + .CreateAlias("alias1.PersonList", "alias7", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "a many func t,bool")) + .CreateAlias("alias2.PersonList", "alias8", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias1.Name"), "a many func bool")) .CreateAlias("alias3.PersonList", "alias9", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many private")) - .CreateAlias("alias4.Father", "alias10", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one func t,bool")) - .CreateAlias("alias5.Father", "alias11", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "a one func bool")) + .CreateAlias("alias4.Father", "alias10", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "a one func t,bool")) + .CreateAlias("alias5.Father", "alias11", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias4.Name"), "a one func bool")) .CreateAlias("alias6.Father", "alias12", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one private")); Person alias1 = null; @@ -544,13 +544,13 @@ .Left.JoinAlias(p => p.PersonList, () => alias3, Restrictions.Eq("Name", "many private")) .Left.JoinAlias(p => p.Father, () => alias4, p => p.Name == "one func t,bool") .Left.JoinAlias(p => p.Father, () => alias5, () => alias4.Name == "one func bool") - .Left.JoinAlias(p => p.Father, () => alias6, p => p.Name == "one private") + .Left.JoinAlias(p => p.Father, () => alias6, Restrictions.Eq("Name", "one private")) .Left.JoinAlias(() => alias1.PersonList, () => alias7, p => p.Name == "a many func t,bool") .Left.JoinAlias(() => alias2.PersonList, () => alias8, () => alias1.Name == "a many func bool") .Left.JoinAlias(() => alias3.PersonList, () => alias9, Restrictions.Eq("Name", "a many private")) .Left.JoinAlias(() => alias4.Father, () => alias10, p => p.Name == "a one func t,bool") .Left.JoinAlias(() => alias5.Father, () => alias11, () => alias4.Name == "a one func bool") - .Left.JoinAlias(() => alias6.Father, () => alias12, p => p.Name == "a one private"); + .Left.JoinAlias(() => alias6.Father, () => alias12, Restrictions.Eq("Name", "a one private")); AssertCriteriaAreEqual(expected, actual); } @@ -560,17 +560,17 @@ { DetachedCriteria expected = DetachedCriteria.For<Person>() - .CreateAlias("PersonList", "alias1", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many func t,bool")) - .CreateAlias("PersonList", "alias2", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "many func bool")) + .CreateAlias("PersonList", "alias1", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "many func t,bool")) + .CreateAlias("PersonList", "alias2", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias1.Name"), "many func bool")) .CreateAlias("PersonList", "alias3", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "many private")) - .CreateAlias("Father", "alias4", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one func t,bool")) - .CreateAlias("Father", "alias5", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "one func bool")) + .CreateAlias("Father", "alias4", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "one func t,bool")) + .CreateAlias("Father", "alias5", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias4.Name"), "one func bool")) .CreateAlias("Father", "alias6", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "one private")) - .CreateAlias("alias1.PersonList", "alias7", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many func t,bool")) - .CreateAlias("alias2.PersonList", "alias8", JoinType.LeftOuterJoin, Restrictions.Eq("alias1.Name", "a many func bool")) + .CreateAlias("alias1.PersonList", "alias7", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "a many func t,bool")) + .CreateAlias("alias2.PersonList", "alias8", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias1.Name"), "a many func bool")) .CreateAlias("alias3.PersonList", "alias9", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a many private")) - .CreateAlias("alias4.Father", "alias10", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one func t,bool")) - .CreateAlias("alias5.Father", "alias11", JoinType.LeftOuterJoin, Restrictions.Eq("alias4.Name", "a one func bool")) + .CreateAlias("alias4.Father", "alias10", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("Name"), "a one func t,bool")) + .CreateAlias("alias5.Father", "alias11", JoinType.LeftOuterJoin, Restrictions.Eq(Projections.Property("alias4.Name"), "a one func bool")) .CreateAlias("alias6.Father", "alias12", JoinType.LeftOuterJoin, Restrictions.Eq("Name", "a one private")); Person alias1 = null; @@ -592,13 +592,13 @@ .Left.JoinAlias(p => p.PersonList, () => alias3, Restrictions.Eq("Name", "many private")) .Left.JoinAlias(p => p.Father, () => alias4, p => p.Name == "one func t,bool") .Left.JoinAlias(p => p.Father, () => alias5, () => alias4.Name == "one func bool") - .Left.JoinAlias(p => p.Father, () => alias6, p => p.Name == "one private") + .Left.JoinAlias(p => p.Father, () => alias6, Restrictions.Eq("Name", "one private")) .Left.JoinAlias(() => alias1.PersonList, () => alias7, p => p.Name == "a many func t,bool") .Left.JoinAlias(() => alias2.PersonList, () => alias8, () => alias1.Name == "a many func bool") .Left.JoinAlias(() => alias3.PersonList, () => alias9, Restrictions.Eq("Name", "a many private")) .Left.JoinAlias(() => alias4.Father, () => alias10, p => p.Name == "a one func t,bool") .Left.JoinAlias(() => alias5.Father, () => alias11, () => alias4.Name == "a one func bool") - .Left.JoinAlias(() => alias6.Father, () => alias12, p => p.Name == "a one private"); + .Left.JoinAlias(() => alias6.Father, () => alias12, Restrictions.Eq("Name", "a one private")); AssertCriteriaAreEqual(expected, actual); } @@ -781,7 +781,7 @@ { DetachedCriteria expected = DetachedCriteria.For<Person>("personAlias") - .Add(Restrictions.Eq("personAlias.Name", "test name")); + .Add(Restrictions.Eq(Projections.Property("personAlias.Name"), "test name")); Person personAlias = null; QueryOver<Person> actual = Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/RestrictionsFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/RestrictionsFixture.cs 2011-05-15 13:00:22 UTC (rev 5816) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/RestrictionsFixture.cs 2011-05-15 13:04:02 UTC (rev 5817) @@ -17,10 +17,10 @@ { ICriteria expected = CreateTestCriteria(typeof(Person), "personAlias") - .Add(Restrictions.Lt("Age", 65)) - .Add(Restrictions.Ge("personAlias.Age", 18)) - .Add(Restrictions.Not(Restrictions.Ge("Age", 65))) - .Add(Restrictions.Not(Restrictions.Lt("personAlias.Age", 18))); + .Add(Restrictions.Lt(Projections.Property("Age"), 65)) + .Add(Restrictions.Ge(Projections.Property("personAlias.Age"), 18)) + .Add(Restrictions.Not(Restrictions.Ge(Projections.Property("Age"), 65))) + .Add(Restrictions.Not(Restrictions.Lt(Projections.Property("personAlias.Age"), 18))); Person personAlias = null; var actual = @@ -92,11 +92,11 @@ ICriteria expected = CreateTestCriteria(typeof(Person), "personAlias") .Add(Restrictions.Conjunction() - .Add(Restrictions.Eq("Name", "test")) - .Add(Restrictions.Eq("personAlias.Name", "test"))) + .Add(Restrictions.Eq(Projections.Property("Name"), "test")) + .Add(Restrictions.Eq(Projections.Property("personAlias.Name"), "test"))) .Add(Restrictions.Disjunction() - .Add(Restrictions.Eq("Name", "test")) - .Add(Restrictions.Eq("personAlias.Name", "test"))); + .Add(Restrictions.Eq(Projections.Property("Name"), "test")) + .Add(Restrictions.Eq(Projections.Property("personAlias.Name"), "test"))); Person personAlias = null; var actual = @@ -182,23 +182,23 @@ { ICriteria expected = CreateTestCriteria(typeof(Person), "personAlias") - .Add(Restrictions.IsNull("Name")) - .Add(Restrictions.IsNull("Name")) - .Add(Restrictions.IsNull("Name")) - .Add(Restrictions.IsNull("Father")) - .Add(Restrictions.IsNull("Father")) - .Add(Restrictions.IsNull("NullableGender")) - .Add(Restrictions.IsNull("NullableAge")) - .Add(Restrictions.IsNull("NullableIsParent")) - .Add(Restrictions.Not(Restrictions.IsNull("Name"))) - .Add(Restrictions.Not(Restrictions.IsNull("Name"))) - .Add(Restrictions.Not(Restrictions.IsNull("Name"))) - .Add(Restrictions.Not(Restrictions.IsNull("Father"))) - .Add(Restrictions.Not(Restrictions.IsNull("Father"))) - .Add(Restrictions.Not(Restrictions.IsNull("NullableGender"))) - .Add(Restrictions.Not(Restrictions.IsNull("NullableAge"))) - .Add(Restrictions.Not(Restrictions.IsNull("NullableIsParent"))) - .Add(Restrictions.IsNull("personAlias.Name")); + .Add(Restrictions.IsNull(Projections.Property("Name"))) + .Add(Restrictions.IsNull(Projections.Property("Name"))) + .Add(Restrictions.IsNull(Projections.Property("Name"))) + .Add(Restrictions.IsNull(Projections.Property("Father"))) + .Add(Restrictions.IsNull(Projections.Property("Father"))) + .Add(Restrictions.IsNull(Projections.Property("NullableGender"))) + .Add(Restrictions.IsNull(Projections.Property("NullableAge"))) + .Add(Restrictions.IsNull(Projections.Property("NullableIsParent"))) + .Add(Restrictions.Not(Restrictions.IsNull(Projections.Property("Name")))) + .Add(Restrictions.Not(Restrictions.IsNull(Projections.Property("Name")))) + .Add(Restrictions.Not(Restrictions.IsNull(Projections.Property("Name")))) + .Add(Restrictions.Not(Restrictions.IsNull(Projections.Property("Father")))) + .Add(Restrictions.Not(Restrictions.IsNull(Projections.Property("Father")))) + .Add(Restrictions.Not(Restrictions.IsNull(Projections.Property("NullableGender")))) + .Add(Restrictions.Not(Restrictions.IsNull(Projections.Property("NullableAge")))) + .Add(Restrictions.Not(Restrictions.IsNull(Projections.Property("NullableIsParent")))) + .Add(Restrictions.IsNull(Projections.Property("personAlias.Name"))); Person personAlias = null; CustomPerson nullPerson = null; @@ -255,6 +255,20 @@ AssertCriteriaAreEqual(expected, actual); } + [Test] + public void FunctionExtensions() + { + ICriteria expected = + CreateTestCriteria(typeof(Person)) + .Add(Restrictions.Eq(Projections.SqlFunction("year", NHibernateUtil.DateTime, Projections.Property("BirthDate")), 1970)); + + IQueryOver<Person> actual = + CreateTestQueryOver<Person>() + .Where(p => p.BirthDate.Year() == 1970); + + AssertCriteriaAreEqual(expected, actual); + } + } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ric...@us...> - 2011-05-15 13:00:29
|
Revision: 5816 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5816&view=rev Author: ricbrown Date: 2011-05-15 13:00:22 +0000 (Sun, 15 May 2011) Log Message: ----------- Attempt to fix test NHibernate.Test.DynamicProxyTests.GenericMethodsTests.GenericMethodShouldBeProxied.ProxyOfSelfCastingMethod() Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/DefaultProxyMethodBuilder.cs Modified: trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/DefaultProxyMethodBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/DefaultProxyMethodBuilder.cs 2011-05-12 19:48:50 UTC (rev 5815) +++ trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/DefaultProxyMethodBuilder.cs 2011-05-15 13:00:22 UTC (rev 5816) @@ -53,7 +53,12 @@ typeNames.Add(string.Format("T{0}", index)); } - methodBuilder.DefineGenericParameters(typeNames.ToArray()); + var typeArgsBuilder = methodBuilder.DefineGenericParameters(typeNames.ToArray()); + + for (int index = 0; index < typeArgs.Length; index++) + { + typeArgsBuilder[index].SetInterfaceConstraints(typeArgs[index].GetGenericParameterConstraints()); + } } ILGenerator IL = methodBuilder.GetILGenerator(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-12 19:48:56
|
Revision: 5815 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5815&view=rev Author: fabiomaulo Date: 2011-05-12 19:48:50 +0000 (Thu, 12 May 2011) Log Message: ----------- Demonstration for NH-2546 Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/Model.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/SetCommandParameterSizesFalseFixture.cs Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/Mappings.hbm.xml 2011-05-12 19:48:50 UTC (rev 5815) @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping + xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH2546"> + + <class name="Student"> + <id name="Id"> + <generator class="native" /> + </id> + <property name="StringTypeWithLengthDefined" type="String(15)"/> + </class> + +</hibernate-mapping> Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/Model.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/Model.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/Model.cs 2011-05-12 19:48:50 UTC (rev 5815) @@ -0,0 +1,8 @@ +namespace NHibernate.Test.NHSpecificTest.NH2546 +{ + public class Student + { + public virtual int Id { get; set; } + public virtual string StringTypeWithLengthDefined { get; set; } + } +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/SetCommandParameterSizesFalseFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/SetCommandParameterSizesFalseFixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2546/SetCommandParameterSizesFalseFixture.cs 2011-05-12 19:48:50 UTC (rev 5815) @@ -0,0 +1,61 @@ +using System.Collections.Generic; +using NUnit.Framework; +using NHibernate.Criterion; + +namespace NHibernate.Test.NHSpecificTest.NH2546 +{ + [TestFixture] + public class SetCommandParameterSizesFalseFixture : BugTestCase + { + protected override void OnSetUp() + { + using (ISession session = Sfi.OpenSession()) + { + session.Persist(new Student() { StringTypeWithLengthDefined = "Julian Maughan" }); + session.Persist(new Student() { StringTypeWithLengthDefined = "Bill Clinton" }); + session.Flush(); + } + } + + protected override void OnTearDown() + { + using (ISession session = Sfi.OpenSession()) + { + session.CreateQuery("delete from Student").ExecuteUpdate(); + session.Flush(); + } + base.OnTearDown(); + } + + [Test] + public void LikeExpressionWithinDefinedTypeSize() + { + using (ISession session = Sfi.OpenSession()) + { + ICriteria criteria = session + .CreateCriteria<Student>() + .Add(Restrictions.Like("StringTypeWithLengthDefined", "Julian%")); + + IList<Student> list = criteria.List<Student>(); + + Assert.That(list.Count, Is.EqualTo(1)); + } + } + + [Test] + public void LikeExpressionExceedsDefinedTypeSize() + { + // In this case we are forcing the usage of LikeExpression class where the length of the associated property is ignored + using (ISession session = Sfi.OpenSession()) + { + ICriteria criteria = session + .CreateCriteria<Student>() + .Add(Restrictions.Like("StringTypeWithLengthDefined", "[a-z][a-z][a-z]ian%", MatchMode.Exact, null)); + + IList<Student> list = criteria.List<Student>(); + + Assert.That(list.Count, Is.EqualTo(1)); + } + } + } +} Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-12 18:42:54 UTC (rev 5814) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-12 19:48:50 UTC (rev 5815) @@ -794,6 +794,8 @@ <Compile Include="NHSpecificTest\NH2527\Model.cs" /> <Compile Include="NHSpecificTest\NH2530\Domain.cs" /> <Compile Include="NHSpecificTest\NH2530\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2546\Model.cs" /> + <Compile Include="NHSpecificTest\NH2546\SetCommandParameterSizesFalseFixture.cs" /> <Compile Include="NHSpecificTest\NH2554\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2554\Model.cs" /> <Compile Include="NHSpecificTest\NH2565\Domain.cs" /> @@ -2667,6 +2669,7 @@ <EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" /> </ItemGroup> <ItemGroup> + <EmbeddedResource Include="NHSpecificTest\NH2546\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2697\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1642\Mappings.hbm.xml" /> <EmbeddedResource Include="Stateless\Contact.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-12 18:43:00
|
Revision: 5814 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5814&view=rev Author: fabiomaulo Date: 2011-05-12 18:42:54 +0000 (Thu, 12 May 2011) Log Message: ----------- Minor (ignore test where not supported by driver) Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs 2011-05-12 18:32:53 UTC (rev 5813) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs 2011-05-12 18:42:54 UTC (rev 5814) @@ -105,7 +105,12 @@ [Test] public void CanUseFutureFetchQuery() { - using (var s = sessions.OpenSession()) + IDriver driver = sessions.ConnectionProvider.Driver; + if (!driver.SupportsMultipleQueries) + { + Assert.Ignore("Driver {0} does not support multi-queries", driver.GetType().FullName); + } + using (var s = sessions.OpenSession()) using (var tx = s.BeginTransaction()) { var p1 = new Person {Name = "Parent"}; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-12 18:32:59
|
Revision: 5813 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5813&view=rev Author: fabiomaulo Date: 2011-05-12 18:32:53 +0000 (Thu, 12 May 2011) Log Message: ----------- Fix NH-2691 (with some other possible cases) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Linq/Expressions/NhCountExpression.cs trunk/nhibernate/src/NHibernate/Linq/ReWriters/MergeAggregatingResultsRewriter.cs trunk/nhibernate/src/NHibernate/Linq/ReWriters/RemoveUnnecessaryBodyOperators.cs trunk/nhibernate/src/NHibernate/Linq/Visitors/NhExpressionTreeVisitor.cs trunk/nhibernate/src/NHibernate/Linq/Visitors/NhThrowingExpressionTreeVisitor.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2691/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2691/Domain.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2691/Fixture.cs Modified: trunk/nhibernate/src/NHibernate/Linq/Expressions/NhCountExpression.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/Expressions/NhCountExpression.cs 2011-05-12 16:42:27 UTC (rev 5812) +++ trunk/nhibernate/src/NHibernate/Linq/Expressions/NhCountExpression.cs 2011-05-12 18:32:53 UTC (rev 5813) @@ -2,27 +2,33 @@ namespace NHibernate.Linq.Expressions { - public class NhCountExpression : NhAggregatedExpression + public abstract class NhCountExpression : NhAggregatedExpression { - public NhCountExpression(Expression expression, System.Type type) - : base(expression, type, NhExpressionType.Count) + protected NhCountExpression(Expression expression, System.Type type) + : base(expression, type, NhExpressionType.Count) {} + + public abstract NhCountExpression CreateNew(Expression expression); + } + + public class NhShortCountExpression : NhCountExpression + { + public NhShortCountExpression(Expression expression) + : base(expression, typeof (int)) {} + + public override NhCountExpression CreateNew(Expression expression) { + return new NhShortCountExpression(expression); } } - public class NhShortCountExpression : NhCountExpression - { - public NhShortCountExpression(Expression expression) - : base(expression, typeof(int)) - { - } - } + public class NhLongCountExpression : NhCountExpression + { + public NhLongCountExpression(Expression expression) + : base(expression, typeof (long)) {} - public class NhLongCountExpression : NhCountExpression - { - public NhLongCountExpression(Expression expression) - : base(expression, typeof(long)) - { - } - } -} + public override NhCountExpression CreateNew(Expression expression) + { + return new NhLongCountExpression(expression); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Linq/ReWriters/MergeAggregatingResultsRewriter.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/ReWriters/MergeAggregatingResultsRewriter.cs 2011-05-12 16:42:27 UTC (rev 5812) +++ trunk/nhibernate/src/NHibernate/Linq/ReWriters/MergeAggregatingResultsRewriter.cs 2011-05-12 18:32:53 UTC (rev 5813) @@ -110,6 +110,10 @@ return CreateAggregate(m.Arguments[0], (LambdaExpression)m.Arguments[1], e => new NhShortCountExpression(e), () => new CountResultOperator()); + case "LongCount": + return CreateAggregate(m.Arguments[0], (LambdaExpression) m.Arguments[1], + e => new NhLongCountExpression(e), + () => new LongCountResultOperator()); case "Min": return CreateAggregate(m.Arguments[0], (LambdaExpression) m.Arguments[1], e => new NhMinExpression(e), Modified: trunk/nhibernate/src/NHibernate/Linq/ReWriters/RemoveUnnecessaryBodyOperators.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/ReWriters/RemoveUnnecessaryBodyOperators.cs 2011-05-12 16:42:27 UTC (rev 5812) +++ trunk/nhibernate/src/NHibernate/Linq/ReWriters/RemoveUnnecessaryBodyOperators.cs 2011-05-12 18:32:53 UTC (rev 5813) @@ -1,39 +1,33 @@ -using System; -using System.Linq; -using System.Linq.Expressions; -using NHibernate.Linq.Expressions; +using System.Linq; using Remotion.Linq; using Remotion.Linq.Clauses; using Remotion.Linq.Clauses.ResultOperators; -using Remotion.Linq.Parsing; namespace NHibernate.Linq.ReWriters { - public class RemoveUnnecessaryBodyOperators : QueryModelVisitorBase - { - private RemoveUnnecessaryBodyOperators() - { - } + public class RemoveUnnecessaryBodyOperators : QueryModelVisitorBase + { + private RemoveUnnecessaryBodyOperators() {} - public static void ReWrite(QueryModel queryModel) - { - var rewriter = new RemoveUnnecessaryBodyOperators(); + public static void ReWrite(QueryModel queryModel) + { + var rewriter = new RemoveUnnecessaryBodyOperators(); - rewriter.VisitQueryModel(queryModel); - } + rewriter.VisitQueryModel(queryModel); + } - public override void VisitResultOperator(ResultOperatorBase resultOperator, QueryModel queryModel, int index) - { - if (resultOperator is CountResultOperator) - { - // For count operators, we can remove any order-by result operators - foreach (var orderby in queryModel.BodyClauses.Where(bc => bc is OrderByClause).ToList()) - { - queryModel.BodyClauses.Remove(orderby); - } - } + public override void VisitResultOperator(ResultOperatorBase resultOperator, QueryModel queryModel, int index) + { + if (resultOperator is CountResultOperator || resultOperator is LongCountResultOperator) + { + // For count operators, we can remove any order-by result operators + foreach (IBodyClause orderby in queryModel.BodyClauses.Where(bc => bc is OrderByClause).ToList()) + { + queryModel.BodyClauses.Remove(orderby); + } + } - base.VisitResultOperator(resultOperator, queryModel, index); - } - } + base.VisitResultOperator(resultOperator, queryModel, index); + } + } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Linq/Visitors/NhExpressionTreeVisitor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/Visitors/NhExpressionTreeVisitor.cs 2011-05-12 16:42:27 UTC (rev 5812) +++ trunk/nhibernate/src/NHibernate/Linq/Visitors/NhExpressionTreeVisitor.cs 2011-05-12 18:32:53 UTC (rev 5813) @@ -78,7 +78,7 @@ { Expression nx = VisitExpression(expression.Expression); - return nx != expression.Expression ? new NhShortCountExpression(nx) : expression; + return nx != expression.Expression ? expression.CreateNew(nx) : expression; } protected virtual Expression VisitNhSum(NhSumExpression expression) Modified: trunk/nhibernate/src/NHibernate/Linq/Visitors/NhThrowingExpressionTreeVisitor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/Visitors/NhThrowingExpressionTreeVisitor.cs 2011-05-12 16:42:27 UTC (rev 5812) +++ trunk/nhibernate/src/NHibernate/Linq/Visitors/NhThrowingExpressionTreeVisitor.cs 2011-05-12 18:32:53 UTC (rev 5813) @@ -85,7 +85,7 @@ { Expression nx = base.VisitExpression(expression.Expression); - return nx != expression.Expression ? new NhCountExpression(nx, expression.Type) : expression; + return nx != expression.Expression ? expression.CreateNew(nx) : expression; } protected virtual Expression BaseVisitNhSum(NhSumExpression expression) Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2691/Domain.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2691/Domain.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2691/Domain.cs 2011-05-12 18:32:53 UTC (rev 5813) @@ -0,0 +1,28 @@ +using System; + +namespace NHibernate.Test.NHSpecificTest.NH2691 +{ + public abstract class Animal + { + public virtual int Id { get; set; } + public virtual string Description { get; set; } + public virtual int Sequence { get; set; } + } + + public abstract class Reptile : Animal + { + public virtual double BodyTemperature { get; set; } + } + + public class Lizard : Reptile { } + + public abstract class Mammal : Animal + { + public virtual bool Pregnant { get; set; } + public virtual DateTime? BirthDate { get; set; } + } + + public class Dog : Mammal { } + + public class Cat : Mammal { } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2691/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2691/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2691/Fixture.cs 2011-05-12 18:32:53 UTC (rev 5813) @@ -0,0 +1,45 @@ +using System.Linq; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Linq; +using NHibernate.Mapping.ByCode; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.NHSpecificTest.NH2691 +{ + public class Fixture: TestCaseMappingByCode + { + protected override HbmMapping GetMappings() + { + var mapper = new ConventionModelMapper(); + mapper.IsTablePerClass((type, declared) => false); + mapper.IsTablePerClassHierarchy((type, declared) => true); + var mappings = mapper.CompileMappingFor(new[] {typeof (Animal), typeof (Reptile), typeof (Mammal), typeof (Lizard), typeof (Dog), typeof (Cat)}); + return mappings; + } + + [Test] + public void WhenUseCountWithOrderThenCutTheOrder() + { + using (var session = OpenSession()) + using (session.BeginTransaction()) + { + var baseQuery = from cat in session.Query<Cat>() orderby cat.BirthDate select cat; + Executing.This(() => baseQuery.Count()).Should().NotThrow(); + session.Transaction.Commit(); + } + } + + [Test] + public void WhenUseLongCountWithOrderThenCutTheOrder() + { + using (var session = OpenSession()) + using (session.BeginTransaction()) + { + var baseQuery = from cat in session.Query<Cat>() orderby cat.BirthDate select cat; + Executing.This(() => baseQuery.LongCount()).Should().NotThrow(); + session.Transaction.Commit(); + } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-12 16:42:27 UTC (rev 5812) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-12 18:32:53 UTC (rev 5813) @@ -820,6 +820,8 @@ <Compile Include="NHSpecificTest\NH2660And2661\Test.cs" /> <Compile Include="NHSpecificTest\NH2673\Blog.cs" /> <Compile Include="NHSpecificTest\NH2673\CachingWithTrasformerTests.cs" /> + <Compile Include="NHSpecificTest\NH2691\Domain.cs" /> + <Compile Include="NHSpecificTest\NH2691\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2697\ArticleGroupItem.cs" /> <Compile Include="NHSpecificTest\NH2697\ArticleItem.cs" /> <Compile Include="NHSpecificTest\NH2697\SampleTest.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-12 16:42:34
|
Revision: 5812 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5812&view=rev Author: fabiomaulo Date: 2011-05-12 16:42:27 +0000 (Thu, 12 May 2011) Log Message: ----------- Fix NH-2699 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/NHibernate.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Dialect/MsSqlAzure2008Dialect.cs Added: trunk/nhibernate/src/NHibernate/Dialect/MsSqlAzure2008Dialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/MsSqlAzure2008Dialect.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Dialect/MsSqlAzure2008Dialect.cs 2011-05-12 16:42:27 UTC (rev 5812) @@ -0,0 +1,10 @@ +namespace NHibernate.Dialect +{ + public class MsSqlAzure2008Dialect : MsSql2008Dialect + { + public override string PrimaryKeyString + { + get { return "primary key CLUSTERED"; } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-05-12 16:27:11 UTC (rev 5811) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-05-12 16:42:27 UTC (rev 5812) @@ -137,6 +137,7 @@ <Compile Include="Dialect\GenericDialect.cs" /> <Compile Include="Dialect\MsSql2000Dialect.cs" /> <Compile Include="Dialect\MsSql7Dialect.cs" /> + <Compile Include="Dialect\MsSqlAzure2008Dialect.cs" /> <Compile Include="Dialect\MySQLDialect.cs" /> <Compile Include="Dialect\PostgreSQLDialect.cs" /> <Compile Include="Dialect\Schema\PostgreSQLMetadata.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-12 16:27:17
|
Revision: 5811 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5811&view=rev Author: fabiomaulo Date: 2011-05-12 16:27:11 +0000 (Thu, 12 May 2011) Log Message: ----------- Fix NH-2690 NH-2421 NH-2422 thanks to Andrei Alecu Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs trunk/nhibernate/src/NHibernate.Test/QueryTest/MultipleQueriesFixture.cs Modified: trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs 2011-05-10 23:09:40 UTC (rev 5810) +++ trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs 2011-05-12 16:27:11 UTC (rev 5811) @@ -515,7 +515,7 @@ ITranslator translator = Translators[i]; QueryParameters parameter = Parameters[i]; IList tempResults; - if (resultCollectionGenericType[i] == typeof(object)) + if (resultCollectionGenericType[i] == typeof(object) || parameter.ResultTransformer != null) { tempResults = new ArrayList(); } Modified: trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs 2011-05-10 23:09:40 UTC (rev 5810) +++ trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs 2011-05-12 16:27:11 UTC (rev 5811) @@ -4,6 +4,7 @@ using System.Linq.Expressions; using NHibernate.Engine; using NHibernate.Impl; +using Remotion.Linq; namespace NHibernate.Linq { @@ -48,20 +49,20 @@ public static IEnumerable<T> ToFuture<T>(this IQueryable<T> query) { - var nhQueryable = query as NhQueryable<T>; + var nhQueryable = query as QueryableBase<T>; if (nhQueryable == null) - throw new NotSupportedException("You can also use the AsFuture() method on NhQueryable"); + throw new NotSupportedException("Query needs to be of type QueryableBase<T>"); - var future = ((INhQueryProvider)nhQueryable.Provider).ExecuteFuture(nhQueryable.Expression); + var future = ((INhQueryProvider) nhQueryable.Provider).ExecuteFuture(nhQueryable.Expression); return (IEnumerable<T>)future; } public static IFutureValue<T> ToFutureValue<T>(this IQueryable<T> query) { - var nhQueryable = query as NhQueryable<T>; + var nhQueryable = query as QueryableBase<T>; if (nhQueryable == null) - throw new NotSupportedException("You can also use the AsFuture() method on NhQueryable"); + throw new NotSupportedException("Query needs to be of type QueryableBase<T>"); var future = ((INhQueryProvider)nhQueryable.Provider).ExecuteFuture(nhQueryable.Expression); if(future is DelayedEnumerator<T>) Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs 2011-05-10 23:09:40 UTC (rev 5810) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs 2011-05-12 16:27:11 UTC (rev 5811) @@ -75,6 +75,83 @@ } [Test] + public void CanUseFutureQueryWithAnonymousType() + { + using (var s = sessions.OpenSession()) + { + IgnoreThisTestIfMultipleQueriesArentSupportedByDriver(); + + var persons = s.Query<Person>() + .Select(p => new {Id = p.Id, Name = p.Name}) + .ToFuture(); + var persons5 = s.Query<Person>() + .Select(p => new { Id = p.Id, Name = p.Name }) + .Take(5) + .ToFuture(); + + using (var logSpy = new SqlLogSpy()) + { + persons5.ToList(); // initialize the enumerable + persons.ToList(); + + var events = logSpy.Appender.GetEvents(); + Assert.AreEqual(1, events.Length); + } + } + } + + + + [Test] + public void CanUseFutureFetchQuery() + { + using (var s = sessions.OpenSession()) + using (var tx = s.BeginTransaction()) + { + var p1 = new Person {Name = "Parent"}; + var p2 = new Person {Parent = p1, Name = "Child"}; + p1.Children.Add(p2); + s.Save(p1); + s.Save(p2); + tx.Commit(); + + s.Clear(); // we don't want caching + } + + using (var s = sessions.OpenSession()) + { + IgnoreThisTestIfMultipleQueriesArentSupportedByDriver(); + + var persons = s.Query<Person>() + .FetchMany(p => p.Children) + .ToFuture(); + var persons10 = s.Query<Person>() + .FetchMany(p => p.Children) + .Take(10) + .ToFuture(); + + + using (var logSpy = new SqlLogSpy()) + { + + Assert.That(persons.Any(x => x.Children.Any()), "No children found"); + Assert.That(persons10.Any(x => x.Children.Any()), "No children found"); + + var events = logSpy.Appender.GetEvents(); + Assert.AreEqual(1, events.Length); + } + } + + using (ISession s = OpenSession()) + using (ITransaction tx = s.BeginTransaction()) + { + s.Delete("from Person"); + tx.Commit(); + } + } + + + [Test] public void TwoFuturesRunInTwoRoundTrips() { using (var s = sessions.OpenSession()) Modified: trunk/nhibernate/src/NHibernate.Test/QueryTest/MultipleQueriesFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/QueryTest/MultipleQueriesFixture.cs 2011-05-10 23:09:40 UTC (rev 5810) +++ trunk/nhibernate/src/NHibernate.Test/QueryTest/MultipleQueriesFixture.cs 2011-05-12 16:27:11 UTC (rev 5811) @@ -503,6 +503,48 @@ } } + [Test] + public void CanGetResultsInAGenericListClass() + { + using (ISession s = OpenSession()) + using (var tx = s.BeginTransaction()) + { + var item1 = new Item() { Id = 1, Name = "test item"}; + var item2 = new Item() { Id = 2, Name = "test child", Parent = item1 }; + s.Save(item1); + s.Save(item2); + + tx.Commit(); + s.Clear(); + } + + + using (ISession s = OpenSession()) + { + + + IQuery getItems = s.CreateQuery("from Item"); + IQuery parents = s.CreateQuery("select Parent from Item"); + + IList results = s.CreateMultiQuery() + .Add(getItems) + .Add<Item>(parents) + .List(); + + Assert.That(results[0], Is.InstanceOf<ArrayList>()); + Assert.That(results[1], Is.InstanceOf<List<Item>>()); + } + + using (ISession s = OpenSession()) + using (var tx = s.BeginTransaction()) + { + s.Delete("from Item"); + tx.Commit(); + } + } + + + public class ResultTransformerStub : IResultTransformer { private bool _wasTransformTupleCalled; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-10 23:09:46
|
Revision: 5810 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5810&view=rev Author: fabiomaulo Date: 2011-05-10 23:09:40 +0000 (Tue, 10 May 2011) Log Message: ----------- The problem with ProxyCache seems fixed Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/ProxyCache.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1789/ProxyEqualityProblemTest.cs Modified: trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/ProxyCache.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/ProxyCache.cs 2011-05-10 18:21:57 UTC (rev 5809) +++ trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/ProxyCache.cs 2011-05-10 23:09:40 UTC (rev 5810) @@ -8,12 +8,13 @@ using System; using System.Collections.Generic; +using NHibernate.Util; namespace NHibernate.Proxy.DynamicProxy { public class ProxyCache : IProxyCache { - private readonly Dictionary<ProxyCacheEntry, System.Type> cache = new Dictionary<ProxyCacheEntry, System.Type>(); + private readonly IDictionary<ProxyCacheEntry, System.Type> cache = new ThreadSafeDictionary<ProxyCacheEntry, System.Type>(new Dictionary<ProxyCacheEntry, System.Type>()); private readonly object syncObject = new object(); #region IProxyCache Members Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1789/ProxyEqualityProblemTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1789/ProxyEqualityProblemTest.cs 2011-05-10 18:21:57 UTC (rev 5809) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1789/ProxyEqualityProblemTest.cs 2011-05-10 23:09:40 UTC (rev 5810) @@ -96,7 +96,7 @@ /// <summary> /// That's how I discovered something was wrong: here my object is not found in the collection, even if it's there. /// </summary> - [Test, Ignore("To investigate. When run with the whole tests suit it fail...probably something related with the ProxyCache.")] + [Test]//, Ignore("To investigate. When run with the whole tests suit it fail...probably something related with the ProxyCache.")] public void TestTheProblemWithCollection() { using (ISession session = OpenSession()) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-10 18:22:03
|
Revision: 5809 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5809&view=rev Author: fabiomaulo Date: 2011-05-10 18:21:57 +0000 (Tue, 10 May 2011) Log Message: ----------- No failing test for proxy Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/DynamicProxyTests/GenericMethodsTests/ trunk/nhibernate/src/NHibernate.Test/DynamicProxyTests/GenericMethodsTests/GenericMethodShouldBeProxied.cs Added: trunk/nhibernate/src/NHibernate.Test/DynamicProxyTests/GenericMethodsTests/GenericMethodShouldBeProxied.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/DynamicProxyTests/GenericMethodsTests/GenericMethodShouldBeProxied.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/DynamicProxyTests/GenericMethodsTests/GenericMethodShouldBeProxied.cs 2011-05-10 18:21:57 UTC (rev 5809) @@ -0,0 +1,48 @@ +using System.Collections.Generic; +using NHibernate.Proxy.DynamicProxy; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.DynamicProxyTests.GenericMethodsTests +{ + public class GenericMethodShouldBeProxied + { + public class MyClass + { + public virtual object Method<T>() + { + if(typeof(T) == typeof(int)) + { + return 5; + } + if (typeof(T) == typeof(string)) + { + return "blha"; + } + return default(T); + } + + public virtual TRequestedType As<TRequestedType>() where TRequestedType : MyClass + { + return this as TRequestedType; + } + } + + [Test] + public void ProxyOfAGenericMethod() + { + var factory = new ProxyFactory(); + var c = (MyClass)factory.CreateProxy(typeof(MyClass), new PassThroughInterceptor(new MyClass()), null); + c.Method<int>().Should().Be(5); + c.Method<string>().Should().Be("blha"); + } + + [Test] + public void ProxyOfSelfCastingMethod() + { + var factory = new ProxyFactory(); + var c = (MyClass)factory.CreateProxy(typeof(MyClass), new PassThroughInterceptor(new MyClass()), null); + c.As<MyClass>().Should().Not.Be.Null(); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-10 17:39:47 UTC (rev 5808) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-10 18:21:57 UTC (rev 5809) @@ -219,6 +219,7 @@ <Compile Include="DriverTest\Sql2008DateTime2Test.cs" /> <Compile Include="DriverTest\SqlClientDriverFixture.cs" /> <Compile Include="DriverTest\SqlServerCeDriverFixture.cs" /> + <Compile Include="DynamicProxyTests\GenericMethodsTests\GenericMethodShouldBeProxied.cs" /> <Compile Include="DynamicProxyTests\InterfaceProxySerializationTests\IMyProxy.cs" /> <Compile Include="DynamicProxyTests\InterfaceProxySerializationTests\MyProxyImpl.cs" /> <Compile Include="DynamicProxyTests\InterfaceProxySerializationTests\ProxyFixture.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-10 17:39:53
|
Revision: 5808 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5808&view=rev Author: fabiomaulo Date: 2011-05-10 17:39:47 +0000 (Tue, 10 May 2011) Log Message: ----------- Improved GetImplementors caching results for a given entityOrClassName Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs Modified: trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs 2011-05-10 16:57:24 UTC (rev 5807) +++ trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs 2011-05-10 17:39:47 UTC (rev 5808) @@ -3,6 +3,7 @@ using System.Data; using System.Runtime.Serialization; using System.Text; +using System.Linq; using Iesi.Collections.Generic; using NHibernate.Cache; @@ -29,6 +30,7 @@ using NHibernate.Util; using Environment=NHibernate.Cfg.Environment; using HibernateDialect = NHibernate.Dialect.Dialect; +using IQueryable = NHibernate.Persister.Entity.IQueryable; namespace NHibernate.Impl { @@ -133,6 +135,7 @@ [NonSerialized] private readonly SQLFunctionRegistry sqlFunctionRegistry; [NonSerialized] private readonly Dictionary<string, ResultSetMappingDefinition> sqlResultSetMappings; [NonSerialized] private readonly UpdateTimestampsCache updateTimestampsCache; + [NonSerialized] private readonly IDictionary<string, string[]> entityNameImplementorsMap = new ThreadSafeDictionary<string, string[]>(new Dictionary<string, string[]>(100)); private readonly string uuid; private bool disposed; @@ -590,6 +593,11 @@ /// </summary> public string[] GetImplementors(string entityOrClassName) { + string[] knownMap; + if(entityNameImplementorsMap.TryGetValue(entityOrClassName,out knownMap)) + { + return knownMap; + } System.Type clazz = null; // NH Different implementation for performance: a class without at least a namespace sure can't be found by reflection @@ -597,13 +605,15 @@ { IEntityPersister checkPersister; // NH Different implementation: we have better performance checking, first of all, if we know the class - // and take the System.Type directly from the persister (className have high probability to be entityName) + // and take the System.Type directly from the persister (className have high probability to be entityName at least using Criteria or Linq) if (entityPersisters.TryGetValue(entityOrClassName, out checkPersister)) { if(!checkPersister.EntityMetamodel.HasPocoRepresentation) { // we found the persister but it is a dynamic entity without class - return new[] { entityOrClassName }; + knownMap = new[] { entityOrClassName }; + entityNameImplementorsMap[entityOrClassName] = knownMap; + return knownMap; } // NH : take care with this because we are forcing the Poco EntityMode clazz = checkPersister.GetMappedClass(EntityMode.Poco); @@ -634,56 +644,58 @@ if (clazz == null) { - return new[] {entityOrClassName}; //for a dynamic-class + knownMap = new[] { entityOrClassName }; + entityNameImplementorsMap[entityOrClassName] = knownMap; + return knownMap; //for a dynamic-class } - List<string> results = new List<string>(); - foreach (IEntityPersister p in entityPersisters.Values) + var results = new List<string>(); + foreach (var q in entityPersisters.Values.OfType<IQueryable>()) { - IQueryable q = p as IQueryable; - if (q != null) + string registeredEntityName = q.EntityName; + // NH: as entity-name we are using the FullName but in HQL we allow just the Name, the class is mapped even when its FullName match the entity-name + bool isMappedClass = entityOrClassName.Equals(registeredEntityName) || clazz.FullName.Equals(registeredEntityName); + if (q.IsExplicitPolymorphism) { - string registeredEntityName = q.EntityName; - // NH: as entity-name we are using the FullName but in HQL we allow just the Name, the class is mapped even when its FullName match the entity-name - bool isMappedClass = entityOrClassName.Equals(registeredEntityName) || clazz.FullName.Equals(registeredEntityName); - if (q.IsExplicitPolymorphism) + if (isMappedClass) { - if (isMappedClass) - { - return new string[] {registeredEntityName}; // NOTE EARLY EXIT - } + knownMap = new[] { registeredEntityName }; + entityNameImplementorsMap[entityOrClassName] = knownMap; + return knownMap; // NOTE EARLY EXIT } + } + else + { + if (isMappedClass) + { + results.Add(registeredEntityName); + } else { - if (isMappedClass) + System.Type mappedClass = q.GetMappedClass(EntityMode.Poco); + if (mappedClass != null && clazz.IsAssignableFrom(mappedClass)) { - results.Add(registeredEntityName); - } - else - { - System.Type mappedClass = q.GetMappedClass(EntityMode.Poco); - if (mappedClass != null && clazz.IsAssignableFrom(mappedClass)) + bool assignableSuperclass; + if (q.IsInherited) { - bool assignableSuperclass; - if (q.IsInherited) - { - System.Type mappedSuperclass = GetEntityPersister(q.MappedSuperclass).GetMappedClass(EntityMode.Poco); - assignableSuperclass = clazz.IsAssignableFrom(mappedSuperclass); - } - else - { - assignableSuperclass = false; - } - if (!assignableSuperclass) - { - results.Add(registeredEntityName); - } + System.Type mappedSuperclass = GetEntityPersister(q.MappedSuperclass).GetMappedClass(EntityMode.Poco); + assignableSuperclass = clazz.IsAssignableFrom(mappedSuperclass); } + else + { + assignableSuperclass = false; + } + if (!assignableSuperclass) + { + results.Add(registeredEntityName); + } } } } } - return results.ToArray(); + knownMap = results.ToArray(); + entityNameImplementorsMap[entityOrClassName] = knownMap; + return knownMap; } public string GetImportedClassName(string className) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-10 16:57:31
|
Revision: 5807 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5807&view=rev Author: fabiomaulo Date: 2011-05-10 16:57:24 +0000 (Tue, 10 May 2011) Log Message: ----------- Fix NH-2697 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Engine/ISessionFactoryImplementor.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/PolymorphicQuerySourceDetector.cs trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/ArticleGroupItem.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/ArticleItem.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/SampleTest.cs Modified: trunk/nhibernate/src/NHibernate/Engine/ISessionFactoryImplementor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/ISessionFactoryImplementor.cs 2011-05-09 22:21:23 UTC (rev 5806) +++ trunk/nhibernate/src/NHibernate/Engine/ISessionFactoryImplementor.cs 2011-05-10 16:57:24 UTC (rev 5807) @@ -86,9 +86,9 @@ /// <summary> /// Get the names of all persistent classes that implement/extend the given interface/class /// </summary> - /// <param name="className"></param> - /// <returns></returns> - string[] GetImplementors(string className); + /// <param name="entityOrClassName">The entity-name, the class name or full name, the imported class name.</param> + /// <returns>All implementors class names.</returns> + string[] GetImplementors(string entityOrClassName); /// <summary> /// Get a class name, using query language imports Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/PolymorphicQuerySourceDetector.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/PolymorphicQuerySourceDetector.cs 2011-05-09 22:21:23 UTC (rev 5806) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/PolymorphicQuerySourceDetector.cs 2011-05-10 16:57:24 UTC (rev 5807) @@ -20,34 +20,31 @@ _sessionFactoryHelper = new SessionFactoryHelper(sfi); } - public Dictionary<IASTNode, IASTNode[]> Process(IASTNode tree) - { - foreach (var querySource in new QuerySourceDetector(tree).LocateQuerySources()) - { - var className = GetClassName(querySource); - var classType = _sessionFactoryHelper.GetImportedClass(className); + public Dictionary<IASTNode, IASTNode[]> Process(IASTNode tree) + { + foreach (var querySource in new QuerySourceDetector(tree).LocateQuerySources()) + { + var className = GetClassName(querySource); + string[] implementors = _sfi.GetImplementors(className); + AddImplementorsToMap(querySource, className, implementors); + } - AddImplementorsToMap(querySource, classType == null ? className : classType.FullName); - } + return _map; + } - return _map; - } + private void AddImplementorsToMap(IASTNode querySource, string className, string[] implementors) + { + if (implementors.Length == 1 && implementors[0] == className) + { + // No need to change things + return; + } - private void AddImplementorsToMap(IASTNode querySource, string className) - { - var implementors = _sfi.GetImplementors(className); + _map.Add(querySource, + implementors.Select(implementor => MakeIdent(querySource, implementor)).ToArray()); + } - if (implementors.Length == 1 && implementors[0] == className) - { - // No need to change things - return; - } - - _map.Add(querySource, - implementors.Select(implementor => MakeIdent(querySource, implementor)).ToArray()); - } - - private static string GetClassName(IASTNode querySource) + private static string GetClassName(IASTNode querySource) { switch (querySource.Type) { Modified: trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs 2011-05-09 22:21:23 UTC (rev 5806) +++ trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs 2011-05-10 16:57:24 UTC (rev 5807) @@ -588,22 +588,22 @@ /// given class or interface, accounting for implicit/explicit polymorphism settings /// and excluding mapped subclasses/joined-subclasses of other classes in the result. /// </summary> - public string[] GetImplementors(string className) + public string[] GetImplementors(string entityOrClassName) { System.Type clazz = null; // NH Different implementation for performance: a class without at least a namespace sure can't be found by reflection - if (className.IndexOf('.') > 0) + if (entityOrClassName.IndexOf('.') > 0) { IEntityPersister checkPersister; // NH Different implementation: we have better performance checking, first of all, if we know the class // and take the System.Type directly from the persister (className have high probability to be entityName) - if (entityPersisters.TryGetValue(className, out checkPersister)) + if (entityPersisters.TryGetValue(entityOrClassName, out checkPersister)) { if(!checkPersister.EntityMetamodel.HasPocoRepresentation) { // we found the persister but it is a dynamic entity without class - return new[] { className }; + return new[] { entityOrClassName }; } // NH : take care with this because we are forcing the Poco EntityMode clazz = checkPersister.GetMappedClass(EntityMode.Poco); @@ -613,7 +613,7 @@ { try { - clazz = ReflectHelper.ClassForFullNameOrNull(className); + clazz = ReflectHelper.ClassForFullNameOrNull(entityOrClassName); } catch (Exception) { @@ -624,29 +624,40 @@ if (clazz == null) { - return new[] {className}; //for a dynamic-class + // try to get the class from imported names + string importedName = GetImportedClassName(entityOrClassName); + if (importedName != null) + { + clazz = System.Type.GetType(importedName, false); + } } + if (clazz == null) + { + return new[] {entityOrClassName}; //for a dynamic-class + } + List<string> results = new List<string>(); foreach (IEntityPersister p in entityPersisters.Values) { IQueryable q = p as IQueryable; if (q != null) { - string testClassName = q.EntityName; - bool isMappedClass = className.Equals(testClassName); + string registeredEntityName = q.EntityName; + // NH: as entity-name we are using the FullName but in HQL we allow just the Name, the class is mapped even when its FullName match the entity-name + bool isMappedClass = entityOrClassName.Equals(registeredEntityName) || clazz.FullName.Equals(registeredEntityName); if (q.IsExplicitPolymorphism) { if (isMappedClass) { - return new string[] {testClassName}; // NOTE EARLY EXIT + return new string[] {registeredEntityName}; // NOTE EARLY EXIT } } else { if (isMappedClass) { - results.Add(testClassName); + results.Add(registeredEntityName); } else { @@ -665,7 +676,7 @@ } if (!assignableSuperclass) { - results.Add(testClassName); + results.Add(registeredEntityName); } } } Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/ArticleGroupItem.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/ArticleGroupItem.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/ArticleGroupItem.cs 2011-05-10 16:57:24 UTC (rev 5807) @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace NHibernate.Test.NHSpecificTest.NH2697 +{ + public class ArticleGroupItem + { + public virtual int Articlegroupid { get; set; } + public virtual string Name { get; set; } + } +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/ArticleItem.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/ArticleItem.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/ArticleItem.cs 2011-05-10 16:57:24 UTC (rev 5807) @@ -0,0 +1,15 @@ + + +using System; +namespace NHibernate.Test.NHSpecificTest.NH2697 + +{ + public class ArticleItem + { + public virtual int Articleid { get; set; } + public virtual Int16 IsFavorite { get; set; } + public virtual string Name { get; set; } + public virtual ArticleGroupItem Articlegroup { get; set; } + + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/Mappings.hbm.xml 2011-05-10 16:57:24 UTC (rev 5807) @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8" ?> + +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test" namespace="NHibernate.Test.NHSpecificTest.NH2697"> + + <class name="ArticleItem" table="ARTICLES" lazy="true" dynamic-update="true" + entity-name="Article" polymorphism="explicit"> + <id name="Articleid" column="ARTICLEID" type="int" unsaved-value="0"> + <generator class="native" > + <param name="sequence">gen_articles_id</param> + </generator> + </id> + <property name="IsFavorite" column="ISFAVORITE" type="short" not-null="true"/> + <many-to-one name="Articlegroup" column="ARTICLEGROUPID" class="ArticleGroupItem" cascade="none" not-null="false"/> + <property name="Name" column="NAME" type="string" length="200" not-null="false"/> + </class> + + <class name="ArticleItem" table="ACTIVITY_ARTICLES" lazy="true" dynamic-update="true" + entity-name="ActivityArticle" polymorphism="explicit"> + <id name="Articleid" column="ARTICLEID" type="int" unsaved-value="0"> + <generator class="native" > + <param name="sequence">gen_articles_id</param> + </generator> + </id> + <property name="Name" column="NAME" type="string" length="200" not-null="false"/> + </class> + + <class name="ArticleGroupItem" table="ARTICLEGROUPS" lazy="true" dynamic-update="true"> + <id name="Articlegroupid" column="ARTICLEGROUPID" type="int" unsaved-value="0"> + <generator class="native" > + <param name="sequence">gen_pk_ArticleGroups</param> + </generator> + </id> + <property name="Name" column="NAME" type="string" length="200" not-null="false"/> + </class> + +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/SampleTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/SampleTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2697/SampleTest.cs 2011-05-10 16:57:24 UTC (rev 5807) @@ -0,0 +1,149 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using NHibernate.Dialect; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.NHSpecificTest.NH2697 +{ + [TestFixture] + public class SampleTest : BugTestCase + { + protected override void OnSetUp() + { + base.OnSetUp(); + using (ISession session = this.OpenSession()) { + ArticleGroupItem agrp_1 = new ArticleGroupItem(); + agrp_1.Name = "Article group 1"; + session.Save(agrp_1); + ArticleGroupItem agrp_2 = new ArticleGroupItem(); + agrp_2.Name = "Article group 2"; + session.Save(agrp_2); + session.Flush(); + + ArticleItem article_1 = new ArticleItem(); + article_1.Articlegroup = agrp_1; + article_1.Name = "Article 1 grp 1"; + article_1.IsFavorite = 0; + session.Save("Article", article_1); + + ArticleItem article_2 = new ArticleItem(); + article_2.Articlegroup = agrp_1; + article_2.Name = "Article 2 grp 1"; + article_2.IsFavorite = 1; + session.Save("Article", article_2); + + ArticleItem article_3 = new ArticleItem(); + article_3.Articlegroup = agrp_2; + article_3.Name = "Article 1 grp 2"; + article_3.IsFavorite = 0; + session.Save("Article", article_3); + + session.Flush(); + } + } + + protected override void OnTearDown() + { + base.OnTearDown(); + + + using (ISession session = this.OpenSession()) { + IList<ArticleItem> list = session.CreateCriteria("Article").List<ArticleItem>(); + foreach (ArticleItem item in list) + session.Delete("Article", item); + session.Flush(); + } + + //Articles where not removed (!?) + //using (ISession session = this.OpenSession()) { + // string hql = "from Article"; + // session.Delete(hql); + // session.Flush(); + //} + + using (ISession session = this.OpenSession()) { + string hql = "from ArticleGroupItem"; + session.Delete(hql); + session.Flush(); + } + + } + + [Test] + public void Can_GetListOfArticleGroups() + { + string HQL; + IList<ArticleGroupItem> result; + + //add new + using (ISession session = this.OpenSession()) { + ArticleGroupItem item = new ArticleGroupItem(); + item.Name = "Test article group"; + session.Save(item); + session.Flush(); + } + + HQL = "from ArticleGroupItem"; + using (ISession session = this.OpenSession()) { + result = session.CreateQuery(HQL).List<ArticleGroupItem>(); + } + result.Count.Should().Be.GreaterThan(0); + } + + [Test] + public void Can_GetListOfArticles() + { + string HQL; + IList<ArticleItem> result; + + //add new + using (ISession session = this.OpenSession()) { + ArticleItem item = new ArticleItem(); + item.Name = "Test article"; + item.IsFavorite = 0; + session.Save("Article", item); + session.Flush(); + } + + //here first problem, no entities are returned <======== + HQL = "from Article"; + using (ISession session = this.OpenSession()) { + result = session.CreateQuery(HQL).List<ArticleItem>(); + } + result.Count.Should().Be.GreaterThan(0); + } + + + + [Test] + public void Can_SetArticleFavoriteWithHQL_NamedParam() + { + string HQL; + IList<ArticleItem> result; + + Int16 isFavValue = 1; + + //set isFavorite for all articles + HQL = "update Article a set a.IsFavorite= :Fav"; + using (ISession session = this.OpenSession()) { + session.CreateQuery(HQL) + .SetInt16("Fav", isFavValue) //Exception !! + //.SetParameter("Fav", isFavValue) //Exception also !! + .ExecuteUpdate(); + + session.Flush(); + } + + //Check if some articles have isFavorite=1 + HQL = "from Article a where a.IsFavorite=1"; + using (ISession session = this.OpenSession()) { + result = session.CreateQuery(HQL).List<ArticleItem>(); + } + result.Count.Should().Be.GreaterThan(0); + + } + } +} Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-09 22:21:23 UTC (rev 5806) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-10 16:57:24 UTC (rev 5807) @@ -819,6 +819,9 @@ <Compile Include="NHSpecificTest\NH2660And2661\Test.cs" /> <Compile Include="NHSpecificTest\NH2673\Blog.cs" /> <Compile Include="NHSpecificTest\NH2673\CachingWithTrasformerTests.cs" /> + <Compile Include="NHSpecificTest\NH2697\ArticleGroupItem.cs" /> + <Compile Include="NHSpecificTest\NH2697\ArticleItem.cs" /> + <Compile Include="NHSpecificTest\NH2697\SampleTest.cs" /> <Compile Include="NHSpecificTest\Properties\CompositePropertyRefTest.cs" /> <Compile Include="NHSpecificTest\Properties\DynamicEntityTest.cs" /> <Compile Include="NHSpecificTest\Properties\Model.cs" /> @@ -2661,6 +2664,7 @@ <EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" /> </ItemGroup> <ItemGroup> + <EmbeddedResource Include="NHSpecificTest\NH2697\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1642\Mappings.hbm.xml" /> <EmbeddedResource Include="Stateless\Contact.hbm.xml" /> <EmbeddedResource Include="Stateless\Fetching\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-09 22:21:29
|
Revision: 5806 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5806&view=rev Author: fabiomaulo Date: 2011-05-09 22:21:23 +0000 (Mon, 09 May 2011) Log Message: ----------- Minor clean Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Fixture.cs Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Fixture.cs 2011-05-09 22:19:18 UTC (rev 5805) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Fixture.cs 2011-05-09 22:21:23 UTC (rev 5806) @@ -1,4 +1,3 @@ -using System; using NHibernate.Cfg.MappingSchema; using NHibernate.Mapping.ByCode; using NUnit.Framework; @@ -22,7 +21,6 @@ mapper.Class<Class1>(r => { r.IdBag(x => x.Class2List, map => map.Inverse(true), rel => rel.ManyToMany()); }); mapper.Class<Class2>(r => { r.IdBag<Class1>("_class1List", map => { }, rel => rel.ManyToMany()); }); HbmMapping mappings = mapper.CompileMappingFor(new[] {typeof (Class1), typeof (Class2)}); - Console.WriteLine(mappings.AsString()); return mappings; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-09 22:19:25
|
Revision: 5805 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5805&view=rev Author: fabiomaulo Date: 2011-05-09 22:19:18 +0000 (Mon, 09 May 2011) Log Message: ----------- Passing test for NH-2100 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ConventionModelMapper.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Domain.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Fixture.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ConventionModelMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ConventionModelMapper.cs 2011-05-09 21:20:24 UTC (rev 5804) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ConventionModelMapper.cs 2011-05-09 22:19:18 UTC (rev 5805) @@ -29,14 +29,19 @@ BeforeMapComponent += ComponentParentNoSetterToField; BeforeMapBag += MemberToFieldAccessor; + BeforeMapIdBag += MemberToFieldAccessor; BeforeMapSet += MemberToFieldAccessor; BeforeMapMap += MemberToFieldAccessor; BeforeMapList += MemberToFieldAccessor; + BeforeMapBag += MemberNoSetterToField; + BeforeMapIdBag += MemberNoSetterToField; BeforeMapSet += MemberNoSetterToField; BeforeMapMap += MemberNoSetterToField; BeforeMapList += MemberNoSetterToField; + BeforeMapBag += MemberReadOnlyAccessor; + BeforeMapIdBag += MemberReadOnlyAccessor; BeforeMapSet += MemberReadOnlyAccessor; BeforeMapMap += MemberReadOnlyAccessor; BeforeMapList += MemberReadOnlyAccessor; Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Domain.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Domain.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Domain.cs 2011-05-09 22:19:18 UTC (rev 5805) @@ -0,0 +1,60 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; + +namespace NHibernate.Test.NHSpecificTest.NH2100 +{ + public abstract class DomainObject + { + public virtual int ID { get; set; } + public virtual int EntityVersion { get; set; } + } + + public class Class1 : DomainObject + { + private readonly IList<Class2> _class2List = new List<Class2>(); + + public virtual void AddClass2(Class2 toAdd) + { + if (false == _class2List.Contains(toAdd)) + { + _class2List.Add(toAdd); + toAdd.AddClass1(this); + } + } + + public virtual ReadOnlyCollection<Class2> Class2List + { + get { return new ReadOnlyCollection<Class2>(_class2List); } + } + } + + public class Class1DTO : DTO + { + public Class2DTO[] Class2Ary { get; set; } + } + + /// <summary> + /// RG + /// </summary> + public class Class2 : DomainObject + { + private readonly IList<Class1> _class1List = new List<Class1>(); + + public virtual void AddClass1(Class1 toAdd) + { + if (false == _class1List.Contains(toAdd)) + { + _class1List.Add(toAdd); + toAdd.AddClass2(this); + } + } + } + + public class Class2DTO : DTO { } + + public abstract class DTO + { + public int ID; + public int EntityVersion; + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2100/Fixture.cs 2011-05-09 22:19:18 UTC (rev 5805) @@ -0,0 +1,121 @@ +using System; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.NHSpecificTest.NH2100 +{ + public class Fixture : TestCaseMappingByCode + { + protected override HbmMapping GetMappings() + { + var mapper = new ConventionModelMapper(); + System.Type baseEntityType = typeof (DomainObject); + mapper.IsEntity((t, declared) => baseEntityType.IsAssignableFrom(t) && !baseEntityType.Equals(t)); + mapper.IsRootEntity((t, declared) => baseEntityType.Equals(t.BaseType)); + mapper.Class<DomainObject>(r => + { + r.Version(x => x.EntityVersion, map => { }); + r.Id(x => x.ID, map => map.Generator(Generators.Native)); + }); + mapper.Class<Class1>(r => { r.IdBag(x => x.Class2List, map => map.Inverse(true), rel => rel.ManyToMany()); }); + mapper.Class<Class2>(r => { r.IdBag<Class1>("_class1List", map => { }, rel => rel.ManyToMany()); }); + HbmMapping mappings = mapper.CompileMappingFor(new[] {typeof (Class1), typeof (Class2)}); + Console.WriteLine(mappings.AsString()); + return mappings; + } + + [Test] + public void WhenTwoTransactionInSameSessionThenNotChangeVersion() + { + // the second transaction does not change the entity state + Class1 c1_1; + Class1 c1_2; + Class2 c2_1; + Class2 c2_2; + int originalVersionC1_1; + int originalVersionC1_2; + int originalVersionC2_1; + int originalVersionC2_2; + c1_1 = new Class1(); + c1_2 = new Class1(); + + c2_1 = new Class2(); + c2_2 = new Class2(); + + c1_1.AddClass2(c2_1); + c1_2.AddClass2(c2_2); + using (ISession s = OpenSession()) + { + using (ITransaction tx = s.BeginTransaction()) + { + s.Save(c2_1); + s.Save(c1_1); + s.Save(c2_2); + s.Save(c1_2); + tx.Commit(); + } + originalVersionC1_1 = c1_1.EntityVersion; + originalVersionC1_2 = c1_2.EntityVersion; + originalVersionC2_1 = c2_1.EntityVersion; + originalVersionC2_2 = c2_2.EntityVersion; + + using (ITransaction tx = s.BeginTransaction()) + { + s.Refresh(c1_1); // The addition of these two Refresh calls fixes the entity version issue + s.Refresh(c1_2); + + var class1dto = + new Class1DTO {ID = c1_1.ID, EntityVersion = c1_1.EntityVersion}; + + if (c1_1.Class2List.Count > 0) + { + class1dto.Class2Ary = new Class2DTO[c1_1.Class2List.Count]; + for (int i = 0; i < c1_1.Class2List.Count; ++i) + { + Class2 cl2 = c1_1.Class2List[i]; + class1dto.Class2Ary[i] = new Class2DTO {ID = cl2.ID, EntityVersion = cl2.EntityVersion}; + } + } + + tx.Commit(); + } + // After close the second transaction the version was not changed + c1_1.EntityVersion.Should().Be(originalVersionC1_1); + c1_2.EntityVersion.Should().Be(originalVersionC1_2); + c2_1.EntityVersion.Should().Be(originalVersionC2_1); + c2_2.EntityVersion.Should().Be(originalVersionC2_2); + } + + // After close the session the version was not changed + c1_1.EntityVersion.Should().Be(originalVersionC1_1); + c1_2.EntityVersion.Should().Be(originalVersionC1_2); + c2_1.EntityVersion.Should().Be(originalVersionC2_1); + c2_2.EntityVersion.Should().Be(originalVersionC2_2); + + using (ISession s = OpenSession()) + { + using (ITransaction tx = s.BeginTransaction()) + { + c2_1 = s.Get<Class2>(c2_1.ID); + c1_1 = s.Get<Class1>(c1_1.ID); + c2_2 = s.Get<Class2>(c2_2.ID); + c1_2 = s.Get<Class1>(c1_2.ID); + + // to be 100% sure the version was not changed in DB + c1_1.EntityVersion.Should().Be(originalVersionC1_1); + c1_2.EntityVersion.Should().Be(originalVersionC1_2); + c2_1.EntityVersion.Should().Be(originalVersionC2_1); + c2_2.EntityVersion.Should().Be(originalVersionC2_2); + + s.Delete(c2_1); + s.Delete(c1_1); + s.Delete(c2_2); + s.Delete(c1_2); + tx.Commit(); + } + } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-09 21:20:24 UTC (rev 5804) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-09 22:19:18 UTC (rev 5805) @@ -662,6 +662,8 @@ <Compile Include="NHSpecificTest\NH2043\Domain.cs" /> <Compile Include="NHSpecificTest\NH2043\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2056\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2100\Domain.cs" /> + <Compile Include="NHSpecificTest\NH2100\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2111\A.cs" /> <Compile Include="NHSpecificTest\NH2111\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2112\Fixture.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2011-05-09 21:20:30
|
Revision: 5804 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5804&view=rev Author: fabiomaulo Date: 2011-05-09 21:20:24 +0000 (Mon, 09 May 2011) Log Message: ----------- Passing test for NH-1965 Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1965/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1965/ReattachWithCollectionTest.cs Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1965/ReattachWithCollectionTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1965/ReattachWithCollectionTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1965/ReattachWithCollectionTest.cs 2011-05-09 21:20:24 UTC (rev 5804) @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.NHSpecificTest.NH1965 +{ + public class Cat + { + public Cat() + { + Children = new List<Cat>(); + } + public virtual int Id { get; set; } + public virtual IList<Cat> Children { get; set; } + } + + public class ReattachWithCollectionTest: TestCaseMappingByCode + { + protected override HbmMapping GetMappings() + { + var mapper = new ModelMapper(); + // Note: DeleteOrphans has no sense, only added to match the case reported. + mapper.Class<Cat>(cm => + { + cm.Id(x => x.Id, map => map.Generator(Generators.Identity)); + cm.Bag(x => x.Children, map => map.Cascade(Mapping.ByCode.Cascade.All.Include(Mapping.ByCode.Cascade.DeleteOrphans)), rel => rel.OneToMany()); + }); + var mappings = mapper.CompileMappingForAllExplicitAddedEntities(); + return mappings; + } + + [Test] + public void WhenReattachThenNotThrows() + { + var cat = new Cat(); + using (var session = OpenSession()) + using (session.BeginTransaction()) + { + session.Save(cat); + session.Transaction.Commit(); + } + + using (var session = OpenSession()) + { + session.Executing(x => x.Lock(cat, LockMode.None)).NotThrows(); + } + + using (var session = OpenSession()) + using (session.BeginTransaction()) + { + session.Delete(cat); + session.Transaction.Commit(); + } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-09 16:05:57 UTC (rev 5803) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-09 21:20:24 UTC (rev 5804) @@ -656,6 +656,7 @@ <Compile Include="NHSpecificTest\NH1869\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1925\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1925\Model.cs" /> + <Compile Include="NHSpecificTest\NH1965\ReattachWithCollectionTest.cs" /> <Compile Include="NHSpecificTest\NH2037\Domain.cs" /> <Compile Include="NHSpecificTest\NH2037\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2043\Domain.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |