Completely remove support from SQLite, use SqlCe instead

--HG--
branch : dev
rename : src/Orchard/Data/Migration/Interpreters/SqLiteCommandInterpreter.cs => src/Orchard/Data/Migration/Interpreters/SqlCeCommandInterpreter.cs
This commit is contained in:
Renaud Paquay
2010-07-13 19:49:42 -07:00
parent c0584f57a5
commit 62f900b5d8
23 changed files with 135 additions and 160 deletions

View File

@@ -50,19 +50,19 @@ namespace Orchard.Tests.Data.Builders {
[Test]
public void SQLiteSchemaShouldBeGeneratedAndUsable() {
public void SqlCeSchemaShouldBeGeneratedAndUsable() {
var recordDescriptors = new[] {
new RecordBlueprint {TableName = "Hello", Type = typeof (FooRecord)}
};
var manager = (IDataServicesProviderFactory) new DataServicesProviderFactory(new[] {
new Meta<CreateDataServicesProvider>(
(dataFolder, connectionString) => new SQLiteDataServicesProvider(dataFolder, connectionString),
new Dictionary<string, object> {{"ProviderName", "SQLite"}})
(dataFolder, connectionString) => new SqlCeDataServicesProvider(dataFolder, connectionString),
new Dictionary<string, object> {{"ProviderName", "SqlCe"}})
});
var parameters = new SessionFactoryParameters {
Provider = "SQLite",
Provider = "SqlCe",
DataFolder = _tempDataFolder,
RecordDescriptors = recordDescriptors
};

View File

@@ -26,13 +26,13 @@ namespace Orchard.Tests.DataMigration {
var builder = new ContainerBuilder();
builder.RegisterInstance(new ShellSettings { DataTablePrefix = "TEST_", DataProvider = "SQLite" });
builder.RegisterInstance(new ShellSettings { DataTablePrefix = "TEST_", DataProvider = "SqlCe" });
var session = _sessionFactory.OpenSession();
builder.RegisterType<DefaultDataMigrationInterpreter>().As<IDataMigrationInterpreter>();
builder.RegisterInstance(new DefaultContentManagerTests.TestSessionLocator(session)).As<ISessionLocator>();
builder.RegisterInstance(new ShellSettings { DataProvider = "SQLite", DataTablePrefix = "TEST_" }).As<ShellSettings>();
builder.RegisterType<SqLiteCommandInterpreter>().As<ICommandInterpreter>();
builder.RegisterInstance(new ShellSettings { DataProvider = "SqlCe", DataTablePrefix = "TEST_" }).As<ShellSettings>();
builder.RegisterType<SqlCeCommandInterpreter>().As<ICommandInterpreter>();
_container = builder.Build();
_interpreter = _container.Resolve<IDataMigrationInterpreter>() as DefaultDataMigrationInterpreter;
@@ -65,7 +65,7 @@ namespace Orchard.Tests.DataMigration {
.DropIndex("IDX_XYZ"))
.DropForeignKey("Address", "User_Address")
.DropTable("Address")
.ExecuteSql("drop database", statement => statement.ForProvider("SQLite"))
.ExecuteSql("drop database", statement => statement.ForProvider("SqlCe"))
.ExecuteSql("DROP DATABASE", statement => statement.ForProvider("SQLServer"));
}

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using FluentNHibernate.Automapping;
using FluentNHibernate.Automapping.Alterations;
@@ -19,12 +20,21 @@ namespace Orchard.Tests {
//var persistenceModel = AutoMap.Source(new Types(types))
// .Alterations(alt => AddAlterations(alt, types))
// .Conventions.AddFromAssemblyOf<DataModule>();
var persistenceModel = AbstractDataServicesProvider.CreatePersistenceModel(types.Select(t => new RecordBlueprint { TableName = "Test_" + t.Name,Type = t }));
var persistenceModel = AbstractDataServicesProvider.CreatePersistenceModel(types.Select(t => new RecordBlueprint { TableName = "Test_" + t.Name, Type = t }));
var persistenceConfigurer = new SqlCeDataServicesProvider(fileName).GetPersistenceConfigurer(true/*createDatabase*/);
((MsSqlCeConfiguration)persistenceConfigurer).ShowSql();
return Fluently.Configure()
.Database(SQLiteConfiguration.Standard.UsingFile(fileName).ShowSql())
.Database(persistenceConfigurer)
.Mappings(m => m.AutoMappings.Add(persistenceModel))
.ExposeConfiguration(c => new SchemaExport(c).Create(false /*script*/, true /*export*/))
.ExposeConfiguration(c => {
// This is to work around what looks to be an issue in the NHibernate driver:
// When inserting a row with IDENTITY column, the "SELET @@IDENTITY" statement
// is issued as a separate command. By default, it is also issued in a separate
// connection, which is not supported (returns NULL).
c.SetProperty("connection.release_mode", "on_close");
new SchemaExport(c).Create(false /*script*/, true /*export*/);
})
.BuildSessionFactory();
}

View File

@@ -21,13 +21,13 @@ namespace Orchard.Tests.Environment.Configuration {
[Test]
public void SingleSettingsFileShouldComeBackAsExpected() {
_appDataFolder.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SQLite\r\nDataConnectionString: something else");
_appDataFolder.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SqlCe\r\nDataConnectionString: something else");
IShellSettingsManager loader = new ShellSettingsManager(_appDataFolder, new Mock<IShellSettingsManagerEventHandler>().Object);
var settings = loader.LoadSettings().Single();
Assert.That(settings, Is.Not.Null);
Assert.That(settings.Name, Is.EqualTo("Default"));
Assert.That(settings.DataProvider, Is.EqualTo("SQLite"));
Assert.That(settings.DataProvider, Is.EqualTo("SqlCe"));
Assert.That(settings.DataConnectionString, Is.EqualTo("something else"));
}
@@ -35,8 +35,8 @@ namespace Orchard.Tests.Environment.Configuration {
[Test]
public void MultipleFilesCanBeDetected() {
_appDataFolder.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SQLite\r\nDataConnectionString: something else");
_appDataFolder.CreateFile("Sites\\Another\\Settings.txt", "Name: Another\r\nDataProvider: SQLite2\r\nDataConnectionString: something else2");
_appDataFolder.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SqlCe\r\nDataConnectionString: something else");
_appDataFolder.CreateFile("Sites\\Another\\Settings.txt", "Name: Another\r\nDataProvider: SqlCe2\r\nDataConnectionString: something else2");
IShellSettingsManager loader = new ShellSettingsManager(_appDataFolder, new Mock<IShellSettingsManagerEventHandler>().Object);
var settings = loader.LoadSettings();
@@ -44,18 +44,18 @@ namespace Orchard.Tests.Environment.Configuration {
var def = settings.Single(x => x.Name == "Default");
Assert.That(def.Name, Is.EqualTo("Default"));
Assert.That(def.DataProvider, Is.EqualTo("SQLite"));
Assert.That(def.DataProvider, Is.EqualTo("SqlCe"));
Assert.That(def.DataConnectionString, Is.EqualTo("something else"));
var alt = settings.Single(x => x.Name == "Another");
Assert.That(alt.Name, Is.EqualTo("Another"));
Assert.That(alt.DataProvider, Is.EqualTo("SQLite2"));
Assert.That(alt.DataProvider, Is.EqualTo("SqlCe2"));
Assert.That(alt.DataConnectionString, Is.EqualTo("something else2"));
}
[Test]
public void NewSettingsCanBeStored() {
_appDataFolder.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SQLite\r\nDataConnectionString: something else");
_appDataFolder.CreateFile("Sites\\Default\\Settings.txt", "Name: Default\r\nDataProvider: SqlCe\r\nDataConnectionString: something else");
IShellSettingsManager loader = new ShellSettingsManager(_appDataFolder, new Mock<IShellSettingsManagerEventHandler>().Object);
var foo = new ShellSettings { Name = "Foo", DataProvider = "Bar", DataConnectionString = "Quux" };

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using FluentNHibernate.Automapping;
using FluentNHibernate.Cfg;
@@ -9,6 +10,7 @@ using NHibernate;
using NHibernate.Criterion;
using NHibernate.Tool.hbm2ddl;
using NUnit.Framework;
using Orchard.Data.Providers;
using Orchard.Tests.Records;
namespace Orchard.Tests {
@@ -32,17 +34,28 @@ namespace Orchard.Tests {
[Test]
public void CreatingSchemaForStatedClassesInTempFile() {
var types = new Types(typeof (FooRecord), typeof (BarRecord));
var types = new Types(typeof(FooRecord), typeof(BarRecord));
var fileName = "temp.sdf";
var persistenceConfigurer = new SqlCeDataServicesProvider(fileName).GetPersistenceConfigurer(true/*createDatabase*/);
((MsSqlCeConfiguration)persistenceConfigurer).ShowSql();
var sessionFactory = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.UsingFile("temp"))
.Database(persistenceConfigurer)
.Mappings(m => m.AutoMappings.Add(AutoMap.Source(types)))
.ExposeConfiguration(c => new SchemaExport(c).Create(false, true))
.ExposeConfiguration(c => {
// This is to work around what looks to be an issue in the NHibernate driver:
// When inserting a row with IDENTITY column, the "SELET @@IDENTITY" statement
// is issued as a separate command. By default, it is also issued in a separate
// connection, which is not supported (returns NULL).
c.SetProperty("connection.release_mode", "on_close");
new SchemaExport(c).Create(false, true);
})
.BuildSessionFactory();
var session = sessionFactory.OpenSession();
session.Save(new FooRecord {Name = "Hello"});
session.Save(new BarRecord {Height = 3, Width = 4.5m});
session.Save(new FooRecord { Name = "Hello" });
session.Save(new BarRecord { Height = 3, Width = 4.5m });
session.Close();
session = sessionFactory.OpenSession();
@@ -52,22 +65,13 @@ namespace Orchard.Tests {
session.Close();
}
[Test]
public void InMemorySQLiteCanBeUsedInSessionFactory() {
var sessionFactory = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory())
.BuildSessionFactory();
var session = sessionFactory.OpenSession();
session.Close();
}
[Test]
public void UsingDataUtilityToBuildSessionFactory() {
var factory = DataUtility.CreateSessionFactory(typeof (FooRecord), typeof (BarRecord));
var factory = DataUtility.CreateSessionFactory(typeof(FooRecord), typeof(BarRecord));
var session = factory.OpenSession();
var foo1 = new FooRecord {Name = "world"};
var foo1 = new FooRecord { Name = "world" };
session.Save(foo1);
session.Close();

View File

@@ -108,10 +108,9 @@
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Data.SQLite, Version=1.0.65.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
<Reference Include="System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\sqlite\System.Data.SQLite.DLL</HintPath>
<Private>True</Private>
<HintPath>..\..\lib\sqlce\System.Data.SqlServerCe.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Serialization">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
@@ -294,7 +293,15 @@
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
<Target Name="CopySqlCeBinaries">
<ItemGroup>
<SqlCeBinariesx86 Include="$(ProjectDir)..\..\lib\sqlce\x86\*.*" />
<SqlCeBinariesx64 Include="$(ProjectDir)..\..\lib\sqlce\amd64\*.*" />
</ItemGroup>
<Copy SourceFiles="@(SqlCeBinariesx86)" DestinationFolder="$(ProjectDir)$(OutputPath)x86" SkipUnchangedFiles="true" />
<Copy SourceFiles="@(SqlCeBinariesx64)" DestinationFolder="$(ProjectDir)$(OutputPath)amd64" SkipUnchangedFiles="true" />
</Target>
<Target Name="AfterBuild">
<CallTarget Targets="CopySqlCeBinaries" />
</Target></Project>