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 2006/07/19 02:37:55 UTC
svn commit: r423312 - in
/ibatis/branches/IBatisNet.DataMapper-QueryForDataTable:
MappedStatements/MappedStatement.cs
MappedStatements/ResultStrategy/DataTableStrategy.cs SqlMapper.cs
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
{