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