Fixed removal of database tables when using data table prefix.

This commit is contained in:
Sipke Schoorstra
2015-07-30 16:39:17 +01:00
parent 73170a0d63
commit c746fe926b
5 changed files with 24 additions and 11 deletions

View File

@@ -29,5 +29,8 @@ namespace Orchard.Tests.DataMigration.Utilities {
return tableName;
}
public string RemovePrefixFromTableName(string prefixedTableName) {
return prefixedTableName;
}
}
}

View File

@@ -105,7 +105,6 @@ namespace Orchard.MultiTenancy.Services {
private IEnumerable<string> GetTenantDatabaseTableNames(IWorkContextScope environment) {
var sessionFactoryHolder = environment.Resolve<ISessionFactoryHolder>();
var schemaBuilder = new SchemaBuilder(environment.Resolve<IDataMigrationInterpreter>());
var configuration = sessionFactoryHolder.GetConfiguration();
var result =
@@ -116,15 +115,15 @@ namespace Orchard.MultiTenancy.Services {
}
private void DropTenantDatabaseTables(IWorkContextScope environment) {
var sessionFactoryHolder = environment.Resolve<ISessionFactoryHolder>();
var tableNames = GetTenantDatabaseTableNames(environment);
var schemaBuilder = new SchemaBuilder(environment.Resolve<IDataMigrationInterpreter>());
var configuration = sessionFactoryHolder.GetConfiguration();
foreach (var mapping in configuration.ClassMappings) {
foreach (var tableName in tableNames) {
try {
schemaBuilder.DropTable(mapping.Table.Name);
schemaBuilder.DropTable(schemaBuilder.RemoveDataTablePrefix(tableName));
}
catch (Exception ex) {
Logger.Warning(ex, "Failed to drop table '{0}'.", mapping.Table.Name);
Logger.Warning(ex, "Failed to drop table '{0}'.", tableName);
}
}
}

View File

@@ -19,7 +19,6 @@ namespace Orchard.Data.Migration.Interpreters {
private readonly IEnumerable<ICommandInterpreter> _commandInterpreters;
private readonly Lazy<Dialect> _dialectLazy;
private readonly List<string> _sqlStatements;
private readonly ISessionFactoryHolder _sessionFactoryHolder;
private const char Space = ' ';
@@ -32,7 +31,6 @@ namespace Orchard.Data.Migration.Interpreters {
_sessionLocator = sessionLocator;
_commandInterpreters = commandInterpreters;
_sqlStatements = new List<string>();
_sessionFactoryHolder = sessionFactoryHolder;
Logger = NullLogger.Instance;
T = NullLocalizer.Instance;
@@ -80,7 +78,6 @@ namespace Orchard.Data.Migration.Interpreters {
primaryKeysQuoted.Add(_dialectLazy.Value.QuoteForColumnName(pk));
}
builder.Append(_dialectLazy.Value.PrimaryKeyString)
.Append(" ( ")
.Append(String.Join(", ", primaryKeysQuoted.ToArray()))
@@ -99,6 +96,12 @@ namespace Orchard.Data.Migration.Interpreters {
return _shellSettings.DataTablePrefix + "_" + tableName;
}
public string RemovePrefixFromTableName(string prefixedTableName) {
if (string.IsNullOrEmpty(_shellSettings.DataTablePrefix))
return prefixedTableName;
return prefixedTableName.Substring(_shellSettings.DataTablePrefix.Length + 1);
}
public override void Visit(DropTableCommand command) {
if (ExecuteCustomInterpreter(command)) {
return;

View File

@@ -10,5 +10,6 @@ namespace Orchard.Data.Migration.Interpreters {
void Visit(CreateForeignKeyCommand command);
void Visit(DropForeignKeyCommand command);
string PrefixTableName(string tableName);
string RemovePrefixFromTableName(string prefixedTableName);
}
}

View File

@@ -30,12 +30,19 @@ namespace Orchard.Data.Migration.Schema {
}
/// <summary>
/// Translate Table name into database table name - including prefixes
/// Translate Table name into database table name - including prefixes.
/// </summary>
public virtual string TableDbName(string srcTable) {
return _interpreter.PrefixTableName(String.Concat(FormatPrefix(FeaturePrefix), srcTable));
}
/// <summary>
/// Removes the data table prefix from the specified table name.
/// </summary>
public virtual string RemoveDataTablePrefix(string prefixedTableName) {
return _interpreter.RemovePrefixFromTableName(prefixedTableName);
}
public SchemaBuilder CreateTable(string name, Action<CreateTableCommand> table) {
var createTable = new CreateTableCommand(String.Concat(_formatPrefix(_featurePrefix), name));
table(createTable);