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>
+ ///
+ /// <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");
+ /// </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>
+ /// <alias>
+ /// <typeAlias alias="Account" type="Apache.Ibatis.DataMapper.Sqlite.Test.Domain.Account, Apache.Ibatis.DataMapper.Sqlite.Test"/>
+ /// </alias>
+ /// </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>
+ /// <database>
+ /// <provider name="SQLite3"/>
+ /// <dataSource name="ibatisnet.sqlmap" connectionString="Data Source=ibatisnet.sqlite;Version=3;"/>
+ /// </database>
+ /// </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>
+ /// <sqlMaps>
+ /// <sqlMap uri="file://../../Maps/Account.xml"/>
+ /// </sqlMaps>
+ /// </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);
+ }
}
}
}