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 2009/10/10 19:53:19 UTC

svn commit: r823904 - in /ibatis/cs/ibatisnet-3/trunk/src: Apache.Ibatis.Common/ Apache.Ibatis.Common/Data/ Apache.Ibatis.DataMapper.Sqlite.Test/ Apache.Ibatis.DataMapper.Sqlite.Test/Fixtures/ Apache.Ibatis.DataMapper/ Apache.Ibatis.DataMapper/Configur...

Author: rgrabowski
Date: Sat Oct 10 17:53:18 2009
New Revision: 823904

URL: http://svn.apache.org/viewvc?rev=823904&view=rev
Log:
Allow SqlMapConfig.xml to be expressed in code:

<sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <providers uri="file://providers.config"/>	
  <database>
   <provider name="SQLite3"/>
   <dataSource name="ibatisnet.sqlmap" connectionString="Data Source=ibatisnet.sqlite;Version=3;"/>
  </database>  
  <alias>
   <typeAlias alias="Account" type="Apache.Ibatis.DataMapper.Sqlite.Test.Domain.Account, Apache.Ibatis.DataMapper.Sqlite.Test"/>
  </alias>  
  <sqlMaps>
   <sqlMap uri="file://../../Maps/Account.xml"/>
  </sqlMaps>
</sqlMapConfig>

var codeConfig = new CodeConfigurationInterpreter(engine.ConfigurationStore);
codeConfig.AddDatabase(new SqliteDbProvider(), "Data Source=ibatisnet.sqlite;Version=3;");
codeConfig.AddAlias(typeof(Account), "Account");
codeConfig.AddSqlMap("file://../../Maps/Account.xml");

Added:
    ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Data/ProviderSerializer.cs
    ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Data/SqlServerDbProvider.cs
    ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Data/SqliteDbProvider.cs
    ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper.Sqlite.Test/Fixtures/CodeConfigurationInterpreterTestFixture.cs
    ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Configuration/Interpreters/Config/Xml/CodeConfigurationInterpreter.cs
Modified:
    ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Apache.Ibatis.Common.csproj
    ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper.Sqlite.Test/Apache.Ibatis.DataMapper.Sqlite.Test.csproj
    ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper.Sqlite.Test/Fixtures/BaseTest.cs
    ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Apache.Ibatis.DataMapper.csproj
    ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Configuration/ModelBuilder/BuildDataSource.cs
    ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Configuration/ModelBuilder/LoadSetting.cs

Modified: ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Apache.Ibatis.Common.csproj
URL: http://svn.apache.org/viewvc/ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Apache.Ibatis.Common.csproj?rev=823904&r1=823903&r2=823904&view=diff
==============================================================================
--- ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Apache.Ibatis.Common.csproj (original)
+++ ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Apache.Ibatis.Common.csproj Sat Oct 10 17:53:18 2009
@@ -158,6 +158,9 @@
     <Compile Include="Data\ProviderDeSerializer.cs">
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="Data\ProviderSerializer.cs" />
+    <Compile Include="Data\SqliteDbProvider.cs" />
+    <Compile Include="Data\SqlServerDbProvider.cs" />
     <Compile Include="Exceptions\ConfigurationException.cs">
       <SubType>Code</SubType>
     </Compile>

