You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by rg...@apache.org on 2009/06/25 07:41:43 UTC

svn commit: r788267 [2/2] - in /ibatis/branches/MappedStatementRefactor/Apache.Ibatis.DataMapper: ./ MappedStatements/ Model/Cache/

Modified: ibatis/branches/MappedStatementRefactor/Apache.Ibatis.DataMapper/MappedStatements/MappedStatement.cs
URL: http://svn.apache.org/viewvc/ibatis/branches/MappedStatementRefactor/Apache.Ibatis.DataMapper/MappedStatements/MappedStatement.cs?rev=788267&r1=788266&r2=788267&view=diff
==============================================================================
--- ibatis/branches/MappedStatementRefactor/Apache.Ibatis.DataMapper/MappedStatements/MappedStatement.cs (original)
+++ ibatis/branches/MappedStatementRefactor/Apache.Ibatis.DataMapper/MappedStatements/MappedStatement.cs Thu Jun 25 05:41:43 2009
@@ -48,17 +48,16 @@
 
 namespace Apache.Ibatis.DataMapper.MappedStatements
 {
-
     /// <summary>
     /// Base implementation of <see cref="IMappedStatement"/>.
     /// </summary>
     [DebuggerDisplay("MappedStatement: {Id}")]
-    public class MappedStatement : MappedStatementEventSupport, IMappedStatement
+    public partial class MappedStatement : MappedStatementEventSupport, IMappedStatement
     {
         /// <summary>
         /// Event launch on execute query
         /// </summary>
-        public event EventHandler<ExecuteEventArgs> Execute = delegate { };
+        public event EventHandler<ExecuteEventArgs> Executed = delegate { };
 
         #region Fields
         private readonly IStatement statement = null;
@@ -80,8 +79,6 @@
             resultStrategy = ResultStrategyFactory.Get(this.statement);
         }
 
-        #region IDataMapper Members
-
         #region properties
         /// <summary>
         /// The IPreparedCommand to use
@@ -118,999 +115,6 @@
         } 
         #endregion
 
