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: <fab...@us...> - 2011-04-02 19:14:14
|
Revision: 5578
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5578&view=rev
Author: fabiomaulo
Date: 2011-04-02 19:14:08 +0000 (Sat, 02 Apr 2011)
Log Message:
-----------
union-subclass classes registration
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/UnionSubclassMappingStrategyTests.cs
Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs 2011-04-02 19:06:54 UTC (rev 5577)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs 2011-04-02 19:14:08 UTC (rev 5578)
@@ -155,7 +155,7 @@
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered as root-entity and as subclass for table-per-class strategy", type.FullName));
}
- if (IsMappedFor(tablePerClassHierarchyEntities, type))
+ if (IsMappedFor(tablePerClassHierarchyEntities, type) || IsMappedFor(tablePerConcreteClassEntities, type))
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered with more than one class-hierarchy strategy", type.FullName));
}
@@ -172,7 +172,7 @@
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered as root-entity and as subclass for table-per-class-hierarchy strategy", type.FullName));
}
- if (IsMappedFor(tablePerClassEntities, type) || tablePerClassHierarchyJoinEntities.Contains(type))
+ if (IsMappedFor(tablePerClassEntities, type) || tablePerClassHierarchyJoinEntities.Contains(type) || IsMappedFor(tablePerConcreteClassEntities, type))
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered with more than one class-hierarchy strategy", type.FullName));
}
@@ -189,7 +189,7 @@
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered as root-entity and as subclass for table-per-class-hierarchy strategy", type.FullName));
}
- if (IsMappedFor(tablePerClassEntities, type) || IsMappedFor(tablePerClassHierarchyEntities, type))
+ if (IsMappedFor(tablePerClassEntities, type) || IsMappedFor(tablePerClassHierarchyEntities, type) || IsMappedFor(tablePerConcreteClassEntities, type))
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered with more than one class-hierarchy strategy", type.FullName));
}
@@ -345,7 +345,7 @@
public bool IsTablePerConcreteClass(System.Type type)
{
- return tablePerConcreteClassEntities.Contains(type);
+ return IsMappedFor(tablePerConcreteClassEntities, type);
}
public bool IsOneToOne(MemberInfo member)
Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/UnionSubclassMappingStrategyTests.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/UnionSubclassMappingStrategyTests.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/UnionSubclassMappingStrategyTests.cs 2011-04-02 19:14:08 UTC (rev 5578)
@@ -0,0 +1,78 @@
+using NHibernate.Mapping.ByCode;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.MappingByCode.ExplicitlyDeclaredModelTests
+{
+ public class UnionSubclassMappingStrategyTests
+ {
+ private class MyClass
+ {
+
+ }
+ private class Inherited1 : MyClass
+ {
+
+ }
+ private class Inherited2 : Inherited1
+ {
+
+ }
+
+ [Test]
+ public void WhenRegisteredAsUnionSubclassThenIsRegistered()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerConcreteClassEntity(typeof(Inherited1));
+
+ inspector.IsTablePerClass(typeof(Inherited1)).Should().Be.False();
+ inspector.IsTablePerClassHierarchy(typeof(Inherited1)).Should().Be.False();
+ inspector.IsTablePerClassHierarchyJoin(typeof(Inherited1)).Should().Be.False();
+ inspector.IsTablePerConcreteClass(typeof(Inherited1)).Should().Be.True();
+ }
+
+ [Test]
+ public void WhenRegisteredAsDeepUnionSubclassThenIsRegistered()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerConcreteClassEntity(typeof(Inherited2));
+
+ inspector.IsTablePerClass(typeof(Inherited2)).Should().Be.False();
+ inspector.IsTablePerClassHierarchy(typeof(Inherited2)).Should().Be.False();
+ inspector.IsTablePerClassHierarchyJoin(typeof(Inherited2)).Should().Be.False();
+ inspector.IsTablePerConcreteClass(typeof(Inherited2)).Should().Be.True();
+ }
+
+ [Test]
+ public void WhenRegisteredAsUnionSubclassThenCantRegisterAsSubclass()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerConcreteClassEntity(typeof(Inherited1));
+
+ inspector.Executing(x => x.AddAsTablePerClassHierarchyEntity(typeof(Inherited1))).Throws<MappingException>();
+ }
+
+ [Test]
+ public void WhenRegisteredAsUnionSubclassThenCantRegisterAsSubclassJoin()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerConcreteClassEntity(typeof(Inherited1));
+
+ inspector.Executing(x => x.AddAsTablePerClassHierarchyJoinEntity(typeof(Inherited1))).Throws<MappingException>();
+ }
+
+ [Test]
+ public void WhenRegisteredAsUnionSubclassThenCantRegisterAsJoinedSubclass()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerConcreteClassEntity(typeof(Inherited1));
+
+ inspector.Executing(x => x.AddAsTablePerClassEntity(typeof(Inherited1))).Throws<MappingException>();
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-02 19:06:54 UTC (rev 5577)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-02 19:14:08 UTC (rev 5578)
@@ -512,6 +512,7 @@
<Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\RootClassMappingStrategyTests.cs" />
<Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\SubclassJoinMappingStrategyTests.cs" />
<Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\SubclassMappingStrategyTests.cs" />
+ <Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\UnionSubclassMappingStrategyTests.cs" />
<Compile Include="MappingByCode\MappingOfPrivateMembersOnRootEntity.cs" />
<Compile Include="NHSpecificTest\AccessAndCorrectPropertyName\Fixture.cs" />
<Compile Include="NHSpecificTest\AccessAndCorrectPropertyName\Model.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fab...@us...> - 2011-04-02 19:07:01
|
Revision: 5577
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5577&view=rev
Author: fabiomaulo
Date: 2011-04-02 19:06:54 +0000 (Sat, 02 Apr 2011)
Log Message:
-----------
subclass-join classes registration
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/SubclassJoinMappingStrategyTests.cs
Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs 2011-04-02 18:58:51 UTC (rev 5576)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs 2011-04-02 19:06:54 UTC (rev 5577)
@@ -172,7 +172,7 @@
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered as root-entity and as subclass for table-per-class-hierarchy strategy", type.FullName));
}
- if(IsMappedFor(tablePerClassEntities, type))
+ if (IsMappedFor(tablePerClassEntities, type) || tablePerClassHierarchyJoinEntities.Contains(type))
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered with more than one class-hierarchy strategy", type.FullName));
}
Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/SubclassJoinMappingStrategyTests.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/SubclassJoinMappingStrategyTests.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/SubclassJoinMappingStrategyTests.cs 2011-04-02 19:06:54 UTC (rev 5577)
@@ -0,0 +1,78 @@
+using NHibernate.Mapping.ByCode;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.MappingByCode.ExplicitlyDeclaredModelTests
+{
+ public class SubclassJoinMappingStrategyTests
+ {
+ private class MyClass
+ {
+
+ }
+ private class Inherited1 : MyClass
+ {
+
+ }
+ private class Inherited2 : Inherited1
+ {
+
+ }
+
+ [Test]
+ public void WhenRegisteredAsSubclassJoinThenIsRegistered()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassHierarchyJoinEntity(typeof(Inherited1));
+
+ inspector.IsTablePerClass(typeof(Inherited1)).Should().Be.False();
+ inspector.IsTablePerClassHierarchy(typeof(Inherited1)).Should().Be.True();
+ inspector.IsTablePerClassHierarchyJoin(typeof(Inherited1)).Should().Be.True();
+ inspector.IsTablePerConcreteClass(typeof(Inherited1)).Should().Be.False();
+ }
+
+ [Test]
+ public void WhenRegisteredAsDeepSubclassJoinThenIsRegistered()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassHierarchyJoinEntity(typeof(Inherited2));
+
+ inspector.IsTablePerClass(typeof(Inherited2)).Should().Be.False();
+ inspector.IsTablePerClassHierarchy(typeof(Inherited2)).Should().Be.True();
+ inspector.IsTablePerClassHierarchyJoin(typeof(Inherited2)).Should().Be.True();
+ inspector.IsTablePerConcreteClass(typeof(Inherited2)).Should().Be.False();
+ }
+
+ [Test]
+ public void WhenRegisteredAsSubclassJoinThenCantRegisterAsJoinedSubclass()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassHierarchyJoinEntity(typeof(Inherited1));
+
+ inspector.Executing(x => x.AddAsTablePerClassEntity(typeof(Inherited1))).Throws<MappingException>();
+ }
+
+ [Test]
+ public void WhenRegisteredAsSubclassJoinThenCantRegisterAsSubclass()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassHierarchyJoinEntity(typeof(Inherited1));
+
+ inspector.Executing(x => x.AddAsTablePerClassHierarchyEntity(typeof(Inherited1))).Throws<MappingException>();
+ }
+
+ [Test]
+ public void WhenRegisteredAsSubclassJoinThenCantRegisterAsUnionSubclass()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassHierarchyJoinEntity(typeof(Inherited1));
+
+ inspector.Executing(x => x.AddAsTablePerConcreteClassEntity(typeof(Inherited1))).Throws<MappingException>();
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-02 18:58:51 UTC (rev 5576)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-02 19:06:54 UTC (rev 5577)
@@ -510,6 +510,7 @@
<Compile Include="MappingByCode\ColumnsNamingConvetions.cs" />
<Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\JoinedSubclassMappingStrategyTests.cs" />
<Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\RootClassMappingStrategyTests.cs" />
+ <Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\SubclassJoinMappingStrategyTests.cs" />
<Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\SubclassMappingStrategyTests.cs" />
<Compile Include="MappingByCode\MappingOfPrivateMembersOnRootEntity.cs" />
<Compile Include="NHSpecificTest\AccessAndCorrectPropertyName\Fixture.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fab...@us...> - 2011-04-02 18:58:57
|
Revision: 5576
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5576&view=rev
Author: fabiomaulo
Date: 2011-04-02 18:58:51 +0000 (Sat, 02 Apr 2011)
Log Message:
-----------
subclasses registration
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/SubclassMappingStrategyTests.cs
Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs 2011-04-02 18:49:26 UTC (rev 5575)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs 2011-04-02 18:58:51 UTC (rev 5576)
@@ -155,6 +155,10 @@
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered as root-entity and as subclass for table-per-class strategy", type.FullName));
}
+ if (IsMappedFor(tablePerClassHierarchyEntities, type))
+ {
+ throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered with more than one class-hierarchy strategy", type.FullName));
+ }
tablePerClassEntities.Add(rootEntity);
}
}
@@ -185,7 +189,7 @@
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered as root-entity and as subclass for table-per-class-hierarchy strategy", type.FullName));
}
- if (IsMappedFor(tablePerClassEntities, type))
+ if (IsMappedFor(tablePerClassEntities, type) || IsMappedFor(tablePerClassHierarchyEntities, type))
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered with more than one class-hierarchy strategy", type.FullName));
}
@@ -203,7 +207,7 @@
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered as root-entity and as subclass for table-per-concrete-class strategy", type.FullName));
}
- if (IsMappedFor(tablePerClassEntities, type))
+ if (IsMappedFor(tablePerClassEntities, type) || IsMappedFor(tablePerClassHierarchyEntities, type))
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered with more than one class-hierarchy strategy", type.FullName));
}
@@ -331,7 +335,7 @@
public bool IsTablePerClassHierarchy(System.Type type)
{
- return tablePerClassHierarchyEntities.Contains(type);
+ return IsMappedFor(tablePerClassHierarchyEntities, type);
}
public bool IsTablePerClassHierarchyJoin(System.Type type)
Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/SubclassMappingStrategyTests.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/SubclassMappingStrategyTests.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/SubclassMappingStrategyTests.cs 2011-04-02 18:58:51 UTC (rev 5576)
@@ -0,0 +1,79 @@
+using NHibernate.Mapping.ByCode;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.MappingByCode.ExplicitlyDeclaredModelTests
+{
+ public class SubclassMappingStrategyTests
+ {
+ private class MyClass
+ {
+
+ }
+ private class Inherited1 : MyClass
+ {
+
+ }
+ private class Inherited2 : Inherited1
+ {
+
+ }
+
+ [Test]
+ public void WhenRegisteredAsSubclassThenIsRegistered()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassHierarchyEntity(typeof(Inherited1));
+
+ inspector.IsTablePerClass(typeof(Inherited1)).Should().Be.False();
+ inspector.IsTablePerClassHierarchy(typeof(Inherited1)).Should().Be.True();
+ inspector.IsTablePerClassHierarchyJoin(typeof(Inherited1)).Should().Be.False();
+ inspector.IsTablePerConcreteClass(typeof(Inherited1)).Should().Be.False();
+ }
+
+ [Test]
+ public void WhenRegisteredAsDeepSubclassThenIsRegistered()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassHierarchyEntity(typeof(Inherited2));
+
+ inspector.IsTablePerClass(typeof(Inherited2)).Should().Be.False();
+ inspector.IsTablePerClassHierarchy(typeof(Inherited2)).Should().Be.True();
+ inspector.IsTablePerClassHierarchyJoin(typeof(Inherited2)).Should().Be.False();
+ inspector.IsTablePerConcreteClass(typeof(Inherited2)).Should().Be.False();
+ }
+
+ [Test]
+ public void WhenRegisteredAsSubclassThenCantRegisterAsJoinedSubclass()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassHierarchyEntity(typeof(Inherited1));
+
+ inspector.Executing(x => x.AddAsTablePerClassEntity(typeof(Inherited1))).Throws<MappingException>();
+ }
+
+ [Test]
+ public void WhenRegisteredAsSubclassThenCantRegisterAsSubclassJoin()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassHierarchyEntity(typeof(Inherited1));
+
+ inspector.Executing(x => x.AddAsTablePerClassHierarchyJoinEntity(typeof(Inherited1))).Throws<MappingException>();
+ }
+
+ [Test]
+ public void WhenRegisteredAsSubclassThenCantRegisterAsUnionSubclass()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassHierarchyEntity(typeof(Inherited1));
+
+ inspector.Executing(x => x.AddAsTablePerConcreteClassEntity(typeof(Inherited1))).Throws<MappingException>();
+ }
+
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-02 18:49:26 UTC (rev 5575)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-02 18:58:51 UTC (rev 5576)
@@ -510,6 +510,7 @@
<Compile Include="MappingByCode\ColumnsNamingConvetions.cs" />
<Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\JoinedSubclassMappingStrategyTests.cs" />
<Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\RootClassMappingStrategyTests.cs" />
+ <Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\SubclassMappingStrategyTests.cs" />
<Compile Include="MappingByCode\MappingOfPrivateMembersOnRootEntity.cs" />
<Compile Include="NHSpecificTest\AccessAndCorrectPropertyName\Fixture.cs" />
<Compile Include="NHSpecificTest\AccessAndCorrectPropertyName\Model.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fab...@us...> - 2011-04-02 18:49:32
|
Revision: 5575
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5575&view=rev
Author: fabiomaulo
Date: 2011-04-02 18:49:26 +0000 (Sat, 02 Apr 2011)
Log Message:
-----------
joined subclasses registration
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/JoinedSubclassMappingStrategyTests.cs
Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs 2011-04-02 18:31:03 UTC (rev 5574)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs 2011-04-02 18:49:26 UTC (rev 5575)
@@ -168,6 +168,10 @@
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered as root-entity and as subclass for table-per-class-hierarchy strategy", type.FullName));
}
+ if(IsMappedFor(tablePerClassEntities, type))
+ {
+ throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered with more than one class-hierarchy strategy", type.FullName));
+ }
tablePerClassHierarchyEntities.Add(rootEntity);
}
}
@@ -181,6 +185,10 @@
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered as root-entity and as subclass for table-per-class-hierarchy strategy", type.FullName));
}
+ if (IsMappedFor(tablePerClassEntities, type))
+ {
+ throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered with more than one class-hierarchy strategy", type.FullName));
+ }
tablePerClassHierarchyEntities.Add(rootEntity);
}
tablePerClassHierarchyJoinEntities.Add(type);
@@ -195,6 +203,10 @@
{
throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered as root-entity and as subclass for table-per-concrete-class strategy", type.FullName));
}
+ if (IsMappedFor(tablePerClassEntities, type))
+ {
+ throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered with more than one class-hierarchy strategy", type.FullName));
+ }
tablePerConcreteClassEntities.Add(rootEntity);
}
}
@@ -314,7 +326,7 @@
public bool IsTablePerClass(System.Type type)
{
- return tablePerClassEntities.Contains(type);
+ return IsMappedFor(tablePerClassEntities, type);
}
public bool IsTablePerClassHierarchy(System.Type type)
@@ -426,5 +438,21 @@
}
return entityType.GetBaseTypes().SingleOrDefault(IsRootEntity);
}
+
+ protected bool IsMappedFor(ICollection<System.Type> explicitMappedEntities, System.Type type)
+ {
+ bool isExplicitMapped = explicitMappedEntities.Contains(type);
+ bool isDerived = false;
+
+ if (!isExplicitMapped)
+ {
+ isDerived = type.GetBaseTypes().Any(explicitMappedEntities.Contains);
+ if (isDerived)
+ {
+ explicitMappedEntities.Add(type);
+ }
+ }
+ return isExplicitMapped || isDerived;
+ }
}
}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/JoinedSubclassMappingStrategyTests.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/JoinedSubclassMappingStrategyTests.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/JoinedSubclassMappingStrategyTests.cs 2011-04-02 18:49:26 UTC (rev 5575)
@@ -0,0 +1,78 @@
+using NHibernate.Mapping.ByCode;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.MappingByCode.ExplicitlyDeclaredModelTests
+{
+ public class JoinedSubclassMappingStrategyTests
+ {
+ private class MyClass
+ {
+
+ }
+ private class Inherited1 : MyClass
+ {
+
+ }
+ private class Inherited2 : Inherited1
+ {
+
+ }
+
+ [Test]
+ public void WhenRegisteredAsJoinedSubclassThenIsRegistered()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassEntity(typeof(Inherited1));
+
+ inspector.IsTablePerClass(typeof(Inherited1)).Should().Be.True();
+ inspector.IsTablePerClassHierarchy(typeof(Inherited1)).Should().Be.False();
+ inspector.IsTablePerClassHierarchyJoin(typeof(Inherited1)).Should().Be.False();
+ inspector.IsTablePerConcreteClass(typeof(Inherited1)).Should().Be.False();
+ }
+
+ [Test]
+ public void WhenRegisteredAsDeppJoinedSubclassThenIsRegistered()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassEntity(typeof(Inherited2));
+
+ inspector.IsTablePerClass(typeof(Inherited2)).Should().Be.True();
+ inspector.IsTablePerClassHierarchy(typeof(Inherited2)).Should().Be.False();
+ inspector.IsTablePerClassHierarchyJoin(typeof(Inherited2)).Should().Be.False();
+ inspector.IsTablePerConcreteClass(typeof(Inherited2)).Should().Be.False();
+ }
+
+ [Test]
+ public void WhenRegisteredAsJoinedSubclassThenCantRegisterAsSubclass()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassEntity(typeof(Inherited1));
+
+ inspector.Executing(x => x.AddAsTablePerClassHierarchyEntity(typeof(Inherited1))).Throws<MappingException>();
+ }
+
+ [Test]
+ public void WhenRegisteredAsJoinedSubclassThenCantRegisterAsSubclassJoin()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassEntity(typeof(Inherited1));
+
+ inspector.Executing(x => x.AddAsTablePerClassHierarchyJoinEntity(typeof(Inherited1))).Throws<MappingException>();
+ }
+
+ [Test]
+ public void WhenRegisteredAsJoinedSubclassThenCantRegisterAsUnionSubclass()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassEntity(typeof(Inherited1));
+
+ inspector.Executing(x => x.AddAsTablePerConcreteClassEntity(typeof(Inherited1))).Throws<MappingException>();
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-02 18:31:03 UTC (rev 5574)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-02 18:49:26 UTC (rev 5575)
@@ -508,6 +508,7 @@
<Compile Include="Logging\LoggerProviderTest.cs" />
<Compile Include="MappingByCode\BasicMappingOfSimpleClass.cs" />
<Compile Include="MappingByCode\ColumnsNamingConvetions.cs" />
+ <Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\JoinedSubclassMappingStrategyTests.cs" />
<Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\RootClassMappingStrategyTests.cs" />
<Compile Include="MappingByCode\MappingOfPrivateMembersOnRootEntity.cs" />
<Compile Include="NHSpecificTest\AccessAndCorrectPropertyName\Fixture.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fab...@us...> - 2011-04-02 18:31:10
|
Revision: 5574
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5574&view=rev
Author: fabiomaulo
Date: 2011-04-02 18:31:03 +0000 (Sat, 02 Apr 2011)
Log Message:
-----------
Root classes registration
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/
trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/RootClassMappingStrategyTests.cs
Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs 2011-04-02 15:10:48 UTC (rev 5573)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs 2011-04-02 18:31:03 UTC (rev 5574)
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using System.Linq;
using System.Reflection;
namespace NHibernate.Mapping.ByCode
@@ -147,22 +148,55 @@
public void AddAsTablePerClassEntity(System.Type type)
{
- tablePerClassEntities.Add(type);
+ var rootEntity = GetRootEntityOrNull(type);
+ if(rootEntity != null)
+ {
+ if(rootEntity.Equals(type))
+ {
+ throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered as root-entity and as subclass for table-per-class strategy", type.FullName));
+ }
+ tablePerClassEntities.Add(rootEntity);
+ }
}
public void AddAsTablePerClassHierarchyEntity(System.Type type)
{
- tablePerClassHierarchyEntities.Add(type);
+ var rootEntity = GetRootEntityOrNull(type);
+ if (rootEntity != null)
+ {
+ if (rootEntity.Equals(type))
+ {
+ throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered as root-entity and as subclass for table-per-class-hierarchy strategy", type.FullName));
+ }
+ tablePerClassHierarchyEntities.Add(rootEntity);
+ }
}
public void AddAsTablePerClassHierarchyJoinEntity(System.Type type)
{
+ var rootEntity = GetRootEntityOrNull(type);
+ if (rootEntity != null)
+ {
+ if (rootEntity.Equals(type))
+ {
+ throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered as root-entity and as subclass for table-per-class-hierarchy strategy", type.FullName));
+ }
+ tablePerClassHierarchyEntities.Add(rootEntity);
+ }
tablePerClassHierarchyJoinEntities.Add(type);
}
public void AddAsTablePerConcreteClassEntity(System.Type type)
{
- tablePerConcreteClassEntities.Add(type);
+ var rootEntity = GetRootEntityOrNull(type);
+ if (rootEntity != null)
+ {
+ if (rootEntity.Equals(type))
+ {
+ throw new MappingException(string.Format("Abiguous mapping of {0}. It was registered as root-entity and as subclass for table-per-concrete-class strategy", type.FullName));
+ }
+ tablePerConcreteClassEntities.Add(rootEntity);
+ }
}
public void AddAsOneToOneRelation(MemberInfo member)
@@ -379,5 +413,18 @@
}
#endregion
+
+ private System.Type GetRootEntityOrNull(System.Type entityType)
+ {
+ if (entityType == null)
+ {
+ return null;
+ }
+ if (IsRootEntity(entityType))
+ {
+ return entityType;
+ }
+ return entityType.GetBaseTypes().SingleOrDefault(IsRootEntity);
+ }
}
}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/RootClassMappingStrategyTests.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/RootClassMappingStrategyTests.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/ExplicitlyDeclaredModelTests/RootClassMappingStrategyTests.cs 2011-04-02 18:31:03 UTC (rev 5574)
@@ -0,0 +1,158 @@
+using NHibernate.Mapping.ByCode;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.MappingByCode.ExplicitlyDeclaredModelTests
+{
+ public class RootClassMappingStrategyTests
+ {
+ private class MyClass
+ {
+
+ }
+ private class Inherited1: MyClass
+ {
+
+ }
+ private class Inherited2 : Inherited1
+ {
+
+ }
+
+ [Test]
+ public void WhenRegisteredAsRootThenDoesNotRegisterTheStrategy()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.IsTablePerClass(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerClassHierarchy(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerClassHierarchyJoin(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerConcreteClass(typeof(MyClass)).Should().Be.False();
+ }
+
+ [Test]
+ public void WhenRegisteredJoinedSubclassThenTheStrategyIsDefinedEvenForRoot()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassEntity(typeof(Inherited1));
+ inspector.IsTablePerClass(typeof(MyClass)).Should().Be.True();
+ inspector.IsTablePerClassHierarchy(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerClassHierarchyJoin(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerConcreteClass(typeof(MyClass)).Should().Be.False();
+ }
+
+ [Test]
+ public void WhenRegisteredJoinedDeepSubclassThenTheStrategyIsDefinedEvenForRoot()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassEntity(typeof(Inherited2));
+ inspector.IsTablePerClass(typeof(MyClass)).Should().Be.True();
+ inspector.IsTablePerClassHierarchy(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerClassHierarchyJoin(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerConcreteClass(typeof(MyClass)).Should().Be.False();
+ }
+
+ [Test]
+ public void WhenRegisteredSubclassThenTheStrategyIsDefinedEvenForRoot()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassHierarchyEntity(typeof(Inherited1));
+ inspector.IsTablePerClass(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerClassHierarchy(typeof(MyClass)).Should().Be.True();
+ inspector.IsTablePerClassHierarchyJoin(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerConcreteClass(typeof(MyClass)).Should().Be.False();
+ }
+
+ [Test]
+ public void WhenRegisteredDeepSubclassThenTheStrategyIsDefinedEvenForRoot()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassHierarchyEntity(typeof(Inherited2));
+
+ inspector.IsTablePerClass(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerClassHierarchy(typeof(MyClass)).Should().Be.True();
+ inspector.IsTablePerClassHierarchyJoin(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerConcreteClass(typeof(MyClass)).Should().Be.False();
+ }
+
+ [Test]
+ public void WhenRegisteredSubclassJoinThenTheStrategyIsDefinedEvenForRoot()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassHierarchyJoinEntity(typeof(Inherited1));
+
+ inspector.IsTablePerClass(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerClassHierarchy(typeof(MyClass)).Should().Be.True();
+ inspector.IsTablePerClassHierarchyJoin(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerConcreteClass(typeof(MyClass)).Should().Be.False();
+ }
+
+ [Test]
+ public void WhenRegisteredDeepSubclassJoinThenTheStrategyIsDefinedEvenForRoot()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerClassHierarchyJoinEntity(typeof(Inherited2));
+
+ inspector.IsTablePerClass(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerClassHierarchy(typeof(MyClass)).Should().Be.True();
+ inspector.IsTablePerClassHierarchyJoin(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerConcreteClass(typeof(MyClass)).Should().Be.False();
+ }
+
+ [Test]
+ public void WhenRegisteredConcreteClassThenTheStrategyIsDefinedEvenForRoot()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerConcreteClassEntity(typeof(Inherited1));
+
+ inspector.IsTablePerClass(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerClassHierarchy(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerClassHierarchyJoin(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerConcreteClass(typeof(MyClass)).Should().Be.True();
+ }
+
+ [Test]
+ public void WhenRegisteredDeepConcreteClassThenTheStrategyIsDefinedEvenForRoot()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.AddAsTablePerConcreteClassEntity(typeof(Inherited2));
+
+ inspector.IsTablePerClass(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerClassHierarchy(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerClassHierarchyJoin(typeof(MyClass)).Should().Be.False();
+ inspector.IsTablePerConcreteClass(typeof(MyClass)).Should().Be.True();
+ }
+
+ [Test]
+ public void WhenRegisteredAsRootThenCantRegisterAsSubclass()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.Executing(x=> x.AddAsTablePerClassEntity(typeof(MyClass))).Throws<MappingException>();
+ }
+
+ [Test]
+ public void WhenRegisteredAsRootThenCantRegisterAsJoinedSubclass()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.Executing(x => x.AddAsTablePerClassEntity(typeof(MyClass))).Throws<MappingException>();
+ }
+
+ [Test]
+ public void WhenRegisteredAsRootThenCantRegisterAsUnionSubclass()
+ {
+ var inspector = new ExplicitlyDeclaredModel();
+ inspector.AddAsRootEntity(typeof(MyClass));
+ inspector.Executing(x => x.AddAsTablePerClassEntity(typeof(MyClass))).Throws<MappingException>();
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-02 15:10:48 UTC (rev 5573)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-02 18:31:03 UTC (rev 5574)
@@ -508,6 +508,7 @@
<Compile Include="Logging\LoggerProviderTest.cs" />
<Compile Include="MappingByCode\BasicMappingOfSimpleClass.cs" />
<Compile Include="MappingByCode\ColumnsNamingConvetions.cs" />
+ <Compile Include="MappingByCode\ExplicitlyDeclaredModelTests\RootClassMappingStrategyTests.cs" />
<Compile Include="MappingByCode\MappingOfPrivateMembersOnRootEntity.cs" />
<Compile Include="NHSpecificTest\AccessAndCorrectPropertyName\Fixture.cs" />
<Compile Include="NHSpecificTest\AccessAndCorrectPropertyName\Model.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pa...@us...> - 2011-04-02 15:10:54
|
Revision: 5573
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5573&view=rev
Author: patearl
Date: 2011-04-02 15:10:48 +0000 (Sat, 02 Apr 2011)
Log Message:
-----------
Added missing PostgreSQL82TestDialect to test project file.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-01 17:11:05 UTC (rev 5572)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-02 15:10:48 UTC (rev 5573)
@@ -708,6 +708,7 @@
<Compile Include="Subselect\ClassSubselectFixture.cs" />
<Compile Include="Subselect\Domain.cs" />
<Compile Include="TestDialect.cs" />
+ <Compile Include="TestDialects\PostgreSQL82TestDialect.cs" />
<Compile Include="TestDialects\SQLiteTestDialect.cs" />
<Compile Include="TypesTest\CharClass.cs" />
<Compile Include="TypesTest\CharClassFixture.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fab...@us...> - 2011-04-01 17:11:15
|
Revision: 5572
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5572&view=rev
Author: fabiomaulo
Date: 2011-04-01 17:11:05 +0000 (Fri, 01 Apr 2011)
Log Message:
-----------
Initial upload mapping by code
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/NHibernate.csproj
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Mapping/ByCode/
trunk/nhibernate/src/NHibernate/Mapping/ByCode/CacheInclude.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/CacheUsage.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Cascade.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/CascadeExtensions.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/CollectionFetchMode.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/CollectionLazy.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/FakeModelExplicitDeclarationsHolder.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/FetchMode.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ForClass.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IAccessorPropertyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IAnyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IBagPropertiesMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICacheMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IClassMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionElementRelation.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionPropertiesMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionSqlsMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IColumnMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IColumnsMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentElementMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentMapKeyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentParentMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IDiscriminatorMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IElementMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IEntityAttributesMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IEntityPropertyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IEntitySqlsMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IFilterMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGenerator.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGeneratorDef.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGeneratorMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IIdMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IJoinedSubclassMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IKeyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IListIndexMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IListPropertiesMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IManyToManyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IManyToOneMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IMapKeyManyToManyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IMapKeyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IMapKeyRelation.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IMapPropertiesMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IModelExplicitDeclarationsHolder.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IModelInspector.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/INaturalIdMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IOneToManyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IOneToOneMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IPlainPropertyContainerMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IPropertyContainerMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IPropertyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ISetPropertiesMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ISubclassMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IUnionSubclassMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/IVersionMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/AbstractBasePropertyContainerMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/AbstractPropertyContainerMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/AccessorPropertyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/AnyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/BagMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CacheMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CascadeConverter.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ClassMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CollectionElementRelation.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ColumnMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ComponentElementMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ComponentMapKeyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ComponentMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ComponentNestedElementMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ComponentParentMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersHolder.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/BagPropertiesCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ClassCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/CollectionElementCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/CollectionElementRelationCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/CollectionKeyCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/CollectionPropertiesCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ComponentCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ComponentElementCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/JoinedSubclassCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/JoinedSubclassKeyCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ListPropertiesCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/ManyToManyCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/MapKeyComponentCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/MapKeyCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/MapKeyManyToManyCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/MapKeyRelationCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/MapPropertiesCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/OneToManyCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/PropertyContainerCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/SetPropertiesCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/SubclassCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/CustomizersImpl/UnionSubclassCustomizer.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/DefaultCandidatePersistentMembersProvider.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/DiscriminatorMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ElementMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/FilterMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/GeneratorMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/Generators.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ICandidatePersistentMembersProvider.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ICustomizersHolder.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/IdMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/JoinedSubclassMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/KeyManyToOneMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/KeyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/KeyPropertyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ListIndexMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ListMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ManyToManyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ManyToOneMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/MapKeyManyToManyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/MapKeyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/MapKeyRelation.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/MapMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/MapperEventsHandlersDefinitions.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/NaturalIdMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/NoMemberPropertyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/OneToManyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/OneToOneMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/PropertyMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/PropertyPath.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/PropertyPathExtensions.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/SetMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/SubclassMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/TypeNameUtil.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/UnionSubclassMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/VersionMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/Lazy.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/ModelMapper.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/NotFoundMode.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/SchemaAction.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/TypeExtensions.cs
trunk/nhibernate/src/NHibernate/Mapping/ByCode/VersionGeneration.cs
trunk/nhibernate/src/NHibernate.Test/MappingByCode/
trunk/nhibernate/src/NHibernate.Test/MappingByCode/BasicMappingOfSimpleClass.cs
trunk/nhibernate/src/NHibernate.Test/MappingByCode/ColumnsNamingConvetions.cs
trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappingOfPrivateMembersOnRootEntity.cs
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/CacheInclude.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/CacheInclude.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/CacheInclude.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,36 @@
+using NHibernate.Cfg.MappingSchema;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public abstract class CacheInclude
+ {
+ public static CacheInclude All = new AllCacheInclude();
+ public static CacheInclude NonLazy = new NonLazyCacheInclude();
+
+ public abstract HbmCacheInclude ToHbm();
+
+ #region Nested type: AllCacheInclude
+
+ public class AllCacheInclude : CacheInclude
+ {
+ public override HbmCacheInclude ToHbm()
+ {
+ return HbmCacheInclude.All;
+ }
+ }
+
+ #endregion
+
+ #region Nested type: NonLazyCacheInclude
+
+ public class NonLazyCacheInclude : CacheInclude
+ {
+ public override HbmCacheInclude ToHbm()
+ {
+ return HbmCacheInclude.NonLazy;
+ }
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/CacheUsage.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/CacheUsage.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/CacheUsage.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,62 @@
+using NHibernate.Cfg.MappingSchema;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public abstract class CacheUsage
+ {
+ public static CacheUsage ReadOnly = new ReadOnlyUsage();
+ public static CacheUsage ReadWrite = new ReadWriteUsage();
+ public static CacheUsage NonstrictReadWrite = new NonstrictReadWriteUsage();
+ public static CacheUsage Transactional = new TransactionalUsage();
+
+ public abstract HbmCacheUsage ToHbm();
+
+ #region Nested type: NonstrictReadWriteUsage
+
+ private class NonstrictReadWriteUsage : CacheUsage
+ {
+ public override HbmCacheUsage ToHbm()
+ {
+ return HbmCacheUsage.NonstrictReadWrite;
+ }
+ }
+
+ #endregion
+
+ #region Nested type: ReadOnlyUsage
+
+ private class ReadOnlyUsage : CacheUsage
+ {
+ public override HbmCacheUsage ToHbm()
+ {
+ return HbmCacheUsage.ReadOnly;
+ }
+ }
+
+ #endregion
+
+ #region Nested type: ReadWriteUsage
+
+ private class ReadWriteUsage : CacheUsage
+ {
+ public override HbmCacheUsage ToHbm()
+ {
+ return HbmCacheUsage.ReadWrite;
+ }
+ }
+
+ #endregion
+
+ #region Nested type: TransactionalUsage
+
+ private class TransactionalUsage : CacheUsage
+ {
+ public override HbmCacheUsage ToHbm()
+ {
+ return HbmCacheUsage.Transactional;
+ }
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Cascade.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Cascade.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Cascade.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,27 @@
+using System;
+
+namespace NHibernate.Mapping.ByCode
+{
+ /// <summary>
+ /// Defines behavior of soft-cascade actions.
+ /// </summary>
+ /// <remarks>
+ /// To check the content or to include/exclude values, from cascade, is strongly recommanded the usage of extensions methods defined in <see cref="CascadeExtensions"/>
+ /// </remarks>
+ /// <seealso cref="CascadeExtensions.Has"/>
+ /// <seealso cref="CascadeExtensions.Include"/>
+ /// <seealso cref="CascadeExtensions.Exclude"/>
+ [Flags]
+ public enum Cascade
+ {
+ None = 0,
+ Persist = 2,
+ Refresh = 4,
+ Merge = 8,
+ Remove = 16,
+ Detach = 32,
+ ReAttach = 64,
+ DeleteOrphans = 128,
+ All = 256,
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/CascadeExtensions.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/CascadeExtensions.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/CascadeExtensions.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,40 @@
+namespace NHibernate.Mapping.ByCode
+{
+ public static class CascadeExtensions
+ {
+ private const Cascade AnyButOrphans = Cascade.Persist | Cascade.Refresh | Cascade.Merge | Cascade.Remove | Cascade.Detach | Cascade.ReAttach;
+
+ public static bool Has(this Cascade source, Cascade value)
+ {
+ return (source & value) == value;
+ }
+
+ public static Cascade Include(this Cascade source, Cascade value)
+ {
+ return Cleanup(source | value);
+ }
+
+ private static Cascade Cleanup(Cascade cascade)
+ {
+ bool hasAll = cascade.Has(Cascade.All) || cascade.Has(AnyButOrphans);
+ if (hasAll && cascade.Has(Cascade.DeleteOrphans))
+ {
+ return Cascade.All | Cascade.DeleteOrphans;
+ }
+ if (hasAll)
+ {
+ return Cascade.All;
+ }
+ return cascade;
+ }
+
+ public static Cascade Exclude(this Cascade source, Cascade value)
+ {
+ if (source.Has(Cascade.All) && !value.Has(Cascade.All))
+ {
+ return Cleanup(((source & ~Cascade.All) | AnyButOrphans) & ~value);
+ }
+ return Cleanup(source & ~value);
+ }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/CollectionFetchMode.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/CollectionFetchMode.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/CollectionFetchMode.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,49 @@
+using NHibernate.Cfg.MappingSchema;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public abstract class CollectionFetchMode
+ {
+ public static CollectionFetchMode Select = new SelectFetchMode();
+ public static CollectionFetchMode Join = new JoinFetchMode();
+ public static CollectionFetchMode Subselect = new SubselectFetchMode();
+
+ public abstract HbmCollectionFetchMode ToHbm();
+
+ #region Nested type: JoinFetchMode
+
+ private class JoinFetchMode : CollectionFetchMode
+ {
+ public override HbmCollectionFetchMode ToHbm()
+ {
+ return HbmCollectionFetchMode.Join;
+ }
+ }
+
+ #endregion
+
+ #region Nested type: SelectFetchMode
+
+ private class SelectFetchMode : CollectionFetchMode
+ {
+ public override HbmCollectionFetchMode ToHbm()
+ {
+ return HbmCollectionFetchMode.Select;
+ }
+ }
+
+ #endregion
+
+ #region Nested type: SubselectFetchMode
+
+ private class SubselectFetchMode : CollectionFetchMode
+ {
+ public override HbmCollectionFetchMode ToHbm()
+ {
+ return HbmCollectionFetchMode.Subselect;
+ }
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/CollectionLazy.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/CollectionLazy.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/CollectionLazy.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,9 @@
+namespace NHibernate.Mapping.ByCode
+{
+ public enum CollectionLazy
+ {
+ Lazy,
+ NoLazy,
+ Extra
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ExplicitlyDeclaredModel.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,383 @@
+using System.Collections.Generic;
+using System.Reflection;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public class ExplicitlyDeclaredModel : IModelInspector, IModelExplicitDeclarationsHolder
+ {
+ private readonly HashSet<MemberInfo> any = new HashSet<MemberInfo>();
+ private readonly HashSet<MemberInfo> arrays = new HashSet<MemberInfo>();
+ private readonly HashSet<MemberInfo> bags = new HashSet<MemberInfo>();
+ private readonly HashSet<System.Type> components = new HashSet<System.Type>();
+ private readonly HashSet<MemberInfo> dictionaries = new HashSet<MemberInfo>();
+ private readonly HashSet<MemberInfo> idBags = new HashSet<MemberInfo>();
+ private readonly HashSet<MemberInfo> lists = new HashSet<MemberInfo>();
+ private readonly HashSet<MemberInfo> manyToManyRelations = new HashSet<MemberInfo>();
+ private readonly HashSet<MemberInfo> manyToOneRelations = new HashSet<MemberInfo>();
+ private readonly HashSet<MemberInfo> naturalIds = new HashSet<MemberInfo>();
+ private readonly HashSet<MemberInfo> oneToManyRelations = new HashSet<MemberInfo>();
+ private readonly HashSet<MemberInfo> oneToOneRelations = new HashSet<MemberInfo>();
+ private readonly HashSet<MemberInfo> persistentProperties = new HashSet<MemberInfo>();
+ private readonly HashSet<MemberInfo> poids = new HashSet<MemberInfo>();
+ private readonly HashSet<MemberInfo> properties = new HashSet<MemberInfo>();
+ private readonly HashSet<System.Type> rootEntities = new HashSet<System.Type>();
+ private readonly HashSet<MemberInfo> sets = new HashSet<MemberInfo>();
+ private readonly HashSet<System.Type> tablePerClassEntities = new HashSet<System.Type>();
+ private readonly HashSet<System.Type> tablePerClassHierarchyEntities = new HashSet<System.Type>();
+ private readonly HashSet<System.Type> tablePerClassHierarchyJoinEntities = new HashSet<System.Type>();
+ private readonly HashSet<System.Type> tablePerConcreteClassEntities = new HashSet<System.Type>();
+ private readonly HashSet<MemberInfo> versionProperties = new HashSet<MemberInfo>();
+
+ #region IModelExplicitDeclarationsHolder Members
+
+ public IEnumerable<System.Type> RootEntities
+ {
+ get { return rootEntities; }
+ }
+
+ public IEnumerable<System.Type> Components
+ {
+ get { return components; }
+ }
+
+ public IEnumerable<System.Type> TablePerClassEntities
+ {
+ get { return tablePerClassEntities; }
+ }
+
+ public IEnumerable<System.Type> TablePerClassHierarchyEntities
+ {
+ get { return tablePerClassHierarchyEntities; }
+ }
+
+ public IEnumerable<System.Type> TablePerClassHierarchyJoinEntities
+ {
+ get { return tablePerClassHierarchyJoinEntities; }
+ }
+
+ public IEnumerable<System.Type> TablePerConcreteClassEntities
+ {
+ get { return tablePerConcreteClassEntities; }
+ }
+
+ public IEnumerable<MemberInfo> OneToOneRelations
+ {
+ get { return oneToOneRelations; }
+ }
+
+ public IEnumerable<MemberInfo> ManyToOneRelations
+ {
+ get { return manyToOneRelations; }
+ }
+
+ public IEnumerable<MemberInfo> ManyToManyRelations
+ {
+ get { return manyToManyRelations; }
+ }
+
+ public IEnumerable<MemberInfo> OneToManyRelations
+ {
+ get { return oneToManyRelations; }
+ }
+
+ public IEnumerable<MemberInfo> Any
+ {
+ get { return any; }
+ }
+
+ public IEnumerable<MemberInfo> Poids
+ {
+ get { return poids; }
+ }
+
+ public IEnumerable<MemberInfo> VersionProperties
+ {
+ get { return versionProperties; }
+ }
+
+ public IEnumerable<MemberInfo> NaturalIds
+ {
+ get { return naturalIds; }
+ }
+
+ public IEnumerable<MemberInfo> Sets
+ {
+ get { return sets; }
+ }
+
+ public IEnumerable<MemberInfo> Bags
+ {
+ get { return bags; }
+ }
+
+ public IEnumerable<MemberInfo> IdBags
+ {
+ get { return idBags; }
+ }
+
+ public IEnumerable<MemberInfo> Lists
+ {
+ get { return lists; }
+ }
+
+ public IEnumerable<MemberInfo> Arrays
+ {
+ get { return arrays; }
+ }
+
+ public IEnumerable<MemberInfo> Dictionaries
+ {
+ get { return dictionaries; }
+ }
+
+ public IEnumerable<MemberInfo> Properties
+ {
+ get { return properties; }
+ }
+
+ public void AddAsRootEntity(System.Type type)
+ {
+ rootEntities.Add(type);
+ }
+
+ public void AddAsComponent(System.Type type)
+ {
+ components.Add(type);
+ }
+
+ public void AddAsTablePerClassEntity(System.Type type)
+ {
+ tablePerClassEntities.Add(type);
+ }
+
+ public void AddAsTablePerClassHierarchyEntity(System.Type type)
+ {
+ tablePerClassHierarchyEntities.Add(type);
+ }
+
+ public void AddAsTablePerClassHierarchyJoinEntity(System.Type type)
+ {
+ tablePerClassHierarchyJoinEntities.Add(type);
+ }
+
+ public void AddAsTablePerConcreteClassEntity(System.Type type)
+ {
+ tablePerConcreteClassEntities.Add(type);
+ }
+
+ public void AddAsOneToOneRelation(MemberInfo member)
+ {
+ persistentProperties.Add(member);
+ oneToOneRelations.Add(member);
+ }
+
+ public void AddAsManyToOneRelation(MemberInfo member)
+ {
+ persistentProperties.Add(member);
+ manyToOneRelations.Add(member);
+ }
+
+ public void AddAsManyToManyRelation(MemberInfo member)
+ {
+ persistentProperties.Add(member);
+ manyToManyRelations.Add(member);
+ }
+
+ public void AddAsOneToManyRelation(MemberInfo member)
+ {
+ persistentProperties.Add(member);
+ oneToManyRelations.Add(member);
+ }
+
+ public void AddAsAny(MemberInfo member)
+ {
+ persistentProperties.Add(member);
+ any.Add(member);
+ }
+
+ public void AddAsPoid(MemberInfo member)
+ {
+ persistentProperties.Add(member);
+ poids.Add(member);
+ }
+
+ public void AddAsVersionProperty(MemberInfo member)
+ {
+ persistentProperties.Add(member);
+ versionProperties.Add(member);
+ }
+
+ public void AddAsNaturalId(MemberInfo member)
+ {
+ persistentProperties.Add(member);
+ naturalIds.Add(member);
+ }
+
+ public void AddAsSet(MemberInfo member)
+ {
+ persistentProperties.Add(member);
+ sets.Add(member);
+ }
+
+ public void AddAsBag(MemberInfo member)
+ {
+ persistentProperties.Add(member);
+ bags.Add(member);
+ }
+
+ public void AddAsIdBag(MemberInfo member)
+ {
+ persistentProperties.Add(member);
+ idBags.Add(member);
+ }
+
+ public void AddAsList(MemberInfo member)
+ {
+ persistentProperties.Add(member);
+ lists.Add(member);
+ }
+
+ public void AddAsArray(MemberInfo member)
+ {
+ persistentProperties.Add(member);
+ arrays.Add(member);
+ }
+
+ public void AddAsMap(MemberInfo member)
+ {
+ persistentProperties.Add(member);
+ dictionaries.Add(member);
+ }
+
+ public void AddAsProperty(MemberInfo member)
+ {
+ persistentProperties.Add(member);
+ properties.Add(member);
+ }
+
+ #endregion
+
+ #region Implementation of IModelInspector
+
+ public bool IsRootEntity(System.Type type)
+ {
+ return rootEntities.Contains(type);
+ }
+
+ public bool IsComponent(System.Type type)
+ {
+ return components.Contains(type);
+ }
+
+ public bool IsEntity(System.Type type)
+ {
+ return rootEntities.Contains(type) ||
+ tablePerClassEntities.Contains(type) ||
+ tablePerClassHierarchyEntities.Contains(type) ||
+ tablePerClassHierarchyJoinEntities.Contains(type) ||
+ tablePerConcreteClassEntities.Contains(type);
+ }
+
+ public bool IsTablePerClass(System.Type type)
+ {
+ return tablePerClassEntities.Contains(type);
+ }
+
+ public bool IsTablePerClassHierarchy(System.Type type)
+ {
+ return tablePerClassHierarchyEntities.Contains(type);
+ }
+
+ public bool IsTablePerClassHierarchyJoin(System.Type type)
+ {
+ return tablePerClassHierarchyJoinEntities.Contains(type);
+ }
+
+ public bool IsTablePerConcreteClass(System.Type type)
+ {
+ return tablePerConcreteClassEntities.Contains(type);
+ }
+
+ public bool IsOneToOne(MemberInfo member)
+ {
+ return oneToOneRelations.Contains(member);
+ }
+
+ public bool IsManyToOne(MemberInfo member)
+ {
+ return manyToOneRelations.Contains(member);
+ }
+
+ public bool IsManyToMany(MemberInfo member)
+ {
+ return manyToManyRelations.Contains(member);
+ }
+
+ public bool IsOneToMany(MemberInfo member)
+ {
+ return oneToManyRelations.Contains(member);
+ }
+
+ public bool IsHeterogeneousAssociation(MemberInfo member)
+ {
+ return any.Contains(member);
+ }
+
+ public bool IsPersistentId(MemberInfo member)
+ {
+ return poids.Contains(member);
+ }
+
+ public bool IsVersion(MemberInfo member)
+ {
+ return versionProperties.Contains(member);
+ }
+
+ public bool IsMemberOfNaturalId(MemberInfo member)
+ {
+ return naturalIds.Contains(member);
+ }
+
+ public bool IsPersistentProperty(MemberInfo member)
+ {
+ return persistentProperties.Contains(member);
+ }
+
+ public bool IsSet(MemberInfo role)
+ {
+ return sets.Contains(role);
+ }
+
+ public bool IsBag(MemberInfo role)
+ {
+ return bags.Contains(role);
+ }
+
+ public bool IsIdBag(MemberInfo role)
+ {
+ return idBags.Contains(role);
+ }
+
+ public bool IsList(MemberInfo role)
+ {
+ return lists.Contains(role);
+ }
+
+ public bool IsArray(MemberInfo role)
+ {
+ return arrays.Contains(role);
+ }
+
+ public bool IsDictionary(MemberInfo role)
+ {
+ return dictionaries.Contains(role);
+ }
+
+ public bool IsProperty(MemberInfo member)
+ {
+ return properties.Contains(member);
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/FakeModelExplicitDeclarationsHolder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/FakeModelExplicitDeclarationsHolder.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/FakeModelExplicitDeclarationsHolder.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,182 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public class FakeModelExplicitDeclarationsHolder : IModelExplicitDeclarationsHolder
+ {
+ private readonly IEnumerable<MemberInfo> any = Enumerable.Empty<MemberInfo>();
+ private readonly IEnumerable<MemberInfo> arrays = Enumerable.Empty<MemberInfo>();
+ private readonly IEnumerable<MemberInfo> bags = Enumerable.Empty<MemberInfo>();
+ private readonly IEnumerable<System.Type> components = Enumerable.Empty<System.Type>();
+ private readonly IEnumerable<MemberInfo> dictionaries = Enumerable.Empty<MemberInfo>();
+ private readonly IEnumerable<MemberInfo> idBags = Enumerable.Empty<MemberInfo>();
+ private readonly IEnumerable<MemberInfo> lists = Enumerable.Empty<MemberInfo>();
+ private readonly IEnumerable<MemberInfo> manyToManyRelations = Enumerable.Empty<MemberInfo>();
+ private readonly IEnumerable<MemberInfo> manyToOneRelations = Enumerable.Empty<MemberInfo>();
+ private readonly IEnumerable<MemberInfo> naturalIds = Enumerable.Empty<MemberInfo>();
+ private readonly IEnumerable<MemberInfo> oneToManyRelations = Enumerable.Empty<MemberInfo>();
+ private readonly IEnumerable<MemberInfo> oneToOneRelations = Enumerable.Empty<MemberInfo>();
+ private readonly IEnumerable<MemberInfo> poids = Enumerable.Empty<MemberInfo>();
+ private readonly IEnumerable<MemberInfo> properties = Enumerable.Empty<MemberInfo>();
+ private readonly IEnumerable<System.Type> rootEntities = Enumerable.Empty<System.Type>();
+ private readonly IEnumerable<MemberInfo> sets = Enumerable.Empty<MemberInfo>();
+ private readonly IEnumerable<System.Type> tablePerClassEntities = Enumerable.Empty<System.Type>();
+ private readonly IEnumerable<System.Type> tablePerClassHierarchyEntities = Enumerable.Empty<System.Type>();
+ private readonly IEnumerable<System.Type> tablePerClassHierarchyJoinEntities = Enumerable.Empty<System.Type>();
+ private readonly IEnumerable<System.Type> tablePerConcreteClassEntities = Enumerable.Empty<System.Type>();
+ private readonly IEnumerable<MemberInfo> versionProperties = Enumerable.Empty<MemberInfo>();
+
+ #region IModelExplicitDeclarationsHolder Members
+
+ public IEnumerable<System.Type> RootEntities
+ {
+ get { return rootEntities; }
+ }
+
+ public IEnumerable<System.Type> Components
+ {
+ get { return components; }
+ }
+
+ public IEnumerable<System.Type> TablePerClassEntities
+ {
+ get { return tablePerClassEntities; }
+ }
+
+ public IEnumerable<System.Type> TablePerClassHierarchyEntities
+ {
+ get { return tablePerClassHierarchyEntities; }
+ }
+
+ public IEnumerable<System.Type> TablePerClassHierarchyJoinEntities
+ {
+ get { return tablePerClassHierarchyJoinEntities; }
+ }
+
+ public IEnumerable<System.Type> TablePerConcreteClassEntities
+ {
+ get { return tablePerConcreteClassEntities; }
+ }
+
+ public IEnumerable<MemberInfo> OneToOneRelations
+ {
+ get { return oneToOneRelations; }
+ }
+
+ public IEnumerable<MemberInfo> ManyToOneRelations
+ {
+ get { return manyToOneRelations; }
+ }
+
+ public IEnumerable<MemberInfo> ManyToManyRelations
+ {
+ get { return manyToManyRelations; }
+ }
+
+ public IEnumerable<MemberInfo> OneToManyRelations
+ {
+ get { return oneToManyRelations; }
+ }
+
+ public IEnumerable<MemberInfo> Any
+ {
+ get { return any; }
+ }
+
+ public IEnumerable<MemberInfo> Poids
+ {
+ get { return poids; }
+ }
+
+ public IEnumerable<MemberInfo> VersionProperties
+ {
+ get { return versionProperties; }
+ }
+
+ public IEnumerable<MemberInfo> NaturalIds
+ {
+ get { return naturalIds; }
+ }
+
+ public IEnumerable<MemberInfo> Sets
+ {
+ get { return sets; }
+ }
+
+ public IEnumerable<MemberInfo> Bags
+ {
+ get { return bags; }
+ }
+
+ public IEnumerable<MemberInfo> IdBags
+ {
+ get { return idBags; }
+ }
+
+ public IEnumerable<MemberInfo> Lists
+ {
+ get { return lists; }
+ }
+
+ public IEnumerable<MemberInfo> Arrays
+ {
+ get { return arrays; }
+ }
+
+ public IEnumerable<MemberInfo> Dictionaries
+ {
+ get { return dictionaries; }
+ }
+
+ public IEnumerable<MemberInfo> Properties
+ {
+ get { return properties; }
+ }
+
+ public void AddAsRootEntity(System.Type type) {}
+
+ public void AddAsComponent(System.Type type) {}
+
+ public void AddAsTablePerClassEntity(System.Type type) {}
+
+ public void AddAsTablePerClassHierarchyEntity(System.Type type) {}
+
+ public void AddAsTablePerClassHierarchyJoinEntity(System.Type type) {}
+
+ public void AddAsTablePerConcreteClassEntity(System.Type type) {}
+
+ public void AddAsOneToOneRelation(MemberInfo member) {}
+
+ public void AddAsManyToOneRelation(MemberInfo member) {}
+
+ public void AddAsManyToManyRelation(MemberInfo member) {}
+
+ public void AddAsOneToManyRelation(MemberInfo member) {}
+
+ public void AddAsAny(MemberInfo member) {}
+
+ public void AddAsPoid(MemberInfo member) {}
+
+ public void AddAsVersionProperty(MemberInfo member) {}
+
+ public void AddAsNaturalId(MemberInfo member) {}
+
+ public void AddAsSet(MemberInfo member) {}
+
+ public void AddAsBag(MemberInfo member) {}
+
+ public void AddAsIdBag(MemberInfo member) {}
+
+ public void AddAsList(MemberInfo member) {}
+
+ public void AddAsArray(MemberInfo member) {}
+
+ public void AddAsMap(MemberInfo member) {}
+
+ public void AddAsProperty(MemberInfo member) {}
+
+ #endregion
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/FetchMode.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/FetchMode.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/FetchMode.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,36 @@
+using NHibernate.Cfg.MappingSchema;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public abstract class FetchMode
+ {
+ public static FetchMode Select = new SelectFetchMode();
+ public static FetchMode Join = new JoinFetchMode();
+
+ public abstract HbmFetchMode ToHbm();
+
+ #region Nested type: JoinFetchMode
+
+ private class JoinFetchMode : FetchMode
+ {
+ public override HbmFetchMode ToHbm()
+ {
+ return HbmFetchMode.Join;
+ }
+ }
+
+ #endregion
+
+ #region Nested type: SelectFetchMode
+
+ private class SelectFetchMode : FetchMode
+ {
+ public override HbmFetchMode ToHbm()
+ {
+ return HbmFetchMode.Select;
+ }
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ForClass.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ForClass.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ForClass.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,30 @@
+using System.Reflection;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public static class ForClass<T>
+ {
+ private const BindingFlags DefaultFlags =
+ BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly;
+
+ public static FieldInfo Field(string fieldName)
+ {
+ if (fieldName == null)
+ {
+ return null;
+ }
+
+ return GetField(typeof(T), fieldName);
+ }
+
+ private static FieldInfo GetField(System.Type type, string fieldName)
+ {
+ if(type == typeof(object) || type == null)
+ {
+ return null;
+ }
+ FieldInfo member = type.GetField(fieldName, DefaultFlags) ?? GetField(type.BaseType, fieldName);
+ return member;
+ }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IAccessorPropertyMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IAccessorPropertyMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IAccessorPropertyMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,17 @@
+namespace NHibernate.Mapping.ByCode
+{
+ public enum Accessor
+ {
+ Property,
+ Field,
+ NoSetter,
+ ReadOnly,
+ None
+ }
+
+ public interface IAccessorPropertyMapper
+ {
+ void Access(Accessor accessor);
+ void Access(System.Type accessorType);
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IAnyMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IAnyMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IAnyMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,32 @@
+using System;
+using NHibernate.Type;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IAnyMapper : IEntityPropertyMapper
+ {
+ void MetaType(IType metaType);
+ void MetaType<TMetaType>();
+ void MetaType(System.Type metaType);
+
+ void IdType(IType idType);
+ void IdType<TIdType>();
+ void IdType(System.Type idType);
+
+ void Columns(Action<IColumnMapper> idColumnMapping, Action<IColumnMapper> classColumnMapping);
+
+ /// <summary>
+ /// Add or modify a value-class pair.
+ /// </summary>
+ /// <param name="value">The value of the DB-field dor a given association instance (should override <see cref="object.ToString"/>)</param>
+ /// <param name="entityType">The class associated to the specific <paramref name="value"/>. </param>
+ void MetaValue(object value, System.Type entityType);
+
+
+ void Cascade(Cascade cascadeStyle);
+ void Index(string indexName);
+ void Lazy(bool isLazy);
+ void Update(bool consideredInUpdateQuery);
+ void Insert(bool consideredInInsertQuery);
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IBagPropertiesMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IBagPropertiesMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IBagPropertiesMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,6 @@
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IBagPropertiesMapper : ICollectionPropertiesMapper {}
+
+ public interface IBagPropertiesMapper<TEntity, TElement> : ICollectionPropertiesMapper<TEntity, TElement> where TEntity : class {}
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICacheMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICacheMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICacheMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,15 @@
+namespace NHibernate.Mapping.ByCode
+{
+ public interface ICacheMapper
+ {
+ void Usage(CacheUsage cacheUsage);
+ void Region(string regionName);
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="cacheInclude"></param>
+ /// <remarks>Not supported in NH3.</remarks>
+ void Include(CacheInclude cacheInclude);
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IClassMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IClassMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IClassMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,47 @@
+using System;
+using System.Linq.Expressions;
+using System.Reflection;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IClassAttributesMapper : IEntityAttributesMapper, IEntitySqlsMapper
+ {
+ void Id(Action<IIdMapper> idMapper);
+ void Id(MemberInfo idProperty, Action<IIdMapper> idMapper);
+ void Discriminator(Action<IDiscriminatorMapper> discriminatorMapping);
+ void DiscriminatorValue(object value);
+ void Table(string tableName);
+ void Catalog(string catalogName);
+ void Schema(string schemaName);
+ void Mutable(bool isMutable);
+ void Version(MemberInfo versionProperty, Action<IVersionMapper> versionMapping);
+ void NaturalId(Action<INaturalIdMapper> naturalIdMapping);
+ void Cache(Action<ICacheMapper> cacheMapping);
+ void Filter(string filterName, Action<IFilterMapper> filterMapping);
+ void Where(string whereClause);
+ void SchemaAction(SchemaAction action);
+ }
+
+ public interface IClassMapper : IClassAttributesMapper, IPropertyContainerMapper {}
+
+ public interface IClassAttributesMapper<TEntity> : IEntityAttributesMapper, IEntitySqlsMapper where TEntity : class
+ {
+ void Id(Action<IIdMapper> idMapper);
+ void Id<TProperty>(Expression<Func<TEntity, TProperty>> idProperty, Action<IIdMapper> idMapper);
+ void Id(FieldInfo idProperty, Action<IIdMapper> idMapper);
+ void Discriminator(Action<IDiscriminatorMapper> discriminatorMapping);
+ void DiscriminatorValue(object value);
+ void Table(string tableName);
+ void Catalog(string catalogName);
+ void Schema(string schemaName);
+ void Mutable(bool isMutable);
+ void Version<TProperty>(Expression<Func<TEntity, TProperty>> versionProperty, Action<IVersionMapper> versionMapping);
+ void NaturalId(Action<INaturalIdAttributesMapper> naturalIdMapping);
+ void Cache(Action<ICacheMapper> cacheMapping);
+ void Filter(string filterName, Action<IFilterMapper> filterMapping);
+ void Where(string whereClause);
+ void SchemaAction(SchemaAction action);
+ }
+
+ public interface IClassMapper<TEntity> : IClassAttributesMapper<TEntity>, IPropertyContainerMapper<TEntity> where TEntity : class {}
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionElementRelation.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionElementRelation.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionElementRelation.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,20 @@
+using System;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public interface ICollectionElementRelation
+ {
+ void Element(Action<IElementMapper> mapping);
+ void OneToMany(Action<IOneToManyMapper> mapping);
+ void ManyToMany(Action<IManyToManyMapper> mapping);
+ void Component(Action<IComponentElementMapper> mapping);
+ }
+
+ public interface ICollectionElementRelation<TElement>
+ {
+ void Element(Action<IElementMapper> mapping);
+ void OneToMany(Action<IOneToManyMapper> mapping);
+ void ManyToMany(Action<IManyToManyMapper> mapping);
+ void Component(Action<IComponentElementMapper<TElement>> mapping);
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionPropertiesMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionPropertiesMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionPropertiesMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,54 @@
+using System;
+using System.Linq.Expressions;
+using System.Reflection;
+using NHibernate.UserTypes;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public interface ICollectionPropertiesMapper : IEntityPropertyMapper, ICollectionSqlsMapper
+ {
+ void Inverse(bool value);
+ void Mutable(bool value);
+ void Where(string sqlWhereClause);
+ void BatchSize(int value);
+ void Lazy(CollectionLazy collectionLazy);
+ void Key(Action<IKeyMapper> keyMapping);
+ void OrderBy(MemberInfo property);
+ void OrderBy(string sqlOrderByClause);
+ void Sort();
+ void Sort<TComparer>();
+ void Cascade(Cascade cascadeStyle);
+ //void Type(string namedCollectionType); // TODO: figure out a way to avoid string for embedded namedCollectionType
+ void Type<TCollection>() where TCollection : IUserCollectionType;
+ void Type(System.Type collectionType);
+ void Table(string tableName);
+ void Catalog(string catalogName);
+ void Schema(string schemaName);
+ void Cache(Action<ICacheMapper> cacheMapping);
+ void Filter(string filterName, Action<IFilterMapper> filterMapping);
+ void Fetch(CollectionFetchMode fetchMode);
+ }
+
+ public interface ICollectionPropertiesMapper<TEntity, TElement> : IEntityPropertyMapper, ICollectionSqlsMapper where TEntity : class
+ {
+ void Inverse(bool value);
+ void Mutable(bool value);
+ void Where(string sqlWhereClause);
+ void BatchSize(int value);
+ void Lazy(CollectionLazy collectionLazy);
+ void Key(Action<IKeyMapper<TEntity>> keyMapping);
+ void OrderBy<TProperty>(Expression<Func<TElement, TProperty>> property);
+ void OrderBy(string sqlOrderByClause);
+ void Sort();
+ void Sort<TComparer>();
+ void Cascade(Cascade cascadeStyle);
+ void Type<TCollection>() where TCollection : IUserCollectionType;
+ void Type(System.Type collectionType);
+ void Table(string tableName);
+ void Catalog(string catalogName);
+ void Schema(string schemaName);
+ void Cache(Action<ICacheMapper> cacheMapping);
+ void Filter(string filterName, Action<IFilterMapper> filterMapping);
+ void Fetch(CollectionFetchMode fetchMode);
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionSqlsMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionSqlsMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/ICollectionSqlsMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,12 @@
+namespace NHibernate.Mapping.ByCode
+{
+ public interface ICollectionSqlsMapper
+ {
+ void Loader(string namedQueryReference);
+ void SqlInsert(string sql);
+ void SqlUpdate(string sql);
+ void SqlDelete(string sql);
+ void SqlDeleteAll(string sql);
+ void Subselect(string sql);
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IColumnMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IColumnMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IColumnMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,17 @@
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IColumnMapper
+ {
+ void Name(string name);
+ void Length(int length);
+ void Precision(short precision);
+ void Scale(short scale);
+ void NotNullable(bool notnull);
+ void Unique(bool unique);
+ void UniqueKey(string uniquekeyName);
+ void SqlType(string sqltype);
+ void Index(string indexName);
+ void Check(string checkConstraint);
+ void Default(object defaultValue);
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IColumnsMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IColumnsMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IColumnsMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,11 @@
+using System;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IColumnsMapper
+ {
+ void Column(Action<IColumnMapper> columnMapper);
+ void Columns(params Action<IColumnMapper>[] columnMapper);
+ void Column(string name);
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentElementMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentElementMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentElementMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,26 @@
+using System;
+using System.Linq.Expressions;
+using System.Reflection;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IComponentElementMapper : IComponentAttributesMapper
+ {
+ void Property(MemberInfo property, Action<IPropertyMapper> mapping);
+
+ void Component(MemberInfo property, Action<IComponentElementMapper> mapping);
+
+ void ManyToOne(MemberInfo property, Action<IManyToOneMapper> mapping);
+ }
+
+ public interface IComponentElementMapper<TComponent> : IComponentAttributesMapper<TComponent>
+ {
+ void Property<TProperty>(Expression<Func<TComponent, TProperty>> property, Action<IPropertyMapper> mapping);
+
+ void Component<TNestedComponent>(Expression<Func<TComponent, TNestedComponent>> property,
+ Action<IComponentElementMapper<TNestedComponent>> mapping)
+ where TNestedComponent : class;
+
+ void ManyToOne<TProperty>(Expression<Func<TComponent, TProperty>> property, Action<IManyToOneMapper> mapping) where TProperty : class;
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentMapKeyMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentMapKeyMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentMapKeyMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,20 @@
+using System;
+using System.Linq.Expressions;
+using System.Reflection;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IComponentMapKeyMapper
+ {
+ void Property(MemberInfo property, Action<IPropertyMapper> mapping);
+
+ void ManyToOne(MemberInfo property, Action<IManyToOneMapper> mapping);
+ }
+
+ public interface IComponentMapKeyMapper<TComponent>
+ {
+ void Property<TProperty>(Expression<Func<TComponent, TProperty>> property, Action<IPropertyMapper> mapping);
+
+ void ManyToOne<TProperty>(Expression<Func<TComponent, TProperty>> property, Action<IManyToOneMapper> mapping) where TProperty : class;
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,30 @@
+using System;
+using System.Linq.Expressions;
+using System.Reflection;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IComponentAttributesMapper : IEntityPropertyMapper
+ {
+ void Parent(MemberInfo parent);
+ void Parent(MemberInfo parent, Action<IComponentParentMapper> parentMapping);
+ void Update(bool consideredInUpdateQuery);
+ void Insert(bool consideredInInsertQuery);
+ void Lazy(bool isLazy);
+ void Class(System.Type componentType);
+ }
+
+ public interface IComponentMapper : IComponentAttributesMapper, IPropertyContainerMapper {}
+
+ public interface IComponentAttributesMapper<TComponent> : IEntityPropertyMapper
+ {
+ void Parent<TProperty>(Expression<Func<TComponent, TProperty>> parent) where TProperty : class;
+ void Parent<TProperty>(Expression<Func<TComponent, TProperty>> parent, Action<IComponentParentMapper> parentMapping) where TProperty : class;
+ void Update(bool consideredInUpdateQuery);
+ void Insert(bool consideredInInsertQuery);
+ void Lazy(bool isLazy);
+ void Class<TConcrete>() where TConcrete : TComponent;
+ }
+
+ public interface IComponentMapper<TComponent> : IComponentAttributesMapper<TComponent>, IPropertyContainerMapper<TComponent> where TComponent : class {}
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentParentMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentParentMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IComponentParentMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,4 @@
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IComponentParentMapper : IAccessorPropertyMapper {}
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IDiscriminatorMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IDiscriminatorMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IDiscriminatorMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,20 @@
+using System;
+using NHibernate.Type;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IDiscriminatorMapper
+ {
+ void Column(string column);
+ void Column(Action<IColumnMapper> columnMapper);
+ void Type(IType persistentType);
+ void Type(IDiscriminatorType persistentType);
+ void Type<TPersistentType>() where TPersistentType : IDiscriminatorType;
+ void Type(System.Type persistentType);
+ void Formula(string formula);
+ void Force(bool force);
+ void Insert(bool applyOnApplyOnInsert);
+ void NotNullable(bool isNotNullable);
+ void Length(int length);
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IElementMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IElementMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IElementMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,18 @@
+using NHibernate.Type;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IElementMapper : IColumnsMapper
+ {
+ void Type(IType persistentType);
+ void Type<TPersistentType>();
+ void Type<TPersistentType>(object parameters);
+ void Type(System.Type persistentType, object parameters);
+ void Length(int length);
+ void Precision(short precision);
+ void Scale(short scale);
+ void NotNullable(bool notnull);
+ void Unique(bool unique);
+ void Formula(string formula);
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IEntityAttributesMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IEntityAttributesMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IEntityAttributesMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,16 @@
+using NHibernate.Persister.Entity;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IEntityAttributesMapper
+ {
+ void EntityName(string value);
+ void Proxy(System.Type proxy);
+ void Lazy(bool value);
+ void DynamicUpdate(bool value);
+ void DynamicInsert(bool value);
+ void BatchSize(int value);
+ void SelectBeforeUpdate(bool value);
+ void Persister<T>() where T : IEntityPersister;
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IEntityPropertyMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IEntityPropertyMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IEntityPropertyMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,7 @@
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IEntityPropertyMapper : IAccessorPropertyMapper
+ {
+ void OptimisticLock(bool takeInConsiderationForOptimisticLock);
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IEntitySqlsMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IEntitySqlsMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IEntitySqlsMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,11 @@
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IEntitySqlsMapper
+ {
+ void Loader(string namedQueryReference);
+ void SqlInsert(string sql);
+ void SqlUpdate(string sql);
+ void SqlDelete(string sql);
+ void Subselect(string sql);
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IFilterMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IFilterMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IFilterMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,7 @@
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IFilterMapper
+ {
+ void Condition(string sqlCondition);
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGenerator.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGenerator.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGenerator.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,4 @@
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IGenerator {}
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGeneratorDef.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGeneratorDef.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGeneratorDef.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,8 @@
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IGeneratorDef
+ {
+ string Class { get; }
+ object Params { get; }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGeneratorMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGeneratorMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IGeneratorMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,7 @@
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IGeneratorMapper
+ {
+ void Params(object generatorParameters);
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IIdMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IIdMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IIdMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,20 @@
+using System;
+using NHibernate.Type;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IIdMapper : IAccessorPropertyMapper
+ {
+ void Generator(IGeneratorDef generator);
+ void Generator(IGeneratorDef generator, Action<IGeneratorMapper> generatorMapping);
+
+ void Type(IIdentifierType persistentType);
+ //void Type<TPersistentType>() where TPersistentType : IIdentifierType;
+ //void Type<TPersistentType>(object parameters) where TPersistentType : IIdentifierType;
+ //void Type(System.System.Type persistentType, object parameters);
+ //void Column(Action<IColumnMapper> columnMapper);
+ //void Columns(params Action<IColumnMapper>[] columnMapper);
+ void Column(string name);
+ void Length(int length);
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Mapping/ByCode/IJoinedSubclassMapper.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Mapping/ByCode/IJoinedSubclassMapper.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/IJoinedSubclassMapper.cs 2011-04-01 17:11:05 UTC (rev 5572)
@@ -0,0 +1,25 @@
+using System;
+
+namespace NHibernate.Mapping.ByCode
+{
+ public interface IJoinedSubclassAttributesMapper : IEntityAttributesMapper, IEntitySqlsMapper
+ {
+ void Table(string tableName);
+ void Catalog(string catalogName);
+ void Schema(string schemaName);
+ void Key(Action<IKeyMapper> keyMapping);
+ void Extends(System.Type baseType);
+ }
+
+ public int...
[truncated message content] |
|
From: <fab...@us...> - 2011-03-30 22:41:53
|
Revision: 5571
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5571&view=rev
Author: fabiomaulo
Date: 2011-03-30 22:41:47 +0000 (Wed, 30 Mar 2011)
Log Message:
-----------
Fix NH-2607 even if cannot be recreated using the obj as mapped entity (the DynProxyTypeValidator already prevent the case exposed).
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/ProxyFactory.cs
Modified: trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/ProxyFactory.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/ProxyFactory.cs 2011-03-30 22:25:25 UTC (rev 5570)
+++ trunk/nhibernate/src/NHibernate/Proxy/DynamicProxy/ProxyFactory.cs 2011-03-30 22:41:47 UTC (rev 5571)
@@ -179,10 +179,12 @@
private bool IsProxiable(MethodInfo method)
{
- return (((method.IsPublic || method.IsFamily || method.IsAssembly || method.IsFamilyOrAssembly)
- && (method.IsVirtual || method.IsAbstract))
- && (method.DeclaringType != typeof(MarshalByRefObject)))
- && (method.DeclaringType != typeof(object) || !"finalize".Equals(method.Name.ToLowerInvariant()));
+ return (
+ ((method.IsPublic || method.IsFamily || method.IsAssembly || method.IsFamilyOrAssembly) && (method.IsVirtual || method.IsAbstract))
+ && !method.IsFinal
+ && (method.DeclaringType != typeof (MarshalByRefObject)))
+ && (method.DeclaringType != typeof (object) || !"finalize".Equals(method.Name.ToLowerInvariant())
+ );
}
private static ConstructorBuilder DefineConstructor(TypeBuilder typeBuilder)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fab...@us...> - 2011-03-30 22:25:32
|
Revision: 5570
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5570&view=rev
Author: fabiomaulo
Date: 2011-03-30 22:25:25 +0000 (Wed, 30 Mar 2011)
Log Message:
-----------
Fix NH-2610
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs
trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Mappings.hbm.xml
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Model.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/SqlConverter.cs
Modified: trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs 2011-03-30 01:50:31 UTC (rev 5569)
+++ trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs 2011-03-30 22:25:25 UTC (rev 5570)
@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Data.Common;
using System.Diagnostics;
using Iesi.Collections;
using Iesi.Collections.Generic;
@@ -8,6 +9,7 @@
using NHibernate.Criterion;
using NHibernate.Driver;
using NHibernate.Engine;
+using NHibernate.Exceptions;
using NHibernate.Loader.Criteria;
using NHibernate.SqlCommand;
using NHibernate.Transform;
@@ -189,13 +191,13 @@
}
int rowCount = 0;
- using (var reader = resultSetsCommand.GetReader(parameters.ToArray(), null))
+ try
{
- ArrayList[] hydratedObjects = new ArrayList[loaders.Count];
- List<EntityKey[]>[] subselectResultKeys = new List<EntityKey[]>[loaders.Count];
- bool[] createSubselects = new bool[loaders.Count];
- try
+ using (var reader = resultSetsCommand.GetReader(parameters.ToArray(), null))
{
+ ArrayList[] hydratedObjects = new ArrayList[loaders.Count];
+ List<EntityKey[]>[] subselectResultKeys = new List<EntityKey[]>[loaders.Count];
+ bool[] createSubselects = new bool[loaders.Count];
for (int i = 0; i < loaders.Count; i++)
{
CriteriaLoader loader = loaders[i];
@@ -217,7 +219,7 @@
createSubselects[i] = loader.IsSubselectLoadingEnabled;
subselectResultKeys[i] = createSubselects[i] ? new List<EntityKey[]>() : null;
int maxRows = Loader.Loader.HasMaxRows(selection) ? selection.MaxRows : int.MaxValue;
- if (!dialect.SupportsLimitOffset || !NHibernate.Loader.Loader.UseLimit(selection, dialect))
+ if (!dialect.SupportsLimitOffset || !Loader.Loader.UseLimit(selection, dialect))
{
Loader.Loader.Advance(reader, selection);
}
@@ -228,7 +230,7 @@
object o =
loader.GetRowFromResultSet(reader, session, queryParameters, loader.GetLockModes(queryParameters.LockModes),
- null, hydratedObjects[i], keys, true);
+ null, hydratedObjects[i], keys, true);
if (createSubselects[i])
{
subselectResultKeys[i].Add(keys);
@@ -239,24 +241,25 @@
results.Add(tmpResults);
reader.NextResult();
}
- }
- catch (Exception e)
- {
- var message = string.Format("Failed to execute multi criteria: [{0}]", resultSetsCommand.Sql);
- log.Error(message, e);
- throw new HibernateException(message, e);
- }
- for (int i = 0; i < loaders.Count; i++)
- {
- CriteriaLoader loader = loaders[i];
- loader.InitializeEntitiesAndCollections(hydratedObjects[i], reader, session, false);
- if (createSubselects[i])
+ for (int i = 0; i < loaders.Count; i++)
{
- loader.CreateSubselects(subselectResultKeys[i], parameters[i], session);
+ CriteriaLoader loader = loaders[i];
+ loader.InitializeEntitiesAndCollections(hydratedObjects[i], reader, session, false);
+
+ if (createSubselects[i])
+ {
+ loader.CreateSubselects(subselectResultKeys[i], parameters[i], session);
+ }
}
}
}
+ catch (Exception sqle)
+ {
+ var message = string.Format("Failed to execute multi criteria: [{0}]", resultSetsCommand.Sql);
+ log.Error(message, sqle);
+ throw ADOExceptionHelper.Convert(session.Factory.SQLExceptionConverter, sqle, "Failed to execute multi criteria", resultSetsCommand.Sql);
+ }
if (statsEnabled)
{
stopWatch.Stop();
Modified: trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs 2011-03-30 01:50:31 UTC (rev 5569)
+++ trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs 2011-03-30 22:25:25 UTC (rev 5570)
@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Data.Common;
using System.Diagnostics;
using System.Linq;
using Iesi.Collections;
@@ -9,6 +10,7 @@
using NHibernate.Driver;
using NHibernate.Engine;
using NHibernate.Engine.Query.Sql;
+using NHibernate.Exceptions;
using NHibernate.Hql;
using NHibernate.Loader.Custom;
using NHibernate.Loader.Custom.Sql;
@@ -508,9 +510,9 @@
List<EntityKey[]>[] subselectResultKeys = new List<EntityKey[]>[Translators.Count];
bool[] createSubselects = new bool[Translators.Count];
- using (var reader = resultSetsCommand.GetReader(Parameters.ToArray(), commandTimeout != RowSelection.NoValue ? commandTimeout : (int?)null))
+ try
{
- try
+ using (var reader = resultSetsCommand.GetReader(Parameters.ToArray(), commandTimeout != RowSelection.NoValue ? commandTimeout : (int?)null))
{
if (log.IsDebugEnabled)
{
@@ -521,13 +523,13 @@
ITranslator translator = Translators[i];
QueryParameters parameter = Parameters[i];
IList tempResults;
- if (resultCollectionGenericType[i] == typeof (object))
+ if (resultCollectionGenericType[i] == typeof(object))
{
tempResults = new ArrayList();
}
else
{
- tempResults = (IList) Activator.CreateInstance(typeof (List<>).MakeGenericType(resultCollectionGenericType[i]));
+ tempResults = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(resultCollectionGenericType[i]));
}
int entitySpan = translator.Loader.EntityPersisters.Length;
hydratedObjects[i] = entitySpan > 0 ? new ArrayList() : null;
@@ -564,13 +566,13 @@
object result =
translator.Loader.GetRowFromResultSet(reader,
- session,
- parameter,
- lockModeArray,
- optionalObjectKey,
- hydratedObjects[i],
- keys,
- true);
+ session,
+ parameter,
+ lockModeArray,
+ optionalObjectKey,
+ hydratedObjects[i],
+ keys,
+ true);
tempResults.Add(result);
@@ -595,27 +597,27 @@
reader.NextResult();
}
- }
- catch (Exception ex)
- {
- var message = string.Format("Failed to execute multi query: [{0}]", resultSetsCommand.Sql);
- log.Error(message, ex);
- throw new HibernateException(message, ex);
- }
- for (int i = 0; i < translators.Count; i++)
- {
- ITranslator translator = translators[i];
- QueryParameters parameter = parameters[i];
+ for (int i = 0; i < translators.Count; i++)
+ {
+ ITranslator translator = translators[i];
+ QueryParameters parameter = parameters[i];
- translator.Loader.InitializeEntitiesAndCollections(hydratedObjects[i], reader, session, false);
+ translator.Loader.InitializeEntitiesAndCollections(hydratedObjects[i], reader, session, false);
- if (createSubselects[i])
- {
- translator.Loader.CreateSubselects(subselectResultKeys[i], parameter, session);
+ if (createSubselects[i])
+ {
+ translator.Loader.CreateSubselects(subselectResultKeys[i], parameter, session);
+ }
}
}
}
+ catch (Exception sqle)
+ {
+ var message = string.Format("Failed to execute multi query: [{0}]", resultSetsCommand.Sql);
+ log.Error(message, sqle);
+ throw ADOExceptionHelper.Convert(session.Factory.SQLExceptionConverter, sqle, "Failed to execute multi query", resultSetsCommand.Sql);
+ }
if (statsEnabled)
{
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Fixture.cs 2011-03-30 22:25:25 UTC (rev 5570)
@@ -0,0 +1,77 @@
+using NHibernate.Cfg;
+using NHibernate.Cfg.Loquacious;
+using NUnit.Framework;
+
+namespace NHibernate.Test.NHSpecificTest.SqlConverterAndMultiQuery
+{
+ [TestFixture]
+ public class Fixture : BugTestCase
+ {
+ private const string hqlQuery = "select a.Id from ClassA a";
+
+ protected override void Configure(Configuration configuration)
+ {
+ configuration.DataBaseIntegration(x => x.ExceptionConverter<SqlConverter>());
+ }
+
+ [Test]
+ public void NormalHqlShouldThrowUserException()
+ {
+ using(var s = OpenSession())
+ {
+ using(s.BeginTransaction())
+ {
+ s.Connection.Close();
+ Assert.Throws<UnitTestException>(() =>
+ s.CreateQuery(hqlQuery).List());
+ }
+ }
+ }
+
+ [Test]
+ public void MultiHqlShouldThrowUserException()
+ {
+ using (var s = OpenSession())
+ {
+ using (s.BeginTransaction())
+ {
+ var multi = s.CreateMultiQuery();
+ multi.Add(hqlQuery);
+ s.Connection.Close();
+ Assert.Throws<UnitTestException>(() =>
+ multi.List());
+ }
+ }
+ }
+
+ [Test]
+ public void NormalCriteriaShouldThrowUserException()
+ {
+ using (var s = OpenSession())
+ {
+ using (s.BeginTransaction())
+ {
+ s.Connection.Close();
+ Assert.Throws<UnitTestException>(() =>
+ s.CreateCriteria(typeof(ClassA)).List());
+ }
+ }
+ }
+
+ [Test]
+ public void MultiCriteriaShouldThrowUserException()
+ {
+ using (var s = OpenSession())
+ {
+ using (s.BeginTransaction())
+ {
+ var multi = s.CreateMultiCriteria();
+ multi.Add(s.CreateCriteria(typeof (ClassA)));
+ s.Connection.Close();
+ Assert.Throws<UnitTestException>(() =>
+ multi.List());
+ }
+ }
+ }
+ }
+}
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Mappings.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Mappings.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Mappings.hbm.xml 2011-03-30 22:25:25 UTC (rev 5570)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
+ namespace="NHibernate.Test.NHSpecificTest.SqlConverterAndMultiQuery"
+ assembly="NHibernate.Test">
+
+ <class name="ClassA">
+ <id name="Id">
+ <generator class="native"/>
+ </id>
+ </class>
+</hibernate-mapping>
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Model.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Model.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/Model.cs 2011-03-30 22:25:25 UTC (rev 5570)
@@ -0,0 +1,7 @@
+namespace NHibernate.Test.NHSpecificTest.SqlConverterAndMultiQuery
+{
+ public class ClassA
+ {
+ public virtual int Id { get; set; }
+ }
+}
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/SqlConverter.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/SqlConverter.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SqlConverterAndMultiQuery/SqlConverter.cs 2011-03-30 22:25:25 UTC (rev 5570)
@@ -0,0 +1,15 @@
+using System;
+using NHibernate.Exceptions;
+
+namespace NHibernate.Test.NHSpecificTest.SqlConverterAndMultiQuery
+{
+ public class SqlConverter : ISQLExceptionConverter
+ {
+ public Exception Convert(AdoExceptionContextInfo adoExceptionContextInfo)
+ {
+ return new UnitTestException();
+ }
+ }
+
+ public class UnitTestException : Exception{}
+}
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-03-30 01:50:31 UTC (rev 5569)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-03-30 22:25:25 UTC (rev 5570)
@@ -677,6 +677,9 @@
<Compile Include="NHSpecificTest\Properties\CompositePropertyRefTest.cs" />
<Compile Include="NHSpecificTest\Properties\DynamicEntityTest.cs" />
<Compile Include="NHSpecificTest\Properties\Model.cs" />
+ <Compile Include="NHSpecificTest\SqlConverterAndMultiQuery\Fixture.cs" />
+ <Compile Include="NHSpecificTest\SqlConverterAndMultiQuery\Model.cs" />
+ <Compile Include="NHSpecificTest\SqlConverterAndMultiQuery\SqlConverter.cs" />
<Compile Include="PolymorphicGetAndLoad\Domain.cs" />
<Compile Include="PolymorphicGetAndLoad\PolymorphicGetAndLoadTest.cs" />
<Compile Include="PropertyTest\FieldCamelCaseMUnderscoreFixture.cs" />
@@ -2500,6 +2503,7 @@
<EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" />
</ItemGroup>
<ItemGroup>
+ <EmbeddedResource Include="NHSpecificTest\SqlConverterAndMultiQuery\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2489\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2603\Mappings.hbm.xml" />
<EmbeddedResource Include="Subselect\Beings.hbm.xml" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jul...@us...> - 2011-03-30 01:50:38
|
Revision: 5569
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5569&view=rev
Author: julian-maughan
Date: 2011-03-30 01:50:31 +0000 (Wed, 30 Mar 2011)
Log Message:
-----------
Added PostgreSQL metadata provider (NH-2426)
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs
trunk/nhibernate/src/NHibernate/NHibernate.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Dialect/Schema/PostgreSQLMetadata.cs
Modified: trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs 2011-03-29 14:23:44 UTC (rev 5568)
+++ trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs 2011-03-30 01:50:31 UTC (rev 5569)
@@ -1,6 +1,8 @@
using System.Data;
+using System.Data.Common;
using NHibernate.Cfg;
using NHibernate.Dialect.Function;
+using NHibernate.Dialect.Schema;
using NHibernate.SqlCommand;
using NHibernate.SqlTypes;
@@ -12,21 +14,22 @@
/// <remarks>
/// The PostgreSQLDialect defaults the following configuration properties:
/// <list type="table">
- /// <listheader>
- /// <term>Property</term>
- /// <description>Default Value</description>
- /// </listheader>
- /// <item>
- /// <term>connection.driver_class</term>
- /// <description><see cref="NHibernate.Driver.NpgsqlDriver" /></description>
- /// </item>
+ /// <listheader>
+ /// <term>Property</term>
+ /// <description>Default Value</description>
+ /// </listheader>
+ /// <item>
+ /// <term>connection.driver_class</term>
+ /// <description><see cref="NHibernate.Driver.NpgsqlDriver" /></description>
+ /// </item>
/// </list>
/// </remarks>
public class PostgreSQLDialect : Dialect
{
- /// <summary></summary>
public PostgreSQLDialect()
{
+ DefaultProperties[Environment.ConnectionDriver] = "NHibernate.Driver.NpgsqlDriver";
+
RegisterColumnType(DbType.AnsiStringFixedLength, "char(255)");
RegisterColumnType(DbType.AnsiStringFixedLength, 8000, "char($l)");
RegisterColumnType(DbType.AnsiString, "varchar(255)");
@@ -51,7 +54,7 @@
RegisterColumnType(DbType.StringFixedLength, 4000, "char($l)");
RegisterColumnType(DbType.String, "varchar(255)");
RegisterColumnType(DbType.String, 4000, "varchar($l)");
- RegisterColumnType(DbType.String, 1073741823, "text"); //
+ RegisterColumnType(DbType.String, 1073741823, "text");
RegisterColumnType(DbType.Time, "time");
// Override standard HQL function
@@ -59,23 +62,17 @@
RegisterFunction("str", new SQLFunctionTemplate(NHibernateUtil.String, "cast(?1 as varchar)"));
RegisterFunction("locate", new PositionSubstringFunction());
RegisterFunction("iif", new SQLFunctionTemplate(null, "case when ?1 then ?2 else ?3 end"));
-
RegisterFunction("substring", new AnsiSubstringFunction());
RegisterFunction("replace", new StandardSQLFunction("replace", NHibernateUtil.String));
RegisterFunction("left", new SQLFunctionTemplate(NHibernateUtil.String, "substr(?1,1,?2)"));
-
RegisterFunction("mod", new SQLFunctionTemplate(NHibernateUtil.Int32, "((?1) % (?2))"));
-
- DefaultProperties[Environment.ConnectionDriver] = "NHibernate.Driver.NpgsqlDriver";
}
- /// <summary></summary>
public override string AddColumnString
{
get { return "add column"; }
}
- /// <summary></summary>
public override bool DropConstraints
{
get { return false; }
@@ -111,10 +108,10 @@
return insertString.Append(" returning " + identifierColumnName);
}
- public override InsertGeneratedIdentifierRetrievalMethod InsertGeneratedIdentifierRetrievalMethod
- {
- get { return InsertGeneratedIdentifierRetrievalMethod.OutputParameter; }
- }
+ public override InsertGeneratedIdentifierRetrievalMethod InsertGeneratedIdentifierRetrievalMethod
+ {
+ get { return InsertGeneratedIdentifierRetrievalMethod.OutputParameter; }
+ }
public override bool SupportsSequences
{
@@ -192,13 +189,6 @@
get { return true; }
}
- /*public override bool DropTemporaryTableAfterUse()
- {
- //we have to, because postgres sets current tx
- //to rollback only after a failed create table
- return true;
- }*/
-
public override string CreateTemporaryTableString
{
get { return "create temporary table"; }
@@ -206,10 +196,7 @@
public override string CreateTemporaryTablePostfix
{
- get
- {
- return "on commit drop";
- }
+ get { return "on commit drop"; }
}
public override string ToBooleanValueString(bool value)
@@ -217,9 +204,14 @@
return value ? "TRUE" : "FALSE";
}
- public override string SelectGUIDString
- {
- get { return "select uuid_generate_v4()"; }
- }
+ public override string SelectGUIDString
+ {
+ get { return "select uuid_generate_v4()"; }
+ }
+
+ public override IDataBaseSchema GetDataBaseSchema(DbConnection connection)
+ {
+ return new PostgreSQLDataBaseMetadata(connection);
+ }
}
}
Added: trunk/nhibernate/src/NHibernate/Dialect/Schema/PostgreSQLMetadata.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Dialect/Schema/PostgreSQLMetadata.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Dialect/Schema/PostgreSQLMetadata.cs 2011-03-30 01:50:31 UTC (rev 5569)
@@ -0,0 +1,110 @@
+using System;
+using System.Data;
+using System.Data.Common;
+using Iesi.Collections.Generic;
+
+namespace NHibernate.Dialect.Schema
+{
+ public class PostgreSQLDataBaseMetadata : AbstractDataBaseSchema
+ {
+ public PostgreSQLDataBaseMetadata(DbConnection connection) : base(connection) {}
+
+ public override ITableMetadata GetTableMetadata(DataRow rs, bool extras)
+ {
+ return new PostgreSQLTableMetadata(rs, this, extras);
+ }
+
+ public override ISet<string> GetReservedWords()
+ {
+ // NpgsqlDriver does not currently (2011/03/30) support this feature, so the
+ // base class implementation has to be overriden
+ return new HashedSet<string>();
+ }
+ }
+
+ public class PostgreSQLTableMetadata : AbstractTableMetadata
+ {
+ public PostgreSQLTableMetadata(DataRow rs, IDataBaseSchema meta, bool extras) : base(rs, meta, extras) {}
+
+ protected override IColumnMetadata GetColumnMetadata(DataRow rs)
+ {
+ return new PostgreSQLColumnMetadata(rs);
+ }
+
+ protected override string GetColumnName(DataRow rs)
+ {
+ return Convert.ToString(rs["COLUMN_NAME"]);
+ }
+
+ protected override string GetConstraintName(DataRow rs)
+ {
+ throw new NotImplementedException();
+ }
+
+ protected override IForeignKeyMetadata GetForeignKeyMetadata(DataRow rs)
+ {
+ return new PostgreSQLForeignKeyMetadata(rs);
+ }
+
+ protected override IIndexMetadata GetIndexMetadata(DataRow rs)
+ {
+ return new PostgreSQLIndexMetadata(rs);
+ }
+
+ protected override string GetIndexName(DataRow rs)
+ {
+ return Convert.ToString(rs["INDEX_NAME"]);
+ }
+
+ protected override void ParseTableInfo(DataRow rs)
+ {
+ Catalog = Convert.ToString(rs["TABLE_CATALOG"]);
+ Schema = Convert.ToString(rs["TABLE_SCHEMA"]);
+ if (string.IsNullOrEmpty(Catalog))
+ {
+ Catalog = null;
+ }
+ if (string.IsNullOrEmpty(Schema))
+ {
+ Schema = null;
+ }
+ Name = Convert.ToString(rs["TABLE_NAME"]);
+ }
+ }
+
+ public class PostgreSQLColumnMetadata : AbstractColumnMetaData
+ {
+ public PostgreSQLColumnMetadata(DataRow rs) : base(rs)
+ {
+ Name = Convert.ToString(rs["COLUMN_NAME"]);
+ object objValue = rs["CHARACTER_MAXIMUM_LENGTH"];
+ if (objValue != DBNull.Value)
+ {
+ ColumnSize = Convert.ToInt32(objValue);
+ }
+ objValue = rs["NUMERIC_PRECISION"];
+ if (objValue != DBNull.Value)
+ {
+ NumericalPrecision = Convert.ToInt32(objValue);
+ }
+ Nullable = Convert.ToString(rs["IS_NULLABLE"]);
+ TypeName = Convert.ToString(rs["DATA_TYPE"]);
+ }
+ }
+
+ public class PostgreSQLIndexMetadata : AbstractIndexMetadata
+ {
+ public PostgreSQLIndexMetadata(DataRow rs) : base(rs)
+ {
+ Name = Convert.ToString(rs["INDEX_NAME"]);
+ }
+ }
+
+ public class PostgreSQLForeignKeyMetadata : AbstractForeignKeyMetadata
+ {
+ public PostgreSQLForeignKeyMetadata(DataRow rs) : base(rs)
+ {
+ Name = Convert.ToString(rs["CONSTRAINT_NAME"]);
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-03-29 14:23:44 UTC (rev 5568)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-03-30 01:50:31 UTC (rev 5569)
@@ -138,6 +138,7 @@
<Compile Include="Dialect\MsSql7Dialect.cs" />
<Compile Include="Dialect\MySQLDialect.cs" />
<Compile Include="Dialect\PostgreSQLDialect.cs" />
+ <Compile Include="Dialect\Schema\PostgreSQLMetadata.cs" />
<Compile Include="Dialect\SQLiteDialect.cs" />
<Compile Include="Dialect\SybaseSQLAnywhere10Dialect.cs" />
<Compile Include="Dialect\SybaseSQLAnywhere11Dialect.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fab...@us...> - 2011-03-29 14:23:51
|
Revision: 5568
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5568&view=rev
Author: fabiomaulo
Date: 2011-03-29 14:23:44 +0000 (Tue, 29 Mar 2011)
Log Message:
-----------
Fix NH-2605
Modified Paths:
--------------
trunk/nhibernate/releasenotes.txt
trunk/nhibernate/src/NHibernate/Driver/DriverBase.cs
trunk/nhibernate/src/NHibernate/Driver/IDriver.cs
trunk/nhibernate/src/NHibernate/Driver/MySqlDataDriver.cs
trunk/nhibernate/src/NHibernate/Driver/NpgsqlDriver.cs
trunk/nhibernate/src/NHibernate/Driver/SQLite20Driver.cs
trunk/nhibernate/src/NHibernate/Driver/SqlClientDriver.cs
trunk/nhibernate/src/NHibernate/Driver/SqlServerCeDriver.cs
trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs
trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs
trunk/nhibernate/src/NHibernate/NHibernate.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Driver/BasicResultSetsCommand.cs
trunk/nhibernate/src/NHibernate/Driver/IResultSetsCommand.cs
Modified: trunk/nhibernate/releasenotes.txt
===================================================================
--- trunk/nhibernate/releasenotes.txt 2011-03-28 19:43:25 UTC (rev 5567)
+++ trunk/nhibernate/releasenotes.txt 2011-03-29 14:23:44 UTC (rev 5568)
@@ -6,6 +6,7 @@
* [NH-2550] - Allow public access to FieldInterceptor Session (IFieldInterceptor changed)
* [NH-2593] - Form Microsoft SQL Server the default batch-size (adonet.batch_size) is set to 20 where not explicit defined in the session-factory configuration
* - ICollectionPersister added property to fix [NH-2489]
+ * [NH-2605] Refactorize MultiQuery/MultiCriteria implementation to delegate responsibility to IDrive (IDrive changed).
Build 3.1.0.GA (rev5425)
=============================
Added: trunk/nhibernate/src/NHibernate/Driver/BasicResultSetsCommand.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Driver/BasicResultSetsCommand.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Driver/BasicResultSetsCommand.cs 2011-03-29 14:23:44 UTC (rev 5568)
@@ -0,0 +1,307 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using NHibernate.Engine;
+using NHibernate.SqlCommand;
+using NHibernate.SqlTypes;
+
+namespace NHibernate.Driver
+{
+ public class BasicResultSetsCommand: IResultSetsCommand
+ {
+ private static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof(BasicResultSetsCommand));
+
+ private readonly ISessionImplementor session;
+ private readonly Dialect.Dialect dialect;
+ private readonly IBatcher batcher;
+ private int resultSetsCount = 0;
+ private readonly List<SqlType> types = new List<SqlType>();
+ private SqlString sqlString = new SqlString();
+
+ public BasicResultSetsCommand(ISessionImplementor session)
+ {
+ this.session = session;
+ dialect = session.Factory.Dialect;
+ batcher = session.Batcher;
+ }
+
+ public virtual void Append(SqlCommandInfo commandInfo)
+ {
+ resultSetsCount++;
+ sqlString = sqlString.Append(commandInfo.Text).Append(";").Append(Environment.NewLine);
+ types.AddRange(commandInfo.ParameterTypes);
+ }
+
+ public int ParametersCount
+ {
+ get { return types.Count; }
+ }
+
+ public bool HasQueries
+ {
+ get { return resultSetsCount > 0; }
+ }
+
+ public SqlString Sql
+ {
+ get { return sqlString; }
+ }
+
+ public virtual IDataReader GetReader(QueryParameters[] queryParameters, int? commandTimeout)
+ {
+ SqlType[] sqlTypes = types.ToArray();
+ var command= batcher.PrepareQueryCommand(CommandType.Text, sqlString, sqlTypes);
+ if(commandTimeout.HasValue)
+ {
+ command.CommandTimeout = commandTimeout.Value;
+ }
+ log.Info(command.CommandText);
+
+ BindParameters(command, queryParameters);
+ return new BatcherDataReaderWrapper(batcher, command);
+ }
+
+ protected virtual void BindParameters(IDbCommand command, QueryParameters[] queryParameters)
+ {
+ int colIndex = 0;
+
+ for (int queryIndex = 0; queryIndex < resultSetsCount; queryIndex++)
+ {
+ int limitParameterSpan = BindLimitParametersFirstIfNeccesary(command, queryParameters[queryIndex], colIndex);
+ colIndex = BindQueryParameters(command, queryParameters[queryIndex], colIndex + limitParameterSpan);
+ colIndex += BindLimitParametersLastIfNeccesary(command, queryParameters[queryIndex], colIndex);
+ }
+ }
+
+ protected virtual int BindLimitParametersLastIfNeccesary(IDbCommand command, QueryParameters parameter, int colIndex)
+ {
+ RowSelection selection = parameter.RowSelection;
+ if (Loader.Loader.UseLimit(selection, dialect) && !dialect.BindLimitParametersFirst)
+ {
+ return Loader.Loader.BindLimitParameters(command, colIndex, selection, session);
+ }
+ return 0;
+ }
+
+ protected virtual int BindQueryParameters(IDbCommand command, QueryParameters parameter, int colIndex)
+ {
+ colIndex += parameter.BindParameters(command, colIndex, session);
+ return colIndex;
+ }
+
+ protected virtual int BindLimitParametersFirstIfNeccesary(IDbCommand command, QueryParameters parameter, int colIndex)
+ {
+ int limitParameterSpan = 0;
+ RowSelection selection = parameter.RowSelection;
+ if (Loader.Loader.UseLimit(selection, dialect) && dialect.BindLimitParametersFirst)
+ {
+ limitParameterSpan += Loader.Loader.BindLimitParameters(command, colIndex, selection, session);
+ }
+ return limitParameterSpan;
+ }
+ }
+
+ /// <summary>
+ /// Datareader wrapper with the same life cycle of its command (through the batcher)
+ /// </summary>
+ public class BatcherDataReaderWrapper: IDataReader
+ {
+ private readonly IBatcher batcher;
+ private readonly IDbCommand command;
+ private readonly IDataReader reader;
+
+ public BatcherDataReaderWrapper(IBatcher batcher, IDbCommand command)
+ {
+ if (batcher == null)
+ {
+ throw new ArgumentNullException("batcher");
+ }
+ if (command == null)
+ {
+ throw new ArgumentNullException("command");
+ }
+ this.batcher = batcher;
+ this.command = command;
+ reader = batcher.ExecuteReader(command);
+ }
+
+ public void Dispose()
+ {
+ batcher.CloseCommand(command, reader);
+ }
+
+ #region IDataRecord Members
+
+ public string GetName(int i)
+ {
+ return reader.GetName(i);
+ }
+
+ public string GetDataTypeName(int i)
+ {
+ return reader.GetDataTypeName(i);
+ }
+
+ public System.Type GetFieldType(int i)
+ {
+ return reader.GetFieldType(i);
+ }
+
+ public object GetValue(int i)
+ {
+ return reader.GetDecimal(i);
+ }
+
+ public int GetValues(object[] values)
+ {
+ return reader.GetValues(values);
+ }
+
+ public int GetOrdinal(string name)
+ {
+ return reader.GetOrdinal(name);
+ }
+
+ public bool GetBoolean(int i)
+ {
+ return reader.GetBoolean(i);
+ }
+
+ public byte GetByte(int i)
+ {
+ return reader.GetByte(i);
+ }
+
+ public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)
+ {
+ return reader.GetBytes(i, fieldOffset, buffer, bufferoffset, length);
+ }
+
+ public char GetChar(int i)
+ {
+ return reader.GetChar(i);
+ }
+
+ public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length)
+ {
+ return reader.GetChars(i, fieldoffset, buffer, bufferoffset, length);
+ }
+
+ public Guid GetGuid(int i)
+ {
+ return reader.GetGuid(i);
+ }
+
+ public short GetInt16(int i)
+ {
+ return reader.GetInt16(i);
+ }
+
+ public int GetInt32(int i)
+ {
+ return reader.GetInt32(i);
+ }
+
+ public long GetInt64(int i)
+ {
+ return reader.GetInt64(i);
+ }
+
+ public float GetFloat(int i)
+ {
+ return reader.GetFloat(i);
+ }
+
+ public double GetDouble(int i)
+ {
+ return reader.GetDouble(i);
+ }
+
+ public string GetString(int i)
+ {
+ return reader.GetString(i);
+ }
+
+ public decimal GetDecimal(int i)
+ {
+ return reader.GetDecimal(i);
+ }
+
+ public DateTime GetDateTime(int i)
+ {
+ return reader.GetDateTime(i);
+ }
+
+ public IDataReader GetData(int i)
+ {
+ return reader.GetData(i);
+ }
+
+ public bool IsDBNull(int i)
+ {
+ return reader.IsDBNull(i);
+ }
+
+ public int FieldCount
+ {
+ get { return reader.FieldCount; }
+ }
+
+ public object this[int i]
+ {
+ get { return reader[i]; }
+ }
+
+ public object this[string name]
+ {
+ get { return reader[name]; }
+ }
+
+ #endregion
+
+ public override bool Equals(object obj)
+ {
+ return reader.Equals(obj);
+ }
+
+ public override int GetHashCode()
+ {
+ return reader.GetHashCode();
+ }
+
+ public void Close()
+ {
+ batcher.CloseCommand(command, reader);
+ }
+
+ public DataTable GetSchemaTable()
+ {
+ return reader.GetSchemaTable();
+ }
+
+ public bool NextResult()
+ {
+ return reader.NextResult();
+ }
+
+ public bool Read()
+ {
+ return reader.Read();
+ }
+
+ public int Depth
+ {
+ get { return reader.Depth; }
+ }
+
+ public bool IsClosed
+ {
+ get { return reader.IsClosed; }
+ }
+
+ public int RecordsAffected
+ {
+ get { return reader.RecordsAffected; }
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Driver/DriverBase.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Driver/DriverBase.cs 2011-03-28 19:43:25 UTC (rev 5567)
+++ trunk/nhibernate/src/NHibernate/Driver/DriverBase.cs 2011-03-29 14:23:44 UTC (rev 5568)
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
using System.Data;
-
+using NHibernate.Engine;
using NHibernate.SqlCommand;
using NHibernate.SqlTypes;
using NHibernate.Util;
@@ -166,11 +166,16 @@
private void SetCommandText(IDbCommand cmd, SqlString sqlString)
{
- SqlStringFormatter formatter = new SqlStringFormatter(this, MultipleQueriesSeparator);
+ SqlStringFormatter formatter = GetSqlStringFormatter();
formatter.Format(sqlString);
cmd.CommandText = formatter.GetFormattedText();
}
+ protected virtual SqlStringFormatter GetSqlStringFormatter()
+ {
+ return new SqlStringFormatter(this, ";");
+ }
+
private void SetCommandParameters(IDbCommand cmd, SqlType[] sqlTypes)
{
for (int i = 0; i < sqlTypes.Length; i++)
@@ -229,6 +234,16 @@
cmd.Parameters.Add(parameter);
}
+ public virtual IResultSetsCommand GetResultSetsCommand(ISessionImplementor session)
+ {
+ throw new NotSupportedException(string.Format("The driver {0} does not support multiple queries.", GetType().FullName));
+ }
+
+ public virtual bool SupportsMultipleQueries
+ {
+ get { return false; }
+ }
+
protected virtual IDbDataParameter CloneParameter(IDbCommand cmd, IDbDataParameter originalParameter)
{
var clone = cmd.CreateParameter();
@@ -263,15 +278,5 @@
param.Direction = ParameterDirection.Output;
return param;
}
-
- public virtual bool SupportsMultipleQueries
- {
- get { return false; }
- }
-
- public virtual string MultipleQueriesSeparator
- {
- get { return ";"; }
- }
}
}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Driver/IDriver.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Driver/IDriver.cs 2011-03-28 19:43:25 UTC (rev 5567)
+++ trunk/nhibernate/src/NHibernate/Driver/IDriver.cs 2011-03-29 14:23:44 UTC (rev 5568)
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Data;
+using NHibernate.Engine;
using NHibernate.SqlCommand;
using NHibernate.SqlTypes;
@@ -60,17 +61,6 @@
bool SupportsMultipleOpenReaders { get; }
/// <summary>
- /// Can we issue several select queries in a single query, and get
- /// several result sets back?
- /// </summary>
- bool SupportsMultipleQueries { get; }
-
- /// <summary>
- /// How we separate the queries when we use multiply queries.
- /// </summary>
- string MultipleQueriesSeparator { get; }
-
- /// <summary>
/// Generates an IDbCommand from the SqlString according to the requirements of the DataProvider.
/// </summary>
/// <param name="type">The <see cref="CommandType"/> of the command to generate.</param>
@@ -106,5 +96,8 @@
/// 'select ... from MyTable t where t.Col1 = ? and t.Col2 = ?'
/// </remarks>
void ExpandQueryParameters(IDbCommand cmd, SqlString sqlString);
+
+ IResultSetsCommand GetResultSetsCommand(ISessionImplementor session);
+ bool SupportsMultipleQueries { get; }
}
}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Driver/IResultSetsCommand.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Driver/IResultSetsCommand.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Driver/IResultSetsCommand.cs 2011-03-29 14:23:44 UTC (rev 5568)
@@ -0,0 +1,15 @@
+using System.Data;
+using NHibernate.Engine;
+using NHibernate.SqlCommand;
+
+namespace NHibernate.Driver
+{
+ public interface IResultSetsCommand
+ {
+ void Append(SqlCommandInfo commandInfo);
+ int ParametersCount { get; }
+ bool HasQueries { get; }
+ SqlString Sql { get; }
+ IDataReader GetReader(QueryParameters[] queryParameters, int? commandTimeout);
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Driver/MySqlDataDriver.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Driver/MySqlDataDriver.cs 2011-03-28 19:43:25 UTC (rev 5567)
+++ trunk/nhibernate/src/NHibernate/Driver/MySqlDataDriver.cs 2011-03-29 14:23:44 UTC (rev 5568)
@@ -79,6 +79,11 @@
get { return false; }
}
+ public override IResultSetsCommand GetResultSetsCommand(Engine.ISessionImplementor session)
+ {
+ return new BasicResultSetsCommand(session);
+ }
+
public override bool SupportsMultipleQueries
{
get { return true; }
Modified: trunk/nhibernate/src/NHibernate/Driver/NpgsqlDriver.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Driver/NpgsqlDriver.cs 2011-03-28 19:43:25 UTC (rev 5567)
+++ trunk/nhibernate/src/NHibernate/Driver/NpgsqlDriver.cs 2011-03-29 14:23:44 UTC (rev 5568)
@@ -63,6 +63,11 @@
get { return true; }
}
+ public override IResultSetsCommand GetResultSetsCommand(Engine.ISessionImplementor session)
+ {
+ return new BasicResultSetsCommand(session);
+ }
+
public override bool SupportsMultipleQueries
{
get { return true; }
Modified: trunk/nhibernate/src/NHibernate/Driver/SQLite20Driver.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Driver/SQLite20Driver.cs 2011-03-28 19:43:25 UTC (rev 5567)
+++ trunk/nhibernate/src/NHibernate/Driver/SQLite20Driver.cs 2011-03-29 14:23:44 UTC (rev 5568)
@@ -76,7 +76,12 @@
{
get { return false; }
}
-
+
+ public override IResultSetsCommand GetResultSetsCommand(Engine.ISessionImplementor session)
+ {
+ return new BasicResultSetsCommand(session);
+ }
+
public override bool SupportsMultipleQueries
{
get { return true; }
Modified: trunk/nhibernate/src/NHibernate/Driver/SqlClientDriver.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Driver/SqlClientDriver.cs 2011-03-28 19:43:25 UTC (rev 5567)
+++ trunk/nhibernate/src/NHibernate/Driver/SqlClientDriver.cs 2011-03-29 14:23:44 UTC (rev 5568)
@@ -2,6 +2,7 @@
using System.Data.SqlClient;
using NHibernate.AdoNet;
using NHibernate.Dialect;
+using NHibernate.Engine;
using NHibernate.SqlCommand;
using NHibernate.SqlTypes;
@@ -91,11 +92,6 @@
get { return false; }
}
- public override bool SupportsMultipleQueries
- {
- get { return true; }
- }
-
public override IDbCommand GenerateCommand(CommandType type, SqlString sqlString, SqlType[] parameterTypes)
{
IDbCommand command = base.GenerateCommand(type, sqlString, parameterTypes);
@@ -189,5 +185,15 @@
}
#endregion
+
+ public override IResultSetsCommand GetResultSetsCommand(ISessionImplementor session)
+ {
+ return new BasicResultSetsCommand(session);
+ }
+
+ public override bool SupportsMultipleQueries
+ {
+ get { return true; }
+ }
}
}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Driver/SqlServerCeDriver.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Driver/SqlServerCeDriver.cs 2011-03-28 19:43:25 UTC (rev 5567)
+++ trunk/nhibernate/src/NHibernate/Driver/SqlServerCeDriver.cs 2011-03-29 14:23:44 UTC (rev 5568)
@@ -98,6 +98,11 @@
return command;
}
+ public override IResultSetsCommand GetResultSetsCommand(Engine.ISessionImplementor session)
+ {
+ return new BasicResultSetsCommand(session);
+ }
+
public override bool SupportsMultipleQueries
{
get { return true; }
Modified: trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs 2011-03-28 19:43:25 UTC (rev 5567)
+++ trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs 2011-03-29 14:23:44 UTC (rev 5568)
@@ -1,7 +1,6 @@
using System;
using System.Collections;
using System.Collections.Generic;
-using System.Data;
using System.Diagnostics;
using Iesi.Collections;
using Iesi.Collections.Generic;
@@ -11,7 +10,6 @@
using NHibernate.Engine;
using NHibernate.Loader.Criteria;
using NHibernate.SqlCommand;
-using NHibernate.SqlTypes;
using NHibernate.Transform;
using NHibernate.Type;
@@ -27,8 +25,6 @@
private readonly ISessionFactoryImplementor factory;
private readonly List<CriteriaQueryTranslator> translators = new List<CriteriaQueryTranslator>();
private readonly List<QueryParameters> parameters = new List<QueryParameters>();
- private readonly List<SqlType> types = new List<SqlType>();
- private SqlString sqlString = new SqlString();
private readonly List<CriteriaLoader> loaders = new List<CriteriaLoader>();
private readonly Dialect.Dialect dialect;
private IList criteriaResults;
@@ -38,6 +34,7 @@
private string cacheRegion;
private IResultTransformer resultTransformer;
private readonly Dictionary<CriteriaLoader, int> loaderToResultIndex = new Dictionary<CriteriaLoader, int>();
+ private readonly IResultSetsCommand resultSetsCommand;
/// <summary>
/// Initializes a new instance of the <see cref="MultiCriteriaImpl"/> class.
@@ -47,20 +44,18 @@
internal MultiCriteriaImpl(SessionImpl session, ISessionFactoryImplementor factory)
{
IDriver driver = session.Factory.ConnectionProvider.Driver;
- if (!driver.SupportsMultipleQueries)
- {
- throw new NotSupportedException(
- string.Format("The driver {0} does not support multiple queries.", driver.GetType().FullName));
- }
dialect = session.Factory.Dialect;
+ resultSetsCommand = driver.GetResultSetsCommand(session);
this.session = session;
this.factory = factory;
}
-
public SqlString SqlString
{
- get { return sqlString; }
+ get
+ {
+ return resultSetsCommand.Sql;
+ }
}
public IList List()
@@ -179,11 +174,8 @@
translators.Add(translator);
QueryParameters queryParameters = translator.GetQueryParameters();
parameters.Add(queryParameters);
- SqlCommandInfo commandInfo = loader.GetQueryStringAndTypes(session, queryParameters, types.Count);
- sqlString = sqlString.Append(commandInfo.Text)
- .Append(session.Factory.ConnectionProvider.Driver.MultipleQueriesSeparator)
- .Append(Environment.NewLine);
- types.AddRange(commandInfo.ParameterTypes);
+ SqlCommandInfo commandInfo = loader.GetQueryStringAndTypes(session, queryParameters, resultSetsCommand.ParametersCount);
+ resultSetsCommand.Append(commandInfo);
}
}
@@ -197,15 +189,11 @@
}
int rowCount = 0;
- using (
- IDbCommand command =
- session.Batcher.PrepareCommand(CommandType.Text, sqlString, types.ToArray()))
+ using (var reader = resultSetsCommand.GetReader(parameters.ToArray(), null))
{
- BindParameters(command);
ArrayList[] hydratedObjects = new ArrayList[loaders.Count];
List<EntityKey[]>[] subselectResultKeys = new List<EntityKey[]>[loaders.Count];
bool[] createSubselects = new bool[loaders.Count];
- IDataReader reader = session.Batcher.ExecuteReader(command);
try
{
for (int i = 0; i < loaders.Count; i++)
@@ -254,13 +242,10 @@
}
catch (Exception e)
{
- log.Error("Error executing multi criteria : [" + command.CommandText + "]");
- throw new HibernateException("Error executing multi criteria : [" + command.CommandText + "]", e);
+ var message = string.Format("Failed to execute multi criteria: [{0}]", resultSetsCommand.Sql);
+ log.Error(message, e);
+ throw new HibernateException(message, e);
}
- finally
- {
- session.Batcher.CloseCommand(command, reader);
- }
for (int i = 0; i < loaders.Count; i++)
{
CriteriaLoader loader = loaders[i];
@@ -310,48 +295,6 @@
}
}
- private void BindParameters(IDbCommand command)
- {
- int colIndex = 0;
-
- for (int queryIndex = 0; queryIndex < loaders.Count; queryIndex++)
- {
- int limitParameterSpan = BindLimitParametersFirstIfNeccesary(command, queryIndex, colIndex);
- colIndex = BindQueryParameters(command, queryIndex, colIndex + limitParameterSpan);
- colIndex += BindLimitParametersLastIfNeccesary(command, queryIndex, colIndex);
- }
- }
-
- private int BindLimitParametersLastIfNeccesary(IDbCommand command, int queryIndex, int colIndex)
- {
- QueryParameters parameter = parameters[queryIndex];
- RowSelection selection = parameter.RowSelection;
- if (Loader.Loader.UseLimit(selection, dialect) && !dialect.BindLimitParametersFirst)
- {
- return Loader.Loader.BindLimitParameters(command, colIndex, selection, session);
- }
- return 0;
- }
-
- private int BindQueryParameters(IDbCommand command, int queryIndex, int colIndex)
- {
- QueryParameters parameter = parameters[queryIndex];
- colIndex += parameter.BindParameters(command, colIndex, session);
- return colIndex;
- }
-
- private int BindLimitParametersFirstIfNeccesary(IDbCommand command, int queryIndex, int colIndex)
- {
- int limitParametersSpan = 0;
- QueryParameters parameter = parameters[queryIndex];
- RowSelection selection = parameter.RowSelection;
- if (Loader.Loader.UseLimit(selection, dialect) && dialect.BindLimitParametersFirst)
- {
- limitParametersSpan += Loader.Loader.BindLimitParameters(command, colIndex, selection, session);
- }
- return limitParametersSpan;
- }
-
public IMultiCriteria Add(System.Type resultGenericListType, ICriteria criteria)
{
criteriaQueries.Add(criteria);
Modified: trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs 2011-03-28 19:43:25 UTC (rev 5567)
+++ trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs 2011-03-29 14:23:44 UTC (rev 5568)
@@ -1,8 +1,8 @@
using System;
using System.Collections;
using System.Collections.Generic;
-using System.Data;
using System.Diagnostics;
+using System.Linq;
using Iesi.Collections;
using Iesi.Collections.Generic;
using NHibernate.Cache;
@@ -13,7 +13,6 @@
using NHibernate.Loader.Custom;
using NHibernate.Loader.Custom.Sql;
using NHibernate.SqlCommand;
-using NHibernate.SqlTypes;
using NHibernate.Transform;
using NHibernate.Type;
@@ -34,23 +33,18 @@
private bool isCacheable;
private readonly ISessionImplementor session;
private IResultTransformer resultTransformer;
- private readonly List<SqlType> types = new List<SqlType>();
- private SqlString sqlString;
private readonly Dialect.Dialect dialect;
private bool forceCacheRefresh;
private QueryParameters combinedParameters;
private FlushMode flushMode = FlushMode.Unspecified;
private FlushMode sessionFlushMode = FlushMode.Unspecified;
+ private readonly IResultSetsCommand resultSetsCommand;
public MultiQueryImpl(ISessionImplementor session)
{
IDriver driver = session.Factory.ConnectionProvider.Driver;
- if (!driver.SupportsMultipleQueries)
- {
- throw new NotSupportedException(
- string.Format("The driver {0} does not support multiple queries.", driver.GetType().FullName));
- }
dialect = session.Factory.Dialect;
+ resultSetsCommand = driver.GetResultSetsCommand(session);
this.session = session;
}
@@ -508,126 +502,121 @@
}
int rowCount = 0;
- IDbCommand command = PrepareQueriesCommand();
-
- BindParameters(command);
-
ArrayList results = new ArrayList();
- log.Info(command.CommandText);
- if (commandTimeout != RowSelection.NoValue)
- command.CommandTimeout = commandTimeout;
ArrayList[] hydratedObjects = new ArrayList[Translators.Count];
List<EntityKey[]>[] subselectResultKeys = new List<EntityKey[]>[Translators.Count];
bool[] createSubselects = new bool[Translators.Count];
- IDataReader reader = session.Batcher.ExecuteReader(command);
- try
+
+ using (var reader = resultSetsCommand.GetReader(Parameters.ToArray(), commandTimeout != RowSelection.NoValue ? commandTimeout : (int?)null))
{
- if (log.IsDebugEnabled)
+ try
{
- log.DebugFormat("Executing {0} queries", translators.Count);
- }
- for (int i = 0; i < translators.Count; i++)
- {
- ITranslator translator = Translators[i];
- QueryParameters parameter = Parameters[i];
- IList tempResults;
- if (resultCollectionGenericType[i] == typeof(object))
+ if (log.IsDebugEnabled)
{
- tempResults = new ArrayList();
+ log.DebugFormat("Executing {0} queries", translators.Count);
}
- else
+ for (int i = 0; i < translators.Count; i++)
{
- tempResults = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(resultCollectionGenericType[i]));
- }
- int entitySpan = translator.Loader.EntityPersisters.Length;
- hydratedObjects[i] = entitySpan > 0 ? new ArrayList() : null;
- RowSelection selection = parameter.RowSelection;
- int maxRows = Loader.Loader.HasMaxRows(selection) ? selection.MaxRows : int.MaxValue;
- if (!dialect.SupportsLimitOffset || !Loader.Loader.UseLimit(selection, dialect))
- {
- Loader.Loader.Advance(reader, selection);
- }
+ ITranslator translator = Translators[i];
+ QueryParameters parameter = Parameters[i];
+ IList tempResults;
+ if (resultCollectionGenericType[i] == typeof (object))
+ {
+ tempResults = new ArrayList();
+ }
+ else
+ {
+ tempResults = (IList) Activator.CreateInstance(typeof (List<>).MakeGenericType(resultCollectionGenericType[i]));
+ }
+ int entitySpan = translator.Loader.EntityPersisters.Length;
+ hydratedObjects[i] = entitySpan > 0 ? new ArrayList() : null;
+ RowSelection selection = parameter.RowSelection;
+ int maxRows = Loader.Loader.HasMaxRows(selection) ? selection.MaxRows : int.MaxValue;
+ if (!dialect.SupportsLimitOffset || !Loader.Loader.UseLimit(selection, dialect))
+ {
+ Loader.Loader.Advance(reader, selection);
+ }
- LockMode[] lockModeArray = translator.Loader.GetLockModes(parameter.LockModes);
- EntityKey optionalObjectKey = Loader.Loader.GetOptionalObjectKey(parameter, session);
+ LockMode[] lockModeArray = translator.Loader.GetLockModes(parameter.LockModes);
+ EntityKey optionalObjectKey = Loader.Loader.GetOptionalObjectKey(parameter, session);
- createSubselects[i] = translator.Loader.IsSubselectLoadingEnabled;
- subselectResultKeys[i] = createSubselects[i] ? new List<EntityKey[]>() : null;
+ createSubselects[i] = translator.Loader.IsSubselectLoadingEnabled;
+ subselectResultKeys[i] = createSubselects[i] ? new List<EntityKey[]>() : null;
- translator.Loader.HandleEmptyCollections(parameter.CollectionKeys, reader, session);
- EntityKey[] keys = new EntityKey[entitySpan]; // we can reuse it each time
+ translator.Loader.HandleEmptyCollections(parameter.CollectionKeys, reader, session);
+ EntityKey[] keys = new EntityKey[entitySpan]; // we can reuse it each time
- if (log.IsDebugEnabled)
- {
- log.Debug("processing result set");
- }
-
- int count;
- for (count = 0; count < maxRows && reader.Read(); count++)
- {
if (log.IsDebugEnabled)
{
- log.Debug("result set row: " + count);
+ log.Debug("processing result set");
}
- rowCount++;
+ int count;
+ for (count = 0; count < maxRows && reader.Read(); count++)
+ {
+ if (log.IsDebugEnabled)
+ {
+ log.Debug("result set row: " + count);
+ }
- object result =
- translator.Loader.GetRowFromResultSet(reader,
- session,
- parameter,
- lockModeArray,
- optionalObjectKey,
- hydratedObjects[i],
- keys,
- true);
+ rowCount++;
- tempResults.Add(result);
+ object result =
+ translator.Loader.GetRowFromResultSet(reader,
+ session,
+ parameter,
+ lockModeArray,
+ optionalObjectKey,
+ hydratedObjects[i],
+ keys,
+ true);
- if (createSubselects[i])
+ tempResults.Add(result);
+
+ if (createSubselects[i])
+ {
+ subselectResultKeys[i].Add(keys);
+ keys = new EntityKey[entitySpan]; //can't reuse in this case
+ }
+ }
+
+ if (log.IsDebugEnabled)
{
- subselectResultKeys[i].Add(keys);
- keys = new EntityKey[entitySpan]; //can't reuse in this case
+ log.Debug(string.Format("done processing result set ({0} rows)", count));
}
- }
- if (log.IsDebugEnabled)
- {
- log.Debug(string.Format("done processing result set ({0} rows)", count));
- }
+ results.Add(tempResults);
- results.Add(tempResults);
+ if (log.IsDebugEnabled)
+ {
+ log.DebugFormat("Query {0} returned {1} results", i, tempResults.Count);
+ }
- if (log.IsDebugEnabled)
- {
- log.DebugFormat("Query {0} returned {1} results", i, tempResults.Count);
+ reader.NextResult();
}
-
- reader.NextResult();
}
- }
- catch (Exception ex)
- {
- log.Error("Failed to execute multi query: [" + command.CommandText + "]", ex);
- throw new HibernateException("Failed to execute multi query: [" + command.CommandText + "]", ex);
- }
- finally
- {
- session.Batcher.CloseCommand(command, reader);
- }
- for (int i = 0; i < translators.Count; i++)
- {
- ITranslator translator = translators[i];
- QueryParameters parameter = parameters[i];
+ catch (Exception ex)
+ {
+ var message = string.Format("Failed to execute multi query: [{0}]", resultSetsCommand.Sql);
+ log.Error(message, ex);
+ throw new HibernateException(message, ex);
+ }
- translator.Loader.InitializeEntitiesAndCollections(hydratedObjects[i], reader, session, false);
-
- if (createSubselects[i])
+ for (int i = 0; i < translators.Count; i++)
{
- translator.Loader.CreateSubselects(subselectResultKeys[i], parameter, session);
+ ITranslator translator = translators[i];
+ QueryParameters parameter = parameters[i];
+
+ translator.Loader.InitializeEntitiesAndCollections(hydratedObjects[i], reader, session, false);
+
+ if (createSubselects[i])
+ {
+ translator.Loader.CreateSubselects(subselectResultKeys[i], parameter, session);
+ }
}
}
+
if (statsEnabled)
{
stopWatch.Stop();
@@ -636,25 +625,18 @@
return results;
}
- private IDbCommand PrepareQueriesCommand()
- {
- SqlType[] sqlTypes = types.ToArray();
- return session.Batcher.PrepareQueryCommand(CommandType.Text, SqlString, sqlTypes);
- }
-
protected SqlString SqlString
{
get
{
- if (sqlString == null)
+ if (!resultSetsCommand.HasQueries)
AggregateQueriesInformation();
- return sqlString;
+ return resultSetsCommand.Sql;
}
}
private void AggregateQueriesInformation()
{
- sqlString = new SqlString();
foreach (AbstractQueryImpl query in queries)
{
QueryParameters queryParameters = query.GetQueryParameters();
@@ -665,9 +647,8 @@
translators.Add(translator);
parameters.Add(queryParameters);
queryParameters = GetFilteredQueryParameters(queryParameters, translator);
- SqlCommandInfo commandInfo = translator.Loader.GetQueryStringAndTypes(session, queryParameters, types.Count);
- sqlString = sqlString.Append(commandInfo.Text).Append(session.Factory.ConnectionProvider.Driver.MultipleQueriesSeparator).Append(Environment.NewLine);
- types.AddRange(commandInfo.ParameterTypes);
+ SqlCommandInfo commandInfo = translator.Loader.GetQueryStringAndTypes(session, queryParameters, resultSetsCommand.ParametersCount);
+ resultSetsCommand.Append(commandInfo);
}
}
}
@@ -706,36 +687,6 @@
return filteredQueryParameters;
}
- private void BindParameters(IDbCommand command)
- {
- int colIndex = 0;
-
- for (int queryIndex = 0; queryIndex < queries.Count; queryIndex++)
- {
- int limitParameterSpan = BindLimitParametersFirstIfNeccesary(command, queryIndex, colIndex);
- colIndex = BindQueryParameters(command, queryIndex, colIndex + limitParameterSpan);
- colIndex += BindLimitParametersLastIfNeccesary(command, queryIndex, colIndex);
- }
- }
-
- private int BindLimitParametersLastIfNeccesary(IDbCommand command, int queryIndex, int colIndex)
- {
- QueryParameters parameter = parameters[queryIndex];
- RowSelection selection = parameter.RowSelection;
- if (Loader.Loader.UseLimit(selection, dialect) && !dialect.BindLimitParametersFirst)
- {
- return Loader.Loader.BindLimitParameters(command, colIndex, selection, session);
- }
- return 0;
- }
-
- private int BindQueryParameters(IDbCommand command, int queryIndex, int colIndex)
- {
- QueryParameters parameter = Parameters[queryIndex];
- colIndex += parameter.BindParameters(command, colIndex, session);
- return colIndex;
- }
-
public object GetResult(string key)
{
if (queryResults == null)
@@ -751,18 +702,6 @@
return queryResults[queryResultPositions[key]];
}
- private int BindLimitParametersFirstIfNeccesary(IDbCommand command, int queryIndex, int colIndex)
- {
- int limitParameterSpan = 0;
- QueryParameters parameter = Parameters[queryIndex];
- RowSelection selection = parameter.RowSelection;
- if (Loader.Loader.UseLimit(selection, dialect) && dialect.BindLimitParametersFirst)
- {
- limitParameterSpan += Loader.Loader.BindLimitParameters(command, colIndex, selection, session);
- }
- return limitParameterSpan;
- }
-
public override string ToString()
{
return "Multi Query: [" + SqlString + "]";
@@ -821,7 +760,7 @@
{
get
{
- if (sqlString == null)
+ if (!resultSetsCommand.HasQueries)
{
AggregateQueriesInformation();
}
@@ -856,7 +795,7 @@
{
get
{
- if (sqlString == null)
+ if (!resultSetsCommand.HasQueries)
AggregateQueriesInformation();
return parameters;
}
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-03-28 19:43:25 UTC (rev 5567)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-03-29 14:23:44 UTC (rev 5568)
@@ -146,6 +146,7 @@
<Compile Include="Driver\DriverBase.cs" />
<Compile Include="Driver\FirebirdDriver.cs" />
<Compile Include="Driver\IDriver.cs" />
+ <Compile Include="Driver\IResultSetsCommand.cs" />
<Compile Include="Driver\MySqlDataDriver.cs" />
<Compile Include="Driver\NDataReader.cs" />
<Compile Include="Driver\NHybridDataReader.cs" />
@@ -155,6 +156,7 @@
<Compile Include="Driver\OracleClientDriver.cs" />
<Compile Include="Driver\OracleDataClientDriver.cs" />
<Compile Include="Driver\SqlClientDriver.cs" />
+ <Compile Include="Driver\BasicResultSetsCommand.cs" />
<Compile Include="Driver\SQLiteDriver.cs" />
<Compile Include="Engine\Cascade.cs" />
<Compile Include="Engine\IBatcher.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fab...@us...> - 2011-03-28 19:43:31
|
Revision: 5567
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5567&view=rev
Author: fabiomaulo
Date: 2011-03-28 19:43:25 +0000 (Mon, 28 Mar 2011)
Log Message:
-----------
Fix NH-2015 (thanks to John Davidson)
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Criterion/Order.cs
trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs
Modified: trunk/nhibernate/src/NHibernate/Criterion/Order.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Criterion/Order.cs 2011-03-28 18:27:11 UTC (rev 5566)
+++ trunk/nhibernate/src/NHibernate/Criterion/Order.cs 2011-03-28 19:43:25 UTC (rev 5567)
@@ -20,7 +20,8 @@
protected bool ascending;
protected string propertyName;
protected IProjection projection;
-
+ private bool ignoreCase;
+
public Order(IProjection projection, bool ascending)
{
this.projection = projection;
@@ -38,7 +39,7 @@
/// </summary>
public virtual SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery)
{
- if (projection!=null)
+ if (projection != null)
{
SqlString sb = new SqlString();
SqlString produced = this.projection.ToSqlString(criteria, 0, criteriaQuery, new Dictionary<string, IFilter>());
@@ -49,14 +50,14 @@
}
string[] columns = criteriaQuery.GetColumnAliasesUsingProjection(criteria, propertyName);
+ Type.IType type = criteriaQuery.GetTypeUsingProjection(criteria, propertyName);
StringBuilder fragment = new StringBuilder();
-
ISessionFactoryImplementor factory = criteriaQuery.Factory;
for (int i = 0; i < columns.Length; i++)
{
- // TODO H3: bool lower = _ignoreCase && type.SqlTypes( factory )[ i ] == Types.VARCHAR
- bool lower = false;
+ bool lower = ignoreCase && IsStringType(type.SqlTypes(factory)[i]);
+
if (lower)
{
fragment.Append(factory.Dialect.LowercaseFunction)
@@ -82,7 +83,7 @@
public override string ToString()
{
- return (projection!=null?projection.ToString():propertyName) + (ascending ? " asc" : " desc");
+ return (projection != null ? projection.ToString() : propertyName) + (ascending ? " asc" : " desc");
}
/// <summary>
@@ -124,13 +125,36 @@
{
return new Order(propertyName, false);
}
-
+
public TypedValue[] GetTypedValues(ICriteria criteria, ICriteriaQuery criteriaQuery)
{
if (projection != null)
return projection.GetTypedValues(criteria, criteriaQuery);
-
+
return new TypedValue[0]; // not using parameters for ORDER BY columns
}
+
+ public Order IgnoreCase()
+ {
+ ignoreCase = true;
+ return this;
+ }
+
+ private bool IsStringType(SqlTypes.SqlType propertyType)
+ {
+ switch (propertyType.DbType)
+ {
+ case System.Data.DbType.AnsiString:
+ return true;
+ case System.Data.DbType.AnsiStringFixedLength:
+ return true;
+ case System.Data.DbType.String:
+ return true;
+ case System.Data.DbType.StringFixedLength:
+ return true;
+ default:
+ return false;
+ }
+ }
}
}
Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs 2011-03-28 18:27:11 UTC (rev 5566)
+++ trunk/nhibernate/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs 2011-03-28 19:43:25 UTC (rev 5567)
@@ -2901,5 +2901,60 @@
}
}
}
+
+ [Test]
+ public void IgnoreCase()
+ {
+ //SqlServer collation set to Latin1_General_BIN
+ //when database created to validate this test
+ Course c1 = new Course();
+ c1.CourseCode = "course-1";
+ c1.Description = "Advanced NHibernate";
+ Course c2 = new Course();
+ c2.CourseCode = "course-2";
+ c2.Description = "advanced csharp";
+ Course c3 = new Course();
+ c3.CourseCode = "course-3";
+ c3.Description = "advanced UnitTesting";
+
+ using (ISession session = OpenSession())
+ using (ITransaction t = session.BeginTransaction())
+ {
+ session.Save(c1);
+ session.Save(c2);
+ session.Save(c3);
+ t.Commit();
+ }
+
+ // this particular selection is commented out if collation is not Latin1_General_BIN
+ //using (ISession session = OpenSession())
+ //{
+ // // order the courses in binary order - assumes collation Latin1_General_BIN
+ // IList result =
+ // session.CreateCriteria(typeof(Course)).AddOrder(Order.Asc("Description")).List();
+ // Assert.AreEqual(3, result.Count);
+ // Course firstResult = (Course)result[0];
+ // Assert.IsTrue(firstResult.Description.Contains("Advanced NHibernate"), "Description should have 'Advanced NHibernate', but has " + firstResult.Description);
+ //}
+
+ using (ISession session = OpenSession())
+ {
+ // order the courses after all descriptions have been converted to lower case
+ IList result =
+ session.CreateCriteria(typeof (Course)).AddOrder(Order.Asc("Description").IgnoreCase()).List();
+ Assert.AreEqual(3, result.Count);
+ Course firstResult = (Course) result[0];
+ Assert.IsTrue(firstResult.Description.Contains("advanced csharp"), "Description should have 'advanced csharp', but has " + firstResult.Description);
+ }
+
+ using (ISession session = OpenSession())
+ using (ITransaction t = session.BeginTransaction())
+ {
+ session.Delete(c1);
+ session.Delete(c2);
+ session.Delete(c3);
+ t.Commit();
+ }
+ }
}
}
\ 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: <fab...@us...> - 2011-03-28 18:27:17
|
Revision: 5566
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5566&view=rev
Author: fabiomaulo
Date: 2011-03-28 18:27:11 +0000 (Mon, 28 Mar 2011)
Log Message:
-----------
Fix NH-2418
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs
trunk/nhibernate/src/NHibernate.Test/DialectTest/DialectFixture.cs
Modified: trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs 2011-03-28 16:03:06 UTC (rev 5565)
+++ trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs 2011-03-28 18:27:11 UTC (rev 5566)
@@ -1764,6 +1764,10 @@
/// </remarks>
public virtual bool IsQuoted(string name)
{
+ if (string.IsNullOrEmpty(name))
+ {
+ return false;
+ }
return (name[0] == OpenQuote && name[name.Length - 1] == CloseQuote);
}
Modified: trunk/nhibernate/src/NHibernate.Test/DialectTest/DialectFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/DialectTest/DialectFixture.cs 2011-03-28 16:03:06 UTC (rev 5565)
+++ trunk/nhibernate/src/NHibernate.Test/DialectTest/DialectFixture.cs 2011-03-28 18:27:11 UTC (rev 5566)
@@ -7,6 +7,7 @@
using NHibernate.SqlCommand;
using NHibernate.SqlTypes;
using NUnit.Framework;
+using SharpTestsEx;
using Environment=NHibernate.Cfg.Environment;
namespace NHibernate.Test.DialectTest
@@ -62,6 +63,13 @@
}
[Test]
+ public void WhenNullOrEmptyIsQuotedFalse()
+ {
+ d.IsQuoted(null).Should().Be.False();
+ d.IsQuoted("").Should().Be.False();
+ }
+
+ [Test]
public void QuoteTableNameNeeded()
{
Assert.AreEqual(
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fab...@us...> - 2011-03-28 16:03:13
|
Revision: 5565
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5565&view=rev
Author: fabiomaulo
Date: 2011-03-28 16:03:06 +0000 (Mon, 28 Mar 2011)
Log Message:
-----------
Fix NH-2489
Modified Paths:
--------------
trunk/nhibernate/releasenotes.txt
trunk/nhibernate/src/NHibernate/Collection/AbstractPersistentCollection.cs
trunk/nhibernate/src/NHibernate/Collection/Generic/PersistentGenericList.cs
trunk/nhibernate/src/NHibernate/Collection/Generic/PersistentGenericMap.cs
trunk/nhibernate/src/NHibernate/Collection/PersistentList.cs
trunk/nhibernate/src/NHibernate/Collection/PersistentMap.cs
trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs
trunk/nhibernate/src/NHibernate/Persister/Collection/ICollectionPersister.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SetFixture.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2489/
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2489/Fixture.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2489/Mappings.hbm.xml
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2489/Model.cs
Modified: trunk/nhibernate/releasenotes.txt
===================================================================
--- trunk/nhibernate/releasenotes.txt 2011-03-28 15:15:24 UTC (rev 5564)
+++ trunk/nhibernate/releasenotes.txt 2011-03-28 16:03:06 UTC (rev 5565)
@@ -5,6 +5,7 @@
##### Possible Breaking Changes #####
* [NH-2550] - Allow public access to FieldInterceptor Session (IFieldInterceptor changed)
* [NH-2593] - Form Microsoft SQL Server the default batch-size (adonet.batch_size) is set to 20 where not explicit defined in the session-factory configuration
+ * - ICollectionPersister added property to fix [NH-2489]
Build 3.1.0.GA (rev5425)
=============================
Modified: trunk/nhibernate/src/NHibernate/Collection/AbstractPersistentCollection.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Collection/AbstractPersistentCollection.cs 2011-03-28 15:15:24 UTC (rev 5564)
+++ trunk/nhibernate/src/NHibernate/Collection/AbstractPersistentCollection.cs 2011-03-28 16:03:06 UTC (rev 5565)
@@ -19,6 +19,7 @@
public abstract class AbstractPersistentCollection : IPersistentCollection
{
protected internal static readonly object Unknown = new object(); //place holder
+ protected internal static readonly object NotFound = new object(); //place holder
protected interface IDelayedOperation
{
@@ -345,7 +346,8 @@
{
session.Flush();
}
- return persister.GetElementByIndex(entry.LoadedKey, index, session, owner);
+ var elementByIndex = persister.GetElementByIndex(entry.LoadedKey, index, session, owner);
+ return persister.NotFoundObject == elementByIndex ? NotFound : elementByIndex;
}
}
Read();
Modified: trunk/nhibernate/src/NHibernate/Collection/Generic/PersistentGenericList.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Collection/Generic/PersistentGenericList.cs 2011-03-28 15:15:24 UTC (rev 5564)
+++ trunk/nhibernate/src/NHibernate/Collection/Generic/PersistentGenericList.cs 2011-03-28 16:03:06 UTC (rev 5565)
@@ -88,10 +88,16 @@
{
return glist[index];
}
- else
+ if (result == NotFound)
{
- return (T) result;
+ // check if the index is valid
+ if (index >= Count)
+ {
+ throw new ArgumentOutOfRangeException("index");
+ }
+ return default(T);
}
+ return (T) result;
}
set
{
@@ -107,7 +113,7 @@
}
else
{
- QueueOperation(new SetDelayedOperation(this, index, value, old));
+ QueueOperation(new SetDelayedOperation(this, index, value, old == NotFound ? null : old));
}
}
}
Modified: trunk/nhibernate/src/NHibernate/Collection/Generic/PersistentGenericMap.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Collection/Generic/PersistentGenericMap.cs 2011-03-28 15:15:24 UTC (rev 5564)
+++ trunk/nhibernate/src/NHibernate/Collection/Generic/PersistentGenericMap.cs 2011-03-28 16:03:06 UTC (rev 5565)
@@ -125,7 +125,7 @@
object old = ReadElementByIndex(key);
if (old != Unknown)
{
- QueueOperation(new PutDelayedOperation(this, key, value, old));
+ QueueOperation(new PutDelayedOperation(this, key, value, old == NotFound ? null : old));
return;
}
}
@@ -139,7 +139,7 @@
if (PutQueueEnabled)
{
object old = ReadElementByIndex(key);
- QueueOperation(new RemoveDelayedOperation(this, key, old));
+ QueueOperation(new RemoveDelayedOperation(this, key, old == NotFound ? null : old));
return true;
}
else
@@ -161,11 +161,13 @@
{
return gmap.TryGetValue(key, out value);
}
- else
+ if(result == NotFound)
{
- value = (TValue)result;
- return true;
+ value = default(TValue);
+ return false;
}
+ value = (TValue)result;
+ return true;
}
TValue IDictionary<TKey, TValue>.this[TKey key]
@@ -173,7 +175,15 @@
get
{
object result = ReadElementByIndex(key);
- return result == Unknown ? gmap[key] : (TValue)result;
+ if (result == Unknown)
+ {
+ return gmap[key];
+ }
+ if (result == NotFound)
+ {
+ throw new KeyNotFoundException();
+ }
+ return (TValue) result;
}
set
{
@@ -183,7 +193,7 @@
object old = ReadElementByIndex(key);
if (old != Unknown)
{
- QueueOperation(new PutDelayedOperation(this, key, value, old));
+ QueueOperation(new PutDelayedOperation(this, key, value, old == NotFound ? null : old));
return;
}
}
Modified: trunk/nhibernate/src/NHibernate/Collection/PersistentList.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Collection/PersistentList.cs 2011-03-28 15:15:24 UTC (rev 5564)
+++ trunk/nhibernate/src/NHibernate/Collection/PersistentList.cs 2011-03-28 16:03:06 UTC (rev 5565)
@@ -339,7 +339,7 @@
}
else
{
- QueueOperation(new RemoveDelayedOperation(this, index, old));
+ QueueOperation(new RemoveDelayedOperation(this, index, old == NotFound ? null : old));
}
}
@@ -352,7 +352,20 @@
throw new IndexOutOfRangeException("negative index");
}
object result = ReadElementByIndex(index);
- return result == Unknown ? list[index] : result;
+ if (result == Unknown)
+ {
+ return list[index];
+ }
+ if(NotFound == result)
+ {
+ // check if the index is valid
+ if(index >= Count)
+ {
+ throw new ArgumentOutOfRangeException("index");
+ }
+ return null;
+ }
+ return result;
}
set
{
@@ -360,7 +373,19 @@
{
throw new IndexOutOfRangeException("negative index");
}
- object old = PutQueueEnabled ? ReadElementByIndex(index) : Unknown;
+ object old;
+ if (PutQueueEnabled)
+ {
+ old = ReadElementByIndex(index);
+ if(old == NotFound)
+ {
+ old = null;
+ }
+ }
+ else
+ {
+ old = Unknown;
+ }
if (old == Unknown)
{
Write();
Modified: trunk/nhibernate/src/NHibernate/Collection/PersistentMap.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Collection/PersistentMap.cs 2011-03-28 15:15:24 UTC (rev 5564)
+++ trunk/nhibernate/src/NHibernate/Collection/PersistentMap.cs 2011-03-28 16:03:06 UTC (rev 5565)
@@ -242,7 +242,7 @@
object old = ReadElementByIndex(key);
if (old != Unknown)
{
- QueueOperation(new PutDelayedOperation(this, key, value, old));
+ QueueOperation(new PutDelayedOperation(this, key, value, old == NotFound ? null : old));
return;
}
}
@@ -280,7 +280,10 @@
if (PutQueueEnabled)
{
object old = ReadElementByIndex(key);
- QueueOperation(new RemoveDelayedOperation(this, key, old));
+ if (old != NotFound)
+ {
+ QueueOperation(new RemoveDelayedOperation(this, key, old));
+ }
return;
}
else
@@ -302,7 +305,7 @@
get
{
object result = ReadElementByIndex(key);
- return result == Unknown ? map[key] : result;
+ return result == Unknown ? map[key] : (result == NotFound ? null : result);
}
set
{
@@ -310,7 +313,7 @@
if (PutQueueEnabled)
{
object old = ReadElementByIndex(key);
- if (old != Unknown)
+ if (old != Unknown && old != NotFound)
{
QueueOperation(new PutDelayedOperation(this, key, value, old));
return;
Modified: trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs 2011-03-28 15:15:24 UTC (rev 5564)
+++ trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs 2011-03-28 16:03:06 UTC (rev 5565)
@@ -34,6 +34,7 @@
public abstract class AbstractCollectionPersister : ICollectionMetadata, ISqlLoadableCollection,
IPostInsertIdentityPersister
{
+ protected static readonly object NotFoundPlaceHolder = new object();
private readonly string role;
#region SQL statements
@@ -1617,7 +1618,7 @@
}
else
{
- return null;
+ return NotFoundObject;
}
}
finally
@@ -1638,6 +1639,11 @@
}
}
+ public object NotFoundObject
+ {
+ get { return NotFoundPlaceHolder; }
+ }
+
public abstract bool ConsumesEntityAlias();
public abstract SqlString FromJoinFragment(string alias, bool innerJoin, bool includeSubclasses);
Modified: trunk/nhibernate/src/NHibernate/Persister/Collection/ICollectionPersister.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Persister/Collection/ICollectionPersister.cs 2011-03-28 15:15:24 UTC (rev 5564)
+++ trunk/nhibernate/src/NHibernate/Persister/Collection/ICollectionPersister.cs 2011-03-28 16:03:06 UTC (rev 5565)
@@ -273,6 +273,20 @@
int GetSize(object key, ISessionImplementor session);
bool IndexExists(object key, object index, ISessionImplementor session);
bool ElementExists(object key, object element, ISessionImplementor session);
+
+ /// <summary>
+ /// Try to find an element by a given index.
+ /// </summary>
+ /// <param name="key">The key of the collection (collection-owner identifier)</param>
+ /// <param name="index">The given index.</param>
+ /// <param name="session">The active <see cref="ISession"/>.</param>
+ /// <param name="owner">The owner of the collection.</param>
+ /// <returns>The value of the element where available; otherwise <see cref="NotFoundObject"/>.</returns>
object GetElementByIndex(object key, object index, ISessionImplementor session, object owner);
+
+ /// <summary>
+ /// A place-holder to inform that the data-reader was empty.
+ /// </summary>
+ object NotFoundObject { get; }
}
}
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2489/Fixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2489/Fixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2489/Fixture.cs 2011-03-28 16:03:06 UTC (rev 5565)
@@ -0,0 +1,224 @@
+using System;
+using System.Collections.Generic;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.NHSpecificTest.NH2489
+{
+ public class Fixture : BugTestCase
+ {
+ #region Scenarios
+
+ private class ListScenario : IDisposable
+ {
+ private readonly ISessionFactory factory;
+
+ public ListScenario(ISessionFactory factory)
+ {
+ this.factory = factory;
+ using (ISession s = factory.OpenSession())
+ {
+ using (ITransaction t = s.BeginTransaction())
+ {
+ var entity = new Base();
+ var child = new Child();
+ // null members are partially working for lists, can't have one at the end
+ // and can't use the Count property.
+ entity.Children = new List<Child> {null, child};
+ s.Save(entity);
+ t.Commit();
+ }
+ }
+ }
+
+ public void Dispose()
+ {
+ using (ISession s = factory.OpenSession())
+ {
+ using (ITransaction t = s.BeginTransaction())
+ {
+ s.Delete("from Base");
+ s.Delete("from Child");
+ t.Commit();
+ }
+ }
+ }
+ }
+
+ private class MapScenario : IDisposable
+ {
+ private readonly ISessionFactory factory;
+
+ public MapScenario(ISessionFactory factory)
+ {
+ this.factory = factory;
+ using (ISession s = factory.OpenSession())
+ {
+ using (ITransaction t = s.BeginTransaction())
+ {
+ var entity = new Base();
+ entity.NamedChildren = new Dictionary<string, Child>
+ {
+ {"Child1", new Child()},
+ {"NullChild", null},
+ };
+ s.Save(entity);
+ t.Commit();
+ }
+ }
+ }
+
+ public void Dispose()
+ {
+ using (ISession s = factory.OpenSession())
+ {
+ using (ITransaction t = s.BeginTransaction())
+ {
+ s.Delete("from Base");
+ s.Delete("from Child");
+ t.Commit();
+ }
+ }
+ }
+ }
+
+ #endregion
+
+ [Test]
+ public void List_InvalidIndex()
+ {
+ using (new ListScenario(Sfi))
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction t = s.BeginTransaction())
+ {
+ // accessing an invalid index should throw an exception
+ var entity = s.CreateQuery("from Base").UniqueResult<Base>();
+ // null collection members don't seem to work, at least for lazy="extra" collections
+ entity.Children.Count.Should().Be.EqualTo(2);
+ NHibernateUtil.IsInitialized(entity.Children).Should().Be.False();
+ Executing.This(() => { Child ignored = entity.Children[2]; }).Should().Throw<ArgumentOutOfRangeException>();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void List_NullChild()
+ {
+ using (new ListScenario(Sfi))
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction t = s.BeginTransaction())
+ {
+ // the list should only contain an item at index 0
+ // accessing an invalid index should throw an exception
+ var entity = s.CreateQuery("from Base").UniqueResult<Base>();
+ // null collection members don't seem to work, at least for lazy="extra" collections
+ entity.Children.Count.Should().Not.Be.EqualTo(0);
+ //entity.Children.Count.Should().Be.EqualTo(2);
+ NHibernateUtil.IsInitialized(entity.Children).Should().Be.False();
+ var sigil = new Child();
+ Child child = sigil;
+ Executing.This(() => { child = entity.Children[0]; }).Should().NotThrow();
+ child.Should().Not.Be.EqualTo(sigil);
+ child.Should().Be.Null();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void Map_Item()
+ {
+ using (new MapScenario(Sfi))
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction t = s.BeginTransaction())
+ {
+ // accessing an invalid key should fail or throw an exception, depending on method
+ var entity = s.CreateQuery("from Base").UniqueResult<Base>();
+ // null collection members don't seem to work, at least for lazy="extra" collections
+ entity.NamedChildren.Count.Should().Be.EqualTo(2);
+ NHibernateUtil.IsInitialized(entity.NamedChildren).Should().Be.False();
+ Executing.This(() => { Child ignored = entity.NamedChildren["InvalidKey"]; }).Should().Throw<KeyNotFoundException>();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void Map_TryGetValue_Invalid()
+ {
+ using (new MapScenario(Sfi))
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction t = s.BeginTransaction())
+ {
+ // accessing an invalid key should fail or throw an exception, depending on method
+ var entity = s.CreateQuery("from Base").UniqueResult<Base>();
+ // null collection members don't seem to work, at least for lazy="extra" collections
+ entity.NamedChildren.Count.Should().Be.EqualTo(2);
+ NHibernateUtil.IsInitialized(entity.NamedChildren).Should().Be.False();
+ Child child;
+ entity.NamedChildren.TryGetValue("InvalidKey", out child).Should().Be.False();
+ child.Should().Be.Null();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void Map_NullChild()
+ {
+ using (new MapScenario(Sfi))
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction t = s.BeginTransaction())
+ {
+ var entity = s.CreateQuery("from Base").UniqueResult<Base>();
+ // null collection members don't seem to work, at least for lazy="extra" collections
+ entity.NamedChildren.Count.Should().Not.Be.EqualTo(0);
+ //entity.NamedChildren.Count.Should().Be.EqualTo(2);
+ NHibernateUtil.IsInitialized(entity.NamedChildren).Should().Be.False();
+ // null valued child shouldn't cause errors
+ var sigil = new Child();
+ Child child = sigil;
+ Assert.DoesNotThrow(() => { child = entity.NamedChildren["NullChild"]; });
+ child.Should().Not.Be.EqualTo(sigil);
+ child.Should().Be.Null();
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void Map_NullChild_TryGetValue()
+ {
+ using (new MapScenario(Sfi))
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction t = s.BeginTransaction())
+ {
+ var entity = s.CreateQuery("from Base").UniqueResult<Base>();
+ // null collection members don't seem to work, at least for lazy="extra" collections
+ entity.NamedChildren.Count.Should().Not.Be.EqualTo(0);
+ //entity.NamedChildren.Count.Should().Be.EqualTo(2);
+ // null valued child shouldn't cause errors
+ NHibernateUtil.IsInitialized(entity.NamedChildren).Should().Be.False();
+ Child child;
+ entity.NamedChildren.TryGetValue("NullChild", out child)
+ .Should().Be.True();
+ child.Should().Be.Null();
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2489/Mappings.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2489/Mappings.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2489/Mappings.hbm.xml 2011-03-28 16:03:06 UTC (rev 5565)
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
+ namespace="NHibernate.Test.NHSpecificTest.NH2489"
+ assembly="NHibernate.Test"
+>
+ <class name="Base" >
+ <id name="Id">
+ <generator class="increment"/>
+ </id>
+ <list name="Children" lazy="extra" cascade="all">
+ <key column="listparentid"/>
+ <!-- sqlite doesn't like a column named index -->
+ <index column="childindex"/>
+ <many-to-many class="Child"/>
+ </list>
+ <map name="NamedChildren" lazy="extra" cascade="all" >
+ <key column="mapparentid" />
+ <index column="name" type="string" />
+ <many-to-many class="Child">
+ <column name="Child" not-null="false" />
+ </many-to-many>
+ </map>
+ </class>
+
+ <class name="Child">
+ <id name="Id">
+ <generator class="increment"/>
+ </id>
+ </class>
+
+</hibernate-mapping>
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2489/Model.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2489/Model.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2489/Model.cs 2011-03-28 16:03:06 UTC (rev 5565)
@@ -0,0 +1,34 @@
+using System.Collections.Generic;
+
+namespace NHibernate.Test.NHSpecificTest.NH2489
+{
+ public class Base
+ {
+ public virtual int Id
+ {
+ get;
+ set;
+ }
+
+ public virtual IList<Child> Children
+ {
+ get;
+ set;
+ }
+
+ public virtual IDictionary<string, Child> NamedChildren
+ {
+ get;
+ set;
+ }
+ }
+
+ public class Child
+ {
+ public virtual int Id
+ {
+ get;
+ set;
+ }
+ }
+}
Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SetFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SetFixture.cs 2011-03-28 15:15:24 UTC (rev 5564)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/SetFixture.cs 2011-03-28 16:03:06 UTC (rev 5565)
@@ -343,6 +343,11 @@
throw new NotImplementedException();
}
+ public object NotFoundObject
+ {
+ get { throw new NotImplementedException(); }
+ }
+
public ISessionFactoryImplementor Factory
{
get { return null; }
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-03-28 15:15:24 UTC (rev 5564)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-03-28 16:03:06 UTC (rev 5565)
@@ -656,6 +656,8 @@
<Compile Include="NHSpecificTest\NH2484\Model.cs" />
<Compile Include="NHSpecificTest\NH2488\Fixture.cs" />
<Compile Include="NHSpecificTest\NH2488\Model.cs" />
+ <Compile Include="NHSpecificTest\NH2489\Fixture.cs" />
+ <Compile Include="NHSpecificTest\NH2489\Model.cs" />
<Compile Include="NHSpecificTest\NH2490\Fixture.cs" />
<Compile Include="NHSpecificTest\NH2490\Model.cs" />
<Compile Include="NHSpecificTest\NH2491\Fixture.cs" />
@@ -2498,6 +2500,7 @@
<EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" />
</ItemGroup>
<ItemGroup>
+ <EmbeddedResource Include="NHSpecificTest\NH2489\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2603\Mappings.hbm.xml" />
<EmbeddedResource Include="Subselect\Beings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2488\Mappings.hbm.xml" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pa...@us...> - 2011-03-28 15:15:31
|
Revision: 5564
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5564&view=rev
Author: patearl
Date: 2011-03-28 15:15:24 +0000 (Mon, 28 Mar 2011)
Log Message:
-----------
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate.Test/TestDialect.cs
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/TestDialects/PostgreSQL82TestDialect.cs
Modified: trunk/nhibernate/src/NHibernate.Test/TestDialect.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/TestDialect.cs 2011-03-28 05:23:57 UTC (rev 5563)
+++ trunk/nhibernate/src/NHibernate.Test/TestDialect.cs 2011-03-28 15:15:24 UTC (rev 5564)
@@ -47,6 +47,8 @@
public virtual bool HasBrokenDecimalType { get { return false; } }
+ public virtual bool SupportsSelectForUpdateOnOuterJoin { get { return true; } }
+
public bool SupportsSqlType(SqlType sqlType)
{
try
Added: trunk/nhibernate/src/NHibernate.Test/TestDialects/PostgreSQL82TestDialect.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/TestDialects/PostgreSQL82TestDialect.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/TestDialects/PostgreSQL82TestDialect.cs 2011-03-28 15:15:24 UTC (rev 5564)
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace NHibernate.Test.TestDialects
+{
+ public class PostgreSQL82TestDialect : TestDialect
+ {
+ public PostgreSQL82TestDialect(Dialect.Dialect dialect)
+ : base(dialect)
+ {
+ }
+
+ public override bool SupportsSelectForUpdateOnOuterJoin
+ {
+ get { return false; }
+ }
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pa...@us...> - 2011-03-28 05:24:03
|
Revision: 5563
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5563&view=rev
Author: patearl
Date: 2011-03-28 05:23:57 +0000 (Mon, 28 Mar 2011)
Log Message:
-----------
Tests: Avoid locking when not supported by dialect in MultiTableTests.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate.Test/Legacy/MultiTableTest.cs
Modified: trunk/nhibernate/src/NHibernate.Test/Legacy/MultiTableTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Legacy/MultiTableTest.cs 2011-03-28 04:54:50 UTC (rev 5562)
+++ trunk/nhibernate/src/NHibernate.Test/Legacy/MultiTableTest.cs 2011-03-28 05:23:57 UTC (rev 5563)
@@ -344,7 +344,8 @@
s = OpenSession();
t = s.BeginTransaction();
- multi = (Multi) s.Load(typeof(Top), mid, LockMode.Upgrade);
+ if (TestDialect.SupportsSelectForUpdateOnOuterJoin)
+ multi = (Multi)s.Load(typeof(Top), mid, LockMode.Upgrade);
simp = (Top) s.Load(typeof(Top), sid);
s.Lock(simp, LockMode.UpgradeNoWait);
t.Commit();
@@ -459,7 +460,8 @@
s = OpenSession();
t = s.BeginTransaction();
- multi = (Multi) s.Load(typeof(Top), multiId, LockMode.Upgrade);
+ if (TestDialect.SupportsSelectForUpdateOnOuterJoin)
+ multi = (Multi) s.Load(typeof(Top), multiId, LockMode.Upgrade);
simp = (Top) s.Load(typeof(Top), simpId);
s.Lock(simp, LockMode.UpgradeNoWait);
t.Commit();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pa...@us...> - 2011-03-28 04:54:57
|
Revision: 5562
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5562&view=rev
Author: patearl
Date: 2011-03-28 04:54:50 +0000 (Mon, 28 Mar 2011)
Log Message:
-----------
Tests: Use a small delta when comparing inexact doubles for equality.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1734/Fixture.cs
Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1734/Fixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1734/Fixture.cs 2011-03-28 04:39:49 UTC (rev 5561)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1734/Fixture.cs 2011-03-28 04:54:50 UTC (rev 5562)
@@ -36,24 +36,26 @@
using (var session = this.OpenSession())
using (var tran = session.BeginTransaction())
{
+ double delta = 0.0000000000001;
+
var query=session.CreateQuery("select sum(Amount*Price) from Product");
var result=query.UniqueResult();
Assert.That(result, Is.InstanceOf(typeof (double)));
- Assert.That(result, Is.EqualTo(43.2*3*2));
+ Assert.AreEqual(43.2 * 3 * 2, (double)result, delta);
query = session.CreateQuery("select sum(Price*Amount) from Product");
result = query.UniqueResult();
Assert.That(result, Is.InstanceOf(typeof(double)));
- Assert.That(result, Is.EqualTo(43.2 * 3 * 2));
+ Assert.AreEqual(43.2 * 3 * 2, (double)result, delta);
query = session.CreateQuery("select sum(Price) from Product");
result = query.UniqueResult();
Assert.That(result, Is.InstanceOf(typeof(double)));
- Assert.That(result, Is.EqualTo(43.2 * 2));
+ Assert.AreEqual(43.2 * 2, (double)result, delta);
query = session.CreateQuery("select sum(Amount) from Product");
result = query.UniqueResult();
Assert.That(result, Is.InstanceOf(typeof(Int64)));
- Assert.That(result, Is.EqualTo(6.0));
+ Assert.That(result, Is.EqualTo(6));
}
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pa...@us...> - 2011-03-28 04:39:55
|
Revision: 5561
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5561&view=rev
Author: patearl
Date: 2011-03-28 04:39:49 +0000 (Mon, 28 Mar 2011)
Log Message:
-----------
Revert recent changes to SettingsFactory. There may be external dependencies on the behavior I was changing. The default property handling needs more thought.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs
Modified: trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs 2011-03-28 03:47:26 UTC (rev 5560)
+++ trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs 2011-03-28 04:39:49 UTC (rev 5561)
@@ -29,15 +29,28 @@
{
Settings settings = new Settings();
+ Dialect.Dialect dialect;
try
{
- settings.Dialect = Dialect.Dialect.GetDialect(properties);
+ dialect = Dialect.Dialect.GetDialect(properties);
+ Dictionary<string, string> temp = new Dictionary<string, string>();
+
+ foreach (KeyValuePair<string, string> de in dialect.DefaultProperties)
+ {
+ temp[de.Key] = de.Value;
+ }
+ foreach (KeyValuePair<string, string> de in properties)
+ {
+ temp[de.Key] = de.Value;
+ }
+ properties = temp;
}
catch (HibernateException he)
{
log.Warn("No dialect set - using GenericDialect: " + he.Message);
- settings.Dialect = new GenericDialect();
+ dialect = new GenericDialect();
}
+ settings.Dialect = dialect;
settings.LinqToHqlGeneratorsRegistry = LinqToHqlGeneratorsRegistryFactory.CreateGeneratorsRegistry(properties);
@@ -46,7 +59,7 @@
ISQLExceptionConverter sqlExceptionConverter;
try
{
- sqlExceptionConverter = SQLExceptionConverterFactory.BuildSQLExceptionConverter(settings.Dialect, properties);
+ sqlExceptionConverter = SQLExceptionConverterFactory.BuildSQLExceptionConverter(dialect, properties);
}
catch (HibernateException)
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pa...@us...> - 2011-03-28 03:47:32
|
Revision: 5560
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5560&view=rev
Author: patearl
Date: 2011-03-28 03:47:26 +0000 (Mon, 28 Mar 2011)
Log Message:
-----------
Tests: Use dialect-specific false literals in SqlCommandTests.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate.Test/SqlCommandTest/SqlInsertBuilderFixture.cs
trunk/nhibernate/src/NHibernate.Test/SqlCommandTest/SqlUpdateBuilderFixture.cs
Modified: trunk/nhibernate/src/NHibernate.Test/SqlCommandTest/SqlInsertBuilderFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlCommandTest/SqlInsertBuilderFixture.cs 2011-03-28 03:45:18 UTC (rev 5559)
+++ trunk/nhibernate/src/NHibernate.Test/SqlCommandTest/SqlInsertBuilderFixture.cs 2011-03-28 03:47:26 UTC (rev 5560)
@@ -32,8 +32,9 @@
SqlCommandInfo sqlCommand = insert.ToSqlCommandInfo();
SqlType[] actualParameterTypes = sqlCommand.ParameterTypes;
+ string falseString = factoryImpl.Dialect.ToBooleanValueString(false);
string expectedSql =
- "INSERT INTO test_insert_builder (intColumn, longColumn, literalColumn, stringColumn) VALUES (?, ?, 0, 5)";
+ "INSERT INTO test_insert_builder (intColumn, longColumn, literalColumn, stringColumn) VALUES (?, ?, " + falseString + ", 5)";
Assert.AreEqual(expectedSql, sqlCommand.Text.ToString(), "SQL String");
Assert.AreEqual(2, actualParameterTypes.Length);
@@ -78,8 +79,9 @@
SqlCommandInfo sqlCommand = insert.ToSqlCommandInfo();
SqlType[] actualParameterTypes = sqlCommand.ParameterTypes;
- string expectedSql =
- "INSERT INTO test_insert_builder (literalColumn, intColumn, stringColumn, longColumn) VALUES (0, ?, 5, ?)";
+ string falseString = factoryImpl.Dialect.ToBooleanValueString(false);
+ string expectedSql =
+ "INSERT INTO test_insert_builder (literalColumn, intColumn, stringColumn, longColumn) VALUES (" + falseString + ", ?, 5, ?)";
Assert.AreEqual(expectedSql, sqlCommand.Text.ToString(), "SQL String");
Assert.AreEqual(2, actualParameterTypes.Length);
Modified: trunk/nhibernate/src/NHibernate.Test/SqlCommandTest/SqlUpdateBuilderFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/SqlCommandTest/SqlUpdateBuilderFixture.cs 2011-03-28 03:45:18 UTC (rev 5559)
+++ trunk/nhibernate/src/NHibernate.Test/SqlCommandTest/SqlUpdateBuilderFixture.cs 2011-03-28 03:47:26 UTC (rev 5560)
@@ -38,8 +38,9 @@
SqlCommandInfo sqlCommand = update.ToSqlCommandInfo();
Assert.AreEqual(CommandType.Text, sqlCommand.CommandType);
- string expectedSql =
- "UPDATE test_update_builder SET intColumn = ?, longColumn = ?, literalColumn = 0, stringColumn = 5 WHERE decimalColumn = ? AND versionColumn = ? AND a=b";
+ string falseString = factoryImpl.Dialect.ToBooleanValueString(false);
+ string expectedSql =
+ "UPDATE test_update_builder SET intColumn = ?, longColumn = ?, literalColumn = " + falseString + ", stringColumn = 5 WHERE decimalColumn = ? AND versionColumn = ? AND a=b";
Assert.AreEqual(expectedSql, sqlCommand.Text.ToString(), "SQL String");
SqlType[] actualParameterTypes = sqlCommand.ParameterTypes;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pa...@us...> - 2011-03-28 03:45:24
|
Revision: 5559
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5559&view=rev
Author: patearl
Date: 2011-03-28 03:45:18 +0000 (Mon, 28 Mar 2011)
Log Message:
-----------
Fixed a compile error. Oops.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs
Modified: trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs 2011-03-28 02:39:49 UTC (rev 5558)
+++ trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs 2011-03-28 03:45:18 UTC (rev 5559)
@@ -46,7 +46,7 @@
ISQLExceptionConverter sqlExceptionConverter;
try
{
- sqlExceptionConverter = SQLExceptionConverterFactory.BuildSQLExceptionConverter(dialect, properties);
+ sqlExceptionConverter = SQLExceptionConverterFactory.BuildSQLExceptionConverter(settings.Dialect, properties);
}
catch (HibernateException)
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pa...@us...> - 2011-03-28 02:39:55
|
Revision: 5558
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5558&view=rev
Author: patearl
Date: 2011-03-28 02:39:49 +0000 (Mon, 28 Mar 2011)
Log Message:
-----------
Provide a convenience method for getting dialect-derived properties of configuration. Use derived properties for Linq tests.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs
trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs
trunk/nhibernate/src/NHibernate.Test/Linq/LinqReadonlyTestsContext.cs
Modified: trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2011-03-28 02:32:55 UTC (rev 5557)
+++ trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2011-03-28 02:39:49 UTC (rev 5558)
@@ -1276,6 +1276,27 @@
set { properties = value; }
}
+ /// <summary>
+ /// Returns the set of properties computed from the default properties in the dialect combined with the other properties in the configuration.
+ /// </summary>
+ /// <returns></returns>
+ public IDictionary<string, string> GetDerivedProperties()
+ {
+ IDictionary<string, string> derivedProperties = new Dictionary<string, string>();
+
+ if (Properties.ContainsKey(Environment.Dialect))
+ {
+ Dialect.Dialect dialect = Dialect.Dialect.GetDialect(Properties);
+ foreach (KeyValuePair<string, string> pair in dialect.DefaultProperties)
+ derivedProperties[pair.Key] = pair.Value;
+ }
+
+ foreach (KeyValuePair<string, string> pair in Properties)
+ derivedProperties[pair.Key] = pair.Value;
+
+ return derivedProperties;
+ }
+
/// <summary>
/// Set the default assembly to use for the mappings added to the configuration
/// afterwards.
@@ -1692,7 +1713,7 @@
//protected Settings BuildSettings()
private Settings BuildSettings()
{
- var result = settingsFactory.BuildSettings(properties);
+ var result = settingsFactory.BuildSettings(GetDerivedProperties());
// NH : Set configuration for IdGenerator SQL logging
PersistentIdGeneratorParmsNames.SqlStatementLogger.FormatSql = result.SqlStatementLogger.FormatSql;
PersistentIdGeneratorParmsNames.SqlStatementLogger.LogToStdout = result.SqlStatementLogger.LogToStdout;
Modified: trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs 2011-03-28 02:32:55 UTC (rev 5557)
+++ trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs 2011-03-28 02:39:49 UTC (rev 5558)
@@ -29,28 +29,15 @@
{
Settings settings = new Settings();
- Dialect.Dialect dialect;
try
{
- dialect = Dialect.Dialect.GetDialect(properties);
- Dictionary<string, string> temp = new Dictionary<string, string>();
-
- foreach (KeyValuePair<string, string> de in dialect.DefaultProperties)
- {
- temp[de.Key] = de.Value;
- }
- foreach (KeyValuePair<string, string> de in properties)
- {
- temp[de.Key] = de.Value;
- }
- properties = temp;
+ settings.Dialect = Dialect.Dialect.GetDialect(properties);
}
catch (HibernateException he)
{
log.Warn("No dialect set - using GenericDialect: " + he.Message);
- dialect = new GenericDialect();
+ settings.Dialect = new GenericDialect();
}
- settings.Dialect = dialect;
settings.LinqToHqlGeneratorsRegistry = LinqToHqlGeneratorsRegistryFactory.CreateGeneratorsRegistry(properties);
Modified: trunk/nhibernate/src/NHibernate.Test/Linq/LinqReadonlyTestsContext.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Linq/LinqReadonlyTestsContext.cs 2011-03-28 02:32:55 UTC (rev 5557)
+++ trunk/nhibernate/src/NHibernate.Test/Linq/LinqReadonlyTestsContext.cs 2011-03-28 02:39:49 UTC (rev 5558)
@@ -70,7 +70,7 @@
{
var file = new FileInfo(scripFileName);
string script = file.OpenText().ReadToEnd().Replace("GO", "");
- var connectionProvider = ConnectionProviderFactory.NewConnectionProvider(configuration.Properties);
+ var connectionProvider = ConnectionProviderFactory.NewConnectionProvider(configuration.GetDerivedProperties());
using (var conn = connectionProvider.GetConnection())
{
if (conn.State == ConnectionState.Closed)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pa...@us...> - 2011-03-28 02:33:01
|
Revision: 5557
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5557&view=rev
Author: patearl
Date: 2011-03-28 02:32:55 +0000 (Mon, 28 Mar 2011)
Log Message:
-----------
Linq: Use "concat" method for string addition.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs
Modified: trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2011-03-28 01:28:41 UTC (rev 5556)
+++ trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2011-03-28 02:32:55 UTC (rev 5557)
@@ -293,7 +293,14 @@
return _hqlTreeBuilder.BooleanOr(lhs.AsBooleanExpression(), rhs.AsBooleanExpression());
case ExpressionType.Add:
- return _hqlTreeBuilder.Add(lhs, rhs);
+ if (expression.Left.Type == typeof(string) && expression.Right.Type == typeof(string))
+ {
+ return _hqlTreeBuilder.MethodCall("concat", lhs, rhs);
+ }
+ else
+ {
+ return _hqlTreeBuilder.Add(lhs, rhs);
+ }
case ExpressionType.Subtract:
return _hqlTreeBuilder.Subtract(lhs, rhs);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pa...@us...> - 2011-03-28 01:28:47
|
Revision: 5556
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5556&view=rev
Author: patearl
Date: 2011-03-28 01:28:41 +0000 (Mon, 28 Mar 2011)
Log Message:
-----------
Dialect support for specifying technique to retrieve identifiers generated by insert statements.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs
trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs
trunk/nhibernate/src/NHibernate/Id/Insert/OutputParamReturningDelegate.cs
Modified: trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs 2011-03-27 20:44:38 UTC (rev 5555)
+++ trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs 2011-03-28 01:28:41 UTC (rev 5556)
@@ -2375,6 +2375,11 @@
return insertString;
}
+ public virtual InsertGeneratedIdentifierRetrievalMethod InsertGeneratedIdentifierRetrievalMethod
+ {
+ get { return InsertGeneratedIdentifierRetrievalMethod.ReturnValueParameter; }
+ }
+
/// <summary>
/// The class (which implements <see cref="NHibernate.Id.IIdentifierGenerator"/>)
/// which acts as this dialects identity-style generation strategy.
@@ -2435,4 +2440,22 @@
get { return null; }
}
}
+
+ public enum InsertGeneratedIdentifierRetrievalMethod
+ {
+ /// <summary>
+ /// Use a parameter with ParameterDirection.Output
+ /// </summary>
+ OutputParameter,
+
+ /// <summary>
+ /// Use a parameter with ParameterDirection.ReturnValue
+ /// </summary>
+ ReturnValueParameter,
+
+ // <summary>
+ // Get the result from the statment as if it were a query, using ExecuteScalar() or ExecuteDataReader().
+ // </summary>
+ // QueryResult
+ }
}
Modified: trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs 2011-03-27 20:44:38 UTC (rev 5555)
+++ trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs 2011-03-28 01:28:41 UTC (rev 5556)
@@ -111,6 +111,11 @@
return insertString.Append(" returning " + identifierColumnName);
}
+ public override InsertGeneratedIdentifierRetrievalMethod InsertGeneratedIdentifierRetrievalMethod
+ {
+ get { return InsertGeneratedIdentifierRetrievalMethod.OutputParameter; }
+ }
+
public override bool SupportsSequences
{
get { return true; }
Modified: trunk/nhibernate/src/NHibernate/Id/Insert/OutputParamReturningDelegate.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Id/Insert/OutputParamReturningDelegate.cs 2011-03-27 20:44:38 UTC (rev 5555)
+++ trunk/nhibernate/src/NHibernate/Id/Insert/OutputParamReturningDelegate.cs 2011-03-28 01:28:41 UTC (rev 5556)
@@ -1,4 +1,5 @@
using System.Data;
+using NHibernate.Dialect;
using NHibernate.Engine;
using NHibernate.SqlCommand;
using NHibernate.SqlTypes;
@@ -45,8 +46,14 @@
IDbDataParameter idParameter = factory.ConnectionProvider.Driver.GenerateParameter(command, ReturnParameterName,
paramType);
driveGeneratedParamName = idParameter.ParameterName;
- idParameter.Direction = ParameterDirection.ReturnValue;
+ if (factory.Dialect.InsertGeneratedIdentifierRetrievalMethod == InsertGeneratedIdentifierRetrievalMethod.OutputParameter)
+ idParameter.Direction = ParameterDirection.Output;
+ else if (factory.Dialect.InsertGeneratedIdentifierRetrievalMethod == InsertGeneratedIdentifierRetrievalMethod.ReturnValueParameter)
+ idParameter.Direction = ParameterDirection.ReturnValue;
+ else
+ throw new System.NotImplementedException("Unsupported InsertGeneratedIdentifierRetrievalMethod: " + factory.Dialect.InsertGeneratedIdentifierRetrievalMethod);
+
command.Parameters.Add(idParameter);
return command;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fab...@us...> - 2011-03-27 20:44:44
|
Revision: 5555
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5555&view=rev
Author: fabiomaulo
Date: 2011-03-27 20:44:38 +0000 (Sun, 27 Mar 2011)
Log Message:
-----------
Fix NH-2603
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2603/
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2603/Fixture.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2603/Mappings.hbm.xml
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2603/Model.cs
Modified: trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs 2011-03-27 19:31:22 UTC (rev 5554)
+++ trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs 2011-03-27 20:44:38 UTC (rev 5555)
@@ -844,11 +844,9 @@
private SqlString GenerateSelectSizeString(ISessionImplementor sessionImplementor)
{
- string selectValue = isCollectionIntegerIndex
- ? "max(" + IndexColumnNames[0] + ") + 1"
- : "count(" + ElementColumnNames[0] + ")"; //sets, maps, bags
+ string selectValue = GetCountSqlSelectClause();
- return new SqlSimpleSelectBuilder(dialect, factory)
+ return new SqlSimpleSelectBuilder(dialect, factory)
.SetTableName(TableName)
.AddWhereFragment(KeyColumnNames, KeyType, "=")
.AddColumn(selectValue)
@@ -856,6 +854,20 @@
.Append(FilterFragment(TableName, sessionImplementor.EnabledFilters));
}
+ protected virtual string GetCountSqlSelectClause()
+ {
+ // NH: too many "if" when each collection can have its persister
+ return isCollectionIntegerIndex
+ ? (string.Format("max({0}) + 1", IndexColumnNames[0]))
+ : (HasIndex ? string.Format("count({0})", GetIndexCountExpression()) : string.Format("count({0})", ElementColumnNames[0]));
+ }
+
+ private string GetIndexCountExpression()
+ {
+ // when the index has at least one column then use that column to perform the count, otherwise it will use the formula.
+ return IndexColumnNames[0] ?? IndexFormulas[0];
+ }
+
private SqlString GenerateDetectRowByIndexString()
{
if (!hasIndex)
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2603/Fixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2603/Fixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2603/Fixture.cs 2011-03-27 20:44:38 UTC (rev 5555)
@@ -0,0 +1,138 @@
+using System;
+using System.Collections.Generic;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.NHSpecificTest.NH2603
+{
+ public class Fixture : BugTestCase
+ {
+ #region Scenarios
+
+ private class ListScenario : IDisposable
+ {
+ private readonly ISessionFactory factory;
+
+ public ListScenario(ISessionFactory factory)
+ {
+ this.factory = factory;
+ using (ISession s = factory.OpenSession())
+ {
+ using (ITransaction t = s.BeginTransaction())
+ {
+ var entity = new Parent();
+ var child = new Child();
+ entity.ListChildren = new List<Child> {null, child, null};
+ s.Save(entity);
+ t.Commit();
+ }
+ }
+ }
+
+ public void Dispose()
+ {
+ using (ISession s = factory.OpenSession())
+ {
+ using (ITransaction t = s.BeginTransaction())
+ {
+ s.Delete("from Parent");
+ s.Delete("from Child");
+ t.Commit();
+ }
+ }
+ }
+ }
+
+ private class MapScenario : IDisposable
+ {
+ private readonly ISessionFactory factory;
+
+ public MapScenario(ISessionFactory factory)
+ {
+ this.factory = factory;
+ using (ISession s = factory.OpenSession())
+ {
+ using (ITransaction t = s.BeginTransaction())
+ {
+ var entity = new Parent();
+ entity.MapChildren = new Dictionary<int, Child>
+ {
+ {0, null},
+ {1, new Child()},
+ {2, null},
+ };
+ s.Save(entity);
+ t.Commit();
+ }
+ }
+ }
+
+ public void Dispose()
+ {
+ using (ISession s = factory.OpenSession())
+ {
+ using (ITransaction t = s.BeginTransaction())
+ {
+ s.Delete("from Parent");
+ s.Delete("from Child");
+ t.Commit();
+ }
+ }
+ }
+ }
+
+ #endregion
+
+ [Test]
+ public void List()
+ {
+ using (new ListScenario(Sfi))
+ {
+ // by design NH will clean null elements at the end of the List since 'null' and 'no element' mean the same.
+ // the effective ammount store will be 1(one) because ther is only one valid element but whem we initialize the collection
+ // it will have 2 elements (the first with null)
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction t = s.BeginTransaction())
+ {
+ var entity = s.CreateQuery("from Parent").UniqueResult<Parent>();
+ IList<object[]> members = s.GetNamedQuery("ListMemberSpy")
+ .SetParameter("parentid", entity.Id)
+ .List<object[]>();
+ int lazyCount = entity.ListChildren.Count;
+ NHibernateUtil.IsInitialized(entity.ListChildren).Should().Be.False();
+ NHibernateUtil.Initialize(entity.ListChildren);
+ int initCount = entity.ListChildren.Count;
+ initCount.Should().Be.EqualTo(lazyCount);
+ members.Count.Should("because only the valid element should be persisted.").Be(1);
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void Map()
+ {
+ using (new MapScenario(Sfi))
+ {
+ using (ISession s = OpenSession())
+ {
+ // for the case of <map> what really matter is the key, then NH should count the KEY and not the elements.
+ using (ITransaction t = s.BeginTransaction())
+ {
+ var entity = s.CreateQuery("from Parent").UniqueResult<Parent>();
+ IList<object[]> members = s.GetNamedQuery("MapMemberSpy")
+ .SetParameter("parentid", entity.Id)
+ .List<object[]>();
+ int lazyCount = entity.MapChildren.Count;
+ NHibernateUtil.IsInitialized(entity.MapChildren).Should().Be.False();
+ NHibernateUtil.Initialize(entity.MapChildren);
+ int initCount = entity.MapChildren.Count;
+ initCount.Should().Be.EqualTo(lazyCount);
+ members.Count.Should("because all elements with a valid key should be persisted.").Be(3);
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2603/Mappings.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2603/Mappings.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2603/Mappings.hbm.xml 2011-03-27 20:44:38 UTC (rev 5555)
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
+ namespace="NHibernate.Test.NHSpecificTest.NH2603"
+ assembly="NHibernate.Test"
+>
+ <class name="Parent" >
+ <id name="Id">
+ <generator class="increment"/>
+ </id>
+ <list name="ListChildren" lazy="extra" cascade="all" table="ListChildren">
+ <key column="listparentid"/>
+ <!-- sqlite doesn't like a column named index -->
+ <index column="childindex"/>
+ <many-to-many class="Child" column="childid"/>
+ </list>
+ <map name="MapChildren" lazy="extra" cascade="all" table="MapChildren">
+ <key column="mapparentid" />
+ <map-key column="childindex" type="int" />
+ <many-to-many class="Child">
+ <column name="childid" not-null="false" />
+ </many-to-many>
+ </map>
+ </class>
+
+ <class name="Child">
+ <id name="Id">
+ <generator class="increment"/>
+ </id>
+ </class>
+
+ <sql-query name="ListMemberSpy">
+ select listparentid, childindex, childid
+ from ListChildren
+ where listparentid = :parentid
+ </sql-query>
+
+ <sql-query name="MapMemberSpy">
+ select mapparentid, childindex, childid
+ from MapChildren
+ where mapparentid = :parentid
+ </sql-query>
+
+</hibernate-mapping>
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2603/Model.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2603/Model.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2603/Model.cs 2011-03-27 20:44:38 UTC (rev 5555)
@@ -0,0 +1,34 @@
+using System.Collections.Generic;
+
+namespace NHibernate.Test.NHSpecificTest.NH2603
+{
+ public class Parent
+ {
+ public virtual int Id
+ {
+ get;
+ set;
+ }
+
+ public virtual IList<Child> ListChildren
+ {
+ get;
+ set;
+ }
+
+ public virtual IDictionary<int, Child> MapChildren
+ {
+ get;
+ set;
+ }
+ }
+
+ public class Child
+ {
+ public virtual int Id
+ {
+ get;
+ set;
+ }
+ }
+}
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-03-27 19:31:22 UTC (rev 5554)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-03-27 20:44:38 UTC (rev 5555)
@@ -670,6 +670,8 @@
<Compile Include="NHSpecificTest\NH2565\Domain.cs" />
<Compile Include="NHSpecificTest\NH2565\Fixture.cs" />
<Compile Include="NHSpecificTest\NH2580\Fixture.cs" />
+ <Compile Include="NHSpecificTest\NH2603\Fixture.cs" />
+ <Compile Include="NHSpecificTest\NH2603\Model.cs" />
<Compile Include="NHSpecificTest\Properties\CompositePropertyRefTest.cs" />
<Compile Include="NHSpecificTest\Properties\DynamicEntityTest.cs" />
<Compile Include="NHSpecificTest\Properties\Model.cs" />
@@ -2496,6 +2498,7 @@
<EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" />
</ItemGroup>
<ItemGroup>
+ <EmbeddedResource Include="NHSpecificTest\NH2603\Mappings.hbm.xml" />
<EmbeddedResource Include="Subselect\Beings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2488\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2490\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-03-27 19:31:29
|
Revision: 5554
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5554&view=rev
Author: fabiomaulo
Date: 2011-03-27 19:31:22 +0000 (Sun, 27 Mar 2011)
Log Message:
-----------
Partial fix of NH-1747 and commented the full fix
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs
trunk/nhibernate/src/NHibernate/Loader/Collection/OneToManyJoinWalker.cs
trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs
trunk/nhibernate/src/NHibernate/Persister/Collection/OneToManyPersister.cs
trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1747/Fixture.cs
Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs 2011-03-27 17:34:26 UTC (rev 5553)
+++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/CollectionBinder.cs 2011-03-27 19:31:22 UTC (rev 5554)
@@ -712,6 +712,18 @@
throw new MappingException("Association references unmapped class: " + associatedEntityName);
oneToMany.AssociatedClass = persistentClass;
model.CollectionTable = persistentClass.Table;
+ if (model.IsInverse && persistentClass.JoinClosureSpan > 0)
+ {
+ // NH: bidirectional one-to-many with a class splitted in more tables; have to find in which table is the inverse side
+ foreach (var joined in persistentClass.JoinClosureIterator)
+ {
+ if (collectionMapping.Key.Columns.Select(x=> x.name).All(x => joined.Table.ColumnIterator.Select(jc=> jc.Name).Contains(x)))
+ {
+ model.CollectionTable = joined.Table;
+ break;
+ }
+ }
+ }
if (log.IsInfoEnabled)
log.Info("mapping collection: " + model.Role + " -> " + model.CollectionTable.Name);
Modified: trunk/nhibernate/src/NHibernate/Loader/Collection/OneToManyJoinWalker.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Loader/Collection/OneToManyJoinWalker.cs 2011-03-27 17:34:26 UTC (rev 5553)
+++ trunk/nhibernate/src/NHibernate/Loader/Collection/OneToManyJoinWalker.cs 2011-03-27 19:31:22 UTC (rev 5554)
@@ -13,6 +13,7 @@
/// <seealso cref="OneToManyLoader" />
public class OneToManyJoinWalker : CollectionJoinWalker
{
+ private readonly IOuterJoinLoadable elementPersister;
private readonly IQueryableCollection oneToManyPersister;
protected override bool IsDuplicateAssociation(string foreignKeyTable, string[] foreignKeyColumns)
@@ -28,7 +29,7 @@
: base(factory, enabledFilters)
{
this.oneToManyPersister = oneToManyPersister;
- IOuterJoinLoadable elementPersister = (IOuterJoinLoadable) oneToManyPersister.ElementPersister;
+ elementPersister = (IOuterJoinLoadable)oneToManyPersister.ElementPersister;
string alias = GenerateRootAlias(oneToManyPersister.Role);
WalkEntityTree(elementPersister, alias);
@@ -42,6 +43,12 @@
InitStatementString(elementPersister, alias, batchSize, subquery);
}
+ // NH-1747 FIX
+ //protected override string GenerateAliasForColumn(string rootAlias, string column)
+ //{
+ // return elementPersister.GenerateTableAliasForColumn(rootAlias, column);
+ //}
+
private void InitStatementString(IOuterJoinLoadable elementPersister, string alias, int batchSize, SqlString subquery)
{
int joins = CountEntityPersisters(associations);
Modified: trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs 2011-03-27 17:34:26 UTC (rev 5553)
+++ trunk/nhibernate/src/NHibernate/Persister/Collection/AbstractCollectionPersister.cs 2011-03-27 19:31:22 UTC (rev 5554)
@@ -1752,6 +1752,11 @@
get { return keyColumnNames; }
}
+ protected string[] KeyColumnAliases
+ {
+ get { return keyColumnAliases; }
+ }
+
public bool IsLazy
{
get { return isLazy; }
Modified: trunk/nhibernate/src/NHibernate/Persister/Collection/OneToManyPersister.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Persister/Collection/OneToManyPersister.cs 2011-03-27 17:34:26 UTC (rev 5553)
+++ trunk/nhibernate/src/NHibernate/Persister/Collection/OneToManyPersister.cs 2011-03-27 19:31:22 UTC (rev 5554)
@@ -321,6 +321,22 @@
.ToString();
}
+ // NH-1747 FIX
+ //protected override SelectFragment GenerateSelectFragment(string alias, string columnSuffix)
+ //{
+ // var ojl = (IOuterJoinLoadable)ElementPersister;
+ // var selectFragment = new SelectFragment(Dialect).SetSuffix(columnSuffix);
+ // var columnNames = KeyColumnNames;
+ // var columnAliases = KeyColumnAliases;
+ // for (int i = 0; i < columnNames.Length; i++)
+ // {
+ // var column = columnNames[i];
+ // var tableAlias = ojl.GenerateTableAliasForColumn(alias, column);
+ // selectFragment.AddColumn(tableAlias, column, columnAliases[i]);
+ // }
+ // return selectFragment;
+ //}
+
/// <summary>
/// Create the <see cref="OneToManyLoader" />
/// </summary>
Modified: trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs 2011-03-27 17:34:26 UTC (rev 5553)
+++ trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs 2011-03-27 19:31:22 UTC (rev 5554)
@@ -1817,7 +1817,7 @@
}
}
- public string GenerateTableAliasForColumn(string rootAlias, string column)
+ public virtual string GenerateTableAliasForColumn(string rootAlias, string column)
{
int propertyIndex = Array.IndexOf(SubclassColumnClosure, column);
Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1747/Fixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1747/Fixture.cs 2011-03-27 17:34:26 UTC (rev 5553)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1747/Fixture.cs 2011-03-27 19:31:22 UTC (rev 5554)
@@ -2,7 +2,7 @@
namespace NHibernate.Test.NHSpecificTest.NH1747
{
- [TestFixture,Ignore]
+ [TestFixture]
public class JoinTraversalTest : BugTestCase
{
[Test]
@@ -43,14 +43,13 @@
}
}
- [Test]
+ [Test, Ignore("The fix was commented in the code. Look for NH-1747")]
public void TraversingBagToJoinChildElementShouldWork()
{
using (ISession session = OpenSession())
{
var paymentBatch = session.Get<PaymentBatch>(3);
Assert.AreEqual(1, paymentBatch.Payments.Count);
-
}
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|