Skip to content

Commit 456bb63

Browse files
authored
Merge pull request #95 from msallin/#91
#91
2 parents 4f54337 + 8d43ce7 commit 456bb63

File tree

14 files changed

+48
-34
lines changed

14 files changed

+48
-34
lines changed

SQLite.CodeFirst.Test/IntegrationTests/SqlGenerationTest.cs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,11 @@ public class SqlGenerationTest
2222
CREATE TABLE ""FooSelves"" ([FooSelfId] INTEGER PRIMARY KEY, [FooId] int NOT NULL, [Number] int NOT NULL, FOREIGN KEY (FooId) REFERENCES ""Foos""(FooId) ON DELETE CASCADE);
2323
CREATE TABLE ""FooSteps"" ([FooStepId] INTEGER PRIMARY KEY, [FooId] int NOT NULL, [Number] int NOT NULL, FOREIGN KEY (FooId) REFERENCES ""Foos""(FooId) ON DELETE CASCADE);
2424
CREATE INDEX ""IX_MyTable_Id"" ON ""MyTable"" (Id);
25-
CREATE INDEX IX_Team_TeamsName ON ""MyTable"" (Name);
26-
25+
CREATE INDEX ""IX_Team_TeamsName"" ON ""MyTable"" (Name);
2726
CREATE INDEX ""IX_TeamPlayer_Number"" ON ""TeamPlayer"" (Number);
28-
CREATE UNIQUE INDEX IX_TeamPlayer_NumberPerTeam ON ""TeamPlayer"" (Number, TeamId);
27+
CREATE UNIQUE INDEX ""IX_TeamPlayer_NumberPerTeam"" ON ""TeamPlayer"" (Number, TeamId);
2928
CREATE INDEX ""IX_TeamPlayer_Mentor_Id"" ON ""TeamPlayer"" (Mentor_Id);
30-
CREATE UNIQUE INDEX IX_Stadion_Main ON ""Stadions"" (Street, Name);
29+
CREATE UNIQUE INDEX ""IX_Stadion_Main"" ON ""Stadions"" (Street, Name);
3130
CREATE INDEX ""IX_Stadion_Team_Id"" ON ""Stadions"" (Team_Id);
3231
CREATE INDEX ""IX_Foo_FooSelf1Id"" ON ""Foos"" (FooSelf1Id);
3332
CREATE INDEX ""IX_Foo_FooSelf2Id"" ON ""Foos"" (FooSelf2Id);
@@ -52,11 +51,18 @@ public void SqliteSqlGeneratorTest()
5251
// ReSharper disable once UnusedVariable
5352
Player fo = context.Set<Player>().FirstOrDefault();
5453

55-
Assert.IsTrue(string.Equals(ReferenceSql.Trim(), generatedSql.Trim(), StringComparison.OrdinalIgnoreCase));
54+
Assert.IsTrue(string.Equals(RemoveLineEndings(ReferenceSql), RemoveLineEndings(generatedSql)));
5655
}
5756
}
5857
}
5958

59+
private static string RemoveLineEndings(string input)
60+
{
61+
string lineSeparator = ((char)0x2028).ToString();
62+
string paragraphSeparator = ((char)0x2029).ToString();
63+
return input.Replace("\r\n", string.Empty).Replace("\n", string.Empty).Replace("\r", string.Empty).Replace(lineSeparator, string.Empty).Replace(paragraphSeparator, string.Empty);
64+
}
65+
6066
private class DummyDbContext : DbContext
6167
{
6268
public DummyDbContext(DbConnection connection)

SQLite.CodeFirst.Test/SQLite.CodeFirst.Test.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
</Compile>
9191
<Compile Include="IntegrationTests\SqlGenerationTest.cs" />
9292
<Compile Include="UnitTests\Builder\NameCreators\IndexNameCreatorTest.cs" />
93-
<Compile Include="UnitTests\Builder\NameCreators\TableNameCreatorTest.cs" />
93+
<Compile Include="UnitTests\Builder\NameCreators\NameCreatorTest.cs" />
9494
<Compile Include="IntegrationTests\MemoryDbTest.cs" />
9595
<Compile Include="Properties\AssemblyInfo.cs" />
9696
<Compile Include="UnitTests\Statement\ColumnConstraint\MaxLengthConstraint.cs" />

SQLite.CodeFirst.Test/UnitTests/Builder/NameCreators/IndexNameCreatorTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ public class IndexNameCreatorTest
99
[TestMethod]
1010
public void CreateIndexName()
1111
{
12-
string result = IndexNameCreator.CreateIndexName("MyTable", "MyProperty");
12+
string result = IndexNameCreator.CreateName("MyTable", "MyProperty");
1313
Assert.AreEqual("\"IX_MyTable_MyProperty\"", result);
1414
}
1515

1616
[TestMethod]
1717
public void CreateIndexNameEscaped()
1818
{
19-
string result = IndexNameCreator.CreateIndexName("\"base.MyTable\"", "MyProperty");
19+
string result = IndexNameCreator.CreateName("\"base.MyTable\"", "MyProperty");
2020
Assert.AreEqual("\"IX_base.MyTable_MyProperty\"", result);
2121
}
2222
}