Added: ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Data/ProviderSerializer.cs
URL: http://svn.apache.org/viewvc/ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Data/ProviderSerializer.cs?rev=823904&view=auto
==============================================================================
--- ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Data/ProviderSerializer.cs (added)
+++ ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Data/ProviderSerializer.cs Sat Oct 10 17:53:18 2009
@@ -0,0 +1,63 @@
+#region Apache Notice
+/*****************************************************************************
+ * $Revision: 512878 $
+ * $LastChangedDate: 2009-06-13 21:53:23 -0400 (Sat, 13 Jun 2009) $
+ * $LastChangedBy: rgrabowski $
+ * 
+ * iBATIS.NET Data Mapper
+ * Copyright (C) 2008/2005 - The Apache Software Foundation
+ *  
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ ********************************************************************************/
+#endregion
+
+#region Using
+using Apache.Ibatis.Common.Configuration;
+#endregion 
+
+namespace Apache.Ibatis.Common.Data
+{
+    public sealed class ProviderSerializer
+    {
+        /// <summary>
+        /// Serializes the specified <see cref="IDbProvider"/> into an <see cred="IConfiguration" /> node.
+        /// </summary>
+        public static IConfiguration Serialize(IDbProvider dbProvider)
+        {
+            IConfiguration providerConfig = new MutableConfiguration("provider", dbProvider.Id, dbProvider.Id);
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_NAME] = dbProvider.Id;
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_ASSEMBLYNAME] = dbProvider.AssemblyName;
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_COMMANDBUILDERCLASS] = dbProvider.CommandBuilderClass;
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_COMMANDCLASS] = dbProvider.DbCommandClass;
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_CONNECTIONCLASS] = dbProvider.DbConnectionClass;
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_DESCRIPTION] = dbProvider.Description;
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_DEFAULT] = dbProvider.IsDefault.ToString().ToLower();
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_ENABLED] = dbProvider.IsEnabled.ToString().ToLower();
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_PARAMETERDBTYPECLASS] = dbProvider.ParameterDbTypeClass;
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_PARAMETERDBTYPEPROPERTY] = dbProvider.ParameterDbTypeProperty;
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_PARAMETERPREFIX] = dbProvider.ParameterPrefix;
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_PARAMETERPREFIX] = dbProvider.ParameterPrefix;
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_SETDBPARAMETERPRECISION] = dbProvider.SetDbParameterPrecision.ToString().ToLower();
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_SETDBPARAMETERSCALE] = dbProvider.SetDbParameterScale.ToString().ToLower();
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_SETDBPARAMETERSIZE] = dbProvider.SetDbParameterSize.ToString().ToLower();
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_USEDERIVEPARAMETERS] = dbProvider.UseDeriveParameters.ToString().ToLower();
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_USEPARAMETERPREFIXINPARAMETER] = dbProvider.UseParameterPrefixInParameter.ToString().ToLower();
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_USEPARAMETERPREFIXINSQL] = dbProvider.UseParameterPrefixInSql.ToString().ToLower();
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_USEPOSITIONALPARAMETERS] = dbProvider.UsePositionalParameters.ToString().ToLower();
+            providerConfig.Attributes[DataConstants.ATTRIBUTE_ALLOWMARS] = dbProvider.AllowMARS.ToString().ToLower();
+            return providerConfig;
+        }
+    }
+}

Added: ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Data/SqlServerDbProvider.cs
URL: http://svn.apache.org/viewvc/ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Data/SqlServerDbProvider.cs?rev=823904&view=auto
==============================================================================
--- ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Data/SqlServerDbProvider.cs (added)
+++ ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Data/SqlServerDbProvider.cs Sat Oct 10 17:53:18 2009
@@ -0,0 +1,36 @@
+namespace Apache.Ibatis.Common.Data
+{
+    /// <summary>
+    /// System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+    /// </summary>
+    public class SqlServerDbProvider : DbProvider
+    {
+        /// <summary>
+        /// Sets default values for connecting to SQL Server.
+        /// </summary>
+        public SqlServerDbProvider()
+        {
+            Id = "sqlServer";
+            AssemblyName = "System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
+            CommandBuilderClass = "System.Data.SqlClient.SqlCommandBuilder";
+            DbCommandClass = "System.Data.SqlClient.SqlCommand";
+            DbConnectionClass = "System.Data.SqlClient.SqlConnection";
+            Description = "Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0";
+            IsDefault = true;
+            IsEnabled = true;
+            ParameterDbTypeClass = "System.Data.SqlDbType";
+            ParameterDbTypeProperty = "SqlDbType";
+            ParameterPrefix = "@";
+            SetDbParameterPrecision = false;
+            SetDbParameterScale = false;
+            SetDbParameterSize = false; // ???
+            UseDeriveParameters = false; // ???
+            UseParameterPrefixInParameter = true;
+            UseParameterPrefixInSql = true;
+            UsePositionalParameters = false;
+            AllowMARS = false;
+            // parameterClass="System.Data.SqlClient.SqlParameter"
+            // dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
+        }
+    }
+}

