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/03/24 22:28:23 UTC
svn commit: r158949 [1/3] -
incubator/ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataAccess/Configuration
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Statements
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Scope
Author: gbayon
Date: Thu Mar 24 13:28:19 2005
New Revision: 158949
URL: http://svn.apache.org/viewcvs?view=rev&rev=158949
Log:
- Improved error reporting
- Added schema validation on parsing SqlMap.config file
Added:
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/IBatisNet.DataMapper.xml
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Scope/ConfigurationScope.cs
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/SqlMap.xsd
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/SqlMapConfig.xsd
Modified:
incubator/ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Resources.cs
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataAccess/Configuration/DomDaoManagerBuilder.cs
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/IBatisNet.DataMapper.Test.csproj.user
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/DomSqlMapBuilder.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/Configuration/Statements/Procedure.cs
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Statements/Statement.cs
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/IBatisNet.DataMapper.csproj
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Scope/ErrorContext.cs
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Scope/RequestScope.cs
incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/SqlMapper.cs
Modified: incubator/ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Resources.cs
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Resources.cs?view=diff&r1=158948&r2=158949
==============================================================================
--- incubator/ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Resources.cs (original)
+++ incubator/ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/Resources.cs Thu Mar 24 13:28:19 2005
@@ -24,12 +24,13 @@
********************************************************************************/
#endregion
-#region Imports
+#region Using
using System;
using System.Collections.Specialized;
using System.IO;
using System.Xml;
using System.Reflection;
+using System.Resources;
using log4net;
@@ -50,11 +51,14 @@
/// </summary>
public class Resources
{
+ private const string RESOURCE_FILENAME = "iBATIS.DataMapper";
#region Fields
private static string _applicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
private static string _baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
private static CachedTypeResolver _cachedTypeResolver = null;
+ private static ResourceManager _resourceManager= null;
+
private static readonly ILog _logger = LogManager.GetLogger( System.Reflection.MethodBase.GetCurrentMethod().DeclaringType );
#endregion
@@ -81,16 +85,41 @@
return _baseDirectory;
}
}
+
+
#endregion
#region Constructor (s) / Destructor
static Resources()
{
_cachedTypeResolver = new CachedTypeResolver();
+ _resourceManager = new ResourceManager(typeof(Resources).Namespace + RESOURCE_FILENAME, Assembly.GetExecutingAssembly());
}
#endregion
#region Methods
+
+ /// <summary>
+ /// Gets the message with the specified key from the assembly resource file.
+ /// </summary>
+ /// <param name="key">Key of the item to retrieve from the resource file.</param>
+ /// <returns>Value from the resource file identified by the key.</returns>
+ public static string GetMessage(string key)
+ {
+ return _resourceManager.GetString( key, System.Globalization.CultureInfo.CurrentUICulture );
+ }
+ /// <summary>
+ /// Formats a message stored in the assembly resource file.
+ /// </summary>
+ /// <param name="key">The resource key.</param>
+ /// <param name="format">The format arguments.</param>
+ /// <returns>A formatted string.</returns>
+ public static string FormatMessage( string key, params object[] format )
+ {
+ return String.Format( System.Globalization.CultureInfo.CurrentCulture, GetMessage(key), format );
+ }
+
+
/// <summary>
/// Get config file from from the base directory that the assembler
/// used for probe assemblies
Modified: incubator/ibatis/trunk/cs/mapper/IBatisNet.DataAccess/Configuration/DomDaoManagerBuilder.cs
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/cs/mapper/IBatisNet.DataAccess/Configuration/DomDaoManagerBuilder.cs?view=diff&r1=158948&r2=158949
==============================================================================
--- incubator/ibatis/trunk/cs/mapper/IBatisNet.DataAccess/Configuration/DomDaoManagerBuilder.cs (original)
+++ incubator/ibatis/trunk/cs/mapper/IBatisNet.DataAccess/Configuration/DomDaoManagerBuilder.cs Thu Mar 24 13:28:19 2005
@@ -219,7 +219,7 @@
// Build one daoManager for each context
foreach (XmlNode contextNode in section.SelectNodes("context"))
{
- configurationScope.ErrorContext.Activity = "build daoManager : ";
+ configurationScope.ErrorContext.Activity = "build daoManager";
configurationScope.NodeContext = contextNode;
#region Configure a new DaoManager
@@ -403,6 +403,10 @@
configurationScope.NodeContext.Attributes["name"].Value));
}
}
+
+ configurationScope.ErrorContext.ObjectId = string.Empty;
+ configurationScope.ErrorContext.Resource = string.Empty;
+ configurationScope.ErrorContext.MoreInfo = string.Empty;
}
// /// <summary>
Modified: incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/IBatisNet.DataMapper.Test.csproj.user
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/IBatisNet.DataMapper.Test.csproj.user?view=diff&r1=158948&r2=158949
==============================================================================
--- incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/IBatisNet.DataMapper.Test.csproj.user (original)
+++ incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/IBatisNet.DataMapper.Test.csproj.user Thu Mar 24 13:28:19 2005
@@ -1,7 +1,7 @@
<VisualStudioProject>
<CSHARP LastOpenVersion = "7.10.3077" >
<Build>
- <Settings ReferencePath = "E:\Projet\iBATISNet\trunk\Source\External-Bin\Net\1.1\" >
+ <Settings ReferencePath = "E:\Projet\iBATISNet\trunk\Source\External-Bin\Net\1.1\;H:\iBATIS.NET\trunk\cs\mapper\External-Bin\Net\1.1\" >
<Config
Name = "Debug"
EnableASPDebugging = "false"
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?view=diff&r1=158948&r2=158949
==============================================================================
--- incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/DomSqlMapBuilder.cs (original)
+++ incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/DomSqlMapBuilder.cs Thu Mar 24 13:28:19 2005
@@ -30,8 +30,10 @@
using System.Collections.Specialized;
using System.Reflection;
using System.Text;
+using System.IO;
using System.Xml;
using System.Xml.Serialization;
+using System.Xml.Schema;
using IBatisNet.Common;
using IBatisNet.Common.Exceptions;
@@ -62,6 +64,18 @@
/// </summary>
public class DomSqlMapBuilder
{
+ #region Embedded resource
+
+ // Which files must we allow to be used as Embedded Resources ?
+ // - slqMap.config [No]
+ // - providers.config [No]
+ // - sqlMap files [yes]
+ // - properties file (like Database.config) [Yes]
+ // see contribution, NHibernate usage,
+ // see http://www.codeproject.com/csharp/EmbeddedResourceStrings.asp
+ // see http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=75
+ #endregion
+
#region Constant
private const string DEFAULT_PROVIDER_NAME = "_DEFAULT_PROVIDER_NAME";
/// <summary>
@@ -95,44 +109,14 @@
/// Token for cacheModelsEnabled attribute.
/// </summary>
private const string ATR_CACHE_MODELS_ENABLED = "cacheModelsEnabled";
- /// <summary>
- /// Token for assemblyResource attribute.
- /// </summary>
- private const string ATR_ASSEMBLY_RESOURCE = "assemblyResource";
#endregion
- #region Fields
-
- // These variables maintain the state of the build process.
- private XmlDocument _sqlMapConfig = null;
- private bool _isCallFromDao = false;
- private bool _useConfigFileWatcher = false;
- private DataSource _dataSource = null;
- private bool _useStatementNamespaces = false;
- private bool _cacheModelsEnabled = false;
- private string _assemblyResource = string.Empty;
- private ErrorContext _errorContext = null;
-
- private HybridDictionary _providers = new HybridDictionary();
- private NameValueCollection _properties = new NameValueCollection();
- private SqlMapper _sqlMap = null;
+ #region Fields
- // static private Assembly _assembly = null;
+ private ConfigurationScope _configScope = null;
#endregion
-
- #region Properties
-
- /// <summary>
- ///
- /// </summary>
- public HybridDictionary Providers
- {
- get { return _providers; }
- }
-
- #endregion
#region Methods
@@ -148,24 +132,76 @@
DataSource dataSource,
bool useConfigFileWatcher, bool isCallFromDao)
{
- _sqlMapConfig = document;
- _dataSource = dataSource;
- _isCallFromDao = isCallFromDao;
- _useConfigFileWatcher = useConfigFileWatcher;
- _sqlMap = null;
- _errorContext = new ErrorContext();
+ _configScope = new ConfigurationScope();
+
+ _configScope.SqlMapConfigDocument = document;
+ _configScope.DataSource = dataSource;
+ _configScope.IsCallFromDao = isCallFromDao;
+ _configScope.UseConfigFileWatcher = useConfigFileWatcher;
- // Load sqlMap statement.
+
try
{
- return Initialize();
+ ValidateSchema( document.ChildNodes[1], "SqlMapConfig.xsd" );
+ Initialize();
+ return _configScope.SqlMapper;
}
catch(Exception e)
- { _errorContext.Cause = e;
- throw new ConfigurationException(_errorContext.ToString(),e);
+ {
+ throw new ConfigurationException(_configScope.ErrorContext.ToString(), e);
+ }
+ }
+
+ /// <summary>
+ /// validate againts schema
+ /// </summary>
+ /// <param name="section">The doc to validate</param>
+ /// <param name="schemaFileName">schema File Name</param>
+ private void ValidateSchema( XmlNode section, string schemaFileName )
+ {
+ XmlValidatingReader validatingReader = null;
+ Stream xsdFile = null;
+ StreamReader streamReader = null;
+
+ _configScope.ErrorContext.Activity = "Validate SqlMap config";
+ try
+ {
+ //Validate the document using a schema
+ validatingReader = new XmlValidatingReader( new XmlTextReader( new StringReader( section.OuterXml ) ) );
+ validatingReader.ValidationType = ValidationType.Schema;
+
+ xsdFile = GetStream( schemaFileName );
+ streamReader = new StreamReader( xsdFile );
+
+ validatingReader.Schemas.Add( XmlSchema.Read( new XmlTextReader( streamReader ), null ) );
+
+ // Wire up the call back. The ValidationEvent is fired when the
+ // XmlValidatingReader hits an issue validating a section of the xml
+ validatingReader.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
+
+ // Validate the document
+ while (validatingReader.Read()){}
+
+ if(! _configScope.IsXmlValid )
+ {
+ throw new ConfigurationException( "Invalid SqlMap.config document. cause :"+_configScope.ErrorContext.Resource);
+ //( Resource.ResourceManager.FormatMessage( Resource.MessageKeys.DocumentNotValidated, _schemaErrors )) );
+ }
+ }
+ finally
+ {
+ if( validatingReader != null ) validatingReader.Close();
+ if( xsdFile != null ) xsdFile.Close();
+ if( streamReader != null ) streamReader.Close();
}
}
+ private void ValidationCallBack( object sender, ValidationEventArgs args )
+ {
+ _configScope.IsXmlValid = false;
+ _configScope.ErrorContext.Resource += args.Message + Environment.NewLine;
+ }
+
/// <summary>
/// Load statement, parameters, resultmap.
/// Used by Dao
@@ -198,18 +234,17 @@
/// <summary>
/// Intilaize an SqlMap.
/// </summary>
- private SqlMapper Initialize()
+ private void Initialize()
{
Reset();
- SqlMapper sqlMap = new SqlMapper();
- _sqlMap = sqlMap;
+ _configScope.SqlMapper = new SqlMapper();
#region Load settings
- _errorContext.Activity = "Loading global settings";
+ _configScope.ErrorContext.Activity = "loading global settings";
- XmlNodeList settings = _sqlMapConfig.SelectNodes(XML_CONFIG_SETTINGS);
+ XmlNodeList settings = _configScope.SqlMapConfigDocument.SelectNodes(XML_CONFIG_SETTINGS);
if (settings!=null)
{
@@ -217,181 +252,167 @@
{
if (setting.Attributes[ATR_USE_STATEMENT_NAMESPACES] != null )
{
- _useStatementNamespaces = System.Convert.ToBoolean(setting.Attributes[ATR_USE_STATEMENT_NAMESPACES].Value);
+ _configScope.UseStatementNamespaces = System.Convert.ToBoolean(setting.Attributes[ATR_USE_STATEMENT_NAMESPACES].Value);
}
if (setting.Attributes[ATR_CACHE_MODELS_ENABLED] != null )
{
- _cacheModelsEnabled = System.Convert.ToBoolean(setting.Attributes[ATR_CACHE_MODELS_ENABLED].Value);
+ _configScope.IsCacheModelsEnabled = System.Convert.ToBoolean(setting.Attributes[ATR_CACHE_MODELS_ENABLED].Value);
}
- #region Embedded resource
-
- // Which files must we allow to be used as Embedded Resources ?
- // - slqMap.config [No]
- // - providers.config [No]
- // - sqlMap files [yes]
- // - properties file (like Database.config) [Yes]
- // see contribution, NHibernate usage,
- // see http://www.codeproject.com/csharp/EmbeddedResourceStrings.asp
- // see http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=75
- if (setting.Attributes[ATR_ASSEMBLY_RESOURCE] != null )
- {
- _assemblyResource = setting.Attributes[ATR_ASSEMBLY_RESOURCE].Value;
- }
- #endregion
}
}
- sqlMap.SetCacheModelsEnabled(_cacheModelsEnabled);
+ _configScope.SqlMapper.SetCacheModelsEnabled(_configScope.IsCacheModelsEnabled);
#endregion
#region Load Global Properties
- if (_isCallFromDao == false)
+ if (_configScope.IsCallFromDao == false)
{
- ParseGlobalProperties(_sqlMapConfig.SelectSingleNode(XML_CONFIG_ROOT));
+ _configScope.NodeContext = _configScope.SqlMapConfigDocument.SelectSingleNode(XML_CONFIG_ROOT);
+ ParseGlobalProperties();
}
#endregion
#region Load providers
- if (_isCallFromDao == false)
+ if (_configScope.IsCallFromDao == false)
{
- _errorContext.Activity = "Loading Providers";
- GetProviders(Resources.GetConfigAsXmlDocument(PROVIDERS_FILE_NAME));
+ GetProviders();
}
#endregion
#region Load DataBase
#region Choose the provider
Provider provider = null;
- if ( _isCallFromDao==false )
+ if ( _configScope.IsCallFromDao==false )
{
- XmlNode providerNode = null;
-
- providerNode = _sqlMapConfig.SelectSingleNode("/sqlMapConfig/database/provider");
-
- provider = ParseProvider(providerNode);
+ provider = ParseProvider();
+ _configScope.ErrorContext.Reset();
}
#endregion
#region Load the DataSources
- _errorContext.Activity = "Loading Database DataSource";
- XmlNode nodeDataSource = _sqlMapConfig.SelectSingleNode("/sqlMapConfig/database/dataSource");
+ _configScope.ErrorContext.Activity = "loading Database DataSource";
+ XmlNode nodeDataSource = _configScope.SqlMapConfigDocument.SelectSingleNode("/sqlMapConfig/database/dataSource");
if (nodeDataSource == null)
{
- if (_isCallFromDao == false)
+ if (_configScope.IsCallFromDao == false)
{
throw new ConfigurationException("There's no dataSource tag in SqlMap.config.");
}
else // patch from Luke Yang
{
- sqlMap.DataSource = _dataSource;
+ _configScope.SqlMapper.DataSource = _configScope.DataSource;
}
}
else
{
- if (_isCallFromDao == false)
+ if (_configScope.IsCallFromDao == false)
{
- _errorContext.Resource = nodeDataSource.OuterXml.ToString();
- _errorContext.MoreInfo = "Parse DataSource";
+ _configScope.ErrorContext.Resource = nodeDataSource.OuterXml.ToString();
+ _configScope.ErrorContext.MoreInfo = "parse DataSource";
XmlSerializer serializer = null;
serializer = new XmlSerializer(typeof(DataSource));
DataSource dataSource = (DataSource) serializer.Deserialize(new XmlNodeReader(nodeDataSource));
dataSource.Provider = provider;
// Use Global Properties if any
- dataSource.ConnectionString = Resources.ParsePropertyTokens(dataSource.ConnectionString, _properties);
+ dataSource.ConnectionString = Resources.ParsePropertyTokens(dataSource.ConnectionString, _configScope.Properties);
- sqlMap.DataSource = dataSource;
+ _configScope.SqlMapper.DataSource = dataSource;
}
else
{
- sqlMap.DataSource = _dataSource;
+ _configScope.SqlMapper.DataSource = _configScope.DataSource;
}
- _errorContext.Reset();
+ _configScope.ErrorContext.Reset();
}
#endregion
#endregion
#region Load Global TypeAlias
- foreach (XmlNode xmlNode in _sqlMapConfig.SelectNodes("/sqlMapConfig/alias/typeAlias"))
+ foreach (XmlNode xmlNode in _configScope.SqlMapConfigDocument.SelectNodes("/sqlMapConfig/alias/typeAlias"))
{
- _errorContext.Activity = "Loading Global Type alias";
+ _configScope.ErrorContext.Activity = "loading global Type alias";
TypeAlias typeAlias = null;
XmlSerializer serializer = new XmlSerializer(typeof(TypeAlias));
typeAlias = (TypeAlias) serializer.Deserialize(new XmlNodeReader(xmlNode));
- _errorContext.ObjectId = typeAlias.ClassName;
- _errorContext.MoreInfo = "Initialize type alias";
+ _configScope.ErrorContext.ObjectId = typeAlias.ClassName;
+ _configScope.ErrorContext.MoreInfo = "initialize type alias";
typeAlias.Initialize();
- sqlMap.AddTypeAlias( typeAlias.Name, typeAlias );
+ _configScope.SqlMapper.AddTypeAlias( typeAlias.Name, typeAlias );
}
- _errorContext.Reset();
+ _configScope.ErrorContext.Reset();
#endregion
#region Load sqlMap mapping files
- foreach (XmlNode xmlNode in _sqlMapConfig.SelectNodes("/sqlMapConfig/sqlMaps/sqlMap"))
+ foreach (XmlNode xmlNode in _configScope.SqlMapConfigDocument.SelectNodes("/sqlMapConfig/sqlMaps/sqlMap"))
{
- ConfigureSqlMap(sqlMap, xmlNode );
+ _configScope.NodeContext = xmlNode;
+ ConfigureSqlMap();
}
#endregion
#region Resolve "resulMap" attribut on Result Property + initialize Discriminator property
- foreach(DictionaryEntry entry in sqlMap.ResultMaps)
+ foreach(DictionaryEntry entry in _configScope.SqlMapper.ResultMaps)
{
ResultMap resultMap = (ResultMap)entry.Value;
foreach(DictionaryEntry item in resultMap.ColumnsToPropertiesMap)
{
ResultProperty result = (ResultProperty)item.Value;
- if(result.ResulMapName.Length >0)
+ if(result.NestedResultMapName.Length >0)
{
- result.ResultMap = sqlMap.GetResultMap(result.ResulMapName);
+ result.NestedResultMap = _configScope.SqlMapper.GetResultMap(result.NestedResultMapName);
}
}
if (resultMap.Discriminator != null)
{
- resultMap.Discriminator.Initialize(sqlMap);
+ resultMap.Discriminator.Initialize(_configScope.SqlMapper);
}
}
#endregion
- return sqlMap;
}
/// <summary>
/// Load and initialize providers from specified file.
/// </summary>
- /// <param name="xmlProviders"></param>
- private void GetProviders(XmlDocument xmlProviders)
+ private void GetProviders()
{
XmlSerializer serializer = null;
Provider provider = null;
- _providers.Clear();
+ _configScope.ErrorContext.Activity = "loading Providers";
+
+ XmlDocument xmlProviders = Resources.GetConfigAsXmlDocument(PROVIDERS_FILE_NAME);
serializer = new XmlSerializer(typeof(Provider));
foreach (XmlNode node in xmlProviders.SelectNodes("/providers/provider"))
{
+ _configScope.ErrorContext.Resource = node.InnerXml.ToString();
+
provider = (Provider) serializer.Deserialize(new XmlNodeReader(node));
if (provider.IsEnabled == true)
{
- _errorContext.MoreInfo = "Init provider";
- _errorContext.ObjectId = provider.Name;
+ _configScope.ErrorContext.ObjectId = provider.Name;
+ _configScope.ErrorContext.MoreInfo = "initialize provider";
+
provider.Initialisation();
- _providers.Add(provider.Name, provider);
+ _configScope.Providers.Add(provider.Name, provider);
if (provider.IsDefault == true)
{
- if (_providers[DEFAULT_PROVIDER_NAME] == null)
+ if (_configScope.Providers[DEFAULT_PROVIDER_NAME] == null)
{
- _providers.Add(DEFAULT_PROVIDER_NAME,provider);
+ _configScope.Providers.Add(DEFAULT_PROVIDER_NAME,provider);
}
else
{
@@ -401,29 +422,30 @@
}
}
}
- _errorContext.Reset();
+ _configScope.ErrorContext.Reset();
}
/// <summary>
/// Parse the provider tag.
/// </summary>
- /// <remarks>
- /// Could be specified via Global propertie in properties file (see properties tag).
- /// </remarks>
- /// <param name="node">An xml provider node</param>
/// <returns>A provider object.</returns>
- private Provider ParseProvider(System.Xml.XmlNode node)
+ private Provider ParseProvider()
{
- _errorContext.Activity = "Load DataBase Provider";
+ _configScope.ErrorContext.Activity = "load DataBase Provider";
+ XmlNode node = _configScope.SqlMapConfigDocument.SelectSingleNode("database/provider");
+
if (node != null)
{
+ _configScope.ErrorContext.Resource = node.OuterXml.ToString();
// name
- string providerName = Resources.ParsePropertyTokens(node.Attributes["name"].Value, _properties);
+ string providerName = Resources.ParsePropertyTokens(node.Attributes["name"].Value, _configScope.Properties);
+
+ _configScope.ErrorContext.ObjectId = providerName;
- if (_providers.Contains(providerName) == true)
+ if (_configScope.Providers.Contains(providerName) == true)
{
- return (Provider) _providers[providerName];
+ return (Provider) _configScope.Providers[providerName];
}
else
{
@@ -434,9 +456,9 @@
}
else
{
- if (_providers.Contains(DEFAULT_PROVIDER_NAME) == true)
+ if (_configScope.Providers.Contains(DEFAULT_PROVIDER_NAME) == true)
{
- return (Provider) _providers[DEFAULT_PROVIDER_NAME];
+ return (Provider) _configScope.Providers[DEFAULT_PROVIDER_NAME];
}
else
{
@@ -450,60 +472,66 @@
/// <summary>
/// Load sqlMap statement.
/// </summary>
- /// <param name="sqlMap">An SqlMap</param>
- /// <param name="sqlMapNode"></param>
- private void ConfigureSqlMap(SqlMapper sqlMap, XmlNode sqlMapNode)
+ private void ConfigureSqlMap( )
+ //SqlMapper sqlMap, XmlNode sqlMapNode)
{
XmlSerializer serializer = null;
- string sqlMapName = string.Empty;
- _errorContext.Activity = "Loading Sql Map";
- _errorContext.Resource = sqlMapNode.OuterXml.ToString();
+ XmlNode sqlMapNode = _configScope.NodeContext;
- if (_useConfigFileWatcher == true)
+ _configScope.ErrorContext.Activity = "loading SqlMap ";
+ _configScope.ErrorContext.Resource = sqlMapNode.OuterXml.ToString();
+
+ if (_configScope.UseConfigFileWatcher == true)
{
ConfigWatcherHandler.AddFileToWatch( Resources.GetFileInfo( Resources.GetValueOfNodeResourceUrl(sqlMapNode) ) );
}
// Load the file
- XmlDocument config = Resources.GetAsXmlDocument(sqlMapNode);
+ _configScope.SqlMapDocument = Resources.GetAsXmlDocument(sqlMapNode);
+
+ //ValidateSchema( _configScope.SqlMapDocument.ChildNodes[1], "SqlMap.xsd" );
- sqlMapName = config.SelectSingleNode("sqlMap").Attributes["namespace"].Value;
+ _configScope.SqlMapNamespace = _configScope.SqlMapDocument.SelectSingleNode("sqlMap").Attributes["namespace"].Value;
#region Load TypeAlias
- foreach (XmlNode xmlNode in config.SelectNodes("/sqlMap/alias/typeAlias"))
+ foreach (XmlNode xmlNode in _configScope.SqlMapDocument.SelectNodes("/sqlMap/alias/typeAlias"))
{
- _errorContext.MoreInfo = "Loading type alias";
+ _configScope.ErrorContext.MoreInfo = "loading type alias";
TypeAlias typeAlias = null;
serializer = new XmlSerializer(typeof(TypeAlias));
typeAlias = (TypeAlias) serializer.Deserialize(new XmlNodeReader(xmlNode));
- _errorContext.ObjectId = typeAlias.ClassName;
- _errorContext.MoreInfo = "Initialize type alias";
+ _configScope.ErrorContext.ObjectId = typeAlias.ClassName;
+ _configScope.ErrorContext.MoreInfo = "initialize type alias";
typeAlias.Initialize();
- sqlMap.AddTypeAlias( typeAlias.Name, typeAlias );
+ _configScope.SqlMapper.AddTypeAlias( typeAlias.Name, typeAlias );
}
- _errorContext.MoreInfo = string.Empty;
- _errorContext.ObjectId = string.Empty;
+ _configScope.ErrorContext.MoreInfo = string.Empty;
+ _configScope.ErrorContext.ObjectId = string.Empty;
#endregion
#region Load resultMap
- foreach (XmlNode xmlNode in config.SelectNodes("/sqlMap/resultMaps/resultMap"))
+ foreach (XmlNode xmlNode in _configScope.SqlMapDocument.SelectNodes("/sqlMap/resultMaps/resultMap"))
{
- _errorContext.MoreInfo = "Loading ResultMap";
+ _configScope.ErrorContext.MoreInfo = "loading ResultMap tag";
+ _configScope.NodeContext = xmlNode; // A ResultMap node
- BuildResultMap( config, xmlNode, sqlMapName, sqlMap );
+ BuildResultMap();
}
#endregion
#region Load parameterMaps
- foreach (XmlNode xmlNode in config.SelectNodes("/sqlMap/parameterMaps/parameterMap"))
+ foreach (XmlNode xmlNode in _configScope.SqlMapDocument.SelectNodes("/sqlMap/parameterMaps/parameterMap"))
{
- BuildParameterMap(config, xmlNode, sqlMapName, sqlMap );
+ _configScope.ErrorContext.MoreInfo = "loading ParameterMap tag";
+ _configScope.NodeContext = xmlNode; // A ParameterMap node
+
+ BuildParameterMap();
}
#endregion
@@ -513,105 +541,119 @@
#region Statement tag
Statement statement = null;
serializer = new XmlSerializer(typeof(Statement));
- foreach (XmlNode xmlNode in config.SelectNodes("/sqlMap/statements/statement"))
+ foreach (XmlNode xmlNode in _configScope.SqlMapDocument.SelectNodes("/sqlMap/statements/statement"))
{
+ _configScope.ErrorContext.MoreInfo = "loading statement tag";
+ _configScope.NodeContext = xmlNode; // A statement tag
+
MappedStatement mappedStatement = null;
statement = (Statement) serializer.Deserialize(new XmlNodeReader(xmlNode));
- if (_useStatementNamespaces == true)
+ if (_configScope.UseStatementNamespaces == true)
{
- statement.Id = ApplyNamespace(statement.Id, sqlMapName);
+ statement.Id = ApplyNamespace(statement.Id, _configScope.SqlMapNamespace);
}
- statement.Initialize( sqlMapName, sqlMap );
+ _configScope.ErrorContext.ObjectId = statement.Id;
+ statement.Initialize( _configScope );
// Build ISql (analyse sql statement)
- ProcessSqlStatement(config, sqlMapName, sqlMap, xmlNode, statement);
+ ProcessSqlStatement( statement );
+ //config, sqlMapName, sqlMap, xmlNode, statement);
// Build MappedStatement
- mappedStatement = new MappedStatement( sqlMap, statement);
+ mappedStatement = new MappedStatement( _configScope.SqlMapper, statement);
- sqlMap.AddMappedStatement(mappedStatement.Name, mappedStatement);
+ _configScope.SqlMapper.AddMappedStatement(mappedStatement.Name, mappedStatement);
}
#endregion
#region Select tag
Select select = null;
serializer = new XmlSerializer(typeof(Select));
- foreach (XmlNode xmlNode in config.SelectNodes("/sqlMap/statements/select"))
+ foreach (XmlNode xmlNode in _configScope.SqlMapDocument.SelectNodes("/sqlMap/statements/select"))
{
+ _configScope.ErrorContext.MoreInfo = "loading select tag";
+ _configScope.NodeContext = xmlNode; // A select node
+
MappedStatement mappedStatement = null;
select = (Select) serializer.Deserialize(new XmlNodeReader(xmlNode));
- if (_useStatementNamespaces == true)
+ if (_configScope.UseStatementNamespaces == true)
{
- select.Id = ApplyNamespace(select.Id, sqlMapName);
+ select.Id = ApplyNamespace(select.Id, _configScope.SqlMapNamespace);
}
- select.Initialize( sqlMapName, sqlMap );
+ _configScope.ErrorContext.ObjectId = select.Id;
+ select.Initialize( _configScope );
if (select.Generate != null)
{
- GenerateCommandText(sqlMap, select);
+ GenerateCommandText(_configScope.SqlMapper, select);
}
else
{
// Build ISql (analyse sql statement)
- ProcessSqlStatement(config, sqlMapName, sqlMap, xmlNode, select);
+ ProcessSqlStatement( select);
+ //config, sqlMapName, sqlMap, xmlNode, select);
}
// Build MappedStatement
- mappedStatement = new SelectMappedStatement( sqlMap, select);
+ mappedStatement = new SelectMappedStatement( _configScope.SqlMapper, select);
- sqlMap.AddMappedStatement(mappedStatement.Name, mappedStatement);
+ _configScope.SqlMapper.AddMappedStatement(mappedStatement.Name, mappedStatement);
}
#endregion
#region Insert tag
Insert insert = null;
serializer = new XmlSerializer(typeof(Insert));
- foreach (XmlNode xmlNode in config.SelectNodes("/sqlMap/statements/insert"))
+ foreach (XmlNode xmlNode in _configScope.SqlMapDocument.SelectNodes("/sqlMap/statements/insert"))
{
+ _configScope.ErrorContext.MoreInfo = "loading insert tag";
+ _configScope.NodeContext = xmlNode; // A insert tag
+
MappedStatement mappedStatement = null;
insert = (Insert) serializer.Deserialize(new XmlNodeReader(xmlNode));
- if (_useStatementNamespaces == true)
+ if (_configScope.UseStatementNamespaces == true)
{
- insert.Id = ApplyNamespace(insert.Id, sqlMapName);
+ insert.Id = ApplyNamespace(insert.Id, _configScope.SqlMapNamespace);
}
-
- insert.Initialize( sqlMapName, sqlMap );
+ _configScope.ErrorContext.ObjectId = insert.Id;
+ insert.Initialize( _configScope );
// Build ISql (analyse sql command text)
if (insert.Generate != null)
{
- GenerateCommandText(sqlMap, insert);
+ GenerateCommandText(_configScope.SqlMapper, insert);
}
else
{
- ProcessSqlStatement(config, sqlMapName, sqlMap, xmlNode, insert);
+ ProcessSqlStatement( insert);
+ //config, sqlMapName, sqlMap, xmlNode, insert);
}
// Build MappedStatement
- mappedStatement = new InsertMappedStatement( sqlMap, insert);
+ mappedStatement = new InsertMappedStatement( _configScope.SqlMapper, insert);
- sqlMap.AddMappedStatement(mappedStatement.Name, mappedStatement);
+ _configScope.SqlMapper.AddMappedStatement(mappedStatement.Name, mappedStatement);
#region statement SelectKey
// Set sql statement SelectKey
if (insert.SelectKey != null)
{
- insert.SelectKey.Initialize( sqlMapName, sqlMap );
+ insert.SelectKey.Initialize( _configScope );
insert.SelectKey.Id = insert.Id + DOT + "SelectKey";
string commandText = xmlNode.SelectSingleNode("selectKey").FirstChild.InnerText.Replace('\n', ' ').Replace('\r', ' ').Replace('\t', ' ').Trim();
- commandText = Resources.ParsePropertyTokens(commandText, _properties);
+ commandText = Resources.ParsePropertyTokens(commandText, _configScope.Properties);
StaticSql sql = new StaticSql(insert.SelectKey);
- IDalSession session = new SqlMapSession(sqlMap.DataSource);
+ IDalSession session = new SqlMapSession( _configScope.SqlMapper.DataSource );
sql.BuildPreparedStatement( session, commandText );
insert.SelectKey.Sql = sql;
// Build MappedStatement
- mappedStatement = new MappedStatement( sqlMap, insert.SelectKey);
+ mappedStatement = new MappedStatement( _configScope.SqlMapper, insert.SelectKey);
- sqlMap.AddMappedStatement(mappedStatement.Name, mappedStatement);
+ _configScope.SqlMapper.AddMappedStatement(mappedStatement.Name, mappedStatement);
}
#endregion
}
@@ -620,88 +662,102 @@
#region Update tag
Update update = null;
serializer = new XmlSerializer(typeof(Update));
- foreach (XmlNode xmlNode in config.SelectNodes("/sqlMap/statements/update"))
+ foreach (XmlNode xmlNode in _configScope.SqlMapDocument.SelectNodes("/sqlMap/statements/update"))
{
+ _configScope.ErrorContext.MoreInfo = "loading update tag";
+ _configScope.NodeContext = xmlNode; // A update tag
+
MappedStatement mappedStatement = null;
update = (Update) serializer.Deserialize(new XmlNodeReader(xmlNode));
- if (_useStatementNamespaces == true)
+ if (_configScope.UseStatementNamespaces == true)
{
- update.Id = ApplyNamespace(update.Id, sqlMapName);
+ update.Id = ApplyNamespace(update.Id, _configScope.SqlMapNamespace);
}
- update.Initialize( sqlMapName, sqlMap );
+ _configScope.ErrorContext.ObjectId = update.Id;
+ update.Initialize( _configScope );
// Build ISql (analyse sql statement)
if (update.Generate != null)
{
- GenerateCommandText(sqlMap, update);
+ GenerateCommandText(_configScope.SqlMapper, update);
}
else
{
// Build ISql (analyse sql statement)
- ProcessSqlStatement(config, sqlMapName, sqlMap, xmlNode, update);
+ ProcessSqlStatement(update);
+ //config, sqlMapName, sqlMap, xmlNode, update);
}
// Build MappedStatement
- mappedStatement = new UpdateMappedStatement( sqlMap, update);
+ mappedStatement = new UpdateMappedStatement( _configScope.SqlMapper, update);
- sqlMap.AddMappedStatement(mappedStatement.Name, mappedStatement);
+ _configScope.SqlMapper.AddMappedStatement(mappedStatement.Name, mappedStatement);
}
#endregion
#region Delete tag
Delete delete = null;
serializer = new XmlSerializer(typeof(Delete));
- foreach (XmlNode xmlNode in config.SelectNodes("/sqlMap/statements/delete"))
+ foreach (XmlNode xmlNode in _configScope.SqlMapDocument.SelectNodes("/sqlMap/statements/delete"))
{
+ _configScope.ErrorContext.MoreInfo = "loading delete tag";
+ _configScope.NodeContext = xmlNode; // A delete tag
MappedStatement mappedStatement = null;
delete = (Delete) serializer.Deserialize(new XmlNodeReader(xmlNode));
- if (_useStatementNamespaces == true)
+ if (_configScope.UseStatementNamespaces == true)
{
- delete.Id = ApplyNamespace(delete.Id, sqlMapName);
+ delete.Id = ApplyNamespace(delete.Id, _configScope.SqlMapNamespace);
}
- delete.Initialize( sqlMapName, sqlMap );
+ _configScope.ErrorContext.ObjectId = delete.Id;
+ delete.Initialize( _configScope );
// Build ISql (analyse sql statement)
if (delete.Generate != null)
{
- GenerateCommandText(sqlMap, delete);
+ GenerateCommandText(_configScope.SqlMapper, delete);
}
else
{
// Build ISql (analyse sql statement)
- ProcessSqlStatement(config, sqlMapName, sqlMap, xmlNode, delete);
+ ProcessSqlStatement(delete);
+ //config, sqlMapName, sqlMap, xmlNode, delete);
}
// Build MappedStatement
- mappedStatement = new DeleteMappedStatement( sqlMap, delete);
+ mappedStatement = new DeleteMappedStatement( _configScope.SqlMapper, delete);
- sqlMap.AddMappedStatement(mappedStatement.Name, mappedStatement);
+ _configScope.SqlMapper.AddMappedStatement(mappedStatement.Name, mappedStatement);
}
#endregion
#region Procedure tag
Procedure procedure = null;
serializer = new XmlSerializer(typeof(Procedure));
- foreach (XmlNode xmlNode in config.SelectNodes("/sqlMap/statements/procedure"))
+ foreach (XmlNode xmlNode in _configScope.SqlMapDocument.SelectNodes("/sqlMap/statements/procedure"))
{
+ _configScope.ErrorContext.MoreInfo = "loading procedure tag";
+ _configScope.NodeContext = xmlNode; // A procedure tag
+
MappedStatement mappedStatement = null;
procedure = (Procedure)serializer.Deserialize(new XmlNodeReader(xmlNode));
- if (_useStatementNamespaces == true)
+ if (_configScope.UseStatementNamespaces == true)
{
- procedure.Id = ApplyNamespace(procedure.Id, sqlMapName);
+ procedure.Id = ApplyNamespace(procedure.Id, _configScope.SqlMapNamespace);
}
- procedure.Initialize( sqlMapName, sqlMap );
+ _configScope.ErrorContext.ObjectId = procedure.Id;
+ procedure.Initialize( _configScope );
// Build ISql (analyse sql command text)
- ProcessSqlStatement(config, sqlMapName, sqlMap, xmlNode, procedure);
+ ProcessSqlStatement( procedure );
+ //config, sqlMapName, sqlMap, xmlNode, procedure);
// Build MappedStatement
- mappedStatement = new MappedStatement( sqlMap, procedure);
+ mappedStatement = new MappedStatement( _configScope.SqlMapper, procedure);
- sqlMap.AddMappedStatement(mappedStatement.Name, mappedStatement);
+ _configScope.SqlMapper.AddMappedStatement(mappedStatement.Name, mappedStatement);
}
#endregion
@@ -709,11 +765,11 @@
#region Load CacheModels
- if (sqlMap.IsCacheModelsEnabled == true)
+ if (_configScope.IsCacheModelsEnabled == true)
{
CacheModel cacheModel = null;
serializer = new XmlSerializer(typeof(CacheModel));
- foreach (XmlNode xmlNode in config.SelectNodes("/sqlMap/cacheModels/cacheModel"))
+ foreach (XmlNode xmlNode in _configScope.SqlMapDocument.SelectNodes("/sqlMap/cacheModels/cacheModel"))
{
cacheModel = (CacheModel) serializer.Deserialize(new XmlNodeReader(xmlNode));
@@ -721,12 +777,12 @@
foreach(XmlNode flushOn in xmlNode.SelectNodes("flushOnExecute"))
{
string statementName = flushOn.Attributes["statement"].Value;
- if (_useStatementNamespaces == true)
+ if (_configScope.UseStatementNamespaces == true)
{
- statementName = sqlMapName + DOT + statementName;
+ statementName = _configScope.SqlMapNamespace + DOT + statementName;
}
- MappedStatement mappedStatement = sqlMap.GetMappedStatement(statementName);
+ MappedStatement mappedStatement = _configScope.SqlMapper.GetMappedStatement(statementName);
cacheModel.RegisterTriggerStatement(mappedStatement);
}
@@ -742,16 +798,16 @@
cacheModel.Initialize();
- sqlMap.AddCache( cacheModel );
+ _configScope.SqlMapper.AddCache( cacheModel );
}
// Attach CacheModel to statement
- foreach(DictionaryEntry entry in sqlMap.MappedStatements)
+ foreach(DictionaryEntry entry in _configScope.SqlMapper.MappedStatements)
{
MappedStatement mappedStatement = (MappedStatement)entry.Value;
if (mappedStatement.Statement.CacheModelName.Length >0)
{
- mappedStatement.Statement.CacheModel = sqlMap.GetCache(mappedStatement.Statement.CacheModelName);
+ mappedStatement.Statement.CacheModel = _configScope.SqlMapper.GetCache(mappedStatement.Statement.CacheModelName);
}
}
}
@@ -762,24 +818,24 @@
/// <summary>
- ///
+ /// Process the Sql Statement
/// </summary>
- /// <param name="config"></param>
- /// <param name="sqlMapName"></param>
- /// <param name="sqlMap"></param>
- /// <param name="commandTextNode"></param>
/// <param name="statement"></param>
- private void ProcessSqlStatement(XmlDocument config, string sqlMapName, SqlMapper sqlMap, XmlNode commandTextNode, IStatement statement)
+ private void ProcessSqlStatement( IStatement statement )
+ //XmlDocument config, string sqlMapName, SqlMapper sqlMap, XmlNode commandTextNode, IStatement statement)
{
bool isDynamic = false;
+ XmlNode commandTextNode = _configScope.NodeContext;
DynamicSql dynamic = new DynamicSql(statement);
StringBuilder sqlBuffer = new StringBuilder();
+ _configScope.ErrorContext.MoreInfo = "process the Sql statement";
+
// Resolve "extend" attribute on Statement
if (statement.ExtendSatement.Length >0)
{
// Find 'super' statement
- XmlNode supperStatementNode = config.SelectSingleNode("/sqlMap/statements/child::*[@id='"+statement.ExtendSatement+"']");
+ XmlNode supperStatementNode = _configScope.SqlMapDocument.SelectSingleNode("/sqlMap/statements/child::*[@id='"+statement.ExtendSatement+"']");
if (supperStatementNode!=null)
{
commandTextNode.InnerXml = supperStatementNode.InnerXml + commandTextNode.InnerXml;
@@ -790,7 +846,9 @@
}
}
- isDynamic = ParseDynamicTags(commandTextNode, dynamic, sqlBuffer, isDynamic, false);
+ _configScope.ErrorContext.MoreInfo = "parse dynamic tags on sql statement";
+
+ isDynamic = ParseDynamicTags( commandTextNode, dynamic, sqlBuffer, isDynamic, false);
if (isDynamic)
{
@@ -799,13 +857,13 @@
else
{
string sqlText = sqlBuffer.ToString();
- ApplyInlineParemeterMap(sqlMap, statement, sqlText);
+ ApplyInlineParemeterMap( statement, sqlText);
}
}
/// <summary>
- ///
+ /// Parse dynamic tags
/// </summary>
/// <param name="commandTextNode"></param>
/// <param name="dynamic"></param>
@@ -813,7 +871,7 @@
/// <param name="isDynamic"></param>
/// <param name="postParseRequired"></param>
/// <returns></returns>
- private bool ParseDynamicTags(XmlNode commandTextNode, IDynamicParent dynamic,
+ private bool ParseDynamicTags( XmlNode commandTextNode, IDynamicParent dynamic,
StringBuilder sqlBuffer, bool isDynamic, bool postParseRequired)
{
XmlNodeList children = commandTextNode.ChildNodes;
@@ -824,7 +882,7 @@
{
string data = child.InnerText.Replace('\n', ' ').Replace('\r', ' ').Replace('\t', ' ').Trim(); //??
- data = Resources.ParsePropertyTokens(data, _properties);
+ data = Resources.ParsePropertyTokens(data, _configScope.Properties);
SqlText sqlText = null;
if ( postParseRequired == true )
@@ -869,20 +927,21 @@
#region Inline Parameter parsing
/// <summary>
- ///
+ /// Apply inline paremeterMap
/// </summary>
- /// <param name="sqlMap"></param>
/// <param name="statement"></param>
/// <param name="sqlStatement"></param>
- private void ApplyInlineParemeterMap(SqlMapper sqlMap, IStatement statement, string sqlStatement)
+ private void ApplyInlineParemeterMap( IStatement statement, string sqlStatement)
{
string newSql = sqlStatement;
+ _configScope.ErrorContext.MoreInfo = "apply inline paremeterMap";
+
// Check the inline parameter
if (statement.ParameterMap == null)
{
- // Construit Une parameter Map avec les inline Parameter
- // si il existe, et vire les infos 'inline' du sqlText
+ // Build a Parametermap with the inline parameters.
+ // if they exist. Then deleter inline infos from sqltext.
// ParseInlineParameter devrait retourner une ParameterMap ou null
SqlText sqlText = ParseInlineParameterMap( statement, newSql );
@@ -919,7 +978,7 @@
else if (statement is Statement)
{
sql = new StaticSql(statement);
- IDalSession session = new SqlMapSession(sqlMap.DataSource);
+ IDalSession session = new SqlMapSession(_configScope.SqlMapper.DataSource);
((StaticSql)sql).BuildPreparedStatement( session, newSql );
}
@@ -927,22 +986,23 @@
statement.Sql = sql;
}
+
/// <summary>
- ///
+ /// Parse inline ParameterMap
/// </summary>
/// <param name="sqlStatement"></param>
- /// <returns></returns>
+ /// <returns>A new sql command text</returns>
public static SqlText ParseInlineParameterMap(string sqlStatement)
{
return ParseInlineParameterMap(null, sqlStatement);
}
/// <summary>
- ///
+ /// Parse inline ParameterMap
/// </summary>
/// <param name="statement"></param>
/// <param name="sqlStatement"></param>
- /// <returns></returns>
+ /// <returns>A new sql command text.</returns>
private static SqlText ParseInlineParameterMap(IStatement statement, string sqlStatement )
{
SqlText sqlText = new SqlText();
@@ -1101,7 +1161,7 @@
#endregion
/// <summary>
- ///
+ /// Resolve TypeHandler
/// </summary>
/// <param name="type"></param>
/// <param name="propertyName"></param>
@@ -1149,28 +1209,31 @@
return handler;
}
+
/// <summary>
/// Initialize the list of variables defined in the
/// properties file.
/// </summary>
- /// <param name="xmlContext">The current context being analysed.</param>
- private void ParseGlobalProperties(XmlNode xmlContext)
+ private void ParseGlobalProperties()
{
- XmlNode nodeProperties = xmlContext.SelectSingleNode("properties");
- _errorContext.Activity = "loading global properties";
+ XmlNode nodeProperties = _configScope.NodeContext.SelectSingleNode("properties");
+ _configScope.ErrorContext.Activity = "loading global properties";
+ _configScope.ErrorContext.Resource = nodeProperties.InnerXml.ToString();
if (nodeProperties != null)
{
- _errorContext.Resource = nodeProperties.OuterXml.ToString();
+ _configScope.ErrorContext.Resource = nodeProperties.OuterXml.ToString();
// Load the file defined by the resource attribut
XmlDocument propertiesConfig = Resources.GetAsXmlDocument(nodeProperties);
foreach (XmlNode node in propertiesConfig.SelectNodes("/settings/add"))
{
- _properties[node.Attributes["key"].Value] = node.Attributes["value"].Value;
+ _configScope.Properties[node.Attributes["key"].Value] = node.Attributes["value"].Value;
}
}
+
+ _configScope.ErrorContext.Reset();;
}
@@ -1194,114 +1257,120 @@
statement.Sql = sql;
}
+
/// <summary>
- ///
+ /// Build a ParameterMap
/// </summary>
- /// <param name="config"></param>
- /// <param name="parameterMapNode"></param>
- /// <param name="sqlMapName"></param>
- /// <param name="sqlMap"></param>
- private void BuildParameterMap(XmlDocument config, XmlNode parameterMapNode, string sqlMapName, SqlMapper sqlMap)
+ private void BuildParameterMap()
{
ParameterMap parameterMap = null;
+ XmlNode parameterMapNode = _configScope.NodeContext;
+
XmlSerializer serializer = new XmlSerializer(typeof(ParameterMap));
+ _configScope.ErrorContext.MoreInfo = "build ParameterMap";
+
string id = ((XmlAttribute)parameterMapNode.Attributes.GetNamedItem("id")).Value;
-
+ _configScope.ErrorContext.ObjectId = id;
+
// Did we already process it ?
- if (sqlMap.ParameterMaps.Contains( sqlMapName + DOT + id ) == false)
+ if (_configScope.SqlMapper.ParameterMaps.Contains( _configScope.SqlMapNamespace + DOT + id ) == false)
{
parameterMap = (ParameterMap) serializer.Deserialize(new XmlNodeReader(parameterMapNode));
+
+ _configScope.ErrorContext.MoreInfo = "initialize ParameterMap";
parameterMap.Initialize(parameterMapNode);
- parameterMap.Id = sqlMapName + DOT + parameterMap.Id;
+ parameterMap.Id = _configScope.SqlMapNamespace + DOT + parameterMap.Id;
if (parameterMap.ExtendMap.Length >0)
{
ParameterMap superMap = null;
// Did we already build Extend ParameterMap ?
- if (sqlMap.ParameterMaps.Contains(sqlMapName + DOT + parameterMap.ExtendMap) == false)
+ if (_configScope.SqlMapper.ParameterMaps.Contains(_configScope.SqlMapNamespace + DOT + parameterMap.ExtendMap) == false)
{
- XmlNode superNode = config.SelectSingleNode("/sqlMap/parameterMaps/parameterMap[@id='"+ parameterMap.ExtendMap +"']");
+ XmlNode superNode = _configScope.SqlMapConfigDocument.SelectSingleNode("/sqlMap/parameterMaps/parameterMap[@id='"+ parameterMap.ExtendMap +"']");
if (superNode != null)
{
- BuildParameterMap( config, superNode, sqlMapName, sqlMap);
- superMap = sqlMap.GetParameterMap(sqlMapName + DOT + parameterMap.ExtendMap);
+ _configScope.ErrorContext.MoreInfo = "Build parent ParameterMap";
+ _configScope.NodeContext = superNode;
+ BuildParameterMap();
+ superMap = _configScope.SqlMapper.GetParameterMap(_configScope.SqlMapNamespace + DOT + parameterMap.ExtendMap);
}
else
{
- throw new ConfigurationException("In mapping file '"+sqlMapName+"' the parameterMap '"+parameterMap.Id+"' can not resolve extends attribut '"+parameterMap.ExtendMap+"'");
+ throw new ConfigurationException("In mapping file '"+ _configScope.SqlMapNamespace +"' the parameterMap '"+parameterMap.Id+"' can not resolve extends attribut '"+parameterMap.ExtendMap+"'");
}
}
else
{
- superMap = sqlMap.GetParameterMap(sqlMapName + DOT + parameterMap.ExtendMap);
+ superMap = _configScope.SqlMapper.GetParameterMap(_configScope.SqlMapNamespace + DOT + parameterMap.ExtendMap);
}
- // Do extends
+ // Add extends property
int index = 0;
- // Add parent property
foreach(string propertyName in superMap.GetPropertyNameArray())
{
parameterMap.InsertParameterProperty( index, superMap.GetProperty(propertyName) );
index++;
}
}
- sqlMap.AddParameterMap( parameterMap );
+ _configScope.SqlMapper.AddParameterMap( parameterMap );
}
}
/// <summary>
- ///
+ /// Build a ResultMap
/// </summary>
- /// <param name="config"></param>
- /// <param name="resultMapNode"></param>
- /// <param name="sqlMapName"></param>
- /// <param name="sqlMap"></param>
- private void BuildResultMap(XmlDocument config, XmlNode resultMapNode, string sqlMapName, SqlMapper sqlMap)
+ private void BuildResultMap()
{
ResultMap resultMap = null;
+ XmlNode resultMapNode = _configScope.NodeContext;
+
XmlSerializer serializer = new XmlSerializer(typeof(ResultMap));
- _errorContext.MoreInfo = "Build ResultMap";
+ _configScope.ErrorContext.MoreInfo = "build ResultMap";
string id = ((XmlAttribute)resultMapNode.Attributes.GetNamedItem("id")).Value;
- _errorContext.ObjectId = id;
+ _configScope.ErrorContext.ObjectId = id;
// Did we alredy process it
- if (sqlMap.ResultMaps.Contains( sqlMapName + DOT + id ) == false)
+ if (_configScope.SqlMapper.ResultMaps.Contains( _configScope.SqlMapNamespace + DOT + id ) == false)
{
resultMap = (ResultMap) serializer.Deserialize(new XmlNodeReader(resultMapNode));
- resultMap.SqlMapName = sqlMapName;
- _errorContext.MoreInfo = "Initialize resultMap";
- resultMap.Initialize( sqlMap, resultMapNode);
+
+ resultMap.SqlMapNameSpace = _configScope.SqlMapNamespace;
+
+ _configScope.ErrorContext.MoreInfo = "initialize ResultMap";
+ resultMap.Initialize( _configScope.SqlMapper, resultMapNode);
- resultMap.Id = sqlMapName + DOT + resultMap.Id;
+ resultMap.Id = _configScope.SqlMapNamespace + DOT + resultMap.Id;
if (resultMap.ExtendMap.Length >0)
{
ResultMap superMap = null;
- // Did we already build it ?
- if (sqlMap.ResultMaps.Contains(sqlMapName + DOT + resultMap.ExtendMap) == false)
+ // Did we already build Extend ResultMap?
+ if (_configScope.SqlMapper.ResultMaps.Contains(_configScope.SqlMapNamespace + DOT + resultMap.ExtendMap) == false)
{
- XmlNode superNode = config.SelectSingleNode("/sqlMap/resultMaps/resultMap[@id='"+ resultMap.ExtendMap +"']");
+ XmlNode superNode = _configScope.SqlMapDocument.SelectSingleNode("/sqlMap/resultMaps/resultMap[@id='"+ resultMap.ExtendMap +"']");
if (superNode != null)
{
- _errorContext.MoreInfo = "Build parent ResultMap";
- BuildResultMap( config, superNode, sqlMapName, sqlMap);
- superMap = sqlMap.GetResultMap(sqlMapName + DOT + resultMap.ExtendMap);
+ _configScope.ErrorContext.MoreInfo = "Build parent ResultMap";
+ _configScope.NodeContext = superNode;
+ BuildResultMap();
+ superMap = _configScope.SqlMapper.GetResultMap(_configScope.SqlMapNamespace + DOT + resultMap.ExtendMap);
}
else
{
- throw new ConfigurationException("In mapping file '"+sqlMapName+"' the resultMap '"+resultMap.Id+"' can not resolve extends attribut '"+resultMap.ExtendMap+"'" );
+ throw new ConfigurationException("In mapping file '"+_configScope.SqlMapNamespace+"' the resultMap '"+resultMap.Id+"' can not resolve extends attribut '"+resultMap.ExtendMap+"'" );
}
}
else
{
- superMap = sqlMap.GetResultMap(sqlMapName + DOT + resultMap.ExtendMap);
+ superMap = _configScope.SqlMapper.GetResultMap(_configScope.SqlMapNamespace + DOT + resultMap.ExtendMap);
}
// Add parent property
@@ -1311,7 +1380,7 @@
resultMap.AddResultPropery(property);
}
}
- sqlMap.AddResultMap( resultMap );
+ _configScope.SqlMapper.AddResultMap( resultMap );
}
}
@@ -1332,6 +1401,19 @@
}
return newId;
}
+
+
+
+ /// <summary>
+ /// Gets a resource stream.
+ /// </summary>
+ /// <param name="name">The resource key.</param>
+ /// <returns>A resource stream.</returns>
+ public Stream GetStream( string name )
+ {
+ return Assembly.GetExecutingAssembly().GetManifestResourceStream("IBatisNet.DataMapper." + name);
+ }
+
// private String ParsePropertyTokens(string str)
// {
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?view=diff&r1=158948&r2=158949
==============================================================================
--- incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs (original)
+++ incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs Thu Mar 24 13:28:19 2005
@@ -64,24 +64,24 @@
[NonSerialized]
private Discriminator _discriminator = null;
[NonSerialized]
- private string _sqlMapName = string.Empty;
+ private string _sqlMapNameSpace = string.Empty;
#endregion
#region Properties
/// <summary>
- /// The sqlMap name parent
+ /// The sqlMap namespace
/// </summary>
[XmlIgnoreAttribute]
- public string SqlMapName
+ public string SqlMapNameSpace
{
get
{
- return _sqlMapName;
+ return _sqlMapNameSpace;
}
set
{
- _sqlMapName = value;
+ _sqlMapNameSpace = value;
}
}
@@ -246,7 +246,7 @@
foreach ( XmlNode resultNode in node.SelectNodes("subMap") )
{
subMap = (SubMap) serializer.Deserialize(new XmlNodeReader(resultNode));
- subMap.ResulMapName = this.SqlMapName + DomSqlMapBuilder.DOT + subMap.ResulMapName;
+ subMap.ResulMapName = this.SqlMapNameSpace + DomSqlMapBuilder.DOT + subMap.ResulMapName;
this.Discriminator.Add( 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?view=diff&r1=158948&r2=158949
==============================================================================
--- incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultProperty.cs (original)
+++ incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultProperty.cs Thu Mar 24 13:28:19 2005
@@ -61,9 +61,9 @@
[NonSerialized]
private string _select = string.Empty;
[NonSerialized]
- private string _resulMapName = string.Empty;
+ private string _nestedResultMapName = string.Empty;
[NonSerialized]
- private ResultMap _resulMap = null;
+ private ResultMap _nestedResultMap = null;
[NonSerialized]
private string _dbType = string.Empty;
[NonSerialized]
@@ -147,13 +147,13 @@
}
/// <summary>
- /// The name of the ResultMap to set the property
+ /// The name of a nested ResultMap to set the property
/// </summary>
[XmlAttribute("resultMapping")]
- public string ResulMapName
+ public string NestedResultMapName
{
- get { return _resulMapName; }
- set { _resulMapName = value; }
+ get { return _nestedResultMapName; }
+ set { _nestedResultMapName = value; }
}
/// <summary>
@@ -212,13 +212,13 @@
}
/// <summary>
- /// The resultMap use to set the object
+ /// A nested ResultMap use to set a property
/// </summary>
[XmlIgnoreAttribute]
- public ResultMap ResultMap
+ public ResultMap NestedResultMap
{
- get { return _resulMap; }
- set { _resulMap = value; }
+ get { return _nestedResultMap; }
+ set { _nestedResultMap = value; }
}
#endregion
Modified: incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Statements/Procedure.cs
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Statements/Procedure.cs?view=diff&r1=158948&r2=158949
==============================================================================
--- incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Statements/Procedure.cs (original)
+++ incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Statements/Procedure.cs Thu Mar 24 13:28:19 2005
@@ -24,13 +24,14 @@
********************************************************************************/
#endregion
-#region Imprts
+#region Using
using System;
using System.Data;
using System.Xml.Serialization;
using IBatisNet.Common.Exceptions;
using IBatisNet.DataMapper.Exceptions;
+using IBatisNet.DataMapper.Scope;
#endregion
namespace IBatisNet.DataMapper.Configuration.Statements
@@ -78,11 +79,10 @@
/// <summary>
///
/// </summary>
- /// <param name="sqlMapName"></param>
- /// <param name="sqlMap"></param>
- override internal void Initialize(string sqlMapName, SqlMapper sqlMap)
+ /// <param name="configurationScope">The scope of the configuration</param>
+ override internal void Initialize(ConfigurationScope configurationScope)
{
- base.Initialize(sqlMapName, sqlMap);
+ base.Initialize( configurationScope );
if (this.ParameterMap == null)
{
throw new ConfigurationException("The parameterMap attribut is required in the procedure tag named '"+ this.Id +"'.");
Modified: incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Statements/Statement.cs
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Statements/Statement.cs?view=diff&r1=158948&r2=158949
==============================================================================
--- incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Statements/Statement.cs (original)
+++ incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Statements/Statement.cs Thu Mar 24 13:28:19 2005
@@ -24,7 +24,7 @@
********************************************************************************/
#endregion
-#region Imports
+#region Using
using System;
using System.Data;
using System.Collections;
@@ -41,6 +41,7 @@
using IBatisNet.DataMapper.Configuration.Cache;
using IBatisNet.DataMapper.Configuration.Sql;
using IBatisNet.DataMapper.Exceptions;
+using IBatisNet.DataMapper.Scope;
#endregion
namespace IBatisNet.DataMapper.Configuration.Statements
@@ -293,29 +294,28 @@
/// <summary>
/// Initialize an statement for the sqlMap.
/// </summary>
- /// <param name="sqlMapName"></param>
- /// <param name="sqlMap">The sqlMap.</param>
- internal virtual void Initialize(string sqlMapName, SqlMapper sqlMap)
+ /// <param name="configurationScope">The scope of the configuration</param>
+ internal virtual void Initialize(ConfigurationScope configurationScope)
{
if (_resultMapName != string.Empty )
{
- _resultMap = sqlMap.GetResultMap( sqlMapName + DOT + _resultMapName);
+ _resultMap = configurationScope.SqlMapper.GetResultMap( configurationScope.SqlMapNamespace + DOT + _resultMapName);
}
if (_parameterMapName != string.Empty )
{
- _parameterMap = sqlMap.GetParameterMap( sqlMapName + DOT + _parameterMapName);
+ _parameterMap = configurationScope.SqlMapper.GetParameterMap( configurationScope.SqlMapNamespace + DOT + _parameterMapName);
}
if (_resultClassName != string.Empty )
{
- _resultClass = sqlMap.GetType(_resultClassName);
+ _resultClass = configurationScope.SqlMapper.GetType(_resultClassName);
}
if (_parameterClassName != string.Empty )
{
- _parameterClass = sqlMap.GetType(_parameterClassName);
+ _parameterClass = configurationScope.SqlMapper.GetType(_parameterClassName);
}
if (_listClassName != string.Empty )
{
- _listClass = sqlMap.GetType(_listClassName);
+ _listClass = configurationScope.SqlMapper.GetType(_listClassName);
}
}
Modified: incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/IBatisNet.DataMapper.csproj
URL: http://svn.apache.org/viewcvs/incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/IBatisNet.DataMapper.csproj?view=diff&r1=158948&r2=158949
==============================================================================
--- incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/IBatisNet.DataMapper.csproj (original)
+++ incubator/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/IBatisNet.DataMapper.csproj Thu Mar 24 13:28:19 2005
@@ -158,6 +158,14 @@
BuildAction = "Content"
/>
<File
+ RelPath = "SqlMap.xsd"
+ BuildAction = "EmbeddedResource"
+ />
+ <File
+ RelPath = "SqlMapConfig.xsd"
+ BuildAction = "EmbeddedResource"
+ />
+ <File
RelPath = "SqlMapper.cs"
SubType = "Code"
BuildAction = "Compile"
@@ -594,6 +602,11 @@
/>
<File
RelPath = "MappedStatements\UpdateMappedStatement.cs"
+ SubType = "Code"
+ BuildAction = "Compile"
+ />
+ <File
+ RelPath = "Scope\ConfigurationScope.cs"
SubType = "Code"
BuildAction = "Compile"
/>