You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by gb...@apache.org on 2005/05/14 13:14:50 UTC

svn commit: r170134 - in /incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper: Configuration/DomSqlMapBuilder.cs Configuration/ResultMapping/Discriminator.cs Configuration/ResultMapping/ResultMap.cs Configuration/ResultMapping/ResultProperty.cs MappedStatements/MappedStatement.cs Scope/RequestScope.cs

Author: gbayon
Date: Sat May 14 04:14:49 2005
New Revision: 170134

URL: http://svn.apache.org/viewcvs?rev=170134&view=rev
Log:
- refactor code

Modified:
    incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/DomSqlMapBuilder.cs
    incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/Discriminator.cs
    incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs
    incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultProperty.cs
    incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs
    incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Scope/RequestScope.cs

Modified: incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/DomSqlMapBuilder.cs
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/DomSqlMapBuilder.cs?rev=170134&r1=170133&r2=170134&view=diff
==============================================================================
--- incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/DomSqlMapBuilder.cs (original)
+++ incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/DomSqlMapBuilder.cs Sat May 14 04:14:49 2005
@@ -448,9 +448,9 @@
 					}
 				}
 			}
+			_configScope.ErrorContext.Reset();
 			#endregion 
 
-			_configScope.ErrorContext.Reset();
 
 			#region Resolve "resultMap" attribute on Result Property + initialize Discriminator property 
 
@@ -469,13 +469,14 @@
 				}
 				if (resultMap.Discriminator != null)
 				{
-					resultMap.Discriminator.Initialize(_configScope.SqlMapper);
+					resultMap.Discriminator.Initialize(_configScope);
 				}
 			}
 
+			_configScope.ErrorContext.Reset();
+
 			#endregion
 
-			_configScope.ErrorContext.Reset();
 
 		}
 

Modified: incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/Discriminator.cs
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/Discriminator.cs?rev=170134&r1=170133&r2=170134&view=diff
==============================================================================
--- incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/Discriminator.cs (original)
+++ incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/Discriminator.cs Sat May 14 04:14:49 2005
@@ -31,6 +31,7 @@
 using System.Collections.Specialized;
 using System.Data;
 using System.Xml.Serialization;
+using IBatisNet.DataMapper.Scope;
 
 #endregion
 
@@ -92,14 +93,8 @@
 		[XmlIgnore]
 		public IDiscriminatorFormula Formula
 		{
-			get
-			{
-				return _formula;
-			}	
-			set
-			{
-				_formula = value;
-			}	
+			get { return _formula; }	
+			set { _formula = value; }	
 		}
 		#endregion 
 
@@ -120,8 +115,8 @@
 		/// <summary>
 		/// Initialize the Discriminator
 		/// </summary>
-		/// <param name="sqlMap"></param>
-		public void Initialize(SqlMapper sqlMap)
+		/// <param name="configScope"></param>
+		public void Initialize(ConfigurationScope configScope)
 		{
 			// Set the formula
 			if (_formulaClassName.Length == 0)
@@ -130,7 +125,7 @@
 			}
 			else
 			{
-				Type formulaType = sqlMap.GetType(_formulaClassName);
+				Type formulaType = configScope.SqlMapper.GetType(_formulaClassName);
 				_formula = Activator.CreateInstance(formulaType) as IDiscriminatorFormula;
 			}
 
@@ -138,7 +133,7 @@
 			for(int index=0; index<_subMaps.Count; index++)
 			{
 				SubMap subMap = _subMaps[index] as SubMap;
-				_resultMaps.Add(subMap.DiscriminatorValue, sqlMap.GetResultMap( subMap.ResultMapName ) );
+				_resultMaps.Add(subMap.DiscriminatorValue, configScope.SqlMapper.GetResultMap( subMap.ResultMapName ) );
 			}
 		}
 
@@ -156,7 +151,7 @@
 		/// </summary>
 		/// <param name="dataReader">A IDataReader which contains result values</param>
 		/// <returns>The find ResultMap</returns>
