|
From: <fab...@us...> - 2011-05-09 16:00:18
|
Revision: 5802
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5802&view=rev
Author: fabiomaulo
Date: 2011-05-09 16:00:11 +0000 (Mon, 09 May 2011)
Log Message:
-----------
Fix NH-2684
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Cfg/ConfigurationExtensions.cs
trunk/nhibernate/src/NHibernate/NHibernate.csproj
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Cfg/Loquacious/INamedQueryDefinitionBuilder.cs
trunk/nhibernate/src/NHibernate.Test/CfgTest/Loquacious/NamedQueryTests.cs
Modified: trunk/nhibernate/src/NHibernate/Cfg/ConfigurationExtensions.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/ConfigurationExtensions.cs 2011-05-09 14:14:11 UTC (rev 5801)
+++ trunk/nhibernate/src/NHibernate/Cfg/ConfigurationExtensions.cs 2011-05-09 16:00:11 UTC (rev 5802)
@@ -1,6 +1,7 @@
using System;
using NHibernate.Cfg.Loquacious;
using NHibernate.Context;
+using NHibernate.Engine;
using NHibernate.Hql;
using NHibernate.Linq.Functions;
using NHibernate.Util;
@@ -136,6 +137,26 @@
return configuration;
}
+ public static Configuration AddNamedQuery(this Configuration configuration, string queryIdentifier, Action<INamedQueryDefinitionBuilder> namedQueryDefinition)
+ {
+ if (configuration == null)
+ {
+ throw new ArgumentNullException("configuration");
+ }
+ if (queryIdentifier == null)
+ {
+ throw new ArgumentNullException("queryIdentifier");
+ }
+ if (namedQueryDefinition == null)
+ {
+ throw new ArgumentNullException("namedQueryDefinition");
+ }
+ var builder = new NamedQueryDefinitionBuilder();
+ namedQueryDefinition(builder);
+ configuration.NamedQueries.Add(queryIdentifier, builder.Build());
+ return configuration;
+ }
+
private static Mappings GetMappings(Configuration configuration)
{
Dialect.Dialect dialect = Dialect.Dialect.GetDialect(configuration.Properties);
Added: trunk/nhibernate/src/NHibernate/Cfg/Loquacious/INamedQueryDefinitionBuilder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/Loquacious/INamedQueryDefinitionBuilder.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Cfg/Loquacious/INamedQueryDefinitionBuilder.cs 2011-05-09 16:00:11 UTC (rev 5802)
@@ -0,0 +1,79 @@
+using System.Collections.Generic;
+using NHibernate.Engine;
+
+namespace NHibernate.Cfg.Loquacious
+{
+ public interface INamedQueryDefinitionBuilder
+ {
+ bool IsCacheable { get; set; }
+ string CacheRegion { get; set; }
+ int FetchSize { get; set; }
+ int Timeout { get; set; }
+ FlushMode FlushMode { get; set; }
+ string Query { get; set; }
+ bool IsReadOnly { get; set; }
+ string Comment { get; set; }
+ CacheMode? CacheMode { get; set; }
+ }
+
+ internal class NamedQueryDefinitionBuilder : INamedQueryDefinitionBuilder
+ {
+ private int fetchSize = -1;
+ private int timeout = -1;
+
+ public NamedQueryDefinitionBuilder()
+ {
+ FlushMode = FlushMode.Unspecified;
+ }
+
+ #region INamedQueryDefinitionBuilder Members
+
+ public bool IsCacheable { get; set; }
+ public string CacheRegion { get; set; }
+
+ public int FetchSize
+ {
+ get { return fetchSize; }
+ set
+ {
+ if (value > 0)
+ {
+ fetchSize = value;
+ }
+ else
+ {
+ fetchSize = -1;
+ }
+ }
+ }
+
+ public int Timeout
+ {
+ get { return timeout; }
+ set
+ {
+ if (value > 0)
+ {
+ timeout = value;
+ }
+ else
+ {
+ timeout = -1;
+ }
+ }
+ }
+
+ public FlushMode FlushMode { get; set; }
+ public string Query { get; set; }
+ public bool IsReadOnly { get; set; }
+ public string Comment { get; set; }
+ public CacheMode? CacheMode { get; set; }
+
+ #endregion
+
+ public NamedQueryDefinition Build()
+ {
+ return new NamedQueryDefinition(Query, IsCacheable, CacheRegion, Timeout, FetchSize, FlushMode, CacheMode ,IsReadOnly, Comment, new Dictionary<string, string>(1));
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-05-09 14:14:11 UTC (rev 5801)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2011-05-09 16:00:11 UTC (rev 5802)
@@ -113,6 +113,7 @@
<Compile Include="Cache\Timestamper.cs" />
<Compile Include="Cache\UpdateTimestampsCache.cs" />
<Compile Include="CallbackException.cs" />
+ <Compile Include="Cfg\Loquacious\INamedQueryDefinitionBuilder.cs" />
<Compile Include="Cfg\MappingsQueue.cs" />
<Compile Include="Cfg\Configuration.cs" />
<Compile Include="Cfg\ConfigurationSectionHandler.cs" />
Added: trunk/nhibernate/src/NHibernate.Test/CfgTest/Loquacious/NamedQueryTests.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/CfgTest/Loquacious/NamedQueryTests.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/CfgTest/Loquacious/NamedQueryTests.cs 2011-05-09 16:00:11 UTC (rev 5802)
@@ -0,0 +1,76 @@
+using System.Linq;
+using NHibernate.Cfg;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.CfgTest.Loquacious
+{
+ public class NamedQueryTests
+ {
+ [Test]
+ public void AddSimpleNamedQuery()
+ {
+ var configure = new Configuration();
+ configure.AddNamedQuery("aQuery", b =>
+ {
+ b.Query = "from System.Object o";
+ });
+
+ configure.NamedQueries.Should().Have.Count.EqualTo(1);
+ configure.NamedQueries.Keys.Single().Should().Be("aQuery");
+ configure.NamedQueries.Values.Single().Query.Should().Be("from System.Object o");
+ }
+
+ [Test]
+ public void WhenSetInvalidFetchSizeThenLeaveDefault()
+ {
+ var configure = new Configuration();
+ configure.AddNamedQuery("aQuery", b =>
+ {
+ b.Query = "from System.Object o";
+ b.FetchSize = 0;
+ });
+
+ configure.NamedQueries.Values.Single().FetchSize.Should().Be(-1);
+ }
+
+ [Test]
+ public void WhenSetValidFetchSizeThenSetValue()
+ {
+ var configure = new Configuration();
+ configure.AddNamedQuery("aQuery", b =>
+ {
+ b.Query = "from System.Object o";
+ b.FetchSize = 15;
+ });
+
+ configure.NamedQueries.Values.Single().FetchSize.Should().Be(15);
+ }
+
+ [Test]
+ public void WhenSetInvalidTimeoutThenLeaveDefault()
+ {
+ var configure = new Configuration();
+ configure.AddNamedQuery("aQuery", b =>
+ {
+ b.Query = "from System.Object o";
+ b.Timeout = 0;
+ });
+
+ configure.NamedQueries.Values.Single().Timeout.Should().Be(-1);
+ }
+
+ [Test]
+ public void WhenSetValidTimeoutThenSetValue()
+ {
+ var configure = new Configuration();
+ configure.AddNamedQuery("aQuery", b =>
+ {
+ b.Query = "from System.Object o";
+ b.Timeout = 123;
+ });
+
+ configure.NamedQueries.Values.Single().Timeout.Should().Be(123);
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-09 14:14:11 UTC (rev 5801)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-09 16:00:11 UTC (rev 5802)
@@ -151,6 +151,7 @@
<Compile Include="CfgTest\Loquacious\EntityCacheConfigurationFixture.cs" />
<Compile Include="CfgTest\Loquacious\EntityToCache.cs" />
<Compile Include="CfgTest\Loquacious\LambdaConfigurationFixture.cs" />
+ <Compile Include="CfgTest\Loquacious\NamedQueryTests.cs" />
<Compile Include="CfgTest\Loquacious\TypeDefinitionFixture.cs" />
<Compile Include="CfgTest\MappingDocumentAggregatorTests.cs" />
<Compile Include="CfgTest\MappingDocumentParserTests.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|