From: <te...@us...> - 2008-11-02 22:03:07
|
Revision: 3885 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=3885&view=rev Author: tehlike Date: 2008-11-02 22:02:59 +0000 (Sun, 02 Nov 2008) Log Message: ----------- Adding overload for ConstantProjection(object,IType) (Fix NH-1447) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Criterion/ConstantProjection.cs trunk/nhibernate/src/NHibernate/Criterion/Projections.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1447/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1447/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1447/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1447/Person.cs Modified: trunk/nhibernate/src/NHibernate/Criterion/ConstantProjection.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/ConstantProjection.cs 2008-11-02 18:28:25 UTC (rev 3884) +++ trunk/nhibernate/src/NHibernate/Criterion/ConstantProjection.cs 2008-11-02 22:02:59 UTC (rev 3885) @@ -13,12 +13,18 @@ public class ConstantProjection : SimpleProjection { private readonly object value; - - public ConstantProjection(object value) + private readonly IType type; + public ConstantProjection(object value):this(value,NHibernateUtil.GuessType(value.GetType())) { + + } + public ConstantProjection(object value,IType type) + { this.value = value; + this.type = type; } + public override bool IsAggregate { get { return false; } @@ -36,7 +42,7 @@ public override SqlString ToSqlString(ICriteria criteria, int position, ICriteriaQuery criteriaQuery, IDictionary<string, IFilter> enabledFilters) { - criteriaQuery.AddUsedTypedValues(new TypedValue[] { new TypedValue(NHibernateUtil.GuessType(value), value, EntityMode.Poco) }); + criteriaQuery.AddUsedTypedValues(new TypedValue[] { new TypedValue(type, value, EntityMode.Poco) }); return new SqlStringBuilder() .AddParameter() .Add(" as ") @@ -46,12 +52,12 @@ public override IType[] GetTypes(ICriteria criteria, ICriteriaQuery criteriaQuery) { - return new IType[] {NHibernateUtil.GuessType(value)}; + return new IType[] { type }; } public override TypedValue[] GetTypedValues(ICriteria criteria, ICriteriaQuery criteriaQuery) { - return new TypedValue[] {new TypedValue(NHibernateUtil.GuessType(value), value, EntityMode.Poco)}; + return new TypedValue[] { new TypedValue(type, value, EntityMode.Poco) }; } } } Modified: trunk/nhibernate/src/NHibernate/Criterion/Projections.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Projections.cs 2008-11-02 18:28:25 UTC (rev 3884) +++ trunk/nhibernate/src/NHibernate/Criterion/Projections.cs 2008-11-02 22:02:59 UTC (rev 3885) @@ -253,6 +253,15 @@ return new ConstantProjection(obj); } + /// <summary> + /// Return a constant value + /// </summary> + /// <param name="obj">The obj.</param> + /// <returns></returns> + public static IProjection Constant(object obj,IType type) + { + return new ConstantProjection(obj,type); + } /// <summary> Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1447/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1447/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1447/Fixture.cs 2008-11-02 22:02:59 UTC (rev 3885) @@ -0,0 +1,50 @@ +using System.Collections.Generic; +using NHibernate.Criterion; +using NHibernate.Dialect.Function; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH1447 +{ + [TestFixture] + public class Fixture : BugTestCase + { + protected override void OnTearDown() + { + base.OnTearDown(); + using (ISession session = OpenSession()) + { + using (ITransaction tx = session.BeginTransaction()) + { + session.Delete("from Person"); + tx.Commit(); + } + } + } + + protected override void OnSetUp() + { + using (ISession s = OpenSession()) + { + using (ITransaction tx = s.BeginTransaction()) + { + var e1 = new Person("Tuna Toksoz",false); + var e2 = new Person("Oguz Kurumlu", true); + s.Save(e1); + tx.Commit(); + } + } + } + + [Test] + public void CanQueryByConstantProjectionWithType() + { + using (ISession s = OpenSession()) + { + ICriteria c = s.CreateCriteria(typeof (Person)) + .Add(Restrictions.EqProperty("WantsNewsletter", Projections.Constant(false,NHibernateUtil.Boolean))); + IList<Person> list = c.List<Person>(); + Assert.AreEqual(1, list.Count); + } + } + } +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1447/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1447/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1447/Mappings.hbm.xml 2008-11-02 22:02:59 UTC (rev 3885) @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH1447"> + + <class name="Person" lazy="false"> + <id name="Id"> + <generator class="native" /> + </id> + <property name="Name"/> + <property name="WantsNewsletter" type="Boolean"/> + </class> +</hibernate-mapping> Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1447/Person.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1447/Person.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1447/Person.cs 2008-11-02 22:02:59 UTC (rev 3885) @@ -0,0 +1,39 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; + +namespace NHibernate.Test.NHSpecificTest.NH1447 +{ + public class Person + { + public Person() + { + + } + + public Person(string name, bool isPerfect) + { + this.Name = name; + this.WantsNewsletter = isPerfect; + } + + public virtual int Id + { get; + set; + } + + public virtual string Name + { + get; + set; + } + public virtual bool WantsNewsletter + { + get; + set; + } + + } + +} Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2008-11-02 18:28:25 UTC (rev 3884) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2008-11-02 22:02:59 UTC (rev 3885) @@ -493,6 +493,8 @@ <Compile Include="NHSpecificTest\NH1419\Blog.cs" /> <Compile Include="NHSpecificTest\NH1419\Entry.cs" /> <Compile Include="NHSpecificTest\NH1419\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH1447\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH1447\Person.cs" /> <Compile Include="NHSpecificTest\NH1464\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1483\BaseClass.cs" /> <Compile Include="NHSpecificTest\NH1483\Fixture.cs" /> @@ -1511,6 +1513,7 @@ <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH1447\Mappings.hbm.xml" /> <EmbeddedResource Include="TypesTest\EnumCharClass.hbm.xml" /> <EmbeddedResource Include="Extendshbm\packageentitynamesWithColl.hbm.xml" /> <EmbeddedResource Include="Extendshbm\entitynamesWithColl.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |