Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 253acdd

Browse files
committed
Change Update/Insert Only fields to be case-insensitive
1 parent ba7d19a commit 253acdd

File tree

5 files changed

+40
-17
lines changed

5 files changed

+40
-17
lines changed

src/ServiceStack.OrmLite.Firebird/FirebirdOrmLiteDialectProvider.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Data;
44
using System.Reflection;
55
using System.Text;
6+
using System.Linq;
67
using FirebirdSql.Data.FirebirdClient;
78
using ServiceStack.DataAnnotations;
89
using ServiceStack.OrmLite;
@@ -133,7 +134,7 @@ public override string ToInsertRowStatement(IDbCommand cmd, object objWithProper
133134

134135
if (fieldDef.IsComputed)
135136
continue;
136-
if (insertFields.Count > 0 && !insertFields.Contains(fieldDef.Name))
137+
if (insertFields.Count > 0 && !insertFields.Contains(fieldDef.Name, StringComparer.OrdinalIgnoreCase))
137138
continue;
138139

139140
if ((fieldDef.AutoIncrement || !string.IsNullOrEmpty(fieldDef.Sequence)
@@ -199,7 +200,7 @@ public override void PrepareParameterizedInsertStatement<T>(IDbCommand cmd, ICol
199200
continue;
200201

201202
//insertFields contains Property "Name" of fields to insert ( that's how expressions work )
202-
if (insertFields != null && !insertFields.Contains(fieldDef.Name))
203+
if (insertFields != null && !insertFields.Contains(fieldDef.Name, StringComparer.OrdinalIgnoreCase))
203204
continue;
204205

205206
if (sbColumnNames.Length > 0)
@@ -264,7 +265,7 @@ public override void PrepareUpdateRowStatement(IDbCommand dbCmd, object objWithP
264265
continue;
265266
}
266267

267-
if (updateFields.Count > 0 && !updateFields.Contains(fieldDef.Name))
268+
if (updateFields.Count > 0 && !updateFields.Contains(fieldDef.Name, StringComparer.OrdinalIgnoreCase))
268269
continue;
269270

270271
if (sql.Length > 0)

src/ServiceStack.OrmLite.Oracle/OracleOrmLiteDialectProvider.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,7 @@ public override void PrepareParameterizedInsertStatement<T>(IDbCommand dbCommand
551551
if (fieldDef.IsComputed || fieldDef.IsRowVersion) continue;
552552

553553
//insertFields contains Property "Name" of fields to insert (that's how expressions work)
554-
if (insertFields.Count > 0 && !insertFields.Contains(fieldDef.Name)) continue;
554+
if (insertFields.Count > 0 && !insertFields.Contains(fieldDef.Name, StringComparer.OrdinalIgnoreCase)) continue;
555555

556556
if (sbColumnNames.Length > 0) sbColumnNames.Append(",");
557557
if (sbColumnValues.Length > 0) sbColumnValues.Append(",");
@@ -669,7 +669,7 @@ public override string ToInsertRowStatement(IDbCommand dbCommand, object objWith
669669
{
670670
if (fieldDef.IsComputed)
671671
continue;
672-
if (insertFields.Count > 0 && !insertFields.Contains(fieldDef.Name))
672+
if (insertFields.Count > 0 && !insertFields.Contains(fieldDef.Name, StringComparer.OrdinalIgnoreCase))
673673
continue;
674674

675675
if ((fieldDef.AutoIncrement || !string.IsNullOrEmpty(fieldDef.Sequence))
@@ -749,7 +749,7 @@ public override void PrepareUpdateRowStatement(IDbCommand dbCmd, object objWithP
749749
continue;
750750
}
751751

752-
if (!updateFieldsEmptyOrNull && !updateFields.Contains(fieldDef.Name))
752+
if (!updateFieldsEmptyOrNull && !updateFields.Contains(fieldDef.Name, StringComparer.OrdinalIgnoreCase))
753753
continue;
754754

755755
if (sql.Length > 0)

src/ServiceStack.OrmLite/Expressions/SqlExpression.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,9 @@ public abstract partial class SqlExpression<T> : ISqlExpression, IHasUntypedSqlE
4444
public IOrmLiteDialectProvider DialectProvider { get; set; }
4545
public List<IDbDataParameter> Params { get; set; }
4646

47-
protected string Sep
48-
{
49-
get { return sep; }
50-
}
47+
protected string Sep => sep;
5148

52-
public SqlExpression(IOrmLiteDialectProvider dialectProvider)
49+
protected SqlExpression(IOrmLiteDialectProvider dialectProvider)
5350
{
5451
UpdateFields = new List<string>();
5552
InsertFields = new List<string>();

src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
using System.Collections.Generic;
1515
using System.Data;
1616
using System.Data.SqlClient;
17+
using System.Linq;
1718
using System.Linq.Expressions;
1819
using System.Text;
1920
using System.Threading;
@@ -569,7 +570,7 @@ public virtual string ToInsertRowStatement(IDbCommand cmd, object objWithPropert
569570
if (fieldDef.ShouldSkipInsert())
570571
continue;
571572

572-
if (insertFields.Count > 0 && !insertFields.Contains(fieldDef.Name))
573+
if (insertFields.Count > 0 && !insertFields.Contains(fieldDef.Name, StringComparer.OrdinalIgnoreCase))
573574
continue;
574575

575576
if (sbColumnNames.Length > 0)
@@ -627,7 +628,7 @@ public virtual void PrepareParameterizedInsertStatement<T>(IDbCommand cmd, IColl
627628
continue;
628629

629630
//insertFields contains Property "Name" of fields to insert ( that's how expressions work )
630-
if (insertFields != null && !insertFields.Contains(fieldDef.Name))
631+
if (insertFields != null && !insertFields.Contains(fieldDef.Name, StringComparer.OrdinalIgnoreCase))
631632
continue;
632633

633634
if (sbColumnNames.Length > 0)
@@ -758,7 +759,7 @@ public virtual bool PrepareParameterizedUpdateStatement<T>(IDbCommand cmd, IColl
758759
continue;
759760
}
760761

761-
if (!updateAllFields && !updateFields.Contains(fieldDef.Name))
762+
if (!updateAllFields && !updateFields.Contains(fieldDef.Name, StringComparer.OrdinalIgnoreCase))
762763
continue;
763764

764765
if (sql.Length > 0)
@@ -1008,7 +1009,7 @@ public virtual void PrepareUpdateRowStatement(IDbCommand dbCmd, object objWithPr
10081009
continue;
10091010
}
10101011

1011-
if (!updateAllFields && !updateFields.Contains(fieldDef.Name) || fieldDef.AutoIncrement)
1012+
if (!updateAllFields && !updateFields.Contains(fieldDef.Name, StringComparer.OrdinalIgnoreCase) || fieldDef.AutoIncrement)
10121013
continue;
10131014

10141015
if (sql.Length > 0)

tests/ServiceStack.OrmLite.Tests/OrmLiteUpdateTests.cs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -501,8 +501,8 @@ public void Does_UpdateOnly_with_SqlExpression_using_db_params()
501501
db.UpdateOnly(new Person { FirstName = "JJ" }, db.From<Person>().Update(p => p.FirstName).Where(x => x.FirstName == "Jimi"));
502502

503503
var sql = db.GetLastSql().NormalizeSql();
504-
Assert.That(sql, Is.StringContaining("where (firstname = @0)"));
505-
Assert.That(sql, Is.StringContaining("firstname=@1"));
504+
Assert.That(sql, Does.Contain("where (firstname = @0)"));
505+
Assert.That(sql, Does.Contain("firstname=@1"));
506506

507507
var row = db.SingleById<Person>(1);
508508
Assert.That(row.FirstName, Is.EqualTo("JJ"));
@@ -536,6 +536,30 @@ public void Can_UpdateOnly_fields_using_EnumAsInt()
536536
Assert.That(saved.Gender, Is.EqualTo(Gender.Male));
537537
}
538538
}
539+
540+
[Test]
541+
public void Can_UpdateOnly_fields_case_insensitive()
542+
{
543+
using (var db = OpenDbConnection())
544+
{
545+
db.DropAndCreateTable<Person>();
546+
var hendrix = new Person(1, "Jimi", "Hendrix", 27);
547+
db.Insert(hendrix);
548+
549+
hendrix.FirstName = "JJ";
550+
hendrix.LastName = "Ignored";
551+
552+
var q = db.From<Person>().Update(new[] { "FIRSTNAME" });
553+
554+
db.UpdateOnly(hendrix, q);
555+
556+
var updatedRow = db.SingleById<Person>(hendrix.Id);
557+
558+
Assert.That(updatedRow.FirstName, Is.EqualTo("JJ"));
559+
Assert.That(updatedRow.LastName, Is.EqualTo("Hendrix"));
560+
Assert.That(updatedRow.Age, Is.EqualTo(27));
561+
}
562+
}
539563
}
540564

541565
[CompositeIndex("FirstName", "LastName")]

0 commit comments

Comments
 (0)