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);
+ hbm...@cl...().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" }));
+ hbm...@cl...().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);
+ hbm...@cl...().Be.EqualTo("guid");
+ }
+
+ [Test]
+ public void CanSetGeneratorGuidComb()
+ {
+ var hbmId = new HbmId();
+ new IdMapper(hbmId).Generator(Generators.GuidComb);
+ hbm...@cl...().Be.EqualTo("guid.comb");
+ }
+
+ [Test]
+ public void CanSetGeneratorSequence()
+ {
+ var hbmId = new HbmId();
+ new IdMapper(hbmId).Generator(Generators.Sequence);
+ hbm...@cl...().Be.EqualTo("sequence");
+ }
+
+ [Test]
+ public void CanSetGeneratorIdentity()
+ {
+ var hbmId = new HbmId();
+ new IdMapper(hbmId).Generator(Generators.Identity);
+ hbm...@cl...().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));
+ hbm...@cl...().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);
+ hbm...@cl...().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.
|