Update still present square bracket identifiers to backticks.

pull/47/head
Lau 6 years ago
parent 0df985e00d
commit 6141f1e581

@ -34,7 +34,7 @@ namespace EntityFrameworkCore.Jet.Scaffolding.Internal
private Dictionary<string, DatabaseColumn> _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<string> _tablePatterns = new List<string>
{
"{table}",
"`{table}`",
"[{table}]"
};

@ -19,7 +19,7 @@ namespace System.Data.Jet
private int? _rowCount;
private static readonly Regex _skipRegularExpression = new Regex(@"\bskip\s(?<stringSkipCount>@.*)\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>not)?\s*exists\s*\((?<sqlCheckCommand>.+)\)\s*then\s*(?<sqlCommand>.*)$", RegexOptions.IgnoreCase);
protected JetCommand(JetCommand source)

@ -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;
}

@ -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*))";
}
}

@ -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]

@ -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),

@ -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}`";
}
/// <summary>

Loading…
Cancel
Save