Steve... My friend...Which is the right place for features request and patch
?    ;)

2008/11/13 Steve Wagner <[EMAIL PROTECTED]>

> Hi Fabio, here is a patch which adds 3 tests where one is currently
> failing. Add the failing test i added a short description.
>
> Steve Wagner schrieb:
> > Ok i will try it.
> >
> > If both SchemaVerify and this are work, i think the following workflow
> > could prevent the ghosting.
> >
> > * I create a Test which runs SchemaVerify.
> > * SchemaVerify tells me that i could run into ghosting with the current
> > mapping.
> > * I change the mapping with the property
> > * SchemaVerify passes
> >
> > Fabio Maulo schrieb:
> >> 2008/11/13 Steve Wagner <[EMAIL PROTECTED]>
> >>
> >>>  Wouldn't it here a good suggestion to add an per property option which
> >>> forces nhibernate to eval DBNull.Value==default(T) if it dose a dirty
> >>> check?
> >>>
> >> I think we have it working. In meta-data we having DefaultValue exactly
> for
> >> that.mmm wait ... sometimes you are talking about a new feature for
> existing
> >> data where you don't want to change the existing record even if you have
> a
> >> value in the entity and a null in the DB.
> >> Do you can create a failing test for the new feature ?
> >>
> >
>
> Index: nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
> ===================================================================
> --- nhibernate/src/NHibernate.Test/NHibernate.Test.csproj       (Revision
> 3887)
> +++ nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
> (Arbeitskopie)
> @@ -375,6 +375,10 @@
>     <Compile Include="NHSpecificTest\CollectionFixture.cs" />
>     <Compile Include="NHSpecificTest\CriteriaFromHql\Fixture.cs" />
>     <Compile Include="NHSpecificTest\CriteriaFromHql\Person.cs" />
> +    <Compile Include="NHSpecificTest\Ghosting\Fixture.cs" />
> +    <Compile Include="NHSpecificTest\Ghosting\Person.cs" />
> +    <Compile Include="NHSpecificTest\Ghosting\PersonPreventGhost.cs" />
> +    <Compile Include="NHSpecificTest\Ghosting\PersonWithGhost.cs" />
>     <Compile Include="NHSpecificTest\NH1033\Animal.cs" />
>     <Compile Include="NHSpecificTest\NH1033\Fixture.cs" />
>     <Compile Include="NHSpecificTest\NH1033\Reptile.cs" />
> @@ -1515,6 +1519,7 @@
>     <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" />
>     <EmbeddedResource Include="Deletetransient\Person.hbm.xml" />
>     <Content Include="DynamicEntity\package.html" />
> +    <EmbeddedResource Include="NHSpecificTest\Ghosting\Mappings.hbm.xml"
> />
>     <EmbeddedResource Include="NHSpecificTest\NH1478\Mappings.hbm.xml" />
>     <EmbeddedResource Include="NHSpecificTest\NH1447\Mappings.hbm.xml" />
>     <EmbeddedResource Include="TypesTest\EnumCharClass.hbm.xml" />
>
> Eigenschaftsänderungen:
> nhibernate\src\NHibernate.Test\NHSpecificTest\Ghosting
> ___________________________________________________________________
> Hinzugefügt: bugtraq:url
>   + http://jira.nhibernate.org/browse/%BUGID%
> Hinzugefügt: bugtraq:logregex
>   + NH-\d+
>
>
> Index: nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Fixture.cs
> ===================================================================
> --- nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Fixture.cs
> (Revision 0)
> +++ nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Fixture.cs
> (Revision 0)
> @@ -0,0 +1,88 @@
> +using NUnit.Framework;
> +
> +namespace NHibernate.Test.NHSpecificTest.Ghosting
> +{
> +    [TestFixture]
> +    public class Fixture : BugTestCase
> +    {
> +        protected override void OnSetUp()
> +        {
> +            Person person = new Person();
> +            person.Number = null;
> +
> +            using (ISession session = OpenSession())
> +            using (ITransaction tx = session.BeginTransaction())
> +            {
> +                session.Save( person );
> +
> +                tx.Commit();
> +            }
> +        }
> +
> +        protected override void OnTearDown()
> +        {
> +            using (ISession session = OpenSession())
> +            using (ITransaction tx = session.BeginTransaction())
> +            {
> +                session.Delete( "from Person" );
> +                session.Delete( "from PersonWithGhost" );
> +                tx.Commit();
> +            }
> +        }
> +
> +        [Test]
> +        public void PersonWasPersistedCorrectlyAndGeneratesNoGhost()
> +        {
> +            using (ISession session = OpenSession())
> +            using (ITransaction tx = session.BeginTransaction())
> +            {
> +                var person = session.CreateCriteria( typeof( Person ) )
> +                    .SetMaxResults( 1 )
> +                    .UniqueResult<Person>();
> +
> +                Assert.IsNotNull( person );
> +                Assert.IsNull( person.Number );
> +                Assert.IsFalse( session.IsDirty() );
> +            }
> +        }
> +
> +        [Test]
> +        public void PersonGeneratesAGhost()
> +        {
> +            using( ISession session = OpenSession() )
> +            using( ITransaction tx = session.BeginTransaction() )
> +            {
> +                var person = session.CreateCriteria( typeof(
> PersonWithGhost ) )
> +                    .SetMaxResults( 1 )
> +                    .UniqueResult<PersonWithGhost>();
> +
> +                Assert.IsNotNull( person );
> +                Assert.AreEqual( default( int ), person.Number );
> +                Assert.IsTrue( session.IsDirty() );
> +            }
> +        }
> +
> +        [Test]
> +        public void OptionToPreventTheGenerationOfAGhost()
> +        {
> +            using( ISession session = OpenSession() )
> +            using( ITransaction tx = session.BeginTransaction() )
> +            {
> +                var person = session.CreateCriteria( typeof(
> PersonPreventGhost ) )
> +                    .SetMaxResults( 1 )
> +                    .UniqueResult<PersonPreventGhost>();
> +
> +                Assert.IsNotNull( person );
> +                Assert.AreEqual( default( int ), person.Number );
> +                Assert.IsFalse( session.IsDirty() );
> +
> +                /// @Fabio:
> +                /// In this object the Number property should have set
> +                /// an special flag which forces NHibernate to
> +                /// evaluates default(int) == DBNull.Value
> +                /// when it dose the IsDirty check of the Number
> +                /// property.
> +            }
> +        }
> +    }
> +}
> \ No newline at end of file
> Index:
> nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Mappings.hbm.xml
> ===================================================================
> --- nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Mappings.hbm.xml
>     (Revision 0)
> +++ nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Mappings.hbm.xml
>     (Revision 0)
> @@ -0,0 +1,24 @@
> +<?xml version="1.0" encoding="utf-8" ?>
> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
> +
>  namespace="NHibernate.Test.NHSpecificTest.Ghosting"
> +                                  assembly="NHibernate.Test">
> +
> +  <class name="Person">
> +    <id name="Id">
> +      <generator class="native" />
> +    </id>
> +    <property name="Number" />
> +  </class>
> +  <class name="PersonWithGhost" table="Person">
> +    <id name="Id">
> +      <generator class="native" />
> +    </id>
> +    <property name="Number"  />
> +  </class>
> +  <class name="PersonPreventGhost" table="Person">
> +    <id name="Id">
> +      <generator class="native" />
> +    </id>
> +    <property name="Number" />
> +  </class>
> +</hibernate-mapping>
> Index: nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Person.cs
> ===================================================================
> --- nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Person.cs
>  (Revision 0)
> +++ nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/Person.cs
>  (Revision 0)
> @@ -0,0 +1,22 @@
> +using System.Collections.Generic;
> +
> +namespace NHibernate.Test.NHSpecificTest.Ghosting
> +{
> +    public class Person
> +    {
> +        private int id;
> +        private int? _number;
> +
> +        public virtual int Id
> +        {
> +            get { return id; }
> +            set { id = value; }
> +        }
> +
> +        public virtual int? Number
> +        {
> +            get { return _number; }
> +            set{ _number = value; }
> +        }
> +    }
> +}
> \ No newline at end of file
> Index:
> nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/PersonPreventGhost.cs
> ===================================================================
> ---
> nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/PersonPreventGhost.cs
>        (Revision 0)
> +++
> nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/PersonPreventGhost.cs
>        (Revision 0)
> @@ -0,0 +1,20 @@
> +namespace NHibernate.Test.NHSpecificTest.Ghosting
> +{
> +    public class PersonPreventGhost
> +    {
> +        private int id;
> +        private int _number;
> +
> +        public virtual int Id
> +        {
> +            get { return id; }
> +            set { id = value; }
> +        }
> +
> +        public virtual int Number
> +        {
> +            get { return _number; }
> +            set { _number = value; }
> +        }
> +    }
> +}
> \ No newline at end of file
> Index:
> nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/PersonWithGhost.cs
> ===================================================================
> ---
> nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/PersonWithGhost.cs
> (Revision 0)
> +++
> nhibernate/src/NHibernate.Test/NHSpecificTest/Ghosting/PersonWithGhost.cs
> (Revision 0)
> @@ -0,0 +1,20 @@
> +namespace NHibernate.Test.NHSpecificTest.Ghosting
> +{
> +    public class PersonWithGhost
> +    {
> +        private int id;
> +        private int _number;
> +
> +        public virtual int Id
> +        {
> +            get { return id; }
> +            set { id = value; }
> +        }
> +
> +        public virtual int Number
> +        {
> +            get { return _number; }
> +            set { _number = value; }
> +        }
> +    }
> +}
> \ No newline at end of file
>
>


-- 
Fabio Maulo

Reply via email to