mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Fixed removal of database tables when using data table prefix.
This commit is contained in:
@@ -29,5 +29,8 @@ namespace Orchard.Tests.DataMigration.Utilities {
|
|||||||
return tableName;
|
return tableName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string RemovePrefixFromTableName(string prefixedTableName) {
|
||||||
|
return prefixedTableName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -105,7 +105,6 @@ namespace Orchard.MultiTenancy.Services {
|
|||||||
|
|
||||||
private IEnumerable<string> GetTenantDatabaseTableNames(IWorkContextScope environment) {
|
private IEnumerable<string> GetTenantDatabaseTableNames(IWorkContextScope environment) {
|
||||||
var sessionFactoryHolder = environment.Resolve<ISessionFactoryHolder>();
|
var sessionFactoryHolder = environment.Resolve<ISessionFactoryHolder>();
|
||||||
var schemaBuilder = new SchemaBuilder(environment.Resolve<IDataMigrationInterpreter>());
|
|
||||||
var configuration = sessionFactoryHolder.GetConfiguration();
|
var configuration = sessionFactoryHolder.GetConfiguration();
|
||||||
|
|
||||||
var result =
|
var result =
|
||||||
@@ -116,15 +115,15 @@ namespace Orchard.MultiTenancy.Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void DropTenantDatabaseTables(IWorkContextScope environment) {
|
private void DropTenantDatabaseTables(IWorkContextScope environment) {
|
||||||
var sessionFactoryHolder = environment.Resolve<ISessionFactoryHolder>();
|
var tableNames = GetTenantDatabaseTableNames(environment);
|
||||||
var schemaBuilder = new SchemaBuilder(environment.Resolve<IDataMigrationInterpreter>());
|
var schemaBuilder = new SchemaBuilder(environment.Resolve<IDataMigrationInterpreter>());
|
||||||
var configuration = sessionFactoryHolder.GetConfiguration();
|
|
||||||
foreach (var mapping in configuration.ClassMappings) {
|
foreach (var tableName in tableNames) {
|
||||||
try {
|
try {
|
||||||
schemaBuilder.DropTable(mapping.Table.Name);
|
schemaBuilder.DropTable(schemaBuilder.RemoveDataTablePrefix(tableName));
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
Logger.Warning(ex, "Failed to drop table '{0}'.", mapping.Table.Name);
|
Logger.Warning(ex, "Failed to drop table '{0}'.", tableName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ namespace Orchard.Data.Migration.Interpreters {
|
|||||||
private readonly IEnumerable<ICommandInterpreter> _commandInterpreters;
|
private readonly IEnumerable<ICommandInterpreter> _commandInterpreters;
|
||||||
private readonly Lazy<Dialect> _dialectLazy;
|
private readonly Lazy<Dialect> _dialectLazy;
|
||||||
private readonly List<string> _sqlStatements;
|
private readonly List<string> _sqlStatements;
|
||||||
private readonly ISessionFactoryHolder _sessionFactoryHolder;
|
|
||||||
|
|
||||||
private const char Space = ' ';
|
private const char Space = ' ';
|
||||||
|
|
||||||
@@ -32,7 +31,6 @@ namespace Orchard.Data.Migration.Interpreters {
|
|||||||
_sessionLocator = sessionLocator;
|
_sessionLocator = sessionLocator;
|
||||||
_commandInterpreters = commandInterpreters;
|
_commandInterpreters = commandInterpreters;
|
||||||
_sqlStatements = new List<string>();
|
_sqlStatements = new List<string>();
|
||||||
_sessionFactoryHolder = sessionFactoryHolder;
|
|
||||||
|
|
||||||
Logger = NullLogger.Instance;
|
Logger = NullLogger.Instance;
|
||||||
T = NullLocalizer.Instance;
|
T = NullLocalizer.Instance;
|
||||||
@@ -80,7 +78,6 @@ namespace Orchard.Data.Migration.Interpreters {
|
|||||||
primaryKeysQuoted.Add(_dialectLazy.Value.QuoteForColumnName(pk));
|
primaryKeysQuoted.Add(_dialectLazy.Value.QuoteForColumnName(pk));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
builder.Append(_dialectLazy.Value.PrimaryKeyString)
|
builder.Append(_dialectLazy.Value.PrimaryKeyString)
|
||||||
.Append(" ( ")
|
.Append(" ( ")
|
||||||
.Append(String.Join(", ", primaryKeysQuoted.ToArray()))
|
.Append(String.Join(", ", primaryKeysQuoted.ToArray()))
|
||||||
@@ -99,6 +96,12 @@ namespace Orchard.Data.Migration.Interpreters {
|
|||||||
return _shellSettings.DataTablePrefix + "_" + tableName;
|
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) {
|
public override void Visit(DropTableCommand command) {
|
||||||
if (ExecuteCustomInterpreter(command)) {
|
if (ExecuteCustomInterpreter(command)) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -10,5 +10,6 @@ namespace Orchard.Data.Migration.Interpreters {
|
|||||||
void Visit(CreateForeignKeyCommand command);
|
void Visit(CreateForeignKeyCommand command);
|
||||||
void Visit(DropForeignKeyCommand command);
|
void Visit(DropForeignKeyCommand command);
|
||||||
string PrefixTableName(string tableName);
|
string PrefixTableName(string tableName);
|
||||||
|
string RemovePrefixFromTableName(string prefixedTableName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,12 +30,19 @@ namespace Orchard.Data.Migration.Schema {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Translate Table name into database table name - including prefixes
|
/// Translate Table name into database table name - including prefixes.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual string TableDbName(string srcTable) {
|
public virtual string TableDbName(string srcTable) {
|
||||||
return _interpreter.PrefixTableName(String.Concat(FormatPrefix(FeaturePrefix), 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) {
|
public SchemaBuilder CreateTable(string name, Action<CreateTableCommand> table) {
|
||||||
var createTable = new CreateTableCommand(String.Concat(_formatPrefix(_featurePrefix), name));
|
var createTable = new CreateTableCommand(String.Concat(_formatPrefix(_featurePrefix), name));
|
||||||
table(createTable);
|
table(createTable);
|
||||||
|
|||||||
Reference in New Issue
Block a user