Skip to content

Commit b01fd5e

Browse files
committed
Merge pull request ThatRendle#123 from marcushammarberg/master
InMemory Adapter - AutoIncrement handles Insert without auto incremented column specified
2 parents 4eda41a + 0fc74c1 commit b01fd5e

2 files changed

Lines changed: 57 additions & 8 deletions

File tree

Simple.Data.InMemoryTest/InMemoryTests.cs

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public void SelectShouldReturnSubsetOfColumns()
6565
var db = Database.Open();
6666
db.Test.Insert(Id: 1, Name: "Alice");
6767
db.Test.Insert(Id: 2, Name: "Bob");
68-
List<IDictionary<string,object>> records = db.Test.All().Select(db.Test.Name).ToList<IDictionary<string,object>>();
68+
List<IDictionary<string, object>> records = db.Test.All().Select(db.Test.Name).ToList<IDictionary<string, object>>();
6969
Assert.IsNotNull(records);
7070
Assert.AreEqual(2, records.Count);
7171
Assert.False(records[0].ContainsKey("Id"));
@@ -139,7 +139,7 @@ public void ShouldWorkWithByteArrays()
139139
{
140140
Database.UseMockAdapter(new InMemoryAdapter());
141141
var db = Database.Open();
142-
db.Test.Insert(Id: 1, Data: new byte[] {0x1, 0x2, 0x3});
142+
db.Test.Insert(Id: 1, Data: new byte[] { 0x1, 0x2, 0x3 });
143143
var record = db.Test.FindById(1);
144144
Assert.AreEqual(0x1, record.Data[0]);
145145
}
@@ -264,7 +264,7 @@ public void SeparateThreadsShouldSeeDifferentMocks()
264264
}
265265

266266
[Test]
267-
public void find_all_when_using_Name_property_should_work()
267+
public void FindAllWhenUsingNamePropertyShouldWork()
268268
{
269269
var adapter = new InMemoryAdapter();
270270
adapter.ConfigureJoin("Users", "Id", "Categories", "Categories", "UserId", "User");
@@ -278,11 +278,11 @@ public void find_all_when_using_Name_property_should_work()
278278

279279
var categories = db.Users.FindAll(db.User.Categories.Name == "Category 1").ToList();
280280
Assert.NotNull(categories);
281-
Assert.AreEqual(1, categories.Count); // FAILS - Count == 0
281+
Assert.AreEqual(1, categories.Count);
282282
}
283283

284284
[Test]
285-
public void find_all_when_using_CategoryName_property_should_work()
285+
public void FindAllWhenUsingAnyOldPropertyNameShouldWork()
286286
{
287287
var adapter = new InMemoryAdapter();
288288
adapter.ConfigureJoin("Users", "Id", "Categories", "Categories", "UserId", "User");
@@ -296,7 +296,42 @@ public void find_all_when_using_CategoryName_property_should_work()
296296

297297
var categories = db.Users.FindAll(db.User.Categories.CategoryName == "Category 1").ToList();
298298
Assert.NotNull(categories);
299-
Assert.AreEqual(1, categories.Count); // Works find - Count == 1
299+
Assert.AreEqual(1, categories.Count);
300+
}
301+
302+
[Test]
303+
public void AutoIncrementShouldSet1ForAutoIncrementedColumnsWhenNoRowsInTable()
304+
{
305+
// Arrange
306+
var adapter = new InMemoryAdapter();
307+
adapter.SetAutoIncrementColumn("Users", "Id");
308+
309+
Database.UseMockAdapter(adapter);
310+
var db = Database.Open();
311+
312+
// Act
313+
var newId = db.Users.Insert(Name: "Marcus").Id;
314+
315+
// Assert
316+
Assert.AreEqual(1, newId);
317+
}
318+
319+
[Test]
320+
public void AutoIncrementShouldReturnNextIdInSequenceWhenOneRowExsists()
321+
{
322+
// Arrange
323+
var adapter = new InMemoryAdapter();
324+
adapter.SetAutoIncrementColumn("Users", "Id");
325+
326+
Database.UseMockAdapter(adapter);
327+
var db = Database.Open();
328+
db.Users.Insert(Name: "Marcus");
329+
330+
// Act
331+
var newId = db.Users.Insert(Name: "Per").Id;
332+
333+
// Assert
334+
Assert.AreEqual(2, newId);
300335
}
301336

302337
private static int ThreadTestHelper(int userId)

Simple.Data/InMemoryAdapter.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,24 @@ public override IDictionary<string, object> Insert(string tableName, IDictionary
5555
{
5656
if (_autoIncrementColumns.ContainsKey(tableName))
5757
{
58-
object nextVal = GetTable(tableName).Select(d => d[_autoIncrementColumns[tableName]]).Max();
58+
var table = GetTable(tableName);
59+
var autoIncrementColumn = _autoIncrementColumns[tableName];
60+
61+
if(!data.ContainsKey(autoIncrementColumn))
62+
{
63+
data.Add(autoIncrementColumn, 0);
64+
}
65+
66+
object nextVal = 0;
67+
if(table.Count > 0)
68+
{
69+
nextVal = table.Select(d => d[autoIncrementColumn]).Max(); ;
70+
}
71+
5972
nextVal = ObjectMaths.Increment(nextVal);
60-
data[_autoIncrementColumns[tableName]] = nextVal;
73+
data[autoIncrementColumn] = nextVal;
6174
}
75+
6276
GetTable(tableName).Add(data);
6377

6478
AddAsDetail(tableName, data);

0 commit comments

Comments
 (0)