SQLite.CodeFirst.Test/UnitTests/Builder/NameCreators/TableNameCreatorTest.cs renamed to SQLite.CodeFirst.Test/UnitTests/Builder/NameCreators/NameCreatorTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
namespace SQLite.CodeFirst.Test.UnitTests.Builder.NameCreators
55
{
66
[TestClass]
7-
public class TableNameCreatorTest
7+
public class NameCreatorTest
88
{
99
[TestMethod]
1010
public void CreateTableNameTest()
1111
{
12-
string result = TableNameCreator.CreateTableName("Test");
12+
string result = NameCreator.EscapeName("Test");
1313
Assert.AreEqual("\"Test\"", result);
1414
}
1515
}

SQLite.CodeFirst/Internal/Builder/CreateIndexStatementBuilder.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public CreateIndexStatementCollection BuildStatement()
2929
.Select(x => x.Value)
3030
.OfType<IndexAnnotation>();
3131

32+
string tableName = NameCreator.EscapeName(entitySet.Table);
3233
foreach (var index in indexAnnotations.SelectMany(ia => ia.Indexes))
3334
{
3435
CreateIndexStatement createIndexStatement;
@@ -39,7 +40,7 @@ public CreateIndexStatementCollection BuildStatement()
3940
{
4041
IsUnique = index.IsUnique,
4142
Name = indexName,
42-
Table = TableNameCreator.CreateTableName(entitySet.Table),
43+
Table = tableName,
4344
Columns = new Collection<CreateIndexStatement.IndexColumn>()
4445
};
4546
createIndexStatments.Add(indexName, createIndexStatement);
@@ -58,7 +59,7 @@ public CreateIndexStatementCollection BuildStatement()
5859

5960
private string GetIndexName(IndexAttribute index, EdmProperty property)
6061
{
61-
return index.Name ?? IndexNameCreator.CreateIndexName(entitySet.ElementType.GetTableName(), property.Name);
62+
return index.Name == null ? IndexNameCreator.CreateName(entitySet.ElementType.GetTableName(), property.Name) : NameCreator.EscapeName(index.Name);
6263
}
6364
}
6465
}

SQLite.CodeFirst/Internal/Builder/CreateTableStatementBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public CreateTableStatement BuildStatement()
4141

4242
return new CreateTableStatement
4343
{
44-
TableName = TableNameCreator.CreateTableName(entitySet.Table),
44+
TableName = NameCreator.EscapeName(entitySet.Table),
4545
ColumnStatementCollection = new ColumnStatementCollection(columnStatements)
4646
};
4747
}

SQLite.CodeFirst/Internal/Builder/NameCreators/IndexNameCreator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ internal static class IndexNameCreator
77
{
88
public const string IndexNamePrefix = "IX_";
99

10-
public static string CreateIndexName(string tableName, string propertyName)
10+
public static string CreateName(string tableName, string propertyName)
1111
{
1212
// If the tableName is escaped it means that this name contains special chars e.g. a dot (base.myTable)
1313
// Because the tablename is used to build the index name the index name must also be escaped.
1414
tableName = tableName.Trim(SpecialChars.EscapeCharOpen, SpecialChars.EscapeCharClose);
1515
return String.Format(CultureInfo.InvariantCulture, "{0}{1}{2}_{3}{4}", SpecialChars.EscapeCharOpen, IndexNamePrefix, tableName, propertyName, SpecialChars.EscapeCharClose);
1616
}
1717
}
18-
}
18+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using System.Globalization;
2+
3+
namespace SQLite.CodeFirst.Builder.NameCreators
4+
{
5+
internal static class NameCreator
6+
{
7+
public static string EscapeName(string name)
8+
{
9+
// Ensure that the name is not already escaped.
10+
name = name.Trim(SpecialChars.EscapeCharOpen, SpecialChars.EscapeCharClose);
11+
12+
// Escape the escape chars, if there are some of them in the name.
13+
name = name.Replace(SpecialChars.EscapeCharOpen.ToString(), SpecialChars.EscapeCharOpen.ToString() + SpecialChars.EscapeCharOpen);
14+
15+
// Escape the name.
16+
return string.Format(CultureInfo.InvariantCulture, "{0}{1}{2}", SpecialChars.EscapeCharOpen, name, SpecialChars.EscapeCharClose);
17+
}
18+
}
19+
}

SQLite.CodeFirst/Internal/Builder/NameCreators/TableNameCreator.cs

Lines changed: 0 additions & 14 deletions
This file was deleted.

SQLite.CodeFirst/Internal/Convention/SqliteForeignKeyIndexConvention.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public virtual void Apply(AssociationType item, DbModel model)
7070

7171
private static IndexAnnotation CreateIndexAnnotation(string tableName, string propertyName, int count)
7272
{
73-
var indexName = IndexNameCreator.CreateIndexName(tableName, propertyName);
73+
var indexName = IndexNameCreator.CreateName(tableName, propertyName);
7474

7575
// If there are two Indicies on the same property, the count is added.
7676
// In SQLite an Index name must be global unique.

0 commit comments

Comments
 (0)