Skip to content

Commit c6deac7

Browse files
committed
Merge pull request ThatRendle#336 from pmarflee/master
Don't run update if new values equal original
2 parents e8be275 + 7d7a565 commit c6deac7

3 files changed

Lines changed: 18 additions & 0 deletions

File tree

Simple.Data.InMemoryTest/InMemoryTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -806,5 +806,21 @@ public void LeftJoinTest()
806806

807807
Assert.AreEqual(3, actual.Count);
808808
}
809+
810+
[Test]
811+
public void UpdateWithOriginalValuesRowsUpdatedShouldBeZeroIfNewValueAreSameAsOriginalValue()
812+
{
813+
var adapter = new InMemoryAdapter();
814+
adapter.SetKeyColumn("Test", "Id");
815+
Database.UseMockAdapter(adapter);
816+
var db = Database.Open();
817+
db.Test.Upsert(Id: 1, SomeValue: "Testing");
818+
var record = db.Test.Get(1);
819+
var record1 = record.Clone();
820+
821+
var rowsUpdated = db.Test.Update(record, record1);
822+
823+
Assert.AreEqual(0, rowsUpdated);
824+
}
809825
}
810826
}

Simple.Data/DatabaseRunner.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ internal override int Update(string tableName, IDictionary<string, object> newVa
4444
{
4545
SimpleExpression criteria = CreateCriteriaFromOriginalValues(tableName, newValuesDict, originalValuesDict);
4646
var changedValuesDict = CreateChangedValuesDict(newValuesDict, originalValuesDict);
47+
if (changedValuesDict.Count == 0) return 0;
4748
return _adapter.Update(tableName, changedValuesDict, criteria);
4849
}
4950

Simple.Data/TransactionRunner.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ internal override int Update(string tableName, IDictionary<string, object> newVa
9696
{
9797
SimpleExpression criteria = CreateCriteriaFromOriginalValues(tableName, newValuesDict, originalValuesDict);
9898
var changedValuesDict = CreateChangedValuesDict(newValuesDict, originalValuesDict);
99+
if (changedValuesDict.Count == 0) return 0;
99100
return _adapter.Update(tableName, changedValuesDict, criteria, _adapterTransaction);
100101
}
101102

0 commit comments

Comments
 (0)