-		public ResultMap GetResultMap(IDataReader dataReader)
+		public ResultMap GetSubMap(IDataReader dataReader)
 		{
 			// Find the resultmap to use
 			// 1/ Find the value to test

Modified: incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs?rev=170134&r1=170133&r2=170134&view=diff
==============================================================================
--- incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs (original)
+++ incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs Sat May 14 04:14:49 2005
@@ -28,6 +28,7 @@
 
 using System;
 using System.Collections;
+using System.Data;
 using System.Reflection;
 using System.Xml;
 using System.Xml.Serialization;
@@ -181,7 +182,6 @@
 		/// </summary>
 		/// <param name="configScope"></param>
 		public void Initialize( ConfigurationScope configScope )
-			//SqlMapper sqlMap, XmlNode node)
 		{
 			try
 			{
@@ -216,6 +216,8 @@
 			{
 				property = (ResultProperty) serializer.Deserialize(new XmlNodeReader(resultNode));
 					
+				configScope.ErrorContext.MoreInfo = "initialize result property :"+property.PropertyName;
+
 				PropertyInfo propertyInfo = null;
 
 				if ( property.PropertyName != "value" && !typeof(IDictionary).IsAssignableFrom(_class) )
@@ -234,6 +236,8 @@
 			XmlNode discriminatorNode = configScope.NodeContext.SelectSingleNode("discriminator");
 			if (discriminatorNode != null)
 			{
+				configScope.ErrorContext.MoreInfo = "initialize discriminator";
+
 				this.Discriminator = (Discriminator) serializer.Deserialize(new XmlNodeReader(discriminatorNode));
 			}
 			#endregion 
@@ -241,8 +245,13 @@
 			#region Load the SubMap Properties
 
 			serializer = new XmlSerializer(typeof(SubMap));
+			if (configScope.NodeContext.SelectNodes("subMap").Count>0 && this.Discriminator==null)
+			{
+				throw new ConfigurationException("The discriminator is null, but somehow a subMap was reached.  This is a bug.");
+			}
 			foreach ( XmlNode resultNode in configScope.NodeContext.SelectNodes("subMap") )
 			{
+				configScope.ErrorContext.MoreInfo = "initialize subMap";
 				subMap = (SubMap) serializer.Deserialize(new XmlNodeReader(resultNode));
 				subMap.ResultMapName = this.SqlMapNameSpace + DomSqlMapBuilder.DOT + subMap.ResultMapName;
 				this.Discriminator.Add( subMap );
@@ -307,6 +316,29 @@
 					target = dataBaseValue;
 				}
 			}
+		}
+
+		/// <summary>
+		/// 
+		/// </summary>
+		/// <param name="dataReader"></param>
+		/// <returns></returns>
+		public ResultMap ResolveSubMap(IDataReader dataReader)
+		{
+			 ResultMap subMap = this;
+			if (this.Discriminator != null)
+			{
+				subMap = this.Discriminator.GetSubMap(dataReader);
+				if (subMap == null) 
+				{
+					subMap = this;
+				} 
+				else if (subMap != this) 
+				{
+					subMap = subMap.ResolveSubMap(dataReader);
+				}
+			}
+			return subMap;
 		}
 		#endregion
 	}

Modified: incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultProperty.cs
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultProperty.cs?rev=170134&r1=170133&r2=170134&view=diff
==============================================================================
--- incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultProperty.cs (original)
+++ incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultProperty.cs Sat May 14 04:14:49 2005
@@ -43,10 +43,14 @@
 	[XmlRoot("result")]
 	public class ResultProperty
 	{
+		#region Const
+
 		/// <summary>
 		/// 
-		/// </summary>
+		/// </summary>		
 		public const int UNKNOWN_COLUMN_INDEX = -999999;
+
+		#endregion 
 
 		#region Fields
 		[NonSerialized]

Modified: incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs?rev=170134&r1=170133&r2=170134&view=diff
==============================================================================
--- incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs (original)
+++ incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs Sat May 14 04:14:49 2005
@@ -378,21 +378,19 @@
 			// If there's an ResultMap, use it
 			if (request.ResultMap != null) 
 			{
-				request.SetResultMap(reader);
-				//ResultMap resultMap = request.ResultMap;
+				ResultMap resultMap = request.GetResultMap(reader);
 
 				if (outObject == null) 
 				{
-					outObject = request.ResultMap.CreateInstanceOfResult();
+					outObject = resultMap.CreateInstanceOfResult();
 				}
 
 				// For each Property in the ResultMap, set the property in the object 
-				foreach(DictionaryEntry entry in request.ResultMap.ColumnsToPropertiesMap)
+				foreach(DictionaryEntry entry in resultMap.ColumnsToPropertiesMap)
 				{
 					ResultProperty property = (ResultProperty)entry.Value;
-					SetObjectProperty(request, request.ResultMap, property, ref outObject, reader);
+					SetObjectProperty(request, resultMap, property, ref outObject, reader);
 				}
-				request.ResetResultmap();
 			} 
 			else // else try to use a ResultClass
 			{

Modified: incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Scope/RequestScope.cs
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Scope/RequestScope.cs?rev=170134&r1=170133&r2=170134&view=diff
==============================================================================
--- incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Scope/RequestScope.cs (original)
+++ incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Scope/RequestScope.cs Sat May 14 04:14:49 2005
@@ -25,13 +25,13 @@
 #endregion
 
 #region Using
-using System;
-using System.Data;
-using System.Collections;
 
+using System.Collections;
+using System.Data;
 using IBatisNet.DataMapper.Configuration.ParameterMapping;
 using IBatisNet.DataMapper.Configuration.ResultMapping;
 using IBatisNet.DataMapper.Configuration.Statements;
+
 #endregion
 
 namespace IBatisNet.DataMapper.Scope
@@ -46,7 +46,6 @@
 		private ErrorContext _errorContext = null;
 		private ParameterMap _parameterMap = null;
 		private ResultMap _resultMap = null;
-		private ResultMap _initialResultMap = null;
 		private PreparedStatement _preparedStatement = null;
 		private Queue _properties = new Queue();
 
@@ -114,30 +113,18 @@
 		#endregion
 
 		#region Method
+
+
 		/// <summary>
 		/// Check if the ResultMap is well set, process case of subMap resultMap.
 		/// </summary>
 		/// <param name="dataReader">The current IDataReader</param>
-		public void SetResultMap(IDataReader dataReader)
+		/// <returns>the resultMap to use</returns>
+		public ResultMap GetResultMap(IDataReader dataReader)
 		{
-			_initialResultMap = _resultMap;
-			if (_resultMap.Discriminator != null)
-			{
-				_resultMap = _resultMap.Discriminator.GetResultMap(dataReader);
-				if (_resultMap==null)
-				{
-					_resultMap = _initialResultMap;
-				}
-			}
+			return _resultMap.ResolveSubMap(dataReader);
 		}
 
-		/// <summary>
-		/// Reset the resultMap to his intila value
-		/// </summary>
-		public void ResetResultmap()
-		{
-			_resultMap = _initialResultMap;
-		}
 		#endregion
 	}
 }