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