Added: ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Data/SqliteDbProvider.cs
URL: http://svn.apache.org/viewvc/ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Data/SqliteDbProvider.cs?rev=823904&view=auto
==============================================================================
--- ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Data/SqliteDbProvider.cs (added)
+++ ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.Common/Data/SqliteDbProvider.cs Sat Oct 10 17:53:18 2009
@@ -0,0 +1,35 @@
+namespace Apache.Ibatis.Common.Data
+{
+    /// <summary>
+    /// System.Data.SQLite, Version=1.0.61.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139
+    /// </summary>
+    public class SqliteDbProvider : DbProvider
+    {
+        /// <summary>
+        /// Sets default values for connecting to Sqlite.
+        /// </summary>
+        public SqliteDbProvider()
+        {
+            Id = "SQLite3";
+            AssemblyName = "System.Data.SQLite, Version=1.0.61.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139";
+            CommandBuilderClass = "System.Data.SQLite.SQLiteCommandBuilder";
+            DbCommandClass = "System.Data.SQLite.SQLiteCommand";
+            DbConnectionClass = "System.Data.SQLite.SQLiteConnection";
+            Description = "System.Data.SQLite, Version=1.0.61.0";
+            IsDefault = true;
+            IsEnabled = true;
+            ParameterDbTypeClass = "System.Data.SQLite.SQLiteType";
+            ParameterDbTypeProperty = "DbType";
+            ParameterPrefix = "@";
+            SetDbParameterPrecision = false;
+            SetDbParameterScale = false;
+            SetDbParameterSize = false; // ???
+            UseDeriveParameters = false; // ???
+            UseParameterPrefixInParameter = true;
+            UseParameterPrefixInSql = true;
+            UsePositionalParameters = false;
+            AllowMARS = false;
+            // parameterClass="System.Data.SQLite.SQLiteParameter"
+        }
+    }
+}

Modified: ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper.Sqlite.Test/Apache.Ibatis.DataMapper.Sqlite.Test.csproj
URL: http://svn.apache.org/viewvc/ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper.Sqlite.Test/Apache.Ibatis.DataMapper.Sqlite.Test.csproj?rev=823904&r1=823903&r2=823904&view=diff
==============================================================================
--- ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper.Sqlite.Test/Apache.Ibatis.DataMapper.Sqlite.Test.csproj (original)
+++ ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper.Sqlite.Test/Apache.Ibatis.DataMapper.Sqlite.Test.csproj Sat Oct 10 17:53:18 2009
@@ -55,6 +55,7 @@
   <ItemGroup>
     <Compile Include="Domain\Account.cs" />
     <Compile Include="Fixtures\BaseTest.cs" />
+    <Compile Include="Fixtures\CodeConfigurationInterpreterTestFixture.cs" />
     <Compile Include="Fixtures\PreserveWhitespaceTestFixture.cs" />
     <Compile Include="Fixtures\ScriptBase.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />

