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/16 20:09:25 UTC
svn commit: r422486 - in
/ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities:
Objects/ObjectProbe.cs Objects/ReflectionInfo.cs
TypesResolver/TypeRegistry.cs
Author: rgrabowski
Date: Sun Jul 16 11:09:24 2006
New Revision: 422486
URL: http://svn.apache.org/viewvc?rev=422486&view=rev
Log:
Added "datatable" alias to TypeRegistry. Started to add special cases (similiar to IDictionary special cases) for accessing DataRow items.
Modified:
ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities/Objects/ObjectProbe.cs
ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities/Objects/ReflectionInfo.cs
ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities/TypesResolver/TypeRegistry.cs
Modified: ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities/Objects/ObjectProbe.cs
URL: http://svn.apache.org/viewvc/ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities/Objects/ObjectProbe.cs?rev=422486&r1=422485&r2=422486&view=diff
==============================================================================
--- ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities/Objects/ObjectProbe.cs (original)
+++ ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities/Objects/ObjectProbe.cs Sun Jul 16 11:09:24 2006
@@ -26,6 +26,7 @@
using System;
using System.Collections;
+using System.Data;
using System.Reflection;
using IBatisNet.Common.Exceptions;
@@ -117,7 +118,20 @@
{
type = value.GetType();
}
- }
+ }
+ else if (obj is DataRow)
+ {
+ DataRow dataRow = (DataRow) obj;
+ object value = dataRow[memberName];
+ if (value == null)
+ {
+ type = typeof(object);
+ }
+ else
+ {
+ type = value.GetType();
+ }
+ }
else
{
if (memberName.IndexOf('.') > -1)
@@ -194,6 +208,19 @@
type = value.GetType();
}
}
+ else if (obj is DataRow)
+ {
+ DataRow dataRow = (DataRow) obj;
+ object value = dataRow[memberName];
+ if (value == null)
+ {
+ type = typeof(object);
+ }
+ else
+ {
+ type = value.GetType();
+ }
+ }
else
{
if (memberName.IndexOf('.') > -1)
@@ -436,19 +463,23 @@
{
value = ((IDictionary) obj)[memberName];
}
+ else if (obj is DataRow)
+ {
+ value = ((DataRow) obj)[memberName];
+ }
else
{
Type targetType = obj.GetType();
- IGetAccessorFactory getAccessorFactory = accessorFactory.GetAccessorFactory;
- IGetAccessor getAccessor = getAccessorFactory.CreateGetAccessor(targetType, memberName);
+ IGetAccessorFactory getAccessorFactory = accessorFactory.GetAccessorFactory;
+ IGetAccessor getAccessor = getAccessorFactory.CreateGetAccessor(targetType, memberName);
- if (getAccessor == null)
+ if (getAccessor == null)
{
throw new ProbeException("No Get method for member " + memberName + " on instance of " + obj.GetType().Name);
}
try
{
- value = getAccessor.Get(obj);
+ value = getAccessor.Get(obj);
}
catch (Exception ae)
{
@@ -541,19 +572,23 @@
{
((IDictionary) obj)[memberName] = memberValue;
}
+ else if (obj is DataRow)
+ {
+ ((DataRow) obj)[memberName] = memberValue;
+ }
else
{
Type targetType = obj.GetType();
- ISetAccessorFactory setAccessorFactory = accessorFactory.SetAccessorFactory;
- ISetAccessor setAccessor = setAccessorFactory.CreateSetAccessor(targetType, memberName);
+ ISetAccessorFactory setAccessorFactory = accessorFactory.SetAccessorFactory;
+ ISetAccessor setAccessor = setAccessorFactory.CreateSetAccessor(targetType, memberName);
- if (setAccessor == null)
+ if (setAccessor == null)
{
throw new ProbeException("No Set method for member " + memberName + " on instance of " + obj.GetType().Name);
}
try
{
- setAccessorFactory.CreateSetAccessor(targetType, memberName).Set(obj, memberValue);
+ setAccessorFactory.CreateSetAccessor(targetType, memberName).Set(obj, memberValue);
}
catch (Exception ex)
{
@@ -585,7 +620,11 @@
if (obj is IDictionary)
{
hasProperty = ((IDictionary) obj).Contains(propertyName);
- }
+ }
+ else if (obj is DataRow)
+ {
+ hasProperty = ((DataRow) obj).Table.Columns.Contains(propertyName);
+ }
else
{
if (propertyName.IndexOf('.') > -1)
@@ -626,6 +665,10 @@
{
hasProperty = ((IDictionary) obj).Contains(propertyName);
}
+ else if (obj is DataRow)
+ {
+ hasProperty = ((DataRow) obj).Table.Columns.Contains(propertyName);
+ }
else
{
if (propertyName.IndexOf('.') > -1)
@@ -669,6 +712,10 @@
{
return true;
}
+ else if (typeof(DataRow).IsAssignableFrom(type))
+ {
+ return true;
+ }
else if (typeof(IList).IsAssignableFrom(type))
{
return true;
Modified: ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities/Objects/ReflectionInfo.cs
URL: http://svn.apache.org/viewvc/ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities/Objects/ReflectionInfo.cs?rev=422486&r1=422485&r2=422486&view=diff
==============================================================================
--- ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities/Objects/ReflectionInfo.cs (original)
+++ ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities/Objects/ReflectionInfo.cs Sun Jul 16 11:09:24 2006
@@ -27,6 +27,7 @@
using System;
using System.Collections;
using System.Collections.Specialized;
+using System.Data;
using System.Reflection;
using IBatisNet.Common.Exceptions;
@@ -296,6 +297,10 @@
{
return true;
}
+ else if (typeof(DataRow).IsAssignableFrom(type))
+ {
+ return true;
+ }
else if (typeof(IEnumerator).IsAssignableFrom(type))
{
return true;
Modified: ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities/TypesResolver/TypeRegistry.cs
URL: http://svn.apache.org/viewvc/ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities/TypesResolver/TypeRegistry.cs?rev=422486&r1=422485&r2=422486&view=diff
==============================================================================
--- ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities/TypesResolver/TypeRegistry.cs (original)
+++ ibatis/branches/IBatisNet.Common-QueryForDataTable/Utilities/TypesResolver/TypeRegistry.cs Sun Jul 16 11:09:24 2006
@@ -29,6 +29,7 @@
using System;
using System.Collections;
using System.Collections.Specialized;
+using System.Data;
#endregion
@@ -53,6 +54,8 @@
{
#region Constants
+ public const string DataTableAlias = "datatable";
+
/// <summary>
/// The alias around the 'list' type.
/// </summary>
@@ -337,6 +340,8 @@
static TypeRegistry()
{
// Initialize a dictionary with some fully qualifiaed name
+ _types[DataTableAlias] = typeof (DataTable);
+
_types[ArrayListAlias1] = typeof (ArrayList);
_types[ArrayListAlias2] = typeof (ArrayList);