-        #region ExecuteForObject
-
-
-        /// <summary>
-        /// Executes an SQL statement that returns a single row as an Object of the type of
-        /// the resultObject passed in as a parameter.
-        /// </summary>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <param name="resultObject">The result object.</param>
-        /// <returns>The object</returns>
-        public virtual object ExecuteQueryForObject(ISession session, object parameterObject, object resultObject)
-        {
-            object obj = null;
-
-            object param = RaisePreEvent<PreSelectEventArgs>(PreSelectEvent, parameterObject);
-
-            RequestScope request = statement.Sql.GetRequestScope(this, param, session);
-            preparedCommand.Create(request, session, Statement, param);
-
-            obj = RunQueryForObject(request, session, param, resultObject);
-
-            return RaisePostEvent<object, PostSelectEventArgs>(PostSelectEvent, param, obj);
-        }
-
-        /// <summary>
-        /// Executes an SQL statement that returns a single row as an Object of the type of
-        /// the resultObject passed in as a parameter.
-        /// </summary>
-        /// <param name="request">The request scope.</param>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <param name="resultObject">The result object.</param>
-        /// <returns>The object</returns>
-        internal object RunQueryForObject(RequestScope request, ISession session, object parameterObject, object resultObject)
-        {
-            object result = resultObject;
-
-            using (IDbCommand command = request.IDbCommand)
-            {
-                IDataReader reader = command.ExecuteReader();
-                try
-                {
-                    while (reader.Read())
-                    {
-                        object obj = resultStrategy.Process(request, ref reader, resultObject);
-                        if (obj != BaseStrategy.SKIP)
-                        {
-                            result = obj;
-                        }
-                    }
-                }
-                finally
-                {
-                    reader.Close();
-                    reader.Dispose();
-                }
-
-                ExecuteDelayedLoad(request);
-
-                #region remark
-                // If you are using the OleDb data provider (as you are), you need to close the
-                // DataReader before output parameters are visible.
-                #endregion
-
-                RetrieveOutputParameters(request, session, command, parameterObject);
-            }
-
-            RaiseExecuteEvent();
-
-            return result;
-        }
-
-        #endregion
-
-        #region ExecuteForObject .NET 2.0
-
-        /// <summary>
-        /// Executes an SQL statement that returns a single row as an Object of the type of
-        /// the resultObject passed in as a parameter.
-        /// </summary>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <param name="resultObject">The result object.</param>
-        /// <returns>The object</returns>
-        public virtual T ExecuteQueryForObject<T>(ISession session, object parameterObject, T resultObject)
-        {
-            T obj = default(T);
-
-            object param = RaisePreEvent<PreSelectEventArgs>(PreSelectEvent, parameterObject);
-
-            RequestScope request = statement.Sql.GetRequestScope(this, param, session);
-
-            preparedCommand.Create(request, session, Statement, param);
-
-            obj = RunQueryForObject<T>(request, session, param, resultObject);
-
-            return RaisePostEvent<T, PostSelectEventArgs>(PostSelectEvent, param, obj);
-        }
-
-
-        /// <summary>
-        /// Executes an SQL statement that returns a single row as an Object of the type of
-        /// the resultObject passed in as a parameter.
-        /// </summary>
-        /// <param name="request">The request scope.</param>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <param name="resultObject">The result object.</param>
-        /// <returns>The object</returns>
-        internal T RunQueryForObject<T>(RequestScope request, ISession session, object parameterObject, T resultObject)
-        {
-            T result = resultObject;
-
-            using (IDbCommand command = request.IDbCommand)
-            {
-                IDataReader reader = command.ExecuteReader();
-                try
-                {
-                    while (reader.Read())
-                    {
-                        object obj = resultStrategy.Process(request, ref reader, resultObject);
-                        if (obj != BaseStrategy.SKIP)
-                        {
-                            result = (T)obj;
-                        }
-                    }
-                }
-                finally
-                {
-                    reader.Close();
-                    reader.Dispose();
-                }
-
-                ExecuteDelayedLoad(request);
-
-                #region remark
-                // If you are using the OleDb data provider, you need to close the
-                // DataReader before output parameters are visible.
-                #endregion
-
-                RetrieveOutputParameters(request, session, command, parameterObject);
-            }
-
-            RaiseExecuteEvent();
-
-            return result;
-        }
-
-        #endregion
-
-        #region ExecuteQueryForList
-
-        
-        /// <summary>
-        /// Runs a query with a custom object that gets a chance 
-        /// to deal with each row as it is processed.
-        /// </summary>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <param name="rowDelegate"></param>
-        public virtual IList ExecuteQueryForRowDelegate(ISession session, object parameterObject, RowDelegate rowDelegate)
-        {
-            object param = RaisePreEvent<PreSelectEventArgs>(PreSelectEvent, parameterObject);
-
-            RequestScope request = statement.Sql.GetRequestScope(this, param, session);
-
-            preparedCommand.Create(request, session, Statement, param);
-
-            if (rowDelegate == null)
-            {
-                throw new DataMapperException("A null RowDelegate was passed to QueryForRowDelegate.");
-            }
-
-            IList list = RunQueryForList(request, session, param, null, rowDelegate);
-
-            return RaisePostEvent<IList, PostSelectEventArgs>(PostSelectEvent, param, list);
-        }
-
-        /// <summary>
-        /// Runs a query with a custom object that gets a chance 
-        /// to deal with each row as it is processed.
-        /// </summary>
-        /// <param name="session">The session used to execute the statement</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL. </param>
-        /// <param name="keyProperty">The property of the result object to be used as the key. </param>
-        /// <param name="valueProperty">The property of the result object to be used as the value (or null)</param>
-        /// <param name="rowDelegate"></param>
-        /// <returns>A hashtable of object containing the rows keyed by keyProperty.</returns>
-        ///<exception cref="DataMapperException">If a transaction is not in progress, or the database throws an exception.</exception>
-        public virtual IDictionary ExecuteQueryForMapWithRowDelegate(ISession session, object parameterObject, string keyProperty, string valueProperty, DictionaryRowDelegate rowDelegate)
-        {
-            RequestScope request = statement.Sql.GetRequestScope(this, parameterObject, session);
-
-            if (rowDelegate == null)
-            {
-                throw new DataMapperException("A null DictionaryRowDelegate was passed to QueryForMapWithRowDelegate.");
-            }
-
-            preparedCommand.Create(request, session, Statement, parameterObject);
-
-            return RunQueryForMap(request, session, parameterObject, keyProperty, valueProperty, rowDelegate);
-        }
-
-
-        /// <summary>
-        /// Executes the SQL and retuns all rows selected. 
-        /// </summary>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <returns>A List of result objects.</returns>
-        public virtual IList ExecuteQueryForList(ISession session, object parameterObject)
-        {
-            object param = RaisePreEvent<PreSelectEventArgs>(PreSelectEvent, parameterObject);
-
-            RequestScope request = statement.Sql.GetRequestScope(this, param, session);
-
-            preparedCommand.Create(request, session, Statement, param);
-
-            IList list = RunQueryForList(request, session, param);
-
-            return RaisePostEvent<IList, PostSelectEventArgs>(PostSelectEvent, param, list);
-        }
-
-        /// <summary>
-        /// Executes the SQL and and fill a strongly typed collection.
-        /// </summary>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <param name="resultObject">A strongly typed collection of result objects.</param>
-        public virtual void ExecuteQueryForList(ISession session, object parameterObject, IList resultObject)
-        {
-            object param = RaisePreEvent<PreSelectEventArgs>(PreSelectEvent, parameterObject);
-
-            RequestScope request = statement.Sql.GetRequestScope(this, param, session);
-
-            preparedCommand.Create(request, session, Statement, param);
-
-            RunQueryForList(request, session, param, resultObject, null);
-
-            RaisePostEvent<IList, PostSelectEventArgs>(PostSelectEvent, param, resultObject);
-        }
-
-        /// <summary>
-        /// Runs the query for list.
-        /// </summary>
-        /// <param name="request">The request.</param>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <returns>A List of result objects.</returns>
-        internal IList RunQueryForList(RequestScope request, ISession session, object parameterObject)
-        {
-            IList list = null;
-            
-            using (IDbCommand command = request.IDbCommand)
-            {
-                if (statement.ListClass == null)
-                {
-                    list = new ArrayList();
-                }
-                else
-                {
-                    list = statement.CreateInstanceOfListClass();
-                }
-
-                IDataReader reader = command.ExecuteReader();
-
-                try
-                {
-                     do
-                     {
-                         IList currentList = null;
-                         if (request.Statement.ResultsMap.Count == 1)
-                         {
-                             currentList = list;
-                         }
-                         else
-                         {
-                             if (request.CurrentResultMap != null)
-                             {
-                                 Type genericListType = typeof(List<>).MakeGenericType(new Type[] { request.CurrentResultMap.Class });
-                                 currentList = (IList)Activator.CreateInstance(genericListType);
-                             }
-                             else
-                             {
-                                 currentList = new ArrayList();
-                             }
-                             list.Add(currentList);
-
-                         }
-                         // Get Results
-                         while (reader.Read())
-                         {
-                             object obj = resultStrategy.Process(request, ref reader, null);
-                             if (obj != BaseStrategy.SKIP)
-                             {
-                                 currentList.Add(obj);
-                             }
-                         }
-                     }
-                     while (reader.NextResult());
-                }
-                finally
-                {
-                    reader.Close();
-                    reader.Dispose();
-                }
-
-                ExecuteDelayedLoad(request);
-
-                RetrieveOutputParameters(request, session, command, parameterObject);
-            }
-
-            return list;
-        }
-
-        /// <summary>
-        /// Executes the SQL and retuns a List of result objects.
-        /// </summary>
-        /// <param name="request">The request scope.</param>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <param name="resultObject">A strongly typed collection of result objects.</param>
-        /// <param name="rowDelegate"></param>
-        /// <returns>A List of result objects.</returns>
-        internal IList RunQueryForList(RequestScope request, ISession session, object parameterObject, IList resultObject, RowDelegate rowDelegate)
-        {
-            IList list = resultObject;
-
-            using (IDbCommand command = request.IDbCommand)
-            {
-                if (resultObject==null)
-                {
-                    if (statement.ListClass == null)
-                    {
-                        list = new ArrayList();
-                    }
-                    else
-                    {
-                        list = statement.CreateInstanceOfListClass();
-                    }
-                }
-
-                IDataReader reader = command.ExecuteReader();
-
-                try
-                { 
-                    do
-                    {
-                        if (rowDelegate == null)
-                        {
-                            //***
-                            IList currentList = null;
-                            if (request.Statement.ResultsMap.Count == 1)
-                            {
-                                currentList = list;
-                            }
-                            else
-                            {
-                                if (request.CurrentResultMap != null)
-                                {
-                                    Type genericListType = typeof(List<>).MakeGenericType(new Type[] { request.CurrentResultMap.Class });
-                                    currentList = (IList)Activator.CreateInstance(genericListType);
-                                }
-                                else
-                                {
-                                    currentList = new ArrayList();
-                                }
-                                list.Add(currentList);
-
-                            }
-                            //***
-                            while (reader.Read())
-                            {
-                                object obj = resultStrategy.Process(request, ref reader, null);
-                                if (obj != BaseStrategy.SKIP)
-                                {
-                                    //list.Add(obj);
-                                    currentList.Add(obj);
-                                }
-                            }
-                        }
-                        else
-                        {
-                            while (reader.Read())
-                            {
-                                object obj = resultStrategy.Process(request, ref reader, null);
-                                rowDelegate(obj, parameterObject, list);
-                            }
-                        }
-                    }
-                    while (reader.NextResult());
-                }
-                finally
-                {
-                    reader.Close();
-                    reader.Dispose();
-                }
-
-                ExecuteDelayedLoad(request);
-                RetrieveOutputParameters(request, session, command, parameterObject);
-            }
-
-            return list;
-        }
-
-
-        #endregion
-
-        #region ExecuteQueryForList .NET 2.0
-
-        /// <summary>
-        /// Runs a query with a custom object that gets a chance 
-        /// to deal with each row as it is processed.
-        /// </summary>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <param name="rowDelegate"></param>
-        public virtual IList<T> ExecuteQueryForRowDelegate<T>(ISession session, object parameterObject, RowDelegate<T> rowDelegate)
-        {
-            object param = RaisePreEvent<PreSelectEventArgs>(PreSelectEvent, parameterObject);
-
-            RequestScope request = statement.Sql.GetRequestScope(this, param, session);
-
-            preparedCommand.Create(request, session, Statement, param);
-
-            if (rowDelegate == null)
-            {
-                throw new DataMapperException("A null RowDelegate was passed to QueryForRowDelegate.");
-            }
-            IList<T> list = RunQueryForList<T>(request, session, param, null, rowDelegate);
-
-            return RaisePostEvent<IList<T>, PostSelectEventArgs>(PostSelectEvent, param, list);
-        }
-
-
-        /// <summary>
-        /// Executes the SQL and retuns all rows selected. 
-        /// </summary>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <returns>A List of result objects.</returns>
-        public virtual IList<T> ExecuteQueryForList<T>(ISession session, object parameterObject)
-        {
-            object param = RaisePreEvent<PreSelectEventArgs>(PreSelectEvent, parameterObject);
-
-            RequestScope request = statement.Sql.GetRequestScope(this, param, session);
-
-            preparedCommand.Create(request, session, Statement, param);
-
-            IList<T> list = RunQueryForList<T>(request, session, param, null, null);
-
-            return RaisePostEvent<IList<T>, PostSelectEventArgs>(PostSelectEvent, param, list);
-        }
-
-        /// <summary>
-        /// Executes the SQL and and fill a strongly typed collection.
-        /// </summary>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <param name="resultObject">A strongly typed collection of result objects.</param>
-        public virtual void ExecuteQueryForList<T>(ISession session, object parameterObject, IList<T> resultObject)
-        {
-            object param = RaisePreEvent<PreSelectEventArgs>(PreSelectEvent, parameterObject);
-
-            RequestScope request = statement.Sql.GetRequestScope(this, param, session);
-
-            preparedCommand.Create(request, session, Statement, param);
-
-            RunQueryForList<T>(request, session, param, resultObject, null);
-
-            RaisePostEvent<IList<T>, PostSelectEventArgs>(PostSelectEvent, param, resultObject);
-        }
-
-        /// <summary>
-        /// Executes the SQL and retuns a List of result objects.
-        /// </summary>
-        /// <param name="request">The request scope.</param>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <returns>A List of result objects.</returns>
-        internal IList<T> RunQueryForList<T>(RequestScope request, ISession session, object parameterObject)
-        {
-            IList<T> list = null;
-
-            using (IDbCommand command = request.IDbCommand)
-            {
-                if (statement.ListClass == null)
-                {
-                    list = new List<T>();
-                }
-                else
-                {
-                    list = statement.CreateInstanceOfGenericListClass<T>();
-                }
-
-                IDataReader reader = command.ExecuteReader();
-                try
-                {
-                    do
-                    {
-                        while (reader.Read())
-                        {
-                            object obj = resultStrategy.Process(request, ref reader, null);
-                            if (obj != BaseStrategy.SKIP)
-                            {
-                                list.Add((T) obj);
-                            }
-                        }
-                    }
-                    while (reader.NextResult());
-                }
-                finally
-                {
-                    reader.Close();
-                    reader.Dispose();
-                }
-
-                ExecuteDelayedLoad(request);
-
-                RetrieveOutputParameters(request, session, command, parameterObject);
-            }
-
-            return list;
-        }
-
-        /// <summary>
-        /// Executes the SQL and retuns a List of result objects.
-        /// </summary>
-        /// <param name="request">The request scope.</param>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <param name="resultObject">The result object</param>
-        /// <param name="rowDelegate"></param>
-        /// <returns>A List of result objects.</returns>
-        internal IList<T> RunQueryForList<T>(RequestScope request, ISession session, 
-                                             object parameterObject, IList<T> resultObject, RowDelegate<T> rowDelegate)
-        {
-            IList<T> list = resultObject;
-
-            using (IDbCommand command = request.IDbCommand)
-            {
-                if (resultObject == null)
-                {
-                    if (statement.ListClass == null)
-                    {
-                        list = new List<T>();
-                    }
-                    else
-                    {
-                        list = statement.CreateInstanceOfGenericListClass<T>();
-                    }
-                }
-
-                IDataReader reader = command.ExecuteReader();
-                try
-                {
-                    do
-                    {
-                        if (rowDelegate == null)
-                        {
-                            while (reader.Read())
-                            {
-                                object obj = resultStrategy.Process(request, ref reader, null);
-                                if (obj != BaseStrategy.SKIP)
-                                {
-                                    list.Add((T)obj);
-                                }
-                            }
-                        }
-                        else
-                        {
-                            while (reader.Read())
-                            {
-                                T obj = (T)resultStrategy.Process(request, ref reader, null);
-                                rowDelegate(obj, parameterObject, list);
-                            }
-                        }
-                    }
-                    while (reader.NextResult());
-                }
-                finally
-                {
-                    reader.Close();
-                    reader.Dispose();
-                }
-
-                ExecuteDelayedLoad(request);
-                RetrieveOutputParameters(request, session, command, parameterObject);
-            }
-
-            return list;
-        }
-
-        #endregion
-
-        #region ExecuteUpdate, ExecuteInsert
-
-        /// <summary>
-        /// Execute an update statement. Also used for delete statement.
-        /// Return the number of row effected.
-        /// </summary>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <returns>The number of row effected.</returns>
-        public virtual int ExecuteUpdate(ISession session, object parameterObject)
-        {
-            int rows = 0; // the number of rows affected
-
-            object param = RaisePreEvent<PreUpdateOrDeleteEventArgs>(PreUpdateOrDeleteEvent, parameterObject);
-
-            RequestScope request = statement.Sql.GetRequestScope(this, param, session);
-
-            preparedCommand.Create(request, session, Statement, param);
-
-            using (IDbCommand command = request.IDbCommand)
-            {
-                rows = command.ExecuteNonQuery();
-
-                RetrieveOutputParameters(request, session, command, param);
-            }
-
-            RaiseExecuteEvent();
-
-            return RaisePostEvent<int, PostUpdateOrDeleteEventArgs>(PostUpdateOrDeleteEvent, param, rows);
-        }
-
-
-        /// <summary>
-        /// Execute an insert statement. Fill the parameter object with 
-        /// the ouput parameters if any, also could return the insert generated key
-        /// </summary>
-        /// <param name="session">The session</param>
-        /// <param name="parameterObject">The parameter object used to fill the statement.</param>
-        /// <returns>Can return the insert generated key.</returns>
-        public virtual object ExecuteInsert(ISession session, object parameterObject)
-        {
-            object generatedKey = null;
-            SelectKey selectKeyStatement = null;
-
-            object param = RaisePreEvent<PreInsertEventArgs>(PreInsertEvent, parameterObject);
-
-            RequestScope request = statement.Sql.GetRequestScope(this, param, session);
-
-            if (statement is Insert)
-            {
-                selectKeyStatement = ((Insert)statement).SelectKey;
-            }
-
-            if (selectKeyStatement != null && !selectKeyStatement.isAfter)
-            {
-                IMappedStatement mappedStatement = modelStore.GetMappedStatement(selectKeyStatement.Id);
-                generatedKey = mappedStatement.ExecuteQueryForObject(session, param, null);
-
-                ObjectProbe.SetMemberValue(param, selectKeyStatement.PropertyName, generatedKey,
-                    request.DataExchangeFactory.ObjectFactory,
-                    request.DataExchangeFactory.AccessorFactory);
-            }
-
-            preparedCommand.Create(request, session, Statement, param);
-
-            using (IDbCommand command = request.IDbCommand)
-            {
-                if (statement is Insert)
-                {
-                    command.ExecuteNonQuery();
-                }
-                // Retrieve output parameter if the result class is specified
-                else if (statement is Procedure && (statement.ResultClass != null) &&
-                        modelStore.DataExchangeFactory.TypeHandlerFactory.IsSimpleType(statement.ResultClass))
-                {
-                    IDataParameter returnValueParameter = command.CreateParameter();
-                    returnValueParameter.Direction = ParameterDirection.ReturnValue;
-                    command.Parameters.Add(returnValueParameter);
-
-                    command.ExecuteNonQuery();
-                    generatedKey = returnValueParameter.Value;
-
-                    ITypeHandler typeHandler = modelStore.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(statement.ResultClass);
-                    generatedKey = typeHandler.GetDataBaseValue(generatedKey, statement.ResultClass);
-                }
-                else
-                {
-                    generatedKey = command.ExecuteScalar();
-                    if ((statement.ResultClass != null) &&
-                        modelStore.DataExchangeFactory.TypeHandlerFactory.IsSimpleType(statement.ResultClass))
-                    {
-                        ITypeHandler typeHandler = modelStore.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(statement.ResultClass);
-                        generatedKey = typeHandler.GetDataBaseValue(generatedKey, statement.ResultClass);
-                    }
-                }
-
-                if (selectKeyStatement != null && selectKeyStatement.isAfter)
-                {
-                    IMappedStatement mappedStatement = modelStore.GetMappedStatement(selectKeyStatement.Id);
-                    generatedKey = mappedStatement.ExecuteQueryForObject(session, param, null);
-
-                    ObjectProbe.SetMemberValue(param, selectKeyStatement.PropertyName, generatedKey,
-                        request.DataExchangeFactory.ObjectFactory,
-                        request.DataExchangeFactory.AccessorFactory);
-                }
-
-                RetrieveOutputParameters(request, session, command, param);
-            }
-
-            RaiseExecuteEvent();
-
-            return RaisePostEvent<object, PostInsertEventArgs>(PostInsertEvent, param, generatedKey);
-        }
-
-        #endregion
-
-        #region ExecuteQueryForMap
-
-        /// <summary>
-        /// Executes the SQL and retuns all rows selected in a map that is keyed on the property named
-        /// in the keyProperty parameter.  The value at each key will be the value of the property specified
-        /// in the valueProperty parameter.  If valueProperty is null, the entire result object will be entered.
-        /// </summary>
-        /// <param name="session">The session used to execute the statement</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL. </param>
-        /// <param name="keyProperty">The property of the result object to be used as the key. </param>
-        /// <param name="valueProperty">The property of the result object to be used as the value (or null)</param>
-        /// <returns>A hashtable of object containing the rows keyed by keyProperty.</returns>
-        ///<exception cref="DataMapperException">If a transaction is not in progress, or the database throws an exception.</exception>
-        public virtual IDictionary ExecuteQueryForMap(ISession session, object parameterObject, string keyProperty, string valueProperty)
-        {
-            RequestScope request = statement.Sql.GetRequestScope(this, parameterObject, session);
-
-            preparedCommand.Create(request, session, Statement, parameterObject);
-
-            return RunQueryForMap(request, session, parameterObject, keyProperty, valueProperty, null);
-        }
-
-       
-        /// <summary>
-        /// Executes the SQL and retuns all rows selected in a map that is keyed on the property named
-        /// in the keyProperty parameter.  The value at each key will be the value of the property specified
-        /// in the valueProperty parameter.  If valueProperty is null, the entire result object will be entered.
-        /// </summary>
-        /// <param name="request">The request scope.</param>
-        /// <param name="session">The session used to execute the statement</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <param name="keyProperty">The property of the result object to be used as the key.</param>
-        /// <param name="valueProperty">The property of the result object to be used as the value (or null)</param>
-        /// <param name="rowDelegate">A delegate called once per row in the QueryForMapWithRowDelegate method</param>
-        /// <returns>A hashtable of object containing the rows keyed by keyProperty.</returns>
-        ///<exception cref="DataMapperException">If a transaction is not in progress, or the database throws an exception.</exception>
-        internal IDictionary RunQueryForMap(RequestScope request,
-            ISession session,
-            object parameterObject,
-            string keyProperty,
-            string valueProperty,
-            DictionaryRowDelegate rowDelegate)
-        {
-            IDictionary map = new Hashtable();
-
-            using (IDbCommand command = request.IDbCommand)
-            {
-               IDataReader reader = command.ExecuteReader();
-               try
-                {
-                    
-                   if (rowDelegate == null)
-                    {
-                        while (reader.Read())
-                        {
-                            object obj = resultStrategy.Process(request, ref reader, null);
-                            object key = ObjectProbe.GetMemberValue(obj, keyProperty, request.DataExchangeFactory.AccessorFactory);
-                            object value = obj;
-                            if (valueProperty != null)
-                            {
-                                value = ObjectProbe.GetMemberValue(obj, valueProperty, request.DataExchangeFactory.AccessorFactory);
-                            }
-                            map.Add(key, value);
-                        }
-                    }
-                    else
-                    {
-                        while (reader.Read())
-                        {
-                            object obj = resultStrategy.Process(request, ref reader, null);
-                            object key = ObjectProbe.GetMemberValue(obj, keyProperty, request.DataExchangeFactory.AccessorFactory);
-                            object value = obj;
-                            if (valueProperty != null)
-                            {
-                                value = ObjectProbe.GetMemberValue(obj, valueProperty, request.DataExchangeFactory.AccessorFactory);
-                            }
-                            rowDelegate(key, value, parameterObject, map);
-
-                        }
-                    }
-                }
-                finally
-                {
-                    reader.Close();
-                    reader.Dispose();
-                }
-                ExecuteDelayedLoad(request);
-            }
-            return map;
-
-        }
-
-        /// <summary>
-        /// Executes the SQL and retuns all rows selected in a map that is keyed on the property named
-        /// in the keyProperty parameter.  The value at each key will be the value of the property specified
-        /// in the valueProperty parameter.  If valueProperty is null, the entire result object will be entered.
-        /// </summary>
-        /// <param name="session">The session used to execute the statement</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL. </param>
-        /// <param name="keyProperty">The property of the result object to be used as the key. </param>
-        /// <param name="valueProperty">The property of the result object to be used as the value (or null)</param>
-        /// <returns>A IDictionary of object containing the rows keyed by keyProperty.</returns>
-        ///<exception cref="Apache.Ibatis.DataMapper.Exceptions.DataMapperException">If a transaction is not in progress, or the database throws an exception.</exception>
-        public virtual IDictionary<K, V> ExecuteQueryForDictionary<K, V>(ISession session, object parameterObject, string keyProperty, string valueProperty)
-        {
-            RequestScope request = statement.Sql.GetRequestScope(this, parameterObject, session);
-
-            preparedCommand.Create(request, session, Statement, parameterObject);
-
-            return RunQueryForDictionary<K, V>(request, session, parameterObject, keyProperty, valueProperty, null);
-
-        }
-
-        /// <summary>
-        /// Runs a query with a custom object that gets a chance 
-        /// to deal with each row as it is processed.
-        /// </summary>
-        /// <param name="session">The session used to execute the statement</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL. </param>
-        /// <param name="keyProperty">The property of the result object to be used as the key. </param>
-        /// <param name="valueProperty">The property of the result object to be used as the value (or null)</param>
-        /// <param name="rowDelegate">A delegate called once per row in the QueryForDictionary method</param>
-        /// <returns>A hashtable of object containing the rows keyed by keyProperty.</returns>
-        ///<exception cref="DataMapperException">If a transaction is not in progress, or the database throws an exception.</exception>
-        public virtual IDictionary<K, V> ExecuteQueryForDictionary<K, V>(ISession session, object parameterObject, string keyProperty, string valueProperty, DictionaryRowDelegate<K, V> rowDelegate)
-        {
-            RequestScope request = statement.Sql.GetRequestScope(this, parameterObject, session);
-
-            if (rowDelegate == null)
-            {
-                throw new DataMapperException("A null DictionaryRowDelegate was passed to QueryForDictionary.");
-            }
-
-            preparedCommand.Create(request, session, Statement, parameterObject);
-
-            return RunQueryForDictionary<K, V>(request, session, parameterObject, keyProperty, valueProperty, rowDelegate);
-        }
-
-        /// <summary>
-        /// Executes the SQL and retuns all rows selected in a map that is keyed on the property named
-        /// in the keyProperty parameter.  The value at each key will be the value of the property specified
-        /// in the valueProperty parameter.  If valueProperty is null, the entire result object will be entered.
-        /// </summary>
-        /// <param name="request">The request scope.</param>
-        /// <param name="session">The session used to execute the statement</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <param name="keyProperty">The property of the result object to be used as the key.</param>
-        /// <param name="valueProperty">The property of the result object to be used as the value (or null)</param>
-        /// <param name="rowDelegate">A delegate called once per row in the QueryForMapWithRowDelegate method</param>
-        /// <returns>A IDictionary of object containing the rows keyed by keyProperty.</returns>
-        ///<exception cref="DataMapperException">If a transaction is not in progress, or the database throws an exception.</exception>
-        internal IDictionary<K, V> RunQueryForDictionary<K, V>(RequestScope request,
-            ISession session,
-            object parameterObject,
-            string keyProperty,
-            string valueProperty,
-            DictionaryRowDelegate<K, V> rowDelegate)
-        {
-            IDictionary<K, V> map = new Dictionary<K, V>();
-
-            using (IDbCommand command = request.IDbCommand)
-            {
-                IDataReader reader = command.ExecuteReader();
-                try
-                {
-
-                    if (rowDelegate == null)
-                    {
-                        while (reader.Read())
-                        {
-                            object obj = resultStrategy.Process(request, ref reader, null);
-                            K key = (K)ObjectProbe.GetMemberValue(obj, keyProperty, request.DataExchangeFactory.AccessorFactory);
-                            V value = default(V);
-                            if (valueProperty != null)
-                            {
-                                value = (V)ObjectProbe.GetMemberValue(obj, valueProperty, request.DataExchangeFactory.AccessorFactory);
-                            }
-                            else
-                            {
-                                value = (V)obj;
-                            }
-                            map.Add(key, value);
-                        }
-                    }
-                    else
-                    {
-                        while (reader.Read())
-                        {
-                            object obj = resultStrategy.Process(request, ref reader, null);
-                            K key = (K)ObjectProbe.GetMemberValue(obj, keyProperty, request.DataExchangeFactory.AccessorFactory);
-                            V value = default(V);
-                            if (valueProperty != null)
-                            {
-                                value = (V)ObjectProbe.GetMemberValue(obj, valueProperty, request.DataExchangeFactory.AccessorFactory);
-                            }
-                            else
-                            {
-                                value = (V)obj;
-                            }
-                            rowDelegate(key, value, parameterObject, map);
-                        }
-                    }
-                }
-                finally
-                {
-                    reader.Close();
-                    reader.Dispose();
-                }
-                ExecuteDelayedLoad(request);
-            }
-            return map;
-
-        }
-        
-        #endregion
-
-        #region ExecuteQueryForDataTable
-        /// <summary>
-        /// Executes an SQL statement that returns DataTable.
-        /// </summary>
-        /// <param name="session">The session used to execute the statement.</param>
-        /// <param name="parameterObject">The object used to set the parameters in the SQL.</param>
-        /// <returns>The object</returns>
-        public virtual DataTable ExecuteQueryForDataTable(ISession session, object parameterObject)
-        {
-            DataTable dataTable = null;
-
-            object param = RaisePreEvent<PreSelectEventArgs>(PreSelectEvent, parameterObject);
-
-            RequestScope request = statement.Sql.GetRequestScope(this, param, session);
-            preparedCommand.Create(request, session, Statement, param);
-
-            dataTable = RunQueryForForDataTable(request, session, param);
-
-            return RaisePostEvent<DataTable, PostSelectEventArgs>(PostSelectEvent, param, dataTable);
-        }
-
-        /// <summary>
-        /// Runs the query for for data table.
-        /// </summary>
-        /// <param name="request">The request.</param>
-        /// <param name="session">The session.</param>
-        /// <param name="parameterObject">The parameter object.</param>
-        /// <returns></returns>
-        internal DataTable RunQueryForForDataTable(RequestScope request, ISession session, object parameterObject)
-        {
-            DataTable dataTable = new DataTable("DataTable");
-
-            using (IDbCommand command = request.IDbCommand)
-            {
-                IDataReader reader = command.ExecuteReader();
-
-                try
-                {
-                    // Get Results
-                    while (reader.Read())
-                    {
-                        DataRow dataRow = dataTable.NewRow();
-                        dataTable.Rows.Add(dataRow);
-                        resultStrategy.Process(request, ref reader, dataRow);
-                    }
-                }
-                finally
-                {
-                    reader.Close();
-                    reader.Dispose();
-                }
-
-                // do we need ??
-                //ExecuteDelayedLoad(request);
-
-                // do we need ??
-                //RetrieveOutputParameters(request, session, command, parameterObject);
-            }
-
-            return dataTable;
-        } 
-        #endregion
-
-        #endregion
-
        /// <summary>
         /// Retrieve the output parameter and map them on the result object.
         /// This routine is only use is you specified a ParameterMap and some output attribute