Modified: ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper.Sqlite.Test/Fixtures/BaseTest.cs
URL: http://svn.apache.org/viewvc/ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper.Sqlite.Test/Fixtures/BaseTest.cs?rev=823904&r1=823903&r2=823904&view=diff
==============================================================================
--- ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper.Sqlite.Test/Fixtures/BaseTest.cs (original)
+++ ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper.Sqlite.Test/Fixtures/BaseTest.cs Sat Oct 10 17:53:18 2009
@@ -13,20 +13,20 @@
     [TestFixture]
     public abstract class BaseTest : ScriptBase
     {
-        protected static IDataMapper DataMapper;
-
-        protected static ISessionFactory SessionFactory;
+        protected IDataMapper DataMapper;
+        protected ISessionFactory SessionFactory;
+        protected IConfigurationEngine ConfigurationEngine;
 
         [TestFixtureSetUp]
         protected virtual void TestFixtureSetUp()
         {
             LogManager.Adapter = new ConsoleOutLoggerFA(new NameValueCollection());
 
-            IConfigurationEngine engine = new DefaultConfigurationEngine();
-            engine.RegisterInterpreter(new XmlConfigurationInterpreter("SqlMap.config"));
+            ConfigurationEngine = new DefaultConfigurationEngine();
+            ConfigurationEngine.RegisterInterpreter(new XmlConfigurationInterpreter("SqlMap.config"));
 
-            IMapperFactory mapperFactory = engine.BuildMapperFactory();
-            SessionFactory = engine.ModelStore.SessionFactory;
+            IMapperFactory mapperFactory = ConfigurationEngine.BuildMapperFactory();
+            SessionFactory = ConfigurationEngine.ModelStore.SessionFactory;
             DataMapper = ((IDataMapperAccessor)mapperFactory).DataMapper;
         }
 

Added: ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper.Sqlite.Test/Fixtures/CodeConfigurationInterpreterTestFixture.cs
URL: http://svn.apache.org/viewvc/ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper.Sqlite.Test/Fixtures/CodeConfigurationInterpreterTestFixture.cs?rev=823904&view=auto
==============================================================================
--- ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper.Sqlite.Test/Fixtures/CodeConfigurationInterpreterTestFixture.cs (added)
+++ ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper.Sqlite.Test/Fixtures/CodeConfigurationInterpreterTestFixture.cs Sat Oct 10 17:53:18 2009
@@ -0,0 +1,129 @@
+using System;
+using System.Collections;
+using Apache.Ibatis.Common.Configuration;
+using Apache.Ibatis.Common.Data;
+using Apache.Ibatis.DataMapper.Configuration;
+using Apache.Ibatis.DataMapper.Configuration.Interpreters.Config.Xml;
+using Apache.Ibatis.DataMapper.Sqlite.Test.Domain;
+using NUnit.Framework;
+
+namespace Apache.Ibatis.DataMapper.Sqlite.Test.Fixtures
+{
+    [TestFixture]
+    public class CodeConfigurationInterpreterTestFixture : BaseTest
+    {
+        [Test]
+        public void CodeConfigurationMatchesSqlMapConfig()
+        {
+            #region SqlMapConfig.xml
+            /*
+            <sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" 
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
+	            <settings>
+		            <setting useStatementNamespaces="true"/>
+		            <setting cacheModelsEnabled="false"/>
+		            <setting validateSqlMap="false"/>
+		            <setting useReflectionOptimizer="false"/>
+		            <setting preserveWhitespace="false"/>
+	            </settings>	
+	            <providers uri="file://providers.config"/>
+	            <database>
+		            <provider name="SQLite3"/>
+		            <dataSource name="ibatisnet.sqlmap" connectionString="Data Source=ibatisnet.sqlite;Version=3;"/>
+	            </database>  
+	            <alias>
+		            <typeAlias alias="Account" type="Apache.Ibatis.DataMapper.Sqlite.Test.Domain.Account, Apache.Ibatis.DataMapper.Sqlite.Test"/>
+	            </alias>  
+              <sqlMaps>
+		            <sqlMap uri="file://../../Maps/Account.xml"/>
+              </sqlMaps>
+            </sqlMapConfig>
+            */
+            #endregion
+
+            // slightly awkward to creating ConfigurationSetting, then engine, then interpreter ???
+
+            ConfigurationSetting settings = new ConfigurationSetting();
+            settings.UseStatementNamespaces = true;
+            settings.IsCacheModelsEnabled = false;
+            settings.ValidateMapperConfigFile = false;
+            settings.UseReflectionOptimizer = false;
+            settings.PreserveWhitespace = false;
+
+            var engine = new DefaultConfigurationEngine(settings);
+
+            CodeConfigurationInterpreter codeConfig = new CodeConfigurationInterpreter(engine.ConfigurationStore);
+            codeConfig.AddDatabase(new SqliteDbProvider(), "Data Source=ibatisnet.sqlite;Version=3;");
+            codeConfig.AddAlias(typeof(Account), "Account");
+            codeConfig.AddSqlMap("file://../../Maps/Account.xml", true);
+
+            engine.RegisterInterpreter(codeConfig);
+            IMapperFactory mapperFactory = engine.BuildMapperFactory();
+            IDataMapper localDataMapper = ((IDataMapperAccessor)mapperFactory).DataMapper;
+
+            IConfigurationStore store = engine.ConfigurationStore;
+            IConfigurationStore baseStore = ConfigurationEngine.ConfigurationStore;
+
+            assertConfiguration(baseStore.Properties, store.Properties);
+            // assertConfiguration(baseStore.Settings, store.Settings);
+            assertConfiguration(baseStore.Databases, store.Databases);
+            assertConfiguration(baseStore.TypeHandlers, store.TypeHandlers);
+            assertConfiguration(baseStore.Alias, store.Alias);
+            assertConfiguration(baseStore.CacheModels, store.CacheModels);
+            assertConfiguration(baseStore.ResultMaps, store.ResultMaps);
+            assertConfiguration(baseStore.Statements, store.Statements);
+            assertConfiguration(baseStore.ParameterMaps, store.ParameterMaps);
+
+            InitScript(SessionFactory.DataSource, "../../Scripts/account-init.sql");
+
+            ICollection items = localDataMapper.QueryForList("Account.GetAllAccounts1", null);
+            Assert.IsTrue(items.Count > 1);
+
+            items = localDataMapper.QueryForList("Account.GetAllAccounts2", null);
+            Assert.IsTrue(items.Count > 1);
+        }
+
+        private static void assertConfiguration(IConfiguration[] x, IConfiguration[] y)
+        {
+            CollectionAssert.AreEqual(x, y, ConfigurationComparer.Instance);
+        }
+
+        class ConfigurationComparer : IComparer
+        {
+            public static readonly ConfigurationComparer Instance = new ConfigurationComparer();
+
+            public int Compare(object x, object y)
+            {
+                IConfiguration xConfiguration = (IConfiguration)x;
+                IConfiguration yConfiguration = (IConfiguration)y;
+
+                bool same = 
+                    equal(xConfiguration.Id, yConfiguration.Id) &&
+                    equal(xConfiguration.Type, yConfiguration.Type) &&
+                    equal(xConfiguration.Value, yConfiguration.Value);
+
+                // mainly care about 0
+                return same ? 0 : -1;
+            }
+        }
+        
+        static bool equal(IComparable x, IComparable y)
+        {
+            bool same = false;
+
+            if (x == null && y == null)
+            {
+                same = true;
+            }
+            else
+            {
+                if (x != null && y != null)
+                {
+                    same = x.CompareTo(y) == 0;
+                }
+            }
+
+            return same;
+        }
+    }
+}

Modified: ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Apache.Ibatis.DataMapper.csproj
URL: http://svn.apache.org/viewvc/ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Apache.Ibatis.DataMapper.csproj?rev=823904&r1=823903&r2=823904&view=diff
==============================================================================
--- ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Apache.Ibatis.DataMapper.csproj (original)
+++ ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Apache.Ibatis.DataMapper.csproj Sat Oct 10 17:53:18 2009
@@ -107,6 +107,7 @@
     <Compile Include="Configuration\DefaultConfigurationEngine.cs" />
     <Compile Include="Configuration\DefaultConfigurationStore.cs" />
     <Compile Include="Configuration\DefaultModelBuilder.cs" />
+    <Compile Include="Configuration\Interpreters\Config\Xml\CodeConfigurationInterpreter.cs" />
     <Compile Include="Configuration\Interpreters\Config\Xml\Processor\Handlers\ProcessDefaultElement.cs" />
     <Compile Include="Configuration\Interpreters\Config\Xml\Processor\Handlers\ProcessIncludeElement.cs" />
     <Compile Include="Configuration\IConfigurationEngine.cs" />

Added: ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Configuration/Interpreters/Config/Xml/CodeConfigurationInterpreter.cs
URL: http://svn.apache.org/viewvc/ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Configuration/Interpreters/Config/Xml/CodeConfigurationInterpreter.cs?rev=823904&view=auto
==============================================================================
--- ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Configuration/Interpreters/Config/Xml/CodeConfigurationInterpreter.cs (added)
+++ ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Configuration/Interpreters/Config/Xml/CodeConfigurationInterpreter.cs Sat Oct 10 17:53:18 2009
@@ -0,0 +1,163 @@
+using System;
+using System.Xml;
+using Apache.Ibatis.Common.Configuration;
+using Apache.Ibatis.Common.Contracts;
+using Apache.Ibatis.Common.Data;
+using Apache.Ibatis.Common.Resources;
+using Apache.Ibatis.DataMapper.Configuration.Interpreters.Config.Xml.Processor;
+
+namespace Apache.Ibatis.DataMapper.Configuration.Interpreters.Config.Xml
+{
+    /// <summary>
+    /// Allows most of the XML normally contained in SqlMapConfig.xml to be expressed in code. SqlMap items 
+    /// continue to be processed as XML resources.
+    /// </summary>
+    /// <remarks>
+    /// Custom properties should be added to an instance of ConfigurationSettings passed into the engine.
+    /// </remarks>
+    /// <example>
+    /// <code>
+    /// 
+    /// &lt;sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" &gt;
+    ///   &lt;providers uri="file://providers.config"/&gt;	
+    ///   &lt;database&gt;
+    ///    &lt;provider name="SQLite3"/&gt;
+    ///    &lt;dataSource name="ibatisnet.sqlmap" connectionString="Data Source=ibatisnet.sqlite;Version=3;"/&gt;
+    ///   &lt;/database&gt;  
+    ///   &lt;alias&gt;
+    ///    &lt;typeAlias alias="Account" type="Apache.Ibatis.DataMapper.Sqlite.Test.Domain.Account, Apache.Ibatis.DataMapper.Sqlite.Test"/&gt;
+    ///   &lt;/alias&gt;  
+    ///   &lt;sqlMaps&gt;
+    ///    &lt;sqlMap uri="file://../../Maps/Account.xml"/&gt;
+    ///   &lt;/sqlMaps&gt;
+    /// &lt;/sqlMapConfig>
+    ///
+    /// var codeConfig = new CodeConfigurationInterpreter(engine.ConfigurationStore);
+    /// codeConfig.AddDatabase(new SqliteDbProvider(), "Data Source=ibatisnet.sqlite;Version=3;");
+    /// codeConfig.AddAlias(typeof(Account), "Account");
+    /// codeConfig.AddSqlMap("file://../../Maps/Account.xml");
+    /// </code>
+    /// </example>
+    public class CodeConfigurationInterpreter : IConfigurationInterpreter
+    {
+        private IConfigurationStore configurationStore;
+
+        /// <summary>
+        /// Allows adding items to the IConfigurationStore before ProcessResource is called.
+        /// </summary>
+        public CodeConfigurationInterpreter(IConfigurationStore store)
+        {
+            Contract.Require.That(store, Is.Not.Null).When("retrieve argument configurationStore in CodeConfigurationInterpreter constructor");
+
+            configurationStore = store;
+        }
+
+        /// <summary>
+        /// Should obtain the contents from the resource,
+        /// interpret it and populate the <see cref="IConfigurationStore"/>
+        /// accordingly.
+        /// </summary>
+        /// <param name="store">The store.</param>
+        public void ProcessResource(IConfigurationStore store)
+        {
+            configurationStore = store;
+        }
+
+        /// <summary>
+        /// Adds a Type alias to the store.
+        /// </summary>
+        /// <remarks>
+        /// Uses ConfigConstants.ELEMENT_TYPEALIAS as the value for IConfiguration.Type.
+        /// </remarks>
+        /// <example>
+        /// <code>
+        /// &lt;alias&gt;
+        ///	 &lt;typeAlias alias="Account" type="Apache.Ibatis.DataMapper.Sqlite.Test.Domain.Account, Apache.Ibatis.DataMapper.Sqlite.Test"/&gt;
+	    /// &lt;/alias&gt;
+        /// </code>
+        /// </example>
+        public void AddAlias(Type type, string name)
+        {
+            IConfiguration typeAlias = new MutableConfiguration(
+                ConfigConstants.ELEMENT_TYPEALIAS,
+                name,
+                type.FullName + ", " + type.Assembly.GetName().Name);
+
+            configurationStore.AddAliasConfiguration(typeAlias);
+        }
+
+        /// <summary>
+        /// Adds a database configuration item to the store.
+        /// </summary>
+        /// <example>
+        /// <code>
+        /// &lt;database&gt;
+        ///  &lt;provider name="SQLite3"/&gt;
+        ///  &lt;dataSource name="ibatisnet.sqlmap" connectionString="Data Source=ibatisnet.sqlite;Version=3;"/&gt;
+        /// &lt;/database&gt;  
+        /// </code>
+        /// </example>
+        public void AddDatabase(IDbProvider dbProvider, string dataSourceConnectionString)
+        {
+            // hack: serialize the object to IConfiguration so it can eventually be converted back to IDbProvider
+            configurationStore.AddProviderConfiguration(ProviderSerializer.Serialize(dbProvider));
+            
+            MutableConfiguration database = new MutableConfiguration(ConfigConstants.ELEMENT_DATABASE);
+            
+            MutableConfiguration provider = database.CreateChild("provider");
+            provider.CreateAttribute(ConfigConstants.ATTRIBUTE_NAME, dbProvider.Id);
+
+            MutableConfiguration dataSource = database.CreateChild("dataSource");
+            dataSource.CreateAttribute(ConfigConstants.ATTRIBUTE_NAME, "defaultDataSource");
+            dataSource.CreateAttribute("connectionString", dataSourceConnectionString);
+
+            configurationStore.AddDatabaseConfiguration(database);
+        }
+
+        /// <summary>
+        /// Adds an XML sql map configuration item.
+        /// </summary>
+        /// <param name="uri">A URI to XML data.</param>
+        /// <param name="validate">Validate the XML sqlMap file using SqlMap.xsd</param>
+        /// <example>
+        /// <code>
+        /// &lt;sqlMaps&gt;
+        ///  &lt;sqlMap uri="file://../../Maps/Account.xml"/&gt;
+        /// &lt;/sqlMaps&gt;
+        /// </code>
+        /// </example>
+        public void AddSqlMap(string uri, bool validate)
+        {
+            IResource resource = ResourceLoaderRegistry.GetResource(uri);
+
+            using (resource)
+            {
+                if (validate)
+                {
+                    XmlDocument document = new XmlDocument();
+                    document.Load(resource.Stream);
+                    SchemaValidator.Validate(document.ChildNodes[1], "SqlMap.xsd");
+                }
+
+                resource.Stream.Position = 0;
+                using (XmlTextReader reader = new XmlTextReader(resource.Stream))
+                {
+                    using (XmlMappingProcessor processor = new XmlMappingProcessor())
+                    {
+                        processor.Process(reader, configurationStore);
+                    }
+                }
+            }
+        }
+
+        // TODO: add support for type handlers
+
+        /// <summary>
+        /// Unused. Always returns null.
+        /// </summary>
+        public IResource Resource
+        {
+            get { return null; }
+        }
+    }
+}
\ No newline at end of file

Modified: ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Configuration/ModelBuilder/BuildDataSource.cs
URL: http://svn.apache.org/viewvc/ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Configuration/ModelBuilder/BuildDataSource.cs?rev=823904&r1=823903&r2=823904&view=diff
==============================================================================
--- ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Configuration/ModelBuilder/BuildDataSource.cs (original)
+++ ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Configuration/ModelBuilder/BuildDataSource.cs Sat Oct 10 17:53:18 2009
@@ -42,7 +42,8 @@
                 IConfiguration dataBaseConfig = store.Databases[0];
 
                 IConfiguration providerConfig = dataBaseConfig.Children.Find(DataConstants.ELEMENT_PROVIDER)[0];
-                IDbProvider dbProvider = dbProviderFactory.GetDbProvider(providerConfig.Value);
+                string key = providerConfig.Value ?? providerConfig.GetAttributeValue(DataConstants.ATTRIBUTE_NAME);
+                IDbProvider dbProvider = dbProviderFactory.GetDbProvider(key);
 
                 dataSource = DataSourceDeSerializer.Deserialize(dbProvider, commandTimeOut, dataBaseConfig);
             }

Modified: ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Configuration/ModelBuilder/LoadSetting.cs
URL: http://svn.apache.org/viewvc/ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Configuration/ModelBuilder/LoadSetting.cs?rev=823904&r1=823903&r2=823904&view=diff
==============================================================================
--- ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Configuration/ModelBuilder/LoadSetting.cs (original)
+++ ibatis/cs/ibatisnet-3/trunk/src/Apache.Ibatis.DataMapper/Configuration/ModelBuilder/LoadSetting.cs Sat Oct 10 17:53:18 2009
@@ -59,8 +59,13 @@
                     }
                     else if (setting.Id == ConfigConstants.ATTRIBUTE_COMMAND_TIMEOUT)
                     {
+                        // not documented well? not a property on ConfigurationSetting ???
                         commandTimeOut = Convert.ToInt32(setting.Value);
                     }
+                    else if (setting.Id == ConfigConstants.ATTRIBUTE_PRESERVEWHITSPACE)
+                    {
+                        preserveWhitespace = Convert.ToBoolean(setting.Value);
+                    }
                 }
             }
         }