From: <fab...@us...> - 2009-07-09 16:45:18
|
Revision: 4599 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4599&view=rev Author: fabiomaulo Date: 2009-07-09 16:45:16 +0000 (Thu, 09 Jul 2009) Log Message: ----------- Fix NH-1876 Modified Paths: -------------- branches/2.1.x/nhibernate/src/NHibernate/Id/TableGenerator.cs branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- branches/2.1.x/nhibernate/src/NHibernate.Test/IdTest/TableGeneratorFixture.cs Modified: branches/2.1.x/nhibernate/src/NHibernate/Id/TableGenerator.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate/Id/TableGenerator.cs 2009-07-09 16:10:33 UTC (rev 4598) +++ branches/2.1.x/nhibernate/src/NHibernate/Id/TableGenerator.cs 2009-07-09 16:45:16 UTC (rev 4599) @@ -92,9 +92,17 @@ tableName = dialect.Qualify(catalogName, schemaName, tableName); } - query = "select " + columnName + " from " + dialect.AppendLockHint(LockMode.Upgrade, tableName) - + dialect.ForUpdateString; + var selectBuilder = new SqlStringBuilder(100); + selectBuilder.Add("select " + columnName) + .Add(" from " + dialect.AppendLockHint(LockMode.Upgrade, tableName)); + if (string.IsNullOrEmpty(whereClause) == false) + { + selectBuilder.Add(" where ").Add(whereClause); + } + selectBuilder.Add(dialect.ForUpdateString); + query = selectBuilder.ToString(); + columnType = type as PrimitiveType; if (columnType == null) { @@ -118,9 +126,11 @@ parameterTypes = new[] {columnSqlType, columnSqlType}; - var builder = new SqlStringBuilder(); - builder.Add("update " + tableName + " set ").Add(columnName).Add(" = ").Add(Parameter.Placeholder).Add(" where ").Add - (columnName).Add(" = ").Add(Parameter.Placeholder); + var builder = new SqlStringBuilder(100); + builder.Add("update " + tableName + " set ") + .Add(columnName).Add(" = ").Add(Parameter.Placeholder) + .Add(" where ") + .Add(columnName).Add(" = ").Add(Parameter.Placeholder); if (string.IsNullOrEmpty(whereClause) == false) { builder.Add(" and ").Add(whereClause); Added: branches/2.1.x/nhibernate/src/NHibernate.Test/IdTest/TableGeneratorFixture.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/IdTest/TableGeneratorFixture.cs (rev 0) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/IdTest/TableGeneratorFixture.cs 2009-07-09 16:45:16 UTC (rev 4599) @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using System.Reflection; +using NHibernate.Dialect; +using NHibernate.Id; +using NUnit.Framework; + +namespace NHibernate.Test.IdTest +{ + [TestFixture] + public class TableGeneratorFixture + { + private const BindingFlags Flags = + BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly; + + private readonly FieldInfo updateSql = typeof (TableGenerator).GetField("updateSql", Flags); + private readonly FieldInfo selectSql = typeof (TableGenerator).GetField("query", Flags); + + [Test] + public void SelectAndUpdateStringContainCustomWhere() + { + const string customWhere = "table_name='second'"; + var dialect = new MsSql2005Dialect(); + var tg = new TableGenerator(); + tg.Configure(NHibernateUtil.Int64, new Dictionary<string, string> {{"where", customWhere}}, dialect); + Assert.That(selectSql.GetValue(tg).ToString(), Text.Contains(customWhere)); + Assert.That(updateSql.GetValue(tg).ToString(), Text.Contains(customWhere)); + } + } +} \ No newline at end of file Modified: branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-07-09 16:10:33 UTC (rev 4598) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-07-09 16:45:16 UTC (rev 4599) @@ -341,6 +341,7 @@ <Compile Include="HQL\Ast\WithClauseFixture.cs" /> <Compile Include="HQL\Ast\Zoo.cs" /> <Compile Include="HQL\BaseFunctionFixture.cs" /> + <Compile Include="IdTest\TableGeneratorFixture.cs" /> <Compile Include="LazyOneToOne\Employee.cs" /> <Compile Include="LazyOneToOne\Employment.cs" /> <Compile Include="LazyOneToOne\LazyOneToOneTest.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |