From: <pa...@us...> - 2011-03-28 01:28:47
|
Revision: 5556 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5556&view=rev Author: patearl Date: 2011-03-28 01:28:41 +0000 (Mon, 28 Mar 2011) Log Message: ----------- Dialect support for specifying technique to retrieve identifiers generated by insert statements. Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs trunk/nhibernate/src/NHibernate/Id/Insert/OutputParamReturningDelegate.cs Modified: trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs 2011-03-27 20:44:38 UTC (rev 5555) +++ trunk/nhibernate/src/NHibernate/Dialect/Dialect.cs 2011-03-28 01:28:41 UTC (rev 5556) @@ -2375,6 +2375,11 @@ return insertString; } + public virtual InsertGeneratedIdentifierRetrievalMethod InsertGeneratedIdentifierRetrievalMethod + { + get { return InsertGeneratedIdentifierRetrievalMethod.ReturnValueParameter; } + } + /// <summary> /// The class (which implements <see cref="NHibernate.Id.IIdentifierGenerator"/>) /// which acts as this dialects identity-style generation strategy. @@ -2435,4 +2440,22 @@ get { return null; } } } + + public enum InsertGeneratedIdentifierRetrievalMethod + { + /// <summary> + /// Use a parameter with ParameterDirection.Output + /// </summary> + OutputParameter, + + /// <summary> + /// Use a parameter with ParameterDirection.ReturnValue + /// </summary> + ReturnValueParameter, + + // <summary> + // Get the result from the statment as if it were a query, using ExecuteScalar() or ExecuteDataReader(). + // </summary> + // QueryResult + } } Modified: trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs 2011-03-27 20:44:38 UTC (rev 5555) +++ trunk/nhibernate/src/NHibernate/Dialect/PostgreSQLDialect.cs 2011-03-28 01:28:41 UTC (rev 5556) @@ -111,6 +111,11 @@ return insertString.Append(" returning " + identifierColumnName); } + public override InsertGeneratedIdentifierRetrievalMethod InsertGeneratedIdentifierRetrievalMethod + { + get { return InsertGeneratedIdentifierRetrievalMethod.OutputParameter; } + } + public override bool SupportsSequences { get { return true; } Modified: trunk/nhibernate/src/NHibernate/Id/Insert/OutputParamReturningDelegate.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Id/Insert/OutputParamReturningDelegate.cs 2011-03-27 20:44:38 UTC (rev 5555) +++ trunk/nhibernate/src/NHibernate/Id/Insert/OutputParamReturningDelegate.cs 2011-03-28 01:28:41 UTC (rev 5556) @@ -1,4 +1,5 @@ using System.Data; +using NHibernate.Dialect; using NHibernate.Engine; using NHibernate.SqlCommand; using NHibernate.SqlTypes; @@ -45,8 +46,14 @@ IDbDataParameter idParameter = factory.ConnectionProvider.Driver.GenerateParameter(command, ReturnParameterName, paramType); driveGeneratedParamName = idParameter.ParameterName; - idParameter.Direction = ParameterDirection.ReturnValue; + if (factory.Dialect.InsertGeneratedIdentifierRetrievalMethod == InsertGeneratedIdentifierRetrievalMethod.OutputParameter) + idParameter.Direction = ParameterDirection.Output; + else if (factory.Dialect.InsertGeneratedIdentifierRetrievalMethod == InsertGeneratedIdentifierRetrievalMethod.ReturnValueParameter) + idParameter.Direction = ParameterDirection.ReturnValue; + else + throw new System.NotImplementedException("Unsupported InsertGeneratedIdentifierRetrievalMethod: " + factory.Dialect.InsertGeneratedIdentifierRetrievalMethod); + command.Parameters.Add(idParameter); return command; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |