From 6141f1e581da5b93cf4f189e81020fc3fb344c60 Mon Sep 17 00:00:00 2001 From: Lau Date: Sun, 29 Mar 2020 13:38:49 +0200 Subject: [PATCH] Update still present square bracket identifiers to backticks. --- .../Internal/JetDatabaseModelFactory.cs | 3 +- src/System.Data.Jet/JetCommand.cs | 2 +- src/System.Data.Jet/JetConnection.cs | 3 +- .../JetRenameHandling.cs | 47 +++++++------------ .../JetStoreSchemaDefinitionRetrieve.cs | 8 ++-- .../SystemTableCollection.cs | 8 ++-- src/System.Data.Jet/JetSyntaxHelper.cs | 6 +-- 7 files changed, 33 insertions(+), 44 deletions(-) diff --git a/src/EFCore.Jet/Scaffolding/Internal/JetDatabaseModelFactory.cs b/src/EFCore.Jet/Scaffolding/Internal/JetDatabaseModelFactory.cs index 332f937..eddc560 100644 --- a/src/EFCore.Jet/Scaffolding/Internal/JetDatabaseModelFactory.cs +++ b/src/EFCore.Jet/Scaffolding/Internal/JetDatabaseModelFactory.cs @@ -34,7 +34,7 @@ namespace EntityFrameworkCore.Jet.Scaffolding.Internal private Dictionary _tableColumns; private static string ObjectKey([NotNull] string name) - => "[" + name + "]"; + => "`" + name + "`"; private static string TableKey(DatabaseTable table) => TableKey(table.Name); @@ -48,6 +48,7 @@ namespace EntityFrameworkCore.Jet.Scaffolding.Internal private static readonly List _tablePatterns = new List { "{table}", + "`{table}`", "[{table}]" }; diff --git a/src/System.Data.Jet/JetCommand.cs b/src/System.Data.Jet/JetCommand.cs index 938337b..5def4e2 100644 --- a/src/System.Data.Jet/JetCommand.cs +++ b/src/System.Data.Jet/JetCommand.cs @@ -19,7 +19,7 @@ namespace System.Data.Jet private int? _rowCount; private static readonly Regex _skipRegularExpression = new Regex(@"\bskip\s(?@.*)\b", RegexOptions.IgnoreCase); - private static readonly Regex _selectRowCountRegularExpression = new Regex(@"^\s*select\s*@@rowcount\s*[;]?\s*$", RegexOptions.IgnoreCase); + private static readonly Regex _selectRowCountRegularExpression = new Regex(@"^\s*select\s*@@rowcount\s*;?\s*$", RegexOptions.IgnoreCase); private static readonly Regex _ifStatementRegex = new Regex(@"^\s*if\s*(?not)?\s*exists\s*\((?.+)\)\s*then\s*(?.*)$", RegexOptions.IgnoreCase); protected JetCommand(JetCommand source) diff --git a/src/System.Data.Jet/JetConnection.cs b/src/System.Data.Jet/JetConnection.cs index 3469052..9c1cdd5 100644 --- a/src/System.Data.Jet/JetConnection.cs +++ b/src/System.Data.Jet/JetConnection.cs @@ -417,8 +417,7 @@ namespace System.Data.Jet try { - var sqlFormat = "select count(*) from [{0}] where 1=2"; - CreateCommand(string.Format(sqlFormat, tableName)) + CreateCommand($"select count(*) from `{tableName}` where 1=2") .ExecuteNonQuery(); tableExists = true; } diff --git a/src/System.Data.Jet/JetStoreSchemaDefinition/JetRenameHandling.cs b/src/System.Data.Jet/JetStoreSchemaDefinition/JetRenameHandling.cs index f9db0e0..2e76a71 100644 --- a/src/System.Data.Jet/JetStoreSchemaDefinition/JetRenameHandling.cs +++ b/src/System.Data.Jet/JetStoreSchemaDefinition/JetRenameHandling.cs @@ -2,29 +2,26 @@ namespace System.Data.Jet.JetStoreSchemaDefinition { - class JetRenameHandling + internal class JetRenameHandling { - private static Regex _renameTableRegex = new Regex( - $@"^\s*rename\s+table\s+{GetQuotedOrUnquotedNamePattern("tableName")}\s+to\s+{GetQuotedOrUnquotedNamePattern("newTableName")}\s*$", + private static readonly Regex _renameTableRegex = new Regex( + $@"^\s*rename\s+table\s+{GetIdentifierPattern("OldTableName")}\s+to\s+{GetIdentifierPattern("NewTableName")}\s*$", RegexOptions.IgnoreCase); - private static Regex _renameTableColumnRegex = new Regex( - $@"^\s*rename\s+column\s+{GetQuotedOrUnquotedNamePattern("tableName")}\.{GetQuotedOrUnquotedNamePattern("columnName")}\s+to\s+{GetQuotedOrUnquotedNamePattern("newColumnName")}\s*$", + private static readonly Regex _renameTableColumnRegex = new Regex( + $@"^\s*rename\s+column\s+{GetIdentifierPattern("TableName")}\s*\.\s*{GetIdentifierPattern("OldColumnName")}\s+to\s+{GetIdentifierPattern("NewColumnName")}\s*$", RegexOptions.IgnoreCase); public static bool TryDatabaseOperation(string connectionString, string commandText) { - Match match; - - - match = _renameTableRegex.Match(commandText); + var match = _renameTableRegex.Match(commandText); if (match.Success) { - string tableName = match.Groups["tableName"].Value; - string newTableName = match.Groups["newTableName"].Value; + var oldTableName = match.Groups["OldTableName"].Value; + var newTableName = match.Groups["NewTableName"].Value; // TODO: Only use ADOX in an OLE DB context. Use DAO in an ODBC context. - AdoxWrapper.RenameTable(connectionString, RemoveBrackets(tableName), RemoveBrackets(newTableName)); + AdoxWrapper.RenameTable(connectionString, oldTableName, newTableName); return true; } @@ -32,28 +29,20 @@ namespace System.Data.Jet.JetStoreSchemaDefinition match = _renameTableColumnRegex.Match(commandText); if (match.Success) { - string tableName = match.Groups["tableName"].Value; - string columnName = match.Groups["columnName"].Value; - string newColumnName = match.Groups["newColumnName"].Value; - AdoxWrapper.RenameColumn(connectionString, RemoveBrackets(tableName), RemoveBrackets(columnName), RemoveBrackets(newColumnName)); + var tableName = match.Groups["TableName"].Value; + var oldColumnName = match.Groups["OldColumnName"].Value; + var newColumnName = match.Groups["NewColumnName"].Value; + + // TODO: Only use ADOX in an OLE DB context. Use DAO in an ODBC context. + AdoxWrapper.RenameColumn(connectionString, tableName, oldColumnName, newColumnName); + return true; } return false; } - private static string RemoveBrackets(string name) - { - if (name.StartsWith("[") && name.EndsWith("]")) - return name.Substring(1, name.Length - 2); - else - return name; - } - - - static string GetQuotedOrUnquotedNamePattern(string key) - { - return $@"((?<{key}>\S*)|\[(?<{key}>.*)\])"; - } + private static string GetIdentifierPattern(string key) + => $@"(?:`(?<{key}>.*?)`|\[(?<{key}>.*?)\]|(?<{key}>\S*))"; } } diff --git a/src/System.Data.Jet/JetStoreSchemaDefinition/JetStoreSchemaDefinitionRetrieve.cs b/src/System.Data.Jet/JetStoreSchemaDefinition/JetStoreSchemaDefinitionRetrieve.cs index 6aa7fc5..8802f6c 100644 --- a/src/System.Data.Jet/JetStoreSchemaDefinition/JetStoreSchemaDefinitionRetrieve.cs +++ b/src/System.Data.Jet/JetStoreSchemaDefinition/JetStoreSchemaDefinitionRetrieve.cs @@ -85,8 +85,8 @@ namespace System.Data.Jet.JetStoreSchemaDefinition if (showStatementPosition == -1) continue; - commandText = commandText.ReplaceCaseInsensitive("\\(\\s*show " + table.Name + "\\s*\\)", "[" + table.TableName + "]"); - commandText = commandText.ReplaceCaseInsensitive("show " + table.Name, "[" + table.TableName + "]"); + commandText = commandText.ReplaceCaseInsensitive("\\(\\s*show " + table.Name + "\\s*\\)", "`" + table.TableName + "`"); + commandText = commandText.ReplaceCaseInsensitive("show " + table.Name, "`" + table.TableName + "`"); tablesToCreate.Add(table); } @@ -174,13 +174,13 @@ namespace System.Data.Jet.JetStoreSchemaDefinition values += ", "; } - columns += string.Format("[{0}]", column.ColumnName); + columns += string.Format("`{0}`", column.ColumnName); object value = row[column]; values += JetSyntaxHelper.ToSqlStringSwitch(value); } } - return string.Format("INSERT INTO [{0}] ({1}) VALUES ({2})", tableName, columns, values); + return string.Format("INSERT INTO `{0}` ({1}) VALUES ({2})", tableName, columns, values); } [DebuggerStepThrough] diff --git a/src/System.Data.Jet/JetStoreSchemaDefinition/SystemTableCollection.cs b/src/System.Data.Jet/JetStoreSchemaDefinition/SystemTableCollection.cs index 5c7f60f..3a54e99 100644 --- a/src/System.Data.Jet/JetStoreSchemaDefinition/SystemTableCollection.cs +++ b/src/System.Data.Jet/JetStoreSchemaDefinition/SystemTableCollection.cs @@ -71,11 +71,11 @@ namespace System.Data.Jet.JetStoreSchemaDefinition foreach (SystemTable table in this) { - table.DropStatement = string.Format("DROP TABLE [{0}]", table.TableName); - table.ClearStatement = string.Format("DELETE FROM [{0}]", table.TableName); + table.DropStatement = string.Format("DROP TABLE `{0}`", table.TableName); + table.ClearStatement = string.Format("DELETE FROM `{0}`", table.TableName); StringBuilder createStatementStringBuilder = new StringBuilder(); - createStatementStringBuilder.AppendFormat("CREATE TABLE [{0}]\r\n", table.TableName); + createStatementStringBuilder.AppendFormat("CREATE TABLE `{0}`\r\n", table.TableName); createStatementStringBuilder.Append("("); bool first = true; foreach (Column column in table.Columns) @@ -85,7 +85,7 @@ namespace System.Data.Jet.JetStoreSchemaDefinition else createStatementStringBuilder.Append(","); createStatementStringBuilder.AppendLine(); - createStatementStringBuilder.AppendFormat(" [{0}] {1}{2} {3}", + createStatementStringBuilder.AppendFormat(" `{0}` {1}{2} {3}", column.Name, column.Type, column.MaxLength == null ? "" : string.Format("({0})", column.MaxLength), diff --git a/src/System.Data.Jet/JetSyntaxHelper.cs b/src/System.Data.Jet/JetSyntaxHelper.cs index 493cb98..6696665 100644 --- a/src/System.Data.Jet/JetSyntaxHelper.cs +++ b/src/System.Data.Jet/JetSyntaxHelper.cs @@ -15,7 +15,7 @@ namespace System.Data.Jet public static string ToSqlString(string value) { // In Jet everything's unicode - return "'" + value.Replace("'", "''") + "'"; + return $"'{value.Replace("'", "''")}'"; } public static string ToSqlString(int value) @@ -84,9 +84,9 @@ namespace System.Data.Jet internal static string QuoteIdentifier(string name) { if (string.IsNullOrWhiteSpace(name)) - throw new ArgumentNullException("name"); + throw new ArgumentNullException(nameof(name)); - return "[" + name.Replace("]", "]]") + "]"; + return $"`{name}`"; } ///