diff --git a/src/Umbraco.Core/DatabaseContext.cs b/src/Umbraco.Core/DatabaseContext.cs index 0acf98f842..54d97ba534 100644 --- a/src/Umbraco.Core/DatabaseContext.cs +++ b/src/Umbraco.Core/DatabaseContext.cs @@ -385,10 +385,24 @@ namespace Umbraco.Core { LogHelper.Info("Database configuration status: Started"); + string message; + var database = new UmbracoDatabase(_connectionString, ProviderName); + if (SyntaxConfig.SqlSyntaxProvider.SupportsCaseInsensitiveQueries(database) == false) + { + message = "

 

The database you're trying to use does not support case insensitive queries.
We currently do not support these types of databases.

" + + "

You can fix this by changing the following two settings in your my.ini file in your MySQL installation directory:

" + + "
lower_case_table_names=1\nlower_case_file_system=1

" + + "

Note: Make sure to check with your hosting provider if they support case insensitive queries as well.

" + + "

For more technical information on case sensitivity in MySQL, have a look at " + + "the documentation on the subject

"; + + return new Result { Message = message, Success = false, Percentage = "15" }; + } + var schemaResult = ValidateDatabaseSchema(); var installedVersion = schemaResult.DetermineInstalledVersion(); - string message; + //If Configuration Status is empty and the determined version is "empty" its a new install - otherwise upgrade the existing if (string.IsNullOrEmpty(GlobalSettings.ConfigurationStatus) && installedVersion.Equals(new Version(0, 0, 0))) @@ -424,7 +438,7 @@ namespace Umbraco.Core { Message = "The database configuration failed with the following message: " + ex.Message + - "\n Please check log file for addtional information (can be found in '/App_Data/Logs/UmbracoTraceLog.txt')", + "\n Please check log file for additional information (can be found in '/App_Data/Logs/UmbracoTraceLog.txt')", Success = false, Percentage = "90" }; diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs index 5aa5c3591d..cbd31b3d43 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/ISqlSyntaxProvider.cs @@ -48,6 +48,7 @@ namespace Umbraco.Core.Persistence.SqlSyntax string FormatTableRename(string oldName, string newName); bool SupportsClustered(); bool SupportsIdentityInsert(); + bool? SupportsCaseInsensitiveQueries(Database db); IEnumerable GetTablesInSchema(Database db); IEnumerable GetColumnsInSchema(Database db); IEnumerable> GetConstraintsPerTable(Database db); diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs b/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs index 75b41ec945..b2eb7f34bb 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/MySqlSyntaxProvider.cs @@ -309,5 +309,27 @@ namespace Umbraco.Core.Persistence.SqlSyntax public override string DropIndex { get { return "DROP INDEX {0} ON {1}"; } } public override string RenameColumn { get { return "ALTER TABLE {0} CHANGE {1} {2}"; } } + + public override bool? SupportsCaseInsensitiveQueries(Database db) + { + bool? supportsCaseInsensitiveQueries; + + try + { + db.OpenSharedConnection(); + var lowerCaseFileSystem = db.Fetch("SELECT @@Global.lower_case_file_system"); + var lowerCaseTableNames = db.Fetch("SELECT @@Global.lower_case_table_names"); + + supportsCaseInsensitiveQueries = lowerCaseFileSystem.First() == 1 && lowerCaseTableNames.First() == 0; + } + finally + { + db.CloseSharedConnection(); + } + + // Could return null, which means testing failed, + // add message to check with their hosting provider + return supportsCaseInsensitiveQueries; + } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs index c453b46dc4..70aa97d949 100644 --- a/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs +++ b/src/Umbraco.Core/Persistence/SqlSyntax/SqlSyntaxProviderBase.cs @@ -151,6 +151,11 @@ namespace Umbraco.Core.Persistence.SqlSyntax return "NVARCHAR"; } + public virtual bool? SupportsCaseInsensitiveQueries(Database db) + { + return true; + } + public virtual IEnumerable GetTablesInSchema(Database db) { return new List(); diff --git a/src/Umbraco.Web.UI/umbraco_client/Installer/js/jquery.main.js b/src/Umbraco.Web.UI/umbraco_client/Installer/js/jquery.main.js index a51b5f623f..f66b9012e6 100644 --- a/src/Umbraco.Web.UI/umbraco_client/Installer/js/jquery.main.js +++ b/src/Umbraco.Web.UI/umbraco_client/Installer/js/jquery.main.js @@ -31,7 +31,7 @@ function updateProgressBar(percent) { function updateStatusMessage(message, error) { if (message != null && message != undefined) { - jQuery(".loader > strong").text(message); + jQuery(".loader > strong").append(message); } if (error != undefined) {