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: <jul...@us...> - 2010-10-25 03:14:15
|
Revision: 5253 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5253&view=rev Author: julian-maughan Date: 2010-10-25 03:14:09 +0000 (Mon, 25 Oct 2010) Log Message: ----------- Documentation improvements (by Diego Mijelshon) [ref. NH-2391] Modified Paths: -------------- trunk/nhibernate/doc/reference/modules/persistent_classes.xml Modified: trunk/nhibernate/doc/reference/modules/persistent_classes.xml =================================================================== --- trunk/nhibernate/doc/reference/modules/persistent_classes.xml 2010-10-24 00:54:21 UTC (rev 5252) +++ trunk/nhibernate/doc/reference/modules/persistent_classes.xml 2010-10-25 03:14:09 UTC (rev 5253) @@ -27,68 +27,27 @@ { public class Cat { - private long id; // identifier - private string name; - private DateTime birthdate; - private Cat mate; - private ISet kittens - private Color color; - private char sex; - private float weight; + long id; // identifier public virtual long Id { get { return id; } - set { id = value; } + protected set { id = value; } } - - public virtual string Name - { - get { return name; } - set { name = value; } - } - - public virtual Cat Mate - { - get { return mate; } - set { mate = value; } - } - - public virtual DateTime Birthdate - { - get { return birthdate; } - set { birthdate = value; } - } - - public virtual float Weight - { - get { return weight; } - set { weight = value; } - } - - public virtual Color Color - { - get { return color; } - set { color = value; } - } - - public virtual ISet Kittens - { - get { return kittens; } - set { kittens = value; } - } - + + public virtual string Name { get; set; } + public virtual Cat Mate { get; set; } + public virtual DateTime Birthdate { get; set; } + public virtual float Weight { get; set; } + public virtual Color Color { get; set; } + public virtual ISet Kittens { get; set; } + public virtual char Sex { get; set; } + // AddKitten not needed by NHibernate public virtual void AddKitten(Cat kitten) { kittens.Add(kitten); } - - public virtual char Sex - { - get { return sex; } - set { sex = value; } - } } }]]></programlisting> @@ -98,10 +57,10 @@ <sect2 id="persistent-classes-poco-accessors"> - <title>Declare accessors and mutators for persistent fields</title> + <title>Declare properties for persistent fields</title> <para> - <literal>Cat</literal> declares accessor methods for all its persistent fields. + <literal>Cat</literal> declares properties for all the persistent fields. Many other ORM tools directly persist instance variables. We believe it is far better to decouple this implementation detail from the persistence mechanism. NHibernate persists properties, using their getter and setter methods. @@ -112,6 +71,11 @@ persist a property with an <literal>internal</literal>, <literal>protected</literal>, <literal>protected internal</literal> or <literal>private</literal> visibility. </para> + + <para> + As shown in the example, both automatic properties and properties with a + backing field are supported. + </para> </sect2> <sect2 id="persistent-classes-poco-constructor"> @@ -196,13 +160,7 @@ { public class DomesticCat : Cat { - private string name; - - public virtual string Name - { - get { return name; } - set { name = value; } - } + public virtual string Name { get; set; } } }]]></programlisting> </sect1> @@ -359,27 +317,26 @@ <literal>Dictionaries</literal> of <literal>Dictionaries</literal>: </para> - <programlisting><![CDATA[Session s = OpenSession(); -Transaction tx = s.BeginTransaction(); -ISession s = OpenSession(); + <programlisting><![CDATA[using(ISession s = OpenSession()) +using(ITransaction tx = s.BeginTransaction()) +{ + // Create a customer + var frank = new Dictionary<string, object>(); + frank["name"] = "Frank"; -// Create a customer -var frank = new Dictionary<string, object>(); -frank["name"] = "Frank"; + // Create an organization + var foobar = new Dictionary<string, object>(); + foobar["name"] = "Foobar Inc."; -// Create an organization -var foobar = new Dictionary<string, object>(); -foobar["name"] = "Foobar Inc."; + // Link both + frank["organization"] = foobar; -// Link both -frank["organization"] = foobar; + // Save both + s.Save("Customer", frank); + s.Save("Organization", foobar); -// Save both -s.Save("Customer", frank); -s.Save("Organization", foobar); - -tx.Commit(); -s.Close();]]></programlisting> + tx.Commit(); +}]]></programlisting> <para> The advantages of a dynamic mapping are quick turnaround time for prototyping @@ -394,16 +351,14 @@ basis: </para> - <programlisting><![CDATA[Session dynamicSession = pocoSession.GetSession(EntityMode.Map); - -// Create a customer -var frank = new Dictionary<string, object>(); -frank["name"] = "Frank"; -dynamicSession.Save("Customer", frank); -... -dynamicSession.Flush(); -dynamicSession.Close() -... + <programlisting><![CDATA[using (ISession dynamicSession = pocoSession.GetSession(EntityMode.Map)) +{ + // Create a customer + var frank = new Dictionary<string, object>(); + frank["name"] = "Frank"; + dynamicSession.Save("Customer", frank); + ... +} // Continue on pocoSession ]]></programlisting> @@ -465,20 +420,21 @@ </hibernate-mapping> -public class CustomMapTuplizerImpl: - NHibernate.Tuple.Entity.DynamicMapEntityTuplizer { +public class CustomMapTuplizerImpl : NHibernate.Tuple.Entity.DynamicMapEntityTuplizer +{ // override the BuildInstantiator() method to plug in our custom map... - protected override IInstantiator BuildInstantiator( - NHibernate.Mapping.PersistentClass mappingInfo) { - return new CustomMapInstantiator( mappingInfo ); + protected override IInstantiator BuildInstantiator(NHibernate.Mapping.PersistentClass mappingInfo) + { + return new CustomMapInstantiator(mappingInfo); } - private static final class CustomMapInstantiator: - NHibernate.Tuple.DynamicMapInstantiator { + private sealed class CustomMapInstantiator : NHibernate.Tuple.DynamicMapInstantiator + { // override the generateMap() method to return our custom map... - protected override IDictionary GenerateMap() { - return new CustomMap(); - } + protected override IDictionary GenerateMap() + { + return new CustomMap(); + } } }]]></programlisting> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jul...@us...> - 2010-10-24 00:54:28
|
Revision: 5252 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5252&view=rev Author: julian-maughan Date: 2010-10-24 00:54:21 +0000 (Sun, 24 Oct 2010) Log Message: ----------- Comment improvements: fixed typo, 'Hibernate' replaced with 'NHibernate' Modified Paths: -------------- trunk/nhibernate/src/NHibernate/IQuery.cs Modified: trunk/nhibernate/src/NHibernate/IQuery.cs =================================================================== --- trunk/nhibernate/src/NHibernate/IQuery.cs 2010-10-14 16:42:37 UTC (rev 5251) +++ trunk/nhibernate/src/NHibernate/IQuery.cs 2010-10-24 00:54:21 UTC (rev 5252) @@ -15,11 +15,11 @@ /// <c>ISession.List()</c>; /// <list> /// <item> - /// A particulare page of the result set may be selected by calling + /// A particular page of the result set may be selected by calling /// <c>SetMaxResults()</c>, <c>SetFirstResult()</c>. The generated sql /// depends on the capabilities of the <see cref="Dialect.Dialect"/>. Some /// Dialects are for databases that have built in paging (LIMIT) and those capabilities - /// will be used to limit the number of records returned by the sql statement. + /// will be used to limit the number of records returned by the sql statement. /// If the database does not support LIMITs then all of the records will be returned, /// but the objects created will be limited to the specific results requested. /// </item> @@ -58,7 +58,7 @@ string QueryString { get; } /// <summary> - /// The Hibernate types of the query result set. + /// The NHibernate types of the query result set. /// </summary> IType[] ReturnTypes { get; } @@ -79,7 +79,7 @@ /// <remarks> /// <p> /// Entities returned as results are initialized on demand. The first SQL query returns - /// identifiers only. + /// identifiers only. /// </p> /// <p> /// This is a good strategy to use if you expect a high number of the objects @@ -132,7 +132,7 @@ /// </summary> T UniqueResult<T>(); - /// <summary> + /// <summary> /// Execute the update or delete statement. /// </summary> /// <returns> The number of entities updated or deleted. </returns> @@ -150,10 +150,10 @@ /// <param name="firstResult">The first row to retreive.</param> IQuery SetFirstResult(int firstResult); - /// <summary> - /// Entities retrieved by this query will be loaded in - /// a read-only mode where Hibernate will never dirty-check - /// them or make changes persistent. + /// <summary> + /// Entities retrieved by this query will be loaded in + /// a read-only mode where NHibernate will never dirty-check + /// them or make changes persistent. /// </summary> IQuery SetReadOnly(bool readOnly); @@ -205,7 +205,7 @@ /// </summary> /// <param name="position">Position of the parameter in the query, numbered from <c>0</c></param> /// <param name="val">The possibly null parameter value</param> - /// <param name="type">The Hibernate type</param> + /// <param name="type">The NHibernate type</param> IQuery SetParameter(int position, object val, IType type); /// <summary> @@ -233,7 +233,7 @@ IQuery SetParameter<T>(string name, T val); /// <summary> - /// Bind a value to an indexed parameter, guessing the Hibernate type from + /// Bind a value to an indexed parameter, guessing the NHibernate type from /// the class of the given object. /// </summary> /// <param name="position">The position of the parameter in the query, numbered from <c>0</c></param> @@ -254,11 +254,11 @@ /// </summary> /// <param name="name">The name of the parameter</param> /// <param name="vals">A collection of values to list</param> - /// <param name="type">The Hibernate type of the values</param> + /// <param name="type">The NHibernate type of the values</param> IQuery SetParameterList(string name, ICollection vals, IType type); /// <summary> - /// Bind multiple values to a named query parameter, guessing the Hibernate + /// Bind multiple values to a named query parameter, guessing the NHibernate /// type from the class of the first object in the collection. This is useful for binding a list /// of values to an expression such as <c>foo.bar in (:value_list)</c> /// </summary> @@ -266,18 +266,18 @@ /// <param name="vals">A collection of values to list</param> IQuery SetParameterList(string name, ICollection vals); - /// <summary> + /// <summary> /// Bind multiple values to a named query parameter. This is useful for binding /// a list of values to an expression such as <tt>foo.bar in (:value_list)</tt>. /// </summary> /// <param name="name">the name of the parameter </param> /// <param name="vals">a collection of values to list </param> - /// <param name="type">the Hibernate type of the values </param> + /// <param name="type">the NHibernate type of the values </param> IQuery SetParameterList(string name, object[] vals, IType type); - /// <summary> - /// Bind multiple values to a named query parameter. The Hibernate type of the parameter is - /// first detected via the usage/position in the query and if not sufficient secondly + /// <summary> + /// Bind multiple values to a named query parameter. The NHibernate type of the parameter is + /// first detected via the usage/position in the query and if not sufficient secondly /// guessed from the class of the first object in the array. This is useful for binding a list of values /// to an expression such as <tt>foo.bar in (:value_list)</tt>. /// </summary> @@ -288,7 +288,7 @@ /// <summary> /// Bind the property values of the given object to named parameters of the query, /// matching property names with parameter names and mapping property types to - /// Hibernate types using heuristics. + /// NHibernate types using heuristics. /// </summary> /// <param name="obj">Any PONO</param> IQuery SetProperties(object obj); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-10-14 16:42:45
|
Revision: 5251 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5251&view=rev Author: fabiomaulo Date: 2010-10-14 16:42:37 +0000 (Thu, 14 Oct 2010) Log Message: ----------- Apply NH-2378 (by Juan Pedro Elizalde) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/TestEntity.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/TestEntityDto.cs Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs 2010-10-13 12:55:16 UTC (rev 5250) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs 2010-10-14 16:42:37 UTC (rev 5251) @@ -200,7 +200,10 @@ case TypeCode.Boolean: SetText("bool"); break; - case TypeCode.Int32: + case TypeCode.Int16: + SetText("short"); + break; + case TypeCode.Int32: SetText("integer"); break; case TypeCode.Int64: Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/Fixture.cs 2010-10-14 16:42:37 UTC (rev 5251) @@ -0,0 +1,71 @@ +using System.Linq; +using NHibernate.Linq; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH2378 +{ + [TestFixture] + public class Fixture : BugTestCase + { + protected override void OnSetUp() + { + base.OnSetUp(); + using (var session = this.OpenSession()) + using (var tx = session.BeginTransaction()) + { + var entity = new TestEntity(); + entity.Id = 1; + entity.Name = "Test Entity"; + entity.TestPerson = new Person { Id = 1, Name = "TestUser" }; + session.Save(entity); + + var entity1 = new TestEntity(); + entity1.Id = 2; + entity1.Name = "Test Entity"; + entity1.TestPerson = new Person { Id = 2, Name = "TestUser" }; + session.Save(entity1); + + tx.Commit(); + } + } + + protected override void OnTearDown() + { + base.OnTearDown(); + using (ISession session = this.OpenSession()) + { + string hql = "from System.Object"; + session.Delete(hql); + session.Flush(); + } + } + + + [Test] + public void ShortEntityCanBeQueryCorrectlyUsingLinqProvider() + { + using (ISession session = this.OpenSession()) + { + IQueryable<TestEntity> query = session.Query<TestEntity>(); + IQueryable<TestEntityDto> list = query.Select(o => new TestEntityDto + { + EntityId = o.Id, + EntityName = o.Name, + PersonId = + (o.TestPerson != null) + ? o.TestPerson.Id + : (short) 0, + PersonName = + (o.TestPerson != null) + ? o.TestPerson.Name + : string.Empty + }); + + IQueryable<TestEntityDto> m = list.Where(o => o.PersonId == 2); + + + Assert.AreEqual(1, m.Count()); + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/Mappings.hbm.xml 2010-10-14 16:42:37 UTC (rev 5251) @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH2378" default-access="field.camelcase" + default-lazy="false"> + <class name="TestEntity"> + <id name="Id"> + <generator class="assigned" /> + </id> + <property name="Name" /> + + <many-to-one name="TestPerson" cascade="save-update"> + <column name="PersonId"/> + </many-to-one> + + </class> + + <class name="Person"> + <id name="Id"> + <generator class="assigned" /> + </id> + <property name="Name" /> + </class> +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/TestEntity.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/TestEntity.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/TestEntity.cs 2010-10-14 16:42:37 UTC (rev 5251) @@ -0,0 +1,45 @@ +namespace NHibernate.Test.NHSpecificTest.NH2378 +{ + public class TestEntity + { + private string name; + private int id; + private Person testPerson; + + public int Id + { + get { return id; } + set { id = value; } + } + + public string Name + { + get { return name; } + set { name = value; } + } + + public Person TestPerson + { + get { return testPerson; } + set { testPerson = value; } + } + } + + public class Person + { + private string name; + private short id; + + public short Id + { + get { return id; } + set { id = value; } + } + + public string Name + { + get { return name; } + set { name = value; } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/TestEntityDto.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/TestEntityDto.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2378/TestEntityDto.cs 2010-10-14 16:42:37 UTC (rev 5251) @@ -0,0 +1,10 @@ +namespace NHibernate.Test.NHSpecificTest.NH2378 +{ + public class TestEntityDto + { + public int EntityId { get; set; } + public string EntityName { get; set; } + public short PersonId { get; set; } + public string PersonName { get; set; } + } +} Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-13 12:55:16 UTC (rev 5250) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-14 16:42:37 UTC (rev 5251) @@ -533,6 +533,9 @@ <Compile Include="NHSpecificTest\NH2344\Model.cs" /> <Compile Include="NHSpecificTest\NH2361\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2374\NH2374Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2378\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2378\TestEntity.cs" /> + <Compile Include="NHSpecificTest\NH2378\TestEntityDto.cs" /> <Compile Include="PolymorphicGetAndLoad\Domain.cs" /> <Compile Include="PolymorphicGetAndLoad\PolymorphicGetAndLoadTest.cs" /> <Compile Include="TypesTest\CharClass.cs" /> @@ -2335,6 +2338,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH2378\Mappings.hbm.xml" /> <EmbeddedResource Include="TypesTest\XDocClass.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2374\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2328\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-10-13 12:55:22
|
Revision: 5250 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5250&view=rev Author: fabiomaulo Date: 2010-10-13 12:55:16 +0000 (Wed, 13 Oct 2010) Log Message: ----------- Fix NH-2376 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Event/EventListeners.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/Events/DisposableListenersTest.cs Modified: trunk/nhibernate/src/NHibernate/Event/EventListeners.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Event/EventListeners.cs 2010-10-12 21:27:00 UTC (rev 5249) +++ trunk/nhibernate/src/NHibernate/Event/EventListeners.cs 2010-10-13 12:55:16 UTC (rev 5250) @@ -626,23 +626,31 @@ return this; } - public void DestroyListeners() - { - try - { - foreach (object i in initializedListeners) - { - IDestructible destructible = i as IDestructible; - if (destructible != null) - { - destructible.Cleanup(); - } - } - } - catch (Exception e) - { - throw new HibernateException("could not destruct listeners", e); - } - } + public void DestroyListeners() + { + try + { + foreach (object i in initializedListeners) + { + var destructible = i as IDestructible; + if (destructible != null) + { + destructible.Cleanup(); + } + else + { + var disposable = i as IDisposable; + if (disposable != null) + { + disposable.Dispose(); + } + } + } + } + catch (Exception e) + { + throw new HibernateException("could not destruct/dispose listeners", e); + } + } } } \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/Events/DisposableListenersTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Events/DisposableListenersTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Events/DisposableListenersTest.cs 2010-10-13 12:55:16 UTC (rev 5250) @@ -0,0 +1,35 @@ +using System; +using NHibernate.Cfg; +using NHibernate.Event; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.Events +{ + public class MyDisposableListener : IPostUpdateEventListener, IDisposable + { + public void OnPostUpdate(PostUpdateEvent @event) + { + } + + public bool DisposeCalled { get; private set; } + public void Dispose() + { + DisposeCalled = true; + } + } + + public class DisposableListenersTest + { + [Test] + public void WhenCloseSessionFactoryThenCallDisposeOfListener() + { + Configuration cfg = TestConfigurationHelper.GetDefaultConfiguration(); + var myDisposableListener = new MyDisposableListener(); + cfg.AppendListeners(ListenerType.PostUpdate, new[]{myDisposableListener}); + var sf = cfg.BuildSessionFactory(); + sf.Close(); + myDisposableListener.DisposeCalled.Should().Be.True(); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-12 21:27:00 UTC (rev 5249) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-13 12:55:16 UTC (rev 5250) @@ -196,6 +196,7 @@ <Compile Include="EngineTest\NativeSQLQueryNonScalarReturnTest.cs" /> <Compile Include="EngineTest\NativeSQLQueryScalarReturnTest.cs" /> <Compile Include="EngineTest\NativeSQLQuerySpecificationTest.cs" /> + <Compile Include="Events\DisposableListenersTest.cs" /> <Compile Include="ExceptionsTest\NullQueryTest.cs" /> <Compile Include="ExpressionTest\RestrictionsFixture.cs" /> <Compile Include="Criteria\Student.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ric...@us...> - 2010-10-12 21:27:07
|
Revision: 5249 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5249&view=rev Author: ricbrown Date: 2010-10-12 21:27:00 +0000 (Tue, 12 Oct 2010) Log Message: ----------- Fix NH-2371 (Exception is thrown when using SetMaxResults on query using MySQL) Fixes MySql tests (broken in r5118): NHibernate.Test.Criteria.Lambda.IntegrationFixture.MultiCriteria NHibernate.Test.Criteria.Lambda.IntegrationFixture.RowCount NHibernate.Test.Legacy.FooBarTest.FindByCriteria NHibernate.Test.Legacy.FooBarTest.Limit NHibernate.Test.Legacy.FooBarTest.PSCache NHibernate.Test.Legacy.FooBarTest.Query NHibernate.Test.Legacy.SQLFunctionsTest.SQLFunctions NHibernate.Test.NHSpecificTest.Futures.FutureCriteriaFixture.CanCombineSingleFutureValueWithEnumerableFutures NHibernate.Test.NHSpecificTest.Futures.FutureCriteriaFixture.CanUseFutureCriteria NHibernate.Test.NHSpecificTest.Futures.FutureCriteriaFixture.TwoFuturesRunInTwoRoundTrips NHibernate.Test.NHSpecificTest.Futures.FutureQueryFixture.CanCombineSingleFutureValueWithEnumerableFutures NHibernate.Test.NHSpecificTest.Futures.FutureQueryFixture.CanUseFutureQuery NHibernate.Test.NHSpecificTest.Futures.FutureQueryFixture.TwoFuturesRunInTwoRoundTrips NHibernate.Test.NHSpecificTest.Futures.FutureQueryOverFixture.CanCombineSingleFutureValueWithEnumerableFutures NHibernate.Test.NHSpecificTest.Futures.FutureQueryOverFixture.CanUseFutureCriteria NHibernate.Test.NHSpecificTest.Futures.FutureQueryOverFixture.TwoFuturesRunInTwoRoundTrips NHibernate.Test.NHSpecificTest.Futures.LinqFutureFixture.CanCombineSingleFutureValueWithEnumerableFutures NHibernate.Test.NHSpecificTest.Futures.LinqFutureFixture.CanUseFutureQuery NHibernate.Test.NHSpecificTest.Futures.LinqFutureFixture.TwoFuturesRunInTwoRoundTrips NHibernate.Test.NHSpecificTest.NH1349.Fixture.Can_page_with_formula_property NHibernate.Test.NHSpecificTest.NH1359.Fixture.CanOrderByNamedSubquery NHibernate.Test.NHSpecificTest.NH1359.Fixture.CanPageAndSortResultsWithParametersAndFilters NHibernate.Test.NHSpecificTest.NH1359.Fixture.CanPageAndSortWithMultipleColumnsOfSameName NHibernate.Test.NHSpecificTest.NH1408.DetachedSubCriteriaTest.Test NHibernate.Test.NHSpecificTest.NH1413.PagingTest.Bug NHibernate.Test.NHSpecificTest.NH1533.Fixture.Can_query_using_two_orderby_and_limit_altogether NHibernate.Test.NHSpecificTest.NH1533.Fixture.Can_query_using_two_orderby_and_limit_with_maxresult_only NHibernate.Test.NHSpecificTest.NH1609.Fixture.Test NHibernate.Test.NHSpecificTest.NH1675.Fixture.ShouldWorkUsingDistinctAndLimits NHibernate.Test.NHSpecificTest.NH2344.Fixture.CoalesceShouldWork NHibernate.Test.NHSpecificTest.NH734.Fixture.LimitProblem NHibernate.Test.Pagination.PaginationFixture.PagingWithLock_NH2255 NHibernate.Test.Pagination.PaginationFixture.PagTest NHibernate.Test.ProjectionFixtures.Fixture.LimitingResultSetOnQueryThatIsOrderedByProjection NHibernate.Test.ProjectionFixtures.Fixture.QueryingWithParemetersAndParaemtersInOrderBy NHibernate.Test.QueryTest.DetachedQueryFixture.ExecutableQuery NHibernate.Test.SubselectFetchTest.SubselectFetchFixture.SubselectFetchWithLimit Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Dialect/MySQL5Dialect.cs trunk/nhibernate/src/NHibernate/Dialect/MySQLDialect.cs Modified: trunk/nhibernate/src/NHibernate/Dialect/MySQL5Dialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/MySQL5Dialect.cs 2010-10-12 19:12:23 UTC (rev 5248) +++ trunk/nhibernate/src/NHibernate/Dialect/MySQL5Dialect.cs 2010-10-12 21:27:00 UTC (rev 5249) @@ -31,15 +31,6 @@ //default: //http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html - public override bool SupportsVariableLimit - { - get - { - //note: why false? - return false; - } - } - public override bool SupportsSubSelects { get Modified: trunk/nhibernate/src/NHibernate/Dialect/MySQLDialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/MySQLDialect.cs 2010-10-12 19:12:23 UTC (rev 5248) +++ trunk/nhibernate/src/NHibernate/Dialect/MySQLDialect.cs 2010-10-12 21:27:00 UTC (rev 5249) @@ -194,13 +194,15 @@ var pagingBuilder = new SqlStringBuilder(); pagingBuilder.Add(querySqlString); pagingBuilder.Add(" limit "); - pagingBuilder.Add(Parameter.WithIndex(limitParameterIndex.Value)); if (offset > 0) { + pagingBuilder.Add(Parameter.WithIndex(offsetParameterIndex.Value)); pagingBuilder.Add(", "); - pagingBuilder.Add(Parameter.WithIndex(offsetParameterIndex.Value)); } + + pagingBuilder.Add(Parameter.WithIndex(limitParameterIndex.Value)); + return pagingBuilder.ToSqlString(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-10-12 19:12:29
|
Revision: 5248 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5248&view=rev Author: fabiomaulo Date: 2010-10-12 19:12:23 +0000 (Tue, 12 Oct 2010) Log Message: ----------- very minor relax Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Properties/PascalCaseMStrategy.cs Modified: trunk/nhibernate/src/NHibernate/Properties/PascalCaseMStrategy.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Properties/PascalCaseMStrategy.cs 2010-10-12 17:57:29 UTC (rev 5247) +++ trunk/nhibernate/src/NHibernate/Properties/PascalCaseMStrategy.cs 2010-10-12 19:12:23 UTC (rev 5248) @@ -1,6 +1,6 @@ namespace NHibernate.Properties { - internal class PascalCaseMStrategy : IFieldNamingStrategy + public class PascalCaseMStrategy : IFieldNamingStrategy { #region IFieldNamingStrategy Members This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-10-12 17:57:36
|
Revision: 5247 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5247&view=rev Author: fabiomaulo Date: 2010-10-12 17:57:29 +0000 (Tue, 12 Oct 2010) Log Message: ----------- Re-Fix NH-2020 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/AdoNet/OracleDataClientBatchingBatcher.cs trunk/nhibernate/src/NHibernate/AdoNet/SqlClientBatchingBatcher.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2020/Fixture.cs Modified: trunk/nhibernate/src/NHibernate/AdoNet/OracleDataClientBatchingBatcher.cs =================================================================== --- trunk/nhibernate/src/NHibernate/AdoNet/OracleDataClientBatchingBatcher.cs 2010-10-12 17:25:31 UTC (rev 5246) +++ trunk/nhibernate/src/NHibernate/AdoNet/OracleDataClientBatchingBatcher.cs 2010-10-12 17:57:29 UTC (rev 5247) @@ -1,10 +1,11 @@ using System; -using System.Collections; using System.Collections.Generic; using System.Data; +using System.Data.Common; using System.Reflection; using System.Text; using NHibernate.AdoNet.Util; +using NHibernate.Exceptions; namespace NHibernate.AdoNet { @@ -126,7 +127,15 @@ // this value is not a part of the ADO.NET API. // It's and ODP implementation, so it is being set by reflection SetObjectParam(currentBatch, "ArrayBindCount", arraySize); - int rowsAffected = currentBatch.ExecuteNonQuery(); + int rowsAffected; + try + { + rowsAffected = currentBatch.ExecuteNonQuery(); + } + catch (DbException e) + { + throw ADOExceptionHelper.Convert(Factory.SQLExceptionConverter, e, "could not execute batch command."); + } Expectations.VerifyOutcomeBatched(totalExpectedRowsAffected, rowsAffected); Modified: trunk/nhibernate/src/NHibernate/AdoNet/SqlClientBatchingBatcher.cs =================================================================== --- trunk/nhibernate/src/NHibernate/AdoNet/SqlClientBatchingBatcher.cs 2010-10-12 17:25:31 UTC (rev 5246) +++ trunk/nhibernate/src/NHibernate/AdoNet/SqlClientBatchingBatcher.cs 2010-10-12 17:57:29 UTC (rev 5247) @@ -1,6 +1,8 @@ using System.Data; +using System.Data.Common; using System.Text; using NHibernate.AdoNet.Util; +using NHibernate.Exceptions; using NHibernate.Util; namespace NHibernate.AdoNet @@ -82,9 +84,17 @@ Factory.Settings.SqlStatementLogger.LogBatchCommand(currentBatchCommandsLog.ToString()); currentBatchCommandsLog = new StringBuilder().AppendLine("Batch commands:"); } - - int rowsAffected = currentBatch.ExecuteNonQuery(); + int rowsAffected; + try + { + rowsAffected = currentBatch.ExecuteNonQuery(); + } + catch (DbException e) + { + throw ADOExceptionHelper.Convert(Factory.SQLExceptionConverter, e, "could not execute batch command."); + } + Expectations.VerifyOutcomeBatched(totalExpectedRowsAffected, rowsAffected); currentBatch.Dispose(); Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2020/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2020/Fixture.cs 2010-10-12 17:25:31 UTC (rev 5246) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2020/Fixture.cs 2010-10-12 17:57:29 UTC (rev 5247) @@ -1,10 +1,8 @@ -using System; - using NUnit.Framework; - using NHibernate.Dialect; using NHibernate.Exceptions; using NHibernate.Test.ExceptionsTest; +using SharpTestsEx; namespace NHibernate.Test.NHSpecificTest.NH2020 { @@ -13,7 +11,7 @@ { protected override void Configure(Cfg.Configuration configuration) { - configuration.SetProperty(Cfg.Environment.BatchSize, "1"); + configuration.SetProperty(Cfg.Environment.BatchSize, "10"); configuration.SetProperty( Cfg.Environment.SqlExceptionConverter, typeof (MSSQLExceptionConverterExample).AssemblyQualifiedName); @@ -58,17 +56,8 @@ using (ITransaction tx = s.BeginTransaction()) { var one = s.Load<One>(oneId); - - try - { - s.Delete(one); - tx.Commit(); - Assert.Fail("DELETE should have failed"); - } - catch (Exception ex) - { - Assert.IsInstanceOf<ConstraintViolationException>(ex); - } + s.Delete(one); + tx.Executing(transaction => transaction.Commit()).Throws<ConstraintViolationException>(); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-10-12 17:25:38
|
Revision: 5246 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5246&view=rev Author: fabiomaulo Date: 2010-10-12 17:25:31 +0000 (Tue, 12 Oct 2010) Log Message: ----------- Apply NH-2342 XDocument support and System.Xml.Linq reference :(( Modified Paths: -------------- trunk/nhibernate/src/NHibernate/NHibernate.csproj trunk/nhibernate/src/NHibernate/NHibernateUtil.cs trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Type/XDocType.cs trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.cs trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.hbm.xml trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocTypeFixture.cs Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-10-12 16:15:16 UTC (rev 5245) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-10-12 17:25:31 UTC (rev 5246) @@ -67,6 +67,9 @@ <HintPath>..\..\lib\net\3.5\Remotion.Data.Linq.dll</HintPath> </Reference> <Reference Include="System.Configuration" /> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> </ItemGroup> <ItemGroup> <Compile Include="ADOException.cs" /> @@ -861,6 +864,7 @@ <Compile Include="Type\LocalDateTimeType.cs" /> <Compile Include="Type\UriType.cs" /> <Compile Include="Type\UtcDateTimeType.cs" /> + <Compile Include="Type\XDocType.cs" /> <Compile Include="Type\XmlDocType.cs" /> <Compile Include="Util\ExpressionsHelper.cs" /> <Compile Include="Util\NullableDictionary.cs" /> Modified: trunk/nhibernate/src/NHibernate/NHibernateUtil.cs =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernateUtil.cs 2010-10-12 16:15:16 UTC (rev 5245) +++ trunk/nhibernate/src/NHibernate/NHibernateUtil.cs 2010-10-12 17:25:31 UTC (rev 5246) @@ -283,6 +283,8 @@ public static readonly NullableType XmlDoc = new XmlDocType(); + public static readonly NullableType XDoc = new XDocType(); + public static readonly NullableType Uri = new UriType(); /// <summary> Modified: trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2010-10-12 16:15:16 UTC (rev 5245) +++ trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2010-10-12 17:25:31 UTC (rev 5246) @@ -4,6 +4,7 @@ using System.Globalization; using System.Reflection; using System.Xml; +using System.Xml.Linq; using NHibernate.Bytecode; using NHibernate.Classic; using NHibernate.Engine; @@ -211,6 +212,8 @@ RegisterType(typeof (Uri), NHibernateUtil.Uri, new[] {"uri", "url"}); + RegisterType(typeof(XDocument), NHibernateUtil.XDoc, new[] { "xdoc", "xdocument" }); + // object needs to have both class and serializable setup before it can // be created. RegisterType(typeof (Object), NHibernateUtil.Object, new[] {"object"}); Added: trunk/nhibernate/src/NHibernate/Type/XDocType.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Type/XDocType.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Type/XDocType.cs 2010-10-12 17:25:31 UTC (rev 5246) @@ -0,0 +1,85 @@ +using System; +using System.Data; +using System.Xml.Linq; +using NHibernate.SqlTypes; + +namespace NHibernate.Type +{ + [Serializable] + public class XDocType : MutableType + { + public XDocType() + : base(new XmlSqlType()) + { + } + + public XDocType(SqlType sqlType) + : base(sqlType) + { + } + + public override string Name + { + get { return "XDoc"; } + } + + public override System.Type ReturnedClass + { + get { return typeof (XDocument); } + } + + public override void Set(IDbCommand cmd, object value, int index) + { + ((IDataParameter) cmd.Parameters[index]).Value = ((XDocument) value).ToString(SaveOptions.DisableFormatting); + } + + public override object Get(IDataReader rs, int index) + { + // according to documentation, GetValue should return a string, at list for MsSQL + // hopefully all DataProvider has the same behaviour + string xmlString = Convert.ToString(rs.GetValue(index)); + return FromStringValue(xmlString); + } + + public override object Get(IDataReader rs, string name) + { + return Get(rs, rs.GetOrdinal(name)); + } + + public override string ToString(object val) + { + return val == null ? null : val.ToString(); + } + + public override object FromStringValue(string xml) + { + if (xml != null) + { + return XDocument.Parse(xml); + } + + return null; + } + + public override object DeepCopyNotNull(object value) + { + var original = (XDocument) value; + var copy = new XDocument(original); + return copy; + } + + public override bool IsEqual(object x, object y) + { + if (x == null && y == null) + { + return true; + } + if (x == null || y == null) + { + return false; + } + + return XNode.DeepEquals((XDocument) x, (XDocument) y); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-12 16:15:16 UTC (rev 5245) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-12 17:25:31 UTC (rev 5246) @@ -80,6 +80,9 @@ </Reference> <Reference Include="System.Transactions" /> <Reference Include="System.Xml" /> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> </ItemGroup> <ItemGroup> <Compile Include="Ado\AlmostSimple.cs" /> @@ -538,6 +541,8 @@ <Compile Include="TypesTest\UriClass.cs" /> <Compile Include="TypesTest\UriTypeFixture.cs" /> <Compile Include="TypesTest\UtcDateTimeTypeFixture.cs" /> + <Compile Include="TypesTest\XDocClass.cs" /> + <Compile Include="TypesTest\XDocTypeFixture.cs" /> <Compile Include="TypesTest\XmlDocClass.cs" /> <Compile Include="TypesTest\XmlDocTypeFixture.cs" /> <Compile Include="UtilityTest\ReflectionHelperIsMethodOfTests.cs" /> @@ -2329,6 +2334,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="TypesTest\XDocClass.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2374\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2328\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2313\Mappings.hbm.xml" /> Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.cs 2010-10-12 17:25:31 UTC (rev 5246) @@ -0,0 +1,11 @@ +using System.Xml.Linq; + +namespace NHibernate.Test.TypesTest +{ + public class XDocClass + { + public int Id { get; set; } + public XDocument Document { get; set; } + public XDocument AutoDocument { get; set; } + } +} Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocClass.hbm.xml 2010-10-12 17:25:31 UTC (rev 5246) @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false"> + <class name="NHibernate.Test.TypesTest.XDocClass, NHibernate.Test" table="nh_xdoc"> + <id name="Id" column="id"> + <generator class="assigned" /> + </id> + + <property name="Document" type="XDoc" /> + <property name="AutoDocument" /> + </class> +</hibernate-mapping> Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocTypeFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocTypeFixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/TypesTest/XDocTypeFixture.cs 2010-10-12 17:25:31 UTC (rev 5246) @@ -0,0 +1,76 @@ +using System.Xml.Linq; +using NHibernate.Type; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.TypesTest +{ + [TestFixture] + public class XDocTypeFixture : TypeFixtureBase + { + protected override string TypeName + { + get { return "XDoc"; } + } + + [Test] + public void ReadWrite() + { + using (var s = OpenSession()) + { + var docEntity = new XDocClass {Id = 1 }; + docEntity.Document = XDocument.Parse("<MyNode>my Text</MyNode>"); + s.Save(docEntity); + s.Flush(); + } + + using (var s = OpenSession()) + { + var docEntity = s.Get<XDocClass>(1); + var document = docEntity.Document; + document.Should().Not.Be.Null(); + document.Document.Root.ToString(SaveOptions.DisableFormatting).Should().Contain("<MyNode>my Text</MyNode>"); + var xmlElement = new XElement("Pizza", new XAttribute("temp", "calda")); + document.Document.Root.Add(xmlElement); + s.Save(docEntity); + s.Flush(); + } + using (var s = OpenSession()) + { + var docEntity = s.Get<XDocClass>(1); + var document = docEntity.Document; + document.Document.Root.ToString(SaveOptions.DisableFormatting).Should().Contain("Pizza temp=\"calda\""); + s.Delete(docEntity); + s.Flush(); + } + } + + [Test] + public void InsertNullValue() + { + using (ISession s = OpenSession()) + { + var docEntity = new XDocClass { Id = 1 }; + docEntity.Document = null; + s.Save(docEntity); + s.Flush(); + } + + using (ISession s = OpenSession()) + { + var docEntity = s.Get<XDocClass>(1); + docEntity.Document.Should().Be.Null(); + s.Delete(docEntity); + s.Flush(); + } + } + + [Test] + public void AutoDiscoverFromNetType() + { + // integration test to be 100% sure + var propertyType = sessions.GetEntityPersister(typeof (XDocClass).FullName).GetPropertyType("AutoDocument"); + propertyType.Should().Be.InstanceOf<XDocType>(); + } + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-10-12 16:15:22
|
Revision: 5245 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5245&view=rev Author: fabiomaulo Date: 2010-10-12 16:15:16 +0000 (Tue, 12 Oct 2010) Log Message: ----------- Fix NH-2374 (thanks to Remco Ros for the investigation, the test, the port and the patch) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Id/ForeignGenerator.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2374/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2374/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2374/NH2374Fixture.cs Modified: trunk/nhibernate/src/NHibernate/Id/ForeignGenerator.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Id/ForeignGenerator.cs 2010-10-12 05:41:30 UTC (rev 5244) +++ trunk/nhibernate/src/NHibernate/Id/ForeignGenerator.cs 2010-10-12 16:15:16 UTC (rev 5245) @@ -39,30 +39,41 @@ /// </returns> public object Generate(ISessionImplementor sessionImplementor, object obj) { - ISession session = (ISession)sessionImplementor; + ISession session = (ISession) sessionImplementor; - object associatedObject = sessionImplementor.Factory - .GetClassMetadata(obj.GetType()) - .GetPropertyValue(obj, propertyName, sessionImplementor.EntityMode); + var persister = sessionImplementor.Factory.GetEntityPersister(entityName); + object associatedObject = persister.GetPropertyValue(obj, propertyName, sessionImplementor.EntityMode); if (associatedObject == null) { throw new IdentifierGenerationException("attempted to assign id from null one-to-one property: " + propertyName); } - EntityType type = (EntityType)sessionImplementor.Factory.GetClassMetadata(obj.GetType()).GetPropertyType(propertyName); + EntityType foreignValueSourceType; + IType propertyType = persister.GetPropertyType(propertyName); + if (propertyType.IsEntityType) + { + foreignValueSourceType = (EntityType) propertyType; + } + else + { + // try identifier mapper + foreignValueSourceType = (EntityType) persister.GetPropertyType("_identifierMapper." + propertyName); + } object id; try { - id = ForeignKeys.GetEntityIdentifierIfNotUnsaved(type.GetAssociatedEntityName(), associatedObject, sessionImplementor); + id = ForeignKeys.GetEntityIdentifierIfNotUnsaved( + foreignValueSourceType.GetAssociatedEntityName(), + associatedObject, + sessionImplementor); } catch (TransientObjectException) { - id = session.Save(associatedObject); + id = session.Save(foreignValueSourceType.GetAssociatedEntityName(), associatedObject); } - if (session.Contains(obj)) { //abort the save (the object is already saved by a circular cascade) Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2374/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2374/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2374/Mappings.hbm.xml 2010-10-12 16:15:16 UTC (rev 5245) @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH2374"> + <class entity-name="Parent"> + <id name="Id" type="System.Int32"> + <generator class="increment"/> + </id> + <many-to-one name="Child" entity-name="Child" cascade="all-delete-orphan" /> + </class> + <class entity-name="Child"> + <id name="Id" type="System.Int32"> + <generator class="foreign"> + <param name="property">Parent</param> + </generator> + </id> + <one-to-one name="Parent" entity-name="Parent" /> + </class> +</hibernate-mapping> Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2374/NH2374Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2374/NH2374Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2374/NH2374Fixture.cs 2010-10-12 16:15:16 UTC (rev 5245) @@ -0,0 +1,90 @@ +using System.Collections; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH2374 +{ + [TestFixture] + public class NH2374Fixture : BugTestCase + { + [Test] + public void OneToOne_with_EntityMode_Map() + { + int id; + + using (ISession sroot = OpenSession()) + { + using (ISession s = sroot.GetSession(EntityMode.Map)) + { + using (ITransaction t = s.BeginTransaction()) + { + var parent = new Hashtable(); + var child = new Hashtable + { + {"Parent", parent} + }; + + parent["Child"] = child; + + id = (int) s.Save("Parent", parent); + s.Flush(); + + t.Commit(); + } + } + } + + using (ISession s = OpenSession()) + { + using (ITransaction t = s.BeginTransaction()) + { + var p = s.Get("Parent", id) as IDictionary; + + Assert.That(p["Child"], Is.Not.Null); + + s.Delete("Parent", p); + + t.Commit(); + } + } + } + + [Test] + public void OneToOne_with_EntityMode_Poco() + { + int id; + + using (ISession s = OpenSession()) + { + using (ITransaction t = s.BeginTransaction()) + { + var parent = new Hashtable(); + var child = new Hashtable + { + {"Parent", parent} + }; + + parent["Child"] = child; + + id = (int) s.Save("Parent", parent); + s.Flush(); + + t.Commit(); + } + } + + using (ISession s = OpenSession()) + { + using (ITransaction t = s.BeginTransaction()) + { + var p = s.Get("Parent", id) as IDictionary; + + Assert.That(p["Child"], Is.Not.Null); + + s.Delete("Parent", p); + + t.Commit(); + } + } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-12 05:41:30 UTC (rev 5244) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-12 16:15:16 UTC (rev 5245) @@ -528,6 +528,7 @@ <Compile Include="NHSpecificTest\NH2344\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2344\Model.cs" /> <Compile Include="NHSpecificTest\NH2361\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2374\NH2374Fixture.cs" /> <Compile Include="PolymorphicGetAndLoad\Domain.cs" /> <Compile Include="PolymorphicGetAndLoad\PolymorphicGetAndLoadTest.cs" /> <Compile Include="TypesTest\CharClass.cs" /> @@ -2328,6 +2329,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH2374\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2328\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2313\Mappings.hbm.xml" /> <EmbeddedResource Include="TypesTest\UriClass.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ric...@us...> - 2010-10-12 05:41:36
|
Revision: 5244 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5244&view=rev Author: ricbrown Date: 2010-10-12 05:41:30 +0000 (Tue, 12 Oct 2010) Log Message: ----------- Partial Fix NH-2328 (Linq query on <Any/> fails): updated test clean-up to prevent foreign key errors Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs 2010-10-10 07:47:16 UTC (rev 5243) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs 2010-10-12 05:41:30 UTC (rev 5244) @@ -38,6 +38,7 @@ using (ITransaction t = s.BeginTransaction()) { s.CreateQuery("delete from Child").ExecuteUpdate(); + s.CreateQuery("update Person p set p.Father = null").ExecuteUpdate(); s.CreateQuery("delete from Person").ExecuteUpdate(); s.CreateQuery("delete from JoinedChild").ExecuteUpdate(); s.CreateQuery("delete from Parent").ExecuteUpdate(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ric...@us...> - 2010-10-10 07:47:23
|
Revision: 5243 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5243&view=rev Author: ricbrown Date: 2010-10-10 07:47:16 +0000 (Sun, 10 Oct 2010) Log Message: ----------- Partial Fix NH-2328 (Linq query on <Any/> fails): Fixed for QueryOver Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/ExpressionProcessor.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2328/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2328/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2328/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2328/Model.cs Modified: trunk/nhibernate/src/NHibernate/Impl/ExpressionProcessor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/ExpressionProcessor.cs 2010-10-09 12:43:41 UTC (rev 5242) +++ trunk/nhibernate/src/NHibernate/Impl/ExpressionProcessor.cs 2010-10-10 07:47:16 UTC (rev 5243) @@ -425,7 +425,7 @@ if (expression is TypeBinaryExpression) { TypeBinaryExpression typeBinaryExpression = (TypeBinaryExpression)expression; - return Restrictions.Eq(ClassMember(typeBinaryExpression.Expression), typeBinaryExpression.TypeOperand); + return Restrictions.Eq(ClassMember(typeBinaryExpression.Expression), typeBinaryExpression.TypeOperand.FullName); } throw new Exception("Could not determine member type from " + expression.NodeType + ", " + expression.ToString() + ", " + expression.GetType()); Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs 2010-10-09 12:43:41 UTC (rev 5242) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs 2010-10-10 07:47:16 UTC (rev 5243) @@ -210,6 +210,78 @@ } [Test] + public void IsType() + { + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + var father1 = new Person() { Name = "Father 1" }; + var father2 = new CustomPerson() { Name = "Father 2" }; + + var person1 = new Person() { Name = "Person 1", Father = father2 }; + var person2 = new CustomPerson() { Name = "Person 2", Father = father1 }; + + s.Save(father1); + s.Save(father2); + + s.Save(person1); + s.Save(person2); + + t.Commit(); + } + + using (ISession s = OpenSession()) + { + var actual = + s.QueryOver<Person>() + .Where(p => p is CustomPerson) + .And(p => p.Father != null) + .List(); + + Assert.That(actual.Count, Is.EqualTo(1)); + Assert.That(actual[0].Name, Is.EqualTo("Person 2")); + } + + using (ISession s = OpenSession()) + { + var actual = + s.QueryOver<Person>() + .Where(p => p.GetType() == typeof(CustomPerson)) + .And(p => p.Father != null) + .List(); + + Assert.That(actual.Count, Is.EqualTo(1)); + Assert.That(actual[0].Name, Is.EqualTo("Person 2")); + } + + using (ISession s = OpenSession()) + { + Person f = null; + var actual = + s.QueryOver<Person>() + .JoinAlias(p => p.Father, () => f) + .Where(() => f is CustomPerson) + .List(); + + Assert.That(actual.Count, Is.EqualTo(1)); + Assert.That(actual[0].Name, Is.EqualTo("Person 1")); + } + + using (ISession s = OpenSession()) + { + Person f = null; + var actual = + s.QueryOver<Person>() + .JoinAlias(p => p.Father, () => f) + .Where(() => f.GetType() == typeof(CustomPerson)) + .List(); + + Assert.That(actual.Count, Is.EqualTo(1)); + Assert.That(actual[0].Name, Is.EqualTo("Person 1")); + } + } + + [Test] public void SubCriteria() { using (ISession s = OpenSession()) Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Mappings.hbm.xml 2010-10-09 12:43:41 UTC (rev 5242) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Mappings.hbm.xml 2010-10-10 07:47:16 UTC (rev 5243) @@ -7,13 +7,16 @@ <id name="Id"> <generator class="native"/> </id> + <discriminator type="string" /> <property name="Name" /> <property name="Age" /> <property name="Blood" /> + <many-to-one name="Father" class="Person" /> <bag name="Children" inverse="true" cascade="all-delete-orphan"> <key column="Parent" /> <one-to-many class="Child" /> </bag> + <subclass name="CustomPerson" /> </class> <class name="Child"> Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2010-10-09 12:43:41 UTC (rev 5242) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2010-10-10 07:47:16 UTC (rev 5243) @@ -28,7 +28,7 @@ .Add(Restrictions.Lt("Age", 50)) .Add(Restrictions.Le("Age", 49)) .Add(Restrictions.Eq("class", typeof(Person))) - .Add(Restrictions.Eq("class", typeof(Person))); + .Add(Restrictions.Eq("class", typeof(Person).FullName)); IQueryOver<Person> actual = CreateTestQueryOver<Person>() @@ -187,7 +187,7 @@ .Add(Restrictions.Lt("personAlias.Age", 50)) .Add(Restrictions.Le("personAlias.Age", 49)) .Add(Restrictions.Eq("personAlias.class", typeof(Person))) - .Add(Restrictions.Eq("personAlias.class", typeof(Person))); + .Add(Restrictions.Eq("personAlias.class", typeof(Person).FullName)); Person personAlias = null; IQueryOver<Person> actual = Property changes on: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2328 ___________________________________________________________________ Added: bugtraq:url + http://jira.nhibernate.org/browse/%BUGID% Added: bugtraq:logregex + NH-\d+ Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2328/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2328/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2328/Fixture.cs 2010-10-10 07:47:16 UTC (rev 5243) @@ -0,0 +1,89 @@ +using System.Linq; +using NHibernate.Linq; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH2328 +{ + [TestFixture] + public class Fixture : BugTestCase + { + protected override void OnSetUp() + { + base.OnSetUp(); + + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + var circle = new Circle(); + var square = new Square(); + + s.Save(circle); + s.Save(square); + + s.Save(new ToyBox() { Name = "Box1", Shape = circle }); + s.Save(new ToyBox() { Name = "Box2", Shape = square }); + t.Commit(); + } + } + + protected override void OnTearDown() + { + base.OnTearDown(); + + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + s.CreateQuery("delete from ToyBox").ExecuteUpdate(); + s.CreateQuery("delete from Circle").ExecuteUpdate(); + s.CreateQuery("delete from Square").ExecuteUpdate(); + t.Commit(); + } + } + + [Test] + public void AnyIs_QueryOver() + { + using (ISession s = OpenSession()) + { + var boxes = + s.QueryOver<ToyBox>() + .Where(t => t.Shape is Square) + .List(); + + Assert.That(boxes.Count, Is.EqualTo(1)); + Assert.That(boxes[0].Name, Is.EqualTo("Box2")); + } + } + + [Test] + [Ignore("VisitTypeBinaryExpression generates HQL tree with string constant, but DB has a number")] + public void AnyIs_Linq() + { + using (ISession s = OpenSession()) + { + var boxes = + (from t in s.Query<ToyBox>() + where t.Shape is Square + select t).ToList(); + + Assert.That(boxes.Count, Is.EqualTo(1)); + Assert.That(boxes[0].Name, Is.EqualTo("Box2")); + } + } + + [Test] + [Description("Is this right? - the HQL translation should turn the class-string to an int, not the user?")] + public void AnyIs_HqlRequiresNumberIn() + { + using (ISession s = OpenSession()) + { + var boxes = + s.CreateQuery("from ToyBox t where t.Shape.class = 2") + .List<ToyBox>(); + + Assert.That(boxes.Count, Is.EqualTo(1)); + Assert.That(boxes[0].Name, Is.EqualTo("Box2")); + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2328/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2328/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2328/Mappings.hbm.xml 2010-10-10 07:47:16 UTC (rev 5243) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping + xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH2328"> + + <class name="ToyBox"> + <id name="Id"> + <generator class="native"/> + </id> + <property name="Name" /> + <any name="Shape" id-type="int" meta-type="int"> + <meta-value value="1" class="Circle"/> + <meta-value value="2" class="Square"/> + <column name="s_object_id" /> + <column name="object_id" /> + </any> + </class> + + <class name="Square"> + <id name="Id"> + <generator class="native"/> + </id> + </class> + + <class name="Circle"> + <id name="Id"> + <generator class="native"/> + </id> + </class> + +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2328/Model.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2328/Model.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2328/Model.cs 2010-10-10 07:47:16 UTC (rev 5243) @@ -0,0 +1,23 @@ +namespace NHibernate.Test.NHSpecificTest.NH2328 +{ + public class ToyBox + { + public virtual int Id { get; set; } + public virtual string Name { get; set; } + public virtual IShape Shape { get; set; } + } + + public interface IShape + { + } + + public class Circle : IShape + { + public virtual int Id { get; set; } + } + + public class Square : IShape + { + public virtual int Id { get; set; } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-09 12:43:41 UTC (rev 5242) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-10 07:47:16 UTC (rev 5243) @@ -519,6 +519,8 @@ <Compile Include="NHSpecificTest\NH2324\CompositeUserType.cs" /> <Compile Include="NHSpecificTest\NH2324\Entity.cs" /> <Compile Include="NHSpecificTest\NH2324\BulkUpdateWithCustomCompositeType.cs" /> + <Compile Include="NHSpecificTest\NH2328\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2328\Model.cs" /> <Compile Include="NHSpecificTest\NH2331\Forum.cs" /> <Compile Include="NHSpecificTest\NH2331\MemberGroup.cs" /> <Compile Include="NHSpecificTest\NH2331\Nh2331Test.cs" /> @@ -2326,6 +2328,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH2328\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2313\Mappings.hbm.xml" /> <EmbeddedResource Include="TypesTest\UriClass.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\EntityNameWithFullName\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-10-09 12:43:48
|
Revision: 5242 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5242&view=rev Author: fabiomaulo Date: 2010-10-09 12:43:41 +0000 (Sat, 09 Oct 2010) Log Message: ----------- Actualization version of actual trunk Modified Paths: -------------- trunk/nhibernate/build-common/common.xml Modified: trunk/nhibernate/build-common/common.xml =================================================================== --- trunk/nhibernate/build-common/common.xml 2010-10-09 12:29:39 UTC (rev 5241) +++ trunk/nhibernate/build-common/common.xml 2010-10-09 12:43:41 UTC (rev 5242) @@ -84,7 +84,7 @@ effectively SP0). --> - <property name="project.version" value="3.0.0.Beta1" overwrite="false" /> + <property name="project.version" value="3.0.0.Beta2" overwrite="false" /> <!-- Compute short project version (major.minor) using a regex --> <regex input="${project.version}" pattern="^(?'shortversion'\d+\.\d+)" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-10-09 12:29:45
|
Revision: 5241 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5241&view=rev Author: fabiomaulo Date: 2010-10-09 12:29:39 +0000 (Sat, 09 Oct 2010) Log Message: ----------- Preparing release Modified Paths: -------------- trunk/nhibernate/releasenotes.txt Modified: trunk/nhibernate/releasenotes.txt =================================================================== --- trunk/nhibernate/releasenotes.txt 2010-10-09 11:29:22 UTC (rev 5240) +++ trunk/nhibernate/releasenotes.txt 2010-10-09 12:29:39 UTC (rev 5241) @@ -11,6 +11,33 @@ * [NH-2284] - Obsolete members removed * Related to [NH-2358]: DateTimeOffset type now works as a DateTimeOffset instead a "surrogate" of DateTime +Build 3.0.0.Beta1 (rev5241) +============================= + +** Bug + * [NH-2001] - Filter by Null in Linq (hql ast version) doesn't work + * [NH-2077] - SQL Server Dialect: Nhibernate fails to execute native queries with parameters, separated with ';' + * [NH-2084] - Future + hql queries + same parameter name leads to "NHibernate.QueryException: The named parameter personId was used in more than one query. Either give unique names to your parameters, or use the multi query SetParameter() methods" + * [NH-2331] - ICriteria: Correlated query throws "Could not find a matching criteria info provider to", works in 2.1.0 broken in 2.1.2 + * [NH-2352] - Null reference exception in GetDefaultConfigurationFilePath when AppDomain.CurrentDomain.RelativeSearchPath is null + * [NH-2358] - DateTimeOffsetType doesnt properly convert to-from database; milliseconds are lost. + * [NH-2364] - Dynamic entities with "full name" result in incorrect queries + +** Improvement + * [NH-1108] - Reference Data - Ability to load all rows from a table using an HBM file. + * [NH-2313] - Better logging when SessionFactory is being built + * [NH-2355] - Allow composite-id without class on dynamic entity + +** New Feature + * [NH-2309] - Add support for Future() with the new Linq provider + * [NH-2367] - Native support for System.Uri as string + +** Patch + * [NH-2073] - Missing QuerySequencesString override in FirebirdDialect + * [NH-2082] - AdoTransaction sometimes writes to log wrong information about IsolationLevel + * [NH-2357] - Support for custom boolean functions in the linq provider (as FREETEXT). + + Build 3.0.0.Alpha3 (rev5226) ============================= This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-10-09 11:29:30
|
Revision: 5240 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5240&view=rev Author: fabiomaulo Date: 2010-10-09 11:29:22 +0000 (Sat, 09 Oct 2010) Log Message: ----------- Fix NH-2001 (thanks to Ricardo Stuven) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs trunk/nhibernate/src/NHibernate.Test/Linq/LinqQuerySamples.cs Modified: trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2010-10-07 23:56:06 UTC (rev 5239) +++ trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2010-10-09 11:29:22 UTC (rev 5240) @@ -239,6 +239,13 @@ var lhs2 = VisitExpression(expression.Left).AsExpression(); var rhs2 = VisitExpression(expression.Right).AsExpression(); + if (expression.Right is ConstantExpression + && expression.Right.Type.IsNullableOrReference() + && ((ConstantExpression)expression.Right).Value == null) + { + return _hqlTreeBuilder.IsNull(lhs2); + } + return _hqlTreeBuilder.BooleanOr( _hqlTreeBuilder.BooleanAnd( _hqlTreeBuilder.IsNull(lhs), @@ -275,6 +282,13 @@ var lhs3 = VisitExpression(expression.Left).AsExpression(); var rhs3 = VisitExpression(expression.Right).AsExpression(); + if (expression.Right is ConstantExpression + && expression.Right.Type.IsNullableOrReference() + && ((ConstantExpression)expression.Right).Value == null) + { + return _hqlTreeBuilder.IsNotNull(lhs2); + } + return _hqlTreeBuilder.BooleanOr( _hqlTreeBuilder.BooleanOr( Modified: trunk/nhibernate/src/NHibernate.Test/Linq/LinqQuerySamples.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Linq/LinqQuerySamples.cs 2010-10-07 23:56:06 UTC (rev 5239) +++ trunk/nhibernate/src/NHibernate.Test/Linq/LinqQuerySamples.cs 2010-10-09 11:29:22 UTC (rev 5240) @@ -1564,6 +1564,48 @@ ObjectDumper.Write(q); } + + [Category("WHERE")] + [Test(Description = "This sample uses WHERE to filter for orders with shipping date equals to null.")] + public void DLinq2B() + { + IQueryable<Order> q = + from o in db.Orders + where o.ShippingDate == null + select o; + + AssertByIds(q, + new[] + { + 11008, 11019, 11039, 11040, 11045, 11051, 11054, + 11058, 11059, 11061, 11062, 11065, 11068, 11070, + 11071, 11072, 11073, 11074, 11075, 11076, 11077 + }, + x => x.OrderId); + } + + [Category("WHERE")] + [Test(Description = "This sample uses WHERE to filter for orders with shipping date not equals to null.")] + public void DLinq2C() + { + var q = + (from o in db.Orders + where o.ShippingDate != null + select o.OrderId).ToArray(); + + + var withNullShippingDate = + new[] + { + 11008, 11019, 11039, 11040, 11045, 11051, 11054, + 11058, 11059, 11061, 11062, 11065, 11068, 11070, + 11071, 11072, 11073, 11074, 11075, 11076, 11077 + }; + + Assert.AreEqual(809, q.Length); + + Assert.That(!q.Any(orderid => withNullShippingDate.Contains(orderid))); + } } public class ParentChildBatch<T, TKey, TSub> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aye...@us...> - 2010-10-07 23:56:12
|
Revision: 5239 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5239&view=rev Author: ayenderahien Date: 2010-10-07 23:56:06 +0000 (Thu, 07 Oct 2010) Log Message: ----------- Changing ToFuture extension methods to work only on IQueryable Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs Modified: trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs 2010-10-07 20:57:08 UTC (rev 5238) +++ trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs 2010-10-07 23:56:06 UTC (rev 5239) @@ -40,7 +40,7 @@ return new NhQueryable<T>(query.Provider, callExpression); } - public static IEnumerable<T> ToFuture<T>(this IEnumerable<T> query) + public static IEnumerable<T> ToFuture<T>(this IQueryable<T> query) { var nhQueryable = query as NhQueryable<T>; if (nhQueryable == null) @@ -51,7 +51,7 @@ return (IEnumerable<T>)future; } - public static IFutureValue<T> ToFutureValue<T>(this IEnumerable<T> query) + public static IFutureValue<T> ToFutureValue<T>(this IQueryable<T> query) { var nhQueryable = query as NhQueryable<T>; if (nhQueryable == null) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aye...@us...> - 2010-10-07 20:57:14
|
Revision: 5238 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5238&view=rev Author: ayenderahien Date: 2010-10-07 20:57:08 +0000 (Thu, 07 Oct 2010) Log Message: ----------- Fixing NH2331 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Nh2331Test.cs Modified: trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs 2010-10-07 16:30:45 UTC (rev 5237) +++ trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs 2010-10-07 20:57:08 UTC (rev 5238) @@ -520,13 +520,13 @@ return alias; } - public string GetEntityName(ICriteria criteria) - { - ICriteriaInfoProvider result; - if(criteriaInfoMap.TryGetValue(criteria, out result)==false) - throw new ArgumentException("Could not find a matching criteria info provider to: " + criteria); - return result.Name; - } + public string GetEntityName(ICriteria criteria) + { + ICriteriaInfoProvider result; + if (criteriaInfoMap.TryGetValue(criteria, out result) == false) + return null; + return result.Name; + } public string GetColumn(ICriteria criteria, string propertyName) { Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Nh2331Test.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Nh2331Test.cs 2010-10-07 16:30:45 UTC (rev 5237) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2331/Nh2331Test.cs 2010-10-07 20:57:08 UTC (rev 5238) @@ -13,7 +13,7 @@ public double Sum { get; set; } } - [TestFixture, Ignore("Not fixed yet.")] + [TestFixture] public class Nh2331Test : BugTestCase { private Guid person0Id; @@ -106,46 +106,46 @@ { using (ISession session = OpenSession()) { - DetachedCriteria memberGroupCriteria - = DetachedCriteria - .For<MemberGroup>() - .CreateAlias("Members", "m") - .CreateAlias("Forums", "f") - .Add(Restrictions.EqProperty("m.Id", "p.Id")) - .SetProjection(Projections.Property("f.Id")) - ; + DetachedCriteria memberGroupCriteria + = DetachedCriteria + .For<MemberGroup>() + .CreateAlias("Members", "m") + .CreateAlias("Forums", "f") + .Add(Restrictions.EqProperty("m.Id", "p.Id")) + .SetProjection(Projections.Property("f.Id")) + ; - var ids = new List<Guid>(); - ids.Add(person0Id); - ids.Add(person1Id); + var ids = new List<Guid>(); + ids.Add(person0Id); + ids.Add(person1Id); - DetachedCriteria forumCriteria - = DetachedCriteria - .For<Forum>("fff") - .Add(Restrictions.NotEqProperty("Id", "p.Id")) - .Add(Subqueries.PropertyIn("Id", memberGroupCriteria)) - .SetProjection - ( - Projections.Sum("Dollars") - ) - ; + DetachedCriteria forumCriteria + = DetachedCriteria + .For<Forum>("fff") + .Add(Restrictions.NotEqProperty("Id", "p.Id")) + .Add(Subqueries.PropertyIn("Id", memberGroupCriteria)) + .SetProjection + ( + Projections.Sum("Dollars") + ) + ; - DetachedCriteria personCriteria - = DetachedCriteria - .For<Person>("p") - .Add(Restrictions.InG("Id", ids)) - .SetProjection - ( - Projections - .ProjectionList() - .Add(Projections.Property("Name"), "Name") - .Add(Projections.SubQuery(forumCriteria), "Sum") - ) - .SetResultTransformer(Transformers.AliasToBean(typeof (Bar))) - ; + DetachedCriteria personCriteria + = DetachedCriteria + .For<Person>("p") + .Add(Restrictions.InG("Id", ids)) + .SetProjection + ( + Projections + .ProjectionList() + .Add(Projections.Property("Name"), "Name") + .Add(Projections.SubQuery(forumCriteria), "Sum") + ) + .SetResultTransformer(Transformers.AliasToBean(typeof (Bar))) + ; - ICriteria criteria = personCriteria.GetExecutableCriteria(session); - criteria.Executing(c => c.List()).NotThrows(); + ICriteria criteria = personCriteria.GetExecutableCriteria(session); + criteria.Executing(c => c.List()).NotThrows(); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <aye...@us...> - 2010-10-07 16:30:51
|
Revision: 5237 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5237&view=rev Author: ayenderahien Date: 2010-10-07 16:30:45 +0000 (Thu, 07 Oct 2010) Log Message: ----------- NH-2309 - Futures queries with Linq Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/DelayedEnumerator.cs trunk/nhibernate/src/NHibernate/Impl/FutureValue.cs trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs trunk/nhibernate/src/NHibernate/Linq/NhQueryProvider.cs trunk/nhibernate/src/NHibernate/Linq/Visitors/QueryModelVisitor.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/Person.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs Modified: trunk/nhibernate/src/NHibernate/Impl/DelayedEnumerator.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/DelayedEnumerator.cs 2010-10-07 13:48:36 UTC (rev 5236) +++ trunk/nhibernate/src/NHibernate/Impl/DelayedEnumerator.cs 2010-10-07 16:30:45 UTC (rev 5237) @@ -1,3 +1,4 @@ +using System; using System.Collections; using System.Collections.Generic; @@ -3,10 +4,14 @@ namespace NHibernate.Impl { - internal class DelayedEnumerator<T> : IEnumerable<T> + internal class DelayedEnumerator<T> : IEnumerable<T>, IDelayedValue { public delegate IEnumerable<T> GetResult(); private readonly GetResult result; + + public Delegate ExecuteOnEval { get; set;} + + public DelayedEnumerator(GetResult result) { @@ -18,7 +23,10 @@ { get { - foreach (T item in result()) + var value = result(); + if(ExecuteOnEval != null) + value = (IEnumerable<T>)ExecuteOnEval.DynamicInvoke(value); + foreach (T item in value) { yield return item; } @@ -39,4 +47,9 @@ #endregion } + + internal interface IDelayedValue + { + Delegate ExecuteOnEval { get; set; } + } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Impl/FutureValue.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/FutureValue.cs 2010-10-07 13:48:36 UTC (rev 5236) +++ trunk/nhibernate/src/NHibernate/Impl/FutureValue.cs 2010-10-07 16:30:45 UTC (rev 5237) @@ -1,3 +1,4 @@ +using System; using System.Collections; using System.Collections.Generic; @@ -3,5 +4,5 @@ namespace NHibernate.Impl { - internal class FutureValue<T> : IFutureValue<T> + internal class FutureValue<T> : IFutureValue<T>, IDelayedValue { public delegate IEnumerable<T> GetResult(); @@ -23,11 +24,24 @@ if (!enumerator.MoveNext()) { - return default(T); - } + var defVal = default(T); + if (ExecuteOnEval != null) + defVal = (T)ExecuteOnEval.DynamicInvoke(defVal); + return defVal; + } - return enumerator.Current; + var val = enumerator.Current; + + if (ExecuteOnEval != null) + val = (T)ExecuteOnEval.DynamicInvoke(val); + + return val; } } + + public Delegate ExecuteOnEval + { + get; set; + } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs 2010-10-07 13:48:36 UTC (rev 5236) +++ trunk/nhibernate/src/NHibernate/Linq/LinqExtensionMethods.cs 2010-10-07 16:30:45 UTC (rev 5237) @@ -1,5 +1,8 @@ +using System; +using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; +using NHibernate.Impl; namespace NHibernate.Linq { @@ -36,5 +39,30 @@ return new NhQueryable<T>(query.Provider, callExpression); } + + public static IEnumerable<T> ToFuture<T>(this IEnumerable<T> query) + { + var nhQueryable = query as NhQueryable<T>; + if (nhQueryable == null) + throw new NotSupportedException("You can also use the AsFuture() method on NhQueryable"); + + + var future = ((NhQueryProvider)nhQueryable.Provider).ExecuteFuture(nhQueryable.Expression); + return (IEnumerable<T>)future; + } + + public static IFutureValue<T> ToFutureValue<T>(this IEnumerable<T> query) + { + var nhQueryable = query as NhQueryable<T>; + if (nhQueryable == null) + throw new NotSupportedException("You can also use the AsFuture() method on NhQueryable"); + + var future = ((NhQueryProvider)nhQueryable.Provider).ExecuteFuture(nhQueryable.Expression); + if(future is DelayedEnumerator<T>) + { + return new FutureValue<T>(() => ((IEnumerable<T>) future)); + } + return (IFutureValue<T>)future; + } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Linq/NhQueryProvider.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/NhQueryProvider.cs 2010-10-07 13:48:36 UTC (rev 5236) +++ trunk/nhibernate/src/NHibernate/Linq/NhQueryProvider.cs 2010-10-07 16:30:45 UTC (rev 5237) @@ -1,3 +1,4 @@ +using System; using System.Collections; using System.Collections.Generic; using System.Linq; @@ -19,38 +20,84 @@ public object Execute(Expression expression) { - var nhLinqExpression = new NhLinqExpression(expression); + IQuery query; + NhLinqExpression nhQuery; + NhLinqExpression nhLinqExpression = PrepareQuery(expression, out query, out nhQuery); + + return ExecuteQuery(nhLinqExpression, query, nhQuery); + } - var query = _session.CreateQuery(nhLinqExpression); + public object ExecuteFuture(Expression expression) + { + IQuery query; + NhLinqExpression nhQuery; + NhLinqExpression nhLinqExpression = PrepareQuery(expression, out query, out nhQuery); + return ExecuteFutureQuery(nhLinqExpression, query, nhQuery); + } - var nhQuery = query.As<ExpressionQueryImpl>().QueryExpression.As<NhLinqExpression>(); + private NhLinqExpression PrepareQuery(Expression expression, out IQuery query, out NhLinqExpression nhQuery) + { + var nhLinqExpression = new NhLinqExpression(expression); - SetParameters(query, nhLinqExpression.ParameterValuesByName); - SetResultTransformerAndAdditionalCriteria(query, nhQuery, nhLinqExpression.ParameterValuesByName); + query = _session.CreateQuery(nhLinqExpression); - var results = query.List(); + nhQuery = query.As<ExpressionQueryImpl>().QueryExpression.As<NhLinqExpression>(); - if (nhQuery.ExpressionToHqlTranslationResults.PostExecuteTransformer != null) + SetParameters(query, nhLinqExpression.ParameterValuesByName); + SetResultTransformerAndAdditionalCriteria(query, nhQuery, nhLinqExpression.ParameterValuesByName); + return nhLinqExpression; + } + + private object ExecuteFutureQuery(NhLinqExpression nhLinqExpression, IQuery query, NhLinqExpression nhQuery) + { + MethodInfo method; + if (nhLinqExpression.ReturnType == NhLinqExpressionReturnType.Sequence) + { + method = typeof (IQuery).GetMethod("Future").MakeGenericMethod(nhQuery.Type); + } + else { - try - { - return nhQuery.ExpressionToHqlTranslationResults.PostExecuteTransformer.DynamicInvoke(results.AsQueryable()); - } - catch (TargetInvocationException e) - { - throw e.InnerException; - } + method = typeof(IQuery).GetMethod("FutureValue").MakeGenericMethod(nhQuery.Type); } - if (nhLinqExpression.ReturnType == NhLinqExpressionReturnType.Sequence) - { - return results.AsQueryable(); - } + var result = method.Invoke(query, new object[0]); - return results[0]; - } - public TResult Execute<TResult>(Expression expression) + + if (nhQuery.ExpressionToHqlTranslationResults.PostExecuteTransformer != null) + { + ((IDelayedValue) result).ExecuteOnEval = nhQuery.ExpressionToHqlTranslationResults.PostExecuteTransformer; + } + + return result; + + } + + private object ExecuteQuery(NhLinqExpression nhLinqExpression, IQuery query, NhLinqExpression nhQuery) + { + var results = query.List(); + + if (nhQuery.ExpressionToHqlTranslationResults.PostExecuteTransformer != null) + { + try + { + return nhQuery.ExpressionToHqlTranslationResults.PostExecuteTransformer.DynamicInvoke(results.AsQueryable()); + } + catch (TargetInvocationException e) + { + throw e.InnerException; + } + } + + if (nhLinqExpression.ReturnType == NhLinqExpressionReturnType.Sequence) + { + return results.AsQueryable(); + } + + return results[0]; + } + + public TResult Execute<TResult>(Expression expression) { return (TResult) Execute(expression); } Modified: trunk/nhibernate/src/NHibernate/Linq/Visitors/QueryModelVisitor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/Visitors/QueryModelVisitor.cs 2010-10-07 13:48:36 UTC (rev 5236) +++ trunk/nhibernate/src/NHibernate/Linq/Visitors/QueryModelVisitor.cs 2010-10-07 16:30:45 UTC (rev 5237) @@ -80,8 +80,8 @@ ResultOperatorMap.Add<FetchManyRequest, ProcessFetchMany>(); ResultOperatorMap.Add<CacheableResultOperator, ProcessCacheable>(); ResultOperatorMap.Add<OfTypeResultOperator, ProcessOfType>(); - ResultOperatorMap.Add<CastResultOperator, ProcessCast>(); - } + ResultOperatorMap.Add<CastResultOperator, ProcessCast>(); + } private QueryModelVisitor(VisitorParameters visitorParameters, bool root, QueryModel queryModel) { Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/LinqFutureFixture.cs 2010-10-07 16:30:45 UTC (rev 5237) @@ -0,0 +1,164 @@ +using NHibernate.Impl; +using NUnit.Framework; +using NHibernate.Linq; +using System.Linq; + +namespace NHibernate.Test.NHSpecificTest.Futures +{ + using System.Collections; + + [TestFixture] + public class LinqFutureFixture : FutureFixture + { + + [Test] + public void CoalesceShouldWorkForFutures() + { + int personId; + using (ISession s = OpenSession()) + using (ITransaction tx = s.BeginTransaction()) + { + var p1 = new Person { Name = "inserted name" }; + var p2 = new Person { Name = null }; + + s.Save(p1); + s.Save(p2); + personId = p2.Id; + tx.Commit(); + } + + using (ISession s = OpenSession()) + using (s.BeginTransaction()) + { + var person = s.Query<Person>().Where(p => (p.Name ?? "e") == "e").ToFutureValue(); + Assert.AreEqual(personId, person.Value.Id); + } + + using (ISession s = OpenSession()) + using (ITransaction tx = s.BeginTransaction()) + { + s.Delete("from Person"); + tx.Commit(); + } + } + [Test] + public void CanUseFutureQuery() + { + using (var s = sessions.OpenSession()) + { + IgnoreThisTestIfMultipleQueriesArentSupportedByDriver(); + + var persons10 = s.Query<Person>() + .Take(10) + .ToFuture(); + var persons5 = s.Query<Person>() + .Take(5) + .ToFuture(); + + using (var logSpy = new SqlLogSpy()) + { + foreach (var person in persons5) + { + + } + + foreach (var person in persons10) + { + + } + + var events = logSpy.Appender.GetEvents(); + Assert.AreEqual(1, events.Length); + } + } + } + + [Test] + public void TwoFuturesRunInTwoRoundTrips() + { + using (var s = sessions.OpenSession()) + { + IgnoreThisTestIfMultipleQueriesArentSupportedByDriver(); + + using (var logSpy = new SqlLogSpy()) + { + var persons10 = s.Query<Person>() + .Take(10) + .ToFuture(); + + foreach (var person in persons10) { } // fire first future round-trip + + var persons5 = s.Query<Person>() + .Take(5) + .ToFuture(); + + foreach (var person in persons5) { } // fire second future round-trip + + var events = logSpy.Appender.GetEvents(); + Assert.AreEqual(2, events.Length); + } + } + } + + [Test] + public void CanCombineSingleFutureValueWithEnumerableFutures() + { + using (var s = sessions.OpenSession()) + { + IgnoreThisTestIfMultipleQueriesArentSupportedByDriver(); + + var persons = s.Query<Person>() + .Take(10) + .ToFuture(); + + var personCount = s.Query<Person>() + .Select(x=>x.Id) + .ToFutureValue(); + + using (var logSpy = new SqlLogSpy()) + { + long count = personCount.Value; + + foreach (var person in persons) + { + } + + var events = logSpy.Appender.GetEvents(); + Assert.AreEqual(1, events.Length); + } + } + } + + [Test] + public void CanExecuteMultipleQueriesOnSameExpression() + { + using (var s = sessions.OpenSession()) + { + IgnoreThisTestIfMultipleQueriesArentSupportedByDriver(); + + var meContainer = s.Query<Person>() + .Where(x=>x.Id == 1) + .ToFutureValue(); + + var possiblefriends = s.Query<Person>() + .Where(x => x.Id != 2) + .ToFuture(); + + using (var logSpy = new SqlLogSpy()) + { + var me = meContainer.Value; + + foreach (var person in possiblefriends) + { + } + + var events = logSpy.Appender.GetEvents(); + Assert.AreEqual(1, events.Length); + var wholeLog = logSpy.GetWholeLog(); + Assert.True(wholeLog.Contains("@p0 = 1 [Type: Int32 (0)], @p1 = 2 [Type: Int32 (0)]")); + } + } + + } + } +} Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/Mappings.hbm.xml 2010-10-07 13:48:36 UTC (rev 5236) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/Mappings.hbm.xml 2010-10-07 16:30:45 UTC (rev 5237) @@ -7,6 +7,7 @@ <id name="Id"> <generator class="native"/> </id> + <property name="Name"/> <many-to-one name="Parent" /> <list name="Children" cascade="all"> <key column="parent_id" /> Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/Person.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/Person.cs 2010-10-07 13:48:36 UTC (rev 5236) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/Person.cs 2010-10-07 16:30:45 UTC (rev 5237) @@ -9,6 +9,8 @@ private int id; private Person parent; + public virtual string Name { get; set; } + public virtual Person Parent { get { return parent; } Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-07 13:48:36 UTC (rev 5236) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-07 16:30:45 UTC (rev 5237) @@ -456,6 +456,7 @@ <Compile Include="Logging\LoggerProviderTest.cs" /> <Compile Include="NHSpecificTest\EntityNameAndCompositeId\Fixture.cs" /> <Compile Include="NHSpecificTest\EntityNameWithFullName\Fixture.cs" /> + <Compile Include="NHSpecificTest\Futures\LinqFutureFixture.cs" /> <Compile Include="NHSpecificTest\NH1136\Address.cs" /> <Compile Include="NHSpecificTest\NH1136\FeeMatrixType.cs" /> <Compile Include="NHSpecificTest\NH1136\Fixture.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-10-07 13:48:46
|
Revision: 5236 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5236&view=rev Author: fabiomaulo Date: 2010-10-07 13:48:36 +0000 (Thu, 07 Oct 2010) Log Message: ----------- Fix NH-2313 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2313/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2313/Domain.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2313/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2313/Mappings.hbm.xml Modified: trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2010-10-07 12:34:39 UTC (rev 5235) +++ trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2010-10-07 13:48:36 UTC (rev 5236) @@ -196,8 +196,8 @@ private PersistentClass GetPersistentClass(string className) { - PersistentClass pc = configuration.classes[className]; - if (pc == null) + PersistentClass pc; + if (!configuration.classes.TryGetValue(className, out pc)) { throw new MappingException("persistent class not known: " + className); } Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2313/Domain.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2313/Domain.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2313/Domain.cs 2010-10-07 13:48:36 UTC (rev 5236) @@ -0,0 +1,12 @@ +namespace NHibernate.Test.NHSpecificTest.NH2313 +{ + public class MyClass + { + public virtual TheOtherPart TheOtherPart { get; set; } + } + + public class TheOtherPart + { + + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2313/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2313/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2313/Fixture.cs 2010-10-07 13:48:36 UTC (rev 5236) @@ -0,0 +1,17 @@ +using NHibernate.Cfg; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.NHSpecificTest.NH2313 +{ + public class Fixture + { + [Test] + public void WhenLoadWorngMappingThenMessageShouldContaingWrongClassName() + { + Configuration cfg = TestConfigurationHelper.GetDefaultConfiguration(); + cfg.AddResource("NHibernate.Test.NHSpecificTest.NH2313.Mappings.hbm.xml", GetType().Assembly); + cfg.Executing(c=> c.BuildSessionFactory()).Throws<MappingException>().And.ValueOf.Message.Should().Contain("TheOther"); + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2313/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2313/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2313/Mappings.hbm.xml 2010-10-07 13:48:36 UTC (rev 5236) @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH2313"> + + <class name="MyClass"> + <id type="int"> + <generator class="native" /> + </id> + <one-to-one name="TheOtherPart" class="TheOther"/> + </class> + + <class name="TheOtherPart"> + <id type="int"> + <generator class="native" /> + </id> + </class> +</hibernate-mapping> Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-07 12:34:39 UTC (rev 5235) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-07 13:48:36 UTC (rev 5236) @@ -509,6 +509,8 @@ <Compile Include="NHSpecificTest\NH2302\StringLengthEntity.cs" /> <Compile Include="NHSpecificTest\NH2303\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2303\Model.cs" /> + <Compile Include="NHSpecificTest\NH2313\Domain.cs" /> + <Compile Include="NHSpecificTest\NH2313\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2322\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2322\Model.cs" /> <Compile Include="NHSpecificTest\NH2322\PostUpdateEventListener.cs" /> @@ -2323,6 +2325,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH2313\Mappings.hbm.xml" /> <EmbeddedResource Include="TypesTest\UriClass.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\EntityNameWithFullName\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2361\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-10-07 12:34:46
|
Revision: 5235 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5235&view=rev Author: fabiomaulo Date: 2010-10-07 12:34:39 +0000 (Thu, 07 Oct 2010) Log Message: ----------- Fix NH-2367 (UriType) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/NHibernate.csproj trunk/nhibernate/src/NHibernate/NHibernateUtil.cs trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Type/UriType.cs trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.cs trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.hbm.xml trunk/nhibernate/src/NHibernate.Test/TypesTest/UriTypeFixture.cs Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-10-06 20:55:15 UTC (rev 5234) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2010-10-07 12:34:39 UTC (rev 5235) @@ -859,6 +859,7 @@ <Compile Include="Type\DefaultCollectionTypeFactory.cs" /> <Compile Include="Bytecode\ICollectionTypeFactory.cs" /> <Compile Include="Type\LocalDateTimeType.cs" /> + <Compile Include="Type\UriType.cs" /> <Compile Include="Type\UtcDateTimeType.cs" /> <Compile Include="Type\XmlDocType.cs" /> <Compile Include="Util\ExpressionsHelper.cs" /> Modified: trunk/nhibernate/src/NHibernate/NHibernateUtil.cs =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernateUtil.cs 2010-10-06 20:55:15 UTC (rev 5234) +++ trunk/nhibernate/src/NHibernate/NHibernateUtil.cs 2010-10-07 12:34:39 UTC (rev 5235) @@ -283,6 +283,8 @@ public static readonly NullableType XmlDoc = new XmlDocType(); + public static readonly NullableType Uri = new UriType(); + /// <summary> /// A NHibernate persistent enum type /// </summary> Modified: trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2010-10-06 20:55:15 UTC (rev 5234) +++ trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2010-10-07 12:34:39 UTC (rev 5235) @@ -208,6 +208,8 @@ RegisterType(typeof (UInt64), NHibernateUtil.UInt64, new[] {"ulong"}); RegisterType(typeof (XmlDocument), NHibernateUtil.XmlDoc, new[] {"xmldoc", "xmldocument", "xml"}); + + RegisterType(typeof (Uri), NHibernateUtil.Uri, new[] {"uri", "url"}); // object needs to have both class and serializable setup before it can // be created. Added: trunk/nhibernate/src/NHibernate/Type/UriType.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Type/UriType.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Type/UriType.cs 2010-10-07 12:34:39 UTC (rev 5235) @@ -0,0 +1,64 @@ +using System; +using System.Data; +using NHibernate.SqlTypes; + +namespace NHibernate.Type +{ + [Serializable] + public class UriType : ImmutableType, IDiscriminatorType + { + public UriType() + : base(new StringSqlType()) + { + } + + public UriType(SqlType sqlType) : base(sqlType) + { + } + + public override string Name + { + get { return "Uri"; } + } + + public override System.Type ReturnedClass + { + get { return typeof(Uri); } + } + + public object StringToObject(string xml) + { + return new Uri(xml); + } + + public override void Set(IDbCommand cmd, object value, int index) + { + ((IDataParameter)cmd.Parameters[index]).Value = ToString(value); + } + + public override object Get(IDataReader rs, int index) + { + return StringToObject(Convert.ToString(rs[index])); + } + + public override object Get(IDataReader rs, string name) + { + return StringToObject(Convert.ToString(rs[name])); + } + + public override string ToString(object val) + { + return ((Uri)val).OriginalString; + } + + public override object FromStringValue(string xml) + { + return StringToObject(xml); + } + + public string ObjectToSQLString(object value, Dialect.Dialect dialect) + { + return "'" + ((Uri)value).OriginalString + "'"; + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-06 20:55:15 UTC (rev 5234) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-07 12:34:39 UTC (rev 5235) @@ -529,6 +529,8 @@ <Compile Include="TypesTest\CharClassFixture.cs" /> <Compile Include="TypesTest\DateTimeClass.cs" /> <Compile Include="TypesTest\LocalDateTimeTypeFixture.cs" /> + <Compile Include="TypesTest\UriClass.cs" /> + <Compile Include="TypesTest\UriTypeFixture.cs" /> <Compile Include="TypesTest\UtcDateTimeTypeFixture.cs" /> <Compile Include="TypesTest\XmlDocClass.cs" /> <Compile Include="TypesTest\XmlDocTypeFixture.cs" /> @@ -2321,6 +2323,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="TypesTest\UriClass.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\EntityNameWithFullName\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2361\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\EntityNameAndCompositeId\Mappings.hbm.xml" /> Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.cs 2010-10-07 12:34:39 UTC (rev 5235) @@ -0,0 +1,11 @@ +using System; + +namespace NHibernate.Test.TypesTest +{ + public class UriClass + { + public int Id { get; set; } + public Uri Url { get; set; } + public Uri AutoUri { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/TypesTest/UriClass.hbm.xml 2010-10-07 12:34:39 UTC (rev 5235) @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false"> + <class name="NHibernate.Test.TypesTest.UriClass, NHibernate.Test" table="nh_uri"> + <id name="Id" column="id"> + <generator class="assigned" /> + </id> + + <property name="Url" type="Uri" /> + <property name="AutoUri" /> + </class> +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/UriTypeFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/TypesTest/UriTypeFixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/TypesTest/UriTypeFixture.cs 2010-10-07 12:34:39 UTC (rev 5235) @@ -0,0 +1,73 @@ +using System; +using NHibernate.Type; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.TypesTest +{ + public class UriTypeFixture : TypeFixtureBase + { + protected override string TypeName + { + get { return "Uri"; } + } + + [Test] + public void ReadWrite() + { + using (var s = OpenSession()) + { + var entity = new UriClass { Id = 1 }; + entity.Url = new Uri("http://www.fabiomaulo.blogspot.com/"); + s.Save(entity); + s.Flush(); + } + + using (var s = OpenSession()) + { + var entity = s.Get<UriClass>(1); + entity.Url.Should().Not.Be.Null(); + entity.Url.OriginalString.Should().Be("http://www.fabiomaulo.blogspot.com/"); + entity.Url = new Uri("http://fabiomaulo.blogspot.com/2010/10/nhibernate-30-cookbook.html"); + s.Save(entity); + s.Flush(); + } + using (var s = OpenSession()) + { + var entity = s.Get<UriClass>(1); + entity.Url.OriginalString.Should().Be("http://fabiomaulo.blogspot.com/2010/10/nhibernate-30-cookbook.html"); + s.Delete(entity); + s.Flush(); + } + } + + [Test] + public void InsertNullValue() + { + using (ISession s = OpenSession()) + { + var entity = new UriClass { Id = 1 }; + entity.Url = null; + s.Save(entity); + s.Flush(); + } + + using (ISession s = OpenSession()) + { + var entity = s.Get<UriClass>(1); + entity.Url.Should().Be.Null(); + s.Delete(entity); + s.Flush(); + } + } + + [Test] + public void AutoDiscoverFromNetType() + { + // integration test to be 100% sure + var propertyType = sessions.GetEntityPersister(typeof(UriClass).FullName).GetPropertyType("AutoUri"); + propertyType.Should().Be.InstanceOf<UriType>(); + } + + } +} \ 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...> - 2010-10-06 20:55:25
|
Revision: 5234 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5234&view=rev Author: fabiomaulo Date: 2010-10-06 20:55:15 +0000 (Wed, 06 Oct 2010) Log Message: ----------- Fix NH-2358 and related issues Modified Paths: -------------- trunk/nhibernate/releasenotes.txt trunk/nhibernate/src/NHibernate/Type/DateTimeOffSetType.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Dates/DateTimeOffSetFixture.cs Modified: trunk/nhibernate/releasenotes.txt =================================================================== --- trunk/nhibernate/releasenotes.txt 2010-10-06 18:58:13 UTC (rev 5233) +++ trunk/nhibernate/releasenotes.txt 2010-10-06 20:55:15 UTC (rev 5234) @@ -9,6 +9,7 @@ ##### Possible Breaking Changes ##### * [NH-2251] - Signature change for GetLimitString in Dialect * [NH-2284] - Obsolete members removed + * Related to [NH-2358]: DateTimeOffset type now works as a DateTimeOffset instead a "surrogate" of DateTime Build 3.0.0.Alpha3 (rev5226) ============================= Modified: trunk/nhibernate/src/NHibernate/Type/DateTimeOffSetType.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Type/DateTimeOffSetType.cs 2010-10-06 18:58:13 UTC (rev 5233) +++ trunk/nhibernate/src/NHibernate/Type/DateTimeOffSetType.cs 2010-10-06 20:55:15 UTC (rev 5234) @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using System.Data; +using NHibernate.Engine; using NHibernate.SqlTypes; namespace NHibernate.Type @@ -10,7 +11,7 @@ /// Maps a <see cref="System.DateTimeOffset" /> Property to a <see cref="DbType.DateTimeOffset"/> /// </summary> [Serializable] - public class DateTimeOffsetType : DateTimeType + public class DateTimeOffsetType : PrimitiveType, IIdentifierType, ILiteralType, IVersionType { /// <summary></summary> public DateTimeOffsetType() @@ -33,8 +34,13 @@ get { return typeof (DateTimeOffset); } } - public override IComparer Comparator + public override object DefaultValue { + get { throw new NotImplementedException(); } + } + + public IComparer Comparator + { get { return Comparer<DateTimeOffset>.Default; } } @@ -42,8 +48,7 @@ { var dateValue = (DateTimeOffset) value; ((IDataParameter) st.Parameters[index]).Value = - new DateTimeOffset(dateValue.Year, dateValue.Month, dateValue.Day, dateValue.Hour, dateValue.Minute, - dateValue.Second, dateValue.Offset); + new DateTimeOffset(dateValue.Ticks, dateValue.Offset); } public override object Get(IDataReader rs, int index) @@ -52,8 +57,7 @@ { var dbValue = (DateTimeOffset) rs[index]; ; - return new DateTimeOffset(dbValue.Year, dbValue.Month, dbValue.Day, dbValue.Hour, dbValue.Minute, dbValue.Second, - dbValue.Offset); + return new DateTimeOffset(dbValue.Ticks, dbValue.Offset); } catch (Exception ex) { @@ -61,6 +65,21 @@ } } + public override object Get(IDataReader rs, string name) + { + return Get(rs, rs.GetOrdinal(name)); + } + + public object Next(object current, ISessionImplementor session) + { + return Seed(session); + } + + public object Seed(ISessionImplementor session) + { + return DateTimeOffset.Now; + } + public override bool IsEqual(object x, object y) { if (x == y) @@ -76,34 +95,12 @@ var date1 = (DateTimeOffset) x; var date2 = (DateTimeOffset) y; - if (date1.Equals(date2)) - return true; - - return (date1.Year == date2.Year && - date1.Month == date2.Month && - date1.Day == date2.Day && - date1.Hour == date2.Hour && - date1.Minute == date2.Minute && - date1.Second == date2.Second && - date1.Offset == date2.Offset); + return date1.Equals(date2); } - public override int GetHashCode(object x, EntityMode entityMode) + public object StringToObject(string xml) { - // Custom hash code implementation because DateTimeType is only accurate - // up to seconds. - var date = (DateTimeOffset) x; - int hashCode = 1; - unchecked - { - hashCode = 31*hashCode + date.Second; - hashCode = 31*hashCode + date.Minute; - hashCode = 31*hashCode + date.Hour; - hashCode = 31*hashCode + date.Day; - hashCode = 31*hashCode + date.Month; - hashCode = 31*hashCode + date.Year; - } - return hashCode; + return string.IsNullOrEmpty(xml) ? null : FromStringValue(xml); } public override string ToString(object val) Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Dates/DateTimeOffSetFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Dates/DateTimeOffSetFixture.cs 2010-10-06 18:58:13 UTC (rev 5233) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Dates/DateTimeOffSetFixture.cs 2010-10-06 20:55:15 UTC (rev 5234) @@ -1,7 +1,9 @@ using System; using System.Collections; using System.Data; +using NHibernate.Type; using NUnit.Framework; +using SharpTestsEx; namespace NHibernate.Test.NHSpecificTest.Dates { @@ -23,8 +25,72 @@ { DateTimeOffset NowOS = DateTimeOffset.Now; - SavingAndRetrievingAction(new AllDates {Sql_datetimeoffset = NowOS}, - entity => DateTimeAssert.AreEqual(entity.Sql_datetimeoffset, NowOS)); + AllDates dates = new AllDates { Sql_datetimeoffset = NowOS }; + + using (ISession s = OpenSession()) + using (ITransaction tx = s.BeginTransaction()) + { + s.Save(dates); + tx.Commit(); + } + + using (ISession s = OpenSession()) + using (ITransaction tx = s.BeginTransaction()) + { + var datesRecovered = s.CreateQuery("from AllDates").UniqueResult<AllDates>(); + datesRecovered.Sql_datetimeoffset.Should().Be(NowOS); + } + + using (ISession s = OpenSession()) + using (ITransaction tx = s.BeginTransaction()) + { + var datesRecovered = s.CreateQuery("from AllDates").UniqueResult<AllDates>(); + s.Delete(datesRecovered); + tx.Commit(); + } } + + [Test] + public void WhenEqualTicksThenShouldMatchIsEqual() + { + var type = new DateTimeOffsetType(); + var now = DateTimeOffset.Now; + type.IsEqual(new DateTimeOffset(now.Ticks, now.Offset), new DateTimeOffset(now.Ticks, now.Offset)).Should().Be.True(); + } + + [Test] + public void WhenNotEqualTicksThenShouldNotMatchIsEqual() + { + var type = new DateTimeOffsetType(); + var now = DateTimeOffset.Now; + type.IsEqual(new DateTimeOffset(now.Ticks - 1, now.Offset), new DateTimeOffset(now.Ticks, now.Offset)).Should().Be.False(); + } + + [Test] + public void HashCodeShouldHaveSameBehaviorOfNetType() + { + var type = new DateTimeOffsetType(); + var now = DateTimeOffset.Now; + var exactClone = new DateTimeOffset(now.Ticks, now.Offset); + (now.GetHashCode() == exactClone.GetHashCode()).Should().Be.EqualTo(now.GetHashCode() == type.GetHashCode(exactClone, EntityMode.Poco)); + } + + [Test] + public void Next() + { + var type = (DateTimeOffsetType)NHibernateUtil.DateTimeOffset; + var current = DateTimeOffset.Now.AddTicks(-1); + object next = type.Next(current, null); + + next.Should().Be.OfType<DateTimeOffset>().And.ValueOf.Ticks.Should().Be.GreaterThan(current.Ticks); + } + + [Test] + public void Seed() + { + var type = (DateTimeOffsetType)NHibernateUtil.DateTimeOffset; + type.Seed(null).Should().Be.OfType<DateTimeOffset>(); + } + } } \ 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...> - 2010-10-06 18:58:19
|
Revision: 5233 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5233&view=rev Author: fabiomaulo Date: 2010-10-06 18:58:13 +0000 (Wed, 06 Oct 2010) Log Message: ----------- Fix NH-2364 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs trunk/nhibernate/src/NHibernate/Tuple/Entity/EntityMetamodel.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameWithFullName/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameWithFullName/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameWithFullName/Mappings.hbm.xml Modified: trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs 2010-10-06 17:40:17 UTC (rev 5232) +++ trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs 2010-10-06 18:58:13 UTC (rev 5233) @@ -600,6 +600,11 @@ // and take the System.Type directly from the persister (className have high probability to be entityName) if (entityPersisters.TryGetValue(className, out checkPersister)) { + if(!checkPersister.EntityMetamodel.HasPocoRepresentation) + { + // we found the persister but it is a dynamic entity without class + return new[] { className }; + } // NH : take care with this because we are forcing the Poco EntityMode clazz = checkPersister.GetMappedClass(EntityMode.Poco); } Modified: trunk/nhibernate/src/NHibernate/Tuple/Entity/EntityMetamodel.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Tuple/Entity/EntityMetamodel.cs 2010-10-06 17:40:17 UTC (rev 5232) +++ trunk/nhibernate/src/NHibernate/Tuple/Entity/EntityMetamodel.cs 2010-10-06 18:58:13 UTC (rev 5233) @@ -125,7 +125,7 @@ bool foundInsertGeneratedValue = false; bool foundUpdateGeneratedValue = false; bool foundNonIdentifierPropertyNamedId = false; - + HasPocoRepresentation = persistentClass.HasPocoRepresentation; foreach (Mapping.Property prop in persistentClass.PropertyClosureIterator) { // NH: A lazy property is a simple property marked with lazy=true or a relation (in this case many-to-one or one-to-one marked as "no-proxy") @@ -301,6 +301,8 @@ tuplizerMapping = new EntityEntityModeToTuplizerMapping(persistentClass, this); } + public bool HasPocoRepresentation { get; private set; } + private static void VerifyCanInterceptPropertiesForLazyOrGhostProperties(PersistentClass persistentClass) { foreach (var prop in persistentClass.PropertyClosureIterator) Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameWithFullName/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameWithFullName/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameWithFullName/Fixture.cs 2010-10-06 18:58:13 UTC (rev 5233) @@ -0,0 +1,79 @@ +using System.Collections; +using System.Collections.Generic; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.EntityNameWithFullName +{ + public class Fixture : BugTestCase + { + protected override void OnTearDown() + { + using (var s = OpenSession()) + { + using (var tx = s.BeginTransaction()) + { + s.CreateSQLQuery("delete from Parent").ExecuteUpdate(); + tx.Commit(); + } + } + } + + [Test] + public void CanPersistAndRead() + { + using (var s = OpenSession()) + { + using (var tx = s.BeginTransaction()) + { + s.Save("NHibernate.Test.NHSpecificTest.EntityNameWithFullName.Parent", new Dictionary<string, object> + { + {"SomeData", "hello"} + }); + tx.Commit(); + } + } + using (var s = OpenSession()) + { + using (s.BeginTransaction()) + { + var p = (IDictionary)s.CreateQuery(@"select p from NHibernate.Test.NHSpecificTest.EntityNameWithFullName.Parent p where p.SomeData = :data") + .SetString("data", "hello") + .List()[0]; + Assert.AreEqual("hello", p["SomeData"]); + } + } + } + + [Test] + public void OnlyOneSelect() + { + using (var s = OpenSession()) + { + var sf = s.SessionFactory; + var onOffBefore = turnOnStatistics(s); + try + { + using (s.BeginTransaction()) + { + s.CreateQuery(@"select p from NHibernate.Test.NHSpecificTest.EntityNameWithFullName.Parent p where p.SomeData = :data") + .SetString("data", "hello") + .List(); + } + Assert.AreEqual(1, sf.Statistics.QueryExecutionCount); + } + finally + { + sf.Statistics.IsStatisticsEnabled = onOffBefore; + } + } + } + + private static bool turnOnStatistics(ISession session) + { + var onOff = session.SessionFactory.Statistics.IsStatisticsEnabled; + session.SessionFactory.Statistics.IsStatisticsEnabled = true; + session.SessionFactory.Statistics.Clear(); + return onOff; + } + } +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameWithFullName/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameWithFullName/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameWithFullName/Mappings.hbm.xml 2010-10-06 18:58:13 UTC (rev 5233) @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test"> + <class entity-name="NHibernate.Test.NHSpecificTest.EntityNameWithFullName.Parent"> + <id name="Id" type="Int32"> + <generator class="native"/> + </id> + <property name="SomeData" type="string"/> + </class> + + <!-- just a dummy mapping here to show the problem --> + <class entity-name="NHibernate.Test.NHSpecificTest.EntityNameWithFullName.Parent2"> + <id name="Id" type="Int32"> + <generator class="native"/> + </id> + <property name="SomeOtherData" type="string"/> + </class> + +</hibernate-mapping> Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-06 17:40:17 UTC (rev 5232) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-06 18:58:13 UTC (rev 5233) @@ -455,6 +455,7 @@ <Compile Include="Logging\Log4NetLoggerTest.cs" /> <Compile Include="Logging\LoggerProviderTest.cs" /> <Compile Include="NHSpecificTest\EntityNameAndCompositeId\Fixture.cs" /> + <Compile Include="NHSpecificTest\EntityNameWithFullName\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1136\Address.cs" /> <Compile Include="NHSpecificTest\NH1136\FeeMatrixType.cs" /> <Compile Include="NHSpecificTest\NH1136\Fixture.cs" /> @@ -2320,6 +2321,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\EntityNameWithFullName\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2361\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\EntityNameAndCompositeId\Mappings.hbm.xml" /> <EmbeddedResource Include="PolymorphicGetAndLoad\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-10-06 17:40:24
|
Revision: 5232 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5232&view=rev Author: fabiomaulo Date: 2010-10-06 17:40:17 +0000 (Wed, 06 Oct 2010) Log Message: ----------- Test for NH-2361 Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2361/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2361/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2361/Mappings.hbm.xml Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2361/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2361/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2361/Fixture.cs 2010-10-06 17:40:17 UTC (rev 5232) @@ -0,0 +1,18 @@ +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH2361 +{ + public class Fixture: BugTestCase + { + [Test] + public void WhenDeleteMultiTableHierarchyThenNotThrows() + { + using (var s = OpenSession()) + using (var tx = s.BeginTransaction()) + { + s.CreateQuery("delete from Animal").ExecuteUpdate(); + tx.Commit(); + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2361/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2361/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2361/Mappings.hbm.xml 2010-10-06 17:40:17 UTC (rev 5232) @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> + <class entity-name="Animal"> + <id type="int" column="Id"> + <generator class="hilo"/> + </id> + <property name="Description" type="string"/> + <joined-subclass entity-name="Reptile"> + <key column="Id"/> + <property name="Name" type="string"/> + </joined-subclass> + </class> +</hibernate-mapping> Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-06 17:09:41 UTC (rev 5231) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-06 17:40:17 UTC (rev 5232) @@ -521,6 +521,7 @@ <Compile Include="NHSpecificTest\NH2331\Person.cs" /> <Compile Include="NHSpecificTest\NH2344\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2344\Model.cs" /> + <Compile Include="NHSpecificTest\NH2361\Fixture.cs" /> <Compile Include="PolymorphicGetAndLoad\Domain.cs" /> <Compile Include="PolymorphicGetAndLoad\PolymorphicGetAndLoadTest.cs" /> <Compile Include="TypesTest\CharClass.cs" /> @@ -2319,6 +2320,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH2361\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\EntityNameAndCompositeId\Mappings.hbm.xml" /> <EmbeddedResource Include="PolymorphicGetAndLoad\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2331\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-10-06 17:09:47
|
Revision: 5231 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5231&view=rev Author: fabiomaulo Date: 2010-10-06 17:09:41 +0000 (Wed, 06 Oct 2010) Log Message: ----------- Applied NH-2357 by Daniel Guenter Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/Linq/BooleanMethodExtensionExample.cs Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs 2010-10-01 11:55:44 UTC (rev 5230) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs 2010-10-06 17:09:41 UTC (rev 5231) @@ -351,6 +351,11 @@ return new HqlMethodCall(_factory, methodName, parameters); } + public HqlBooleanMethodCall BooleanMethodCall(string methodName, IEnumerable<HqlExpression> parameters) + { + return new HqlBooleanMethodCall(_factory, methodName, parameters); + } + public HqlDistinctHolder DistinctHolder(params HqlTreeNode[] children) { return new HqlDistinctHolder(_factory, children); Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs 2010-10-01 11:55:44 UTC (rev 5230) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs 2010-10-06 17:09:41 UTC (rev 5231) @@ -810,6 +810,16 @@ } } + public class HqlBooleanMethodCall : HqlBooleanExpression + { + public HqlBooleanMethodCall(IASTFactory factory, string methodName, IEnumerable<HqlExpression> parameters) + : base(HqlSqlWalker.METHOD_CALL, "method", factory) + { + AddChild(new HqlIdent(factory, methodName)); + AddChild(new HqlExpressionList(factory, parameters)); + } + } + public class HqlDistinctHolder : HqlExpression { public HqlDistinctHolder(IASTFactory factory, HqlTreeNode[] children) : base(int.MinValue, "distinct holder", factory, children) Added: trunk/nhibernate/src/NHibernate.Test/Linq/BooleanMethodExtensionExample.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Linq/BooleanMethodExtensionExample.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/Linq/BooleanMethodExtensionExample.cs 2010-10-06 17:09:41 UTC (rev 5231) @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using NHibernate.Cfg; +using NHibernate.Cfg.Loquacious; +using NHibernate.Hql.Ast; +using NHibernate.Linq; +using NHibernate.Linq.Functions; +using NHibernate.Linq.Visitors; +using NHibernate.Test.Linq.Entities; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.Linq +{ + public static class BooleanLinqExtensions + { + public static bool FreeText(this string source, string pattern) + { + throw new NotImplementedException(); + } + } + + public class FreetextGenerator : BaseHqlGeneratorForMethod + { + public FreetextGenerator() + { + SupportedMethods = new[] {ReflectionHelper.GetMethodDefinition(() => BooleanLinqExtensions.FreeText(null, null))}; + } + + public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, + ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, + IHqlExpressionVisitor visitor) + { + IEnumerable<HqlExpression> args = arguments.Select(a => visitor.Visit(a)) + .Cast<HqlExpression>(); + + return treeBuilder.BooleanMethodCall("FREETEXT", args); + } + } + + [TestFixture] + public class BooleanMethodExtensionExample : LinqTestCase + { + public class MyLinqToHqlGeneratorsRegistry : DefaultLinqToHqlGeneratorsRegistry + { + public MyLinqToHqlGeneratorsRegistry() + { + RegisterGenerator(ReflectionHelper.GetMethodDefinition(() => BooleanLinqExtensions.FreeText(null, null)), + new FreetextGenerator()); + } + } + + protected override void Configure(Configuration configuration) + { + configuration.LinqToHqlGeneratorsRegistry<MyLinqToHqlGeneratorsRegistry>(); + } + + [Test, Ignore("It work only with full-text indexes enabled.")] + public void CanUseMyCustomExtension() + { + List<Customer> contacts = (from c in db.Customers where c.ContactName.FreeText("Thomas") select c).ToList(); + contacts.Count.Should().Be.GreaterThan(0); + contacts.Select(customer => customer.ContactName).All(c => c.Satisfy(customer => customer.Contains("Thomas"))); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-01 11:55:44 UTC (rev 5230) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-06 17:09:41 UTC (rev 5231) @@ -404,6 +404,7 @@ <Compile Include="Linq\AggregateTests.cs" /> <Compile Include="Linq\BinaryBooleanExpressionTests.cs" /> <Compile Include="Linq\BinaryExpressionOrdererTests.cs" /> + <Compile Include="Linq\BooleanMethodExtensionExample.cs" /> <Compile Include="Linq\CasingTest.cs" /> <Compile Include="Linq\CollectionAssert.cs" /> <Compile Include="Linq\CustomExtensionsExample.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fab...@us...> - 2010-10-01 11:55:50
|
Revision: 5230 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5230&view=rev Author: fabiomaulo Date: 2010-10-01 11:55:44 +0000 (Fri, 01 Oct 2010) Log Message: ----------- Fix NH-2355 (by Roger Kratz) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassCompositeIdBinder.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameAndCompositeId/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameAndCompositeId/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameAndCompositeId/Mappings.hbm.xml Modified: trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassCompositeIdBinder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassCompositeIdBinder.cs 2010-09-30 16:27:15 UTC (rev 5229) +++ trunk/nhibernate/src/NHibernate/Cfg/XmlHbmBinding/ClassCompositeIdBinder.cs 2010-10-01 11:55:44 UTC (rev 5230) @@ -19,7 +19,7 @@ compositeId = new Component(rootClass); compositeId.IsKey = true; - + rootClass.Identifier = compositeId; if (idSchema.name == null) @@ -41,7 +41,16 @@ compositeId.Table.SetIdentifierValue(compositeId); compositeId.NullValue = idSchema.unsavedvalue.ToNullValue(); - System.Type compIdClass = compositeId.ComponentClass; + if (!compositeId.IsDynamic) + { + CheckEqualsAndGetHashCodeOverride(); + } + // Serializability check not ported + } + + private void CheckEqualsAndGetHashCodeOverride() + { + var compIdClass = compositeId.ComponentClass; if (!ReflectHelper.OverridesEquals(compIdClass)) { throw new MappingException("composite-id class must override Equals(): " + compIdClass.FullName); @@ -51,7 +60,6 @@ { throw new MappingException("composite-id class must override GetHashCode(): " + compIdClass.FullName); } - // Serializability check not ported } private void BindComponent(System.Type reflectedClass, string path, HbmCompositeId idSchema) @@ -70,8 +78,16 @@ else { // an "embedded" component (ids only) - compositeId.ComponentClass = compositeId.Owner.MappedClass; - compositeId.IsEmbedded = true; + if (compositeId.Owner.HasPocoRepresentation) + { + compositeId.ComponentClass = compositeId.Owner.MappedClass; + compositeId.IsEmbedded = true; + } + else + { + // if not - treat compositeid as a dynamic-component + compositeId.IsDynamic = true; + } } foreach (object item in idSchema.Items ?? new object[0]) Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameAndCompositeId/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameAndCompositeId/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameAndCompositeId/Fixture.cs 2010-10-01 11:55:44 UTC (rev 5230) @@ -0,0 +1,48 @@ +using System.Collections; +using System.Collections.Generic; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.EntityNameAndCompositeId +{ + [TestFixture] + public class Fixture : BugTestCase + { + protected override void OnTearDown() + { + using (ISession s = OpenSession()) + { + using (ITransaction tx = s.BeginTransaction()) + { + s.CreateSQLQuery("delete from Person").ExecuteUpdate(); + tx.Commit(); + } + } + } + + [Test] + public void CanPersistAndRead() + { + object id; + using (ISession s = OpenSession()) + { + using (ITransaction tx = s.BeginTransaction()) + { + id = s.Save("Person", new Dictionary<string, object> + { + {"OuterId", new Dictionary<string, int> {{"InnerId", 1}}}, + {"Data", "hello"} + }); + tx.Commit(); + } + } + using (ISession s = OpenSession()) + { + using (s.BeginTransaction()) + { + var p = (IDictionary) s.Get("Person", id); + Assert.AreEqual("hello", p["Data"]); + } + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameAndCompositeId/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameAndCompositeId/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/EntityNameAndCompositeId/Mappings.hbm.xml 2010-10-01 11:55:44 UTC (rev 5230) @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + namespace="NHibernate.Test.NHSpecificTest.EntityNameAndCompositeId" + assembly="NHibernate.Test"> + <class entity-name="Person"> + <composite-id name="OuterId"> + <key-property name="InnerId" type="Int32" /> + </composite-id> + <property name="Data" type="string"/> + </class> +</hibernate-mapping> Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-30 16:27:15 UTC (rev 5229) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-10-01 11:55:44 UTC (rev 5230) @@ -453,6 +453,7 @@ <Compile Include="Linq\ReadonlyTestCase.cs" /> <Compile Include="Logging\Log4NetLoggerTest.cs" /> <Compile Include="Logging\LoggerProviderTest.cs" /> + <Compile Include="NHSpecificTest\EntityNameAndCompositeId\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1136\Address.cs" /> <Compile Include="NHSpecificTest\NH1136\FeeMatrixType.cs" /> <Compile Include="NHSpecificTest\NH1136\Fixture.cs" /> @@ -2317,6 +2318,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\EntityNameAndCompositeId\Mappings.hbm.xml" /> <EmbeddedResource Include="PolymorphicGetAndLoad\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2331\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2324\Mappings.hbm.xml" /> @@ -2661,7 +2663,6 @@ <EmbeddedResource Include="DynamicEntity\Tuplizer\Customer.hbm.xml" /> </ItemGroup> <ItemGroup> - <Folder Include="NHSpecificTest\NH1869" /> <Folder Include="Properties\" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jul...@us...> - 2010-09-30 16:27:24
|
Revision: 5229 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5229&view=rev Author: julian-maughan Date: 2010-09-30 16:27:15 +0000 (Thu, 30 Sep 2010) Log Message: ----------- Multi-query and composite id test (ref. NH-1869) Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Entities.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Mappings.hbm.xml Property changes on: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869 ___________________________________________________________________ Added: bugtraq:url + http://jira.nhibernate.org/browse/%BUGID% Added: bugtraq:logregex + NH-\d+ Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Entities.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Entities.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Entities.cs 2010-09-30 16:27:15 UTC (rev 5229) @@ -0,0 +1,78 @@ +namespace NHibernate.Test.NHSpecificTest.NH1869 +{ + public abstract class Entity<T, TKey> where T : Entity<T, TKey> + { + private int? m_oldHashCode; + + public override bool Equals(object obj) + { + T other = obj as T; + + if (other == null) + { + return false; + } + + bool otherIsTransient = Equals(other.Id, default(TKey)); + bool thisIsTransient = Equals(Id, default(TKey)); + + if (otherIsTransient && thisIsTransient) + { + return ReferenceEquals(other, this); + } + + return other.Id.Equals(Id); + } + + public override int GetHashCode() + { + if (m_oldHashCode.HasValue) + { + return m_oldHashCode.Value; + } + bool thisIsTransient = Equals(Id, default(TKey)); + + if (thisIsTransient) + { + m_oldHashCode = base.GetHashCode(); + return m_oldHashCode.Value; + } + + return Id.GetHashCode(); + } + + public abstract TKey Id { get; set; } + + public static bool operator ==(Entity<T, TKey> x, Entity<T, TKey> y) + { + return Equals(x, y); + } + + public static bool operator !=(Entity<T, TKey> x, Entity<T, TKey> y) + { + return !(x == y); + } + } + + public class Keyword : Entity<Keyword, int> + { + public override int Id { get; set; } + } + + public class NodeKeyword + { + public virtual int NodeId { get; set; } + public virtual Keyword Keyword { get; set; } + + public override bool Equals(object obj) + { + NodeKeyword other = (NodeKeyword)obj; + return NodeId == other.NodeId && Keyword == other.Keyword; + } + + public override int GetHashCode() + { + return NodeId.GetHashCode() + Keyword.GetHashCode(); + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Fixture.cs 2010-09-30 16:27:15 UTC (rev 5229) @@ -0,0 +1,69 @@ +using System.Collections; +using NHibernate.Driver; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH1869 +{ + [TestFixture] + public class Fixture : BugTestCase + { + private Keyword _keyword; + + protected override void OnTearDown() + { + using (ISession session = sessions.OpenSession()) + { + using (ITransaction transaction = session.BeginTransaction()) + { + session.Delete("from NodeKeyword"); + session.Delete("from Keyword"); + transaction.Commit(); + } + } + } + + [Test] + public void Test() + { + IDriver driver = sessions.ConnectionProvider.Driver; + if (!driver.SupportsMultipleQueries) + { + Assert.Ignore("Driver {0} does not support multi-queries", driver.GetType().FullName); + } + + using (ISession session = sessions.OpenSession()) + using (ITransaction transaction = session.BeginTransaction()) + { + _keyword = new Keyword(); + session.Save(_keyword); + + NodeKeyword nodeKeyword = new NodeKeyword(); + nodeKeyword.NodeId = 1; + nodeKeyword.Keyword = _keyword; + session.Save(nodeKeyword); + + transaction.Commit(); + } + + using (ISession session = sessions.OpenSession()) + { + //If uncomment the line below the test will pass + //GetResult(session); + IList result = GetResult(session); + Assert.That(result, Has.Count.EqualTo(2)); + Assert.That(result[0], Has.Count.EqualTo(1)); + Assert.That(result[1], Has.Count.EqualTo(1)); + } + } + + private IList GetResult(ISession session) + { + IQuery query1 = session.CreateQuery("from NodeKeyword nk"); + IQuery query2 = session.CreateQuery("from NodeKeyword nk"); + + var multi = session.CreateMultiQuery(); + multi.Add(query1).Add(query2); + return multi.List(); + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1869/Mappings.hbm.xml 2010-09-30 16:27:15 UTC (rev 5229) @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping + xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH1869"> + + <class name="Keyword" table="Keywords" lazy="true"> + <id name="Id" column="id"> + <generator class="native" /> + </id> + </class> + + <class name="NodeKeyword" table="NodeKeywords" lazy="true"> + <composite-id> + <key-property name="NodeId" column="nodeId" /> + <key-many-to-one name="Keyword" column="keywordId" /> + </composite-id> + </class> + +</hibernate-mapping> \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-28 21:23:08 UTC (rev 5228) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-30 16:27:15 UTC (rev 5229) @@ -468,6 +468,8 @@ <Compile Include="NHSpecificTest\NH1836\Entity.cs" /> <Compile Include="NHSpecificTest\NH1836\EntityDTO.cs" /> <Compile Include="NHSpecificTest\NH1836\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH1869\Entities.cs" /> + <Compile Include="NHSpecificTest\NH1869\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2111\A.cs" /> <Compile Include="NHSpecificTest\NH2111\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2112\Fixture.cs" /> @@ -1803,6 +1805,7 @@ <EmbeddedResource Include="NHSpecificTest\NH2278\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1136\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2202\Mappings.hbm.xml" /> + <EmbeddedResource Include="NHSpecificTest\NH1869\Mappings.hbm.xml" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\NHibernate.ByteCode.Castle\NHibernate.ByteCode.Castle.csproj"> @@ -2658,6 +2661,7 @@ <EmbeddedResource Include="DynamicEntity\Tuplizer\Customer.hbm.xml" /> </ItemGroup> <ItemGroup> + <Folder Include="NHSpecificTest\NH1869" /> <Folder Include="Properties\" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |