Author: rgrabowski
Date: Tue Jul 18 17:37:54 2006
New Revision: 423312

URL: http://svn.apache.org/viewvc?rev=423312&view=rev
Log:
Reverted from r422779 to r422475. Revision r422779 bound the DataTable using a 
DataAdapter which populates the DataTable without using IBatisNet's type 
handlers.

Modified:
    
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/MappedStatement.cs
    
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/ResultStrategy/DataTableStrategy.cs
    ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/SqlMapper.cs

Modified: 
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/MappedStatement.cs
URL: 
http://svn.apache.org/viewvc/ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/MappedStatement.cs?rev=423312&r1=423311&r2=423312&view=diff
==============================================================================
--- 
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/MappedStatement.cs
 (original)
+++ 
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/MappedStatement.cs
 Tue Jul 18 17:37:54 2006
@@ -820,13 +820,13 @@
 
                #endregion
 
-               public DataTable ExecuteQueryForDataTable(IDalSession session, 
object parameterObject, DataTable resultObject)
+               public DataTable ExecuteQueryForDataTable(IDalSession session, 
object parameterObject)
                {
                        RequestScope request = 
_statement.Sql.GetRequestScope(this, parameterObject, session);
 
                        _preparedCommand.Create(request, session, 
this.Statement, parameterObject);
 
-                       return RunQueryForDataTable(request, session, 
resultObject);
+                       return RunQueryForDataTable(request, session, 
parameterObject);
                }
 
                #region ExecuteQueryForMap
@@ -916,13 +916,19 @@
 
                }
 
-               public DataTable RunQueryForDataTable(RequestScope request, 
IDalSession session, DataTable resultObject)
+               public DataTable RunQueryForDataTable(RequestScope request, 
IDalSession session, object parameterObject)
                {
                        DataTable dataTable = null;
 
                        using (IDbCommand command = request.IDbCommand)
                        {
-                               dataTable = 
(DataTable)_resultStrategy.Process(request, null, resultObject);
+                               using (IDataReader reader = 
command.ExecuteReader())
+                               {
+                                       while (reader.Read() )
+                                       {
+                                               dataTable = 
(DataTable)_resultStrategy.Process(request, reader, dataTable);
+                                       }
+                               }
                        }
 
                        return dataTable;

Modified: 
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/ResultStrategy/DataTableStrategy.cs
URL: 
http://svn.apache.org/viewvc/ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/ResultStrategy/DataTableStrategy.cs?rev=423312&r1=423311&r2=423312&view=diff
==============================================================================
--- 
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/ResultStrategy/DataTableStrategy.cs
 (original)
+++ 
ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/MappedStatements/ResultStrategy/DataTableStrategy.cs
 Tue Jul 18 17:37:54 2006
@@ -40,22 +40,43 @@
                #region IResultStrategy Members
 
                /// <summary>
-               /// To Do
+               /// Processes the specified <see cref="IDataReader"/> 
+               /// when a 'resultClass' attribute is specified on the 
statement and
+               /// the 'resultClass' attribute is a <see cref="DataTable"/>.
                /// </summary>
                /// <param name="request">The request.</param>
                /// <param name="reader">The reader.</param>
                /// <param name="resultObject">The result object.</param>
                public object Process(RequestScope request, IDataReader reader, 
object resultObject)
                {
-                       DataTable dataTable = resultObject as DataTable; 
+                       object outObject = resultObject; 
 
-                       DataAdapter dataAdapter = 
request.Session.DataSource.DbProvider.CreateDataAdapter() as DataAdapter;
-                       dataAdapter.SelectCommand = request.IDbCommand;
+                       if (outObject == null) 
+                       {
+                               outObject = new DataTable(request.Statement.Id);
 
-                       // The Fill operation then adds the rows to the 
specified destination DataTable object in the DataSet, 
-                       // creating the DataTable object if it does not already 
exist. 
-                       dataAdapter.Fill(dataTable);
-                       return dataTable;
+                               DataTable dataColumn = reader.GetSchemaTable();
+                               for (int i = 0; i < dataColumn.Rows.Count; i++)
+                               {
+                                       ((DataTable) 
outObject).Columns.Add(dataColumn.Rows[i][0].ToString());
+                               }
+                       }
+
+                       DataRow dataRow = ((DataTable) outObject).NewRow();
+                       int count = reader.FieldCount;
+                       for (int i = 0; i < count; i++) 
+                       {
+                               ResultProperty property = new ResultProperty();
+                               property.PropertyName = "value";
+                               property.ColumnIndex = i;
+                               property.TypeHandler = 
request.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(reader.GetFieldType(i));
+                               dataRow[i] = property.GetDataBaseValue(reader);
+                       }   
+                       ((DataTable) outObject).Rows.Add(dataRow);
+     
+                       return outObject;
                }
 
+               #endregion
+       }
 }

Modified: ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/SqlMapper.cs
URL: 
http://svn.apache.org/viewvc/ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/SqlMapper.cs?rev=423312&r1=423311&r2=423312&view=diff
==============================================================================
--- ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/SqlMapper.cs 
(original)
+++ ibatis/branches/IBatisNet.DataMapper-QueryForDataTable/SqlMapper.cs Tue Jul 
18 17:37:54 2006
@@ -613,8 +613,7 @@
 
                #endregion
 
-
-               public DataTable QueryForDataTable(string statementName, object 
parameterObject, DataTable resultObject)
+               public DataTable QueryForDataTable(string statementName, object 
parameterObject)
                {
                        bool isSessionLocal = false;
                        IDalSession session = _sessionHolder.LocalSession;
@@ -630,7 +629,7 @@
                        try 
                        {
                                IMappedStatement statement = 
GetMappedStatement(statementName);
-                               dataTable = 
statement.ExecuteQueryForDataTable(session, parameterObject, resultObject);
+                               dataTable = 
statement.ExecuteQueryForDataTable(session, parameterObject);
                        } 
                        catch
                        {


Reply via email to