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
 			{