Skip to content

Commit 7d7a565

Browse files
committed
Don't run update if new values equal original
Don't run update if new values equal original, and return zero for the number of rows changed
1 parent 35e2e06 commit 7d7a565

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)