|
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.
|