@@ -1209,9 +213,22 @@
         {
             ExecuteEventArgs e = new ExecuteEventArgs();
             e.StatementName = statement.Id;
-            Execute(this, e);
+            Executed(this, e);
         }
 
+        public virtual T Execute<T, TPreStatementEventArgs, TPostStatementEventArgs>(object preEvent, object postEvent, ISession session, object parameterObject, Func<RequestScope, object, T> requestRunner)
+            where TPreStatementEventArgs : PreStatementEventArgs, new()
+            where TPostStatementEventArgs : PostStatementEventArgs, new()
+        {
+            object paramPreEvent = RaisePreEvent<TPreStatementEventArgs>(preEvent, parameterObject);
+
+            RequestScope request = statement.Sql.GetRequestScope(this, paramPreEvent, session);
+
+            T result = requestRunner(request, paramPreEvent);
 
+            RaiseExecuteEvent();
+
+            return RaisePostEvent<T, TPostStatementEventArgs>(postEvent, paramPreEvent, result);
+        }
     }
 }

Modified: ibatis/branches/MappedStatementRefactor/Apache.Ibatis.DataMapper/Model/Cache/CacheModel.cs
URL: http://svn.apache.org/viewvc/ibatis/branches/MappedStatementRefactor/Apache.Ibatis.DataMapper/Model/Cache/CacheModel.cs?rev=788267&r1=788266&r2=788267&view=diff
==============================================================================
--- ibatis/branches/MappedStatementRefactor/Apache.Ibatis.DataMapper/Model/Cache/CacheModel.cs (original)
+++ ibatis/branches/MappedStatementRefactor/Apache.Ibatis.DataMapper/Model/Cache/CacheModel.cs Thu Jun 25 05:41:43 2009
@@ -155,7 +155,7 @@
 		/// <param name="mappedStatement">A MappedStatement on which we listen ExecuteEventArgs event.</param>
 		public void RegisterTriggerStatement(IMappedStatement mappedStatement)
 		{
-			mappedStatement.Execute +=FlushHandler;
+			mappedStatement.Executed +=FlushHandler;
 		}