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

Commit 1445c0f

Browse files
committed
Convert last remaining SelectByIds/DeleteByIds to use db params
1 parent 148d5a6 commit 1445c0f

15 files changed

+45
-42
lines changed

src/ServiceStack.OrmLite/Async/OrmLiteReadCommandExtensionsAsync.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,10 @@ internal static Task<List<TModel>> SelectAsync<TModel>(this IDbCommand dbCmd, Ty
6565

6666
internal static Task<List<T>> SelectByIdsAsync<T>(this IDbCommand dbCmd, IEnumerable idValues, CancellationToken token)
6767
{
68-
var sql = idValues.GetIdsInSql();
69-
return sql == null
68+
var sqlIn = dbCmd.SetIdsInSqlParams(idValues);
69+
return string.IsNullOrEmpty(sqlIn)
7070
? new List<T>().InTask()
71-
: SelectAsync<T>(dbCmd, dbCmd.GetDialectProvider().GetQuotedColumnName(ModelDefinition<T>.PrimaryKeyName) + " IN (" + sql + ")", (object)null, token);
71+
: SelectAsync<T>(dbCmd, dbCmd.GetDialectProvider().GetQuotedColumnName(ModelDefinition<T>.PrimaryKeyName) + " IN (" + sqlIn + ")", (object)null, token);
7272
}
7373

7474
internal static Task<T> SingleByIdAsync<T>(this IDbCommand dbCmd, object value, CancellationToken token)

src/ServiceStack.OrmLite/Async/OrmLiteWriteCommandExtensionsAsync.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,8 @@ internal static Task DeleteByIdAsync<T>(this IDbCommand dbCmd, object id, ulong
231231

232232
internal static Task<int> DeleteByIdsAsync<T>(this IDbCommand dbCmd, IEnumerable idValues, CancellationToken token)
233233
{
234-
var sqlIn = idValues.GetIdsInSql();
235-
if (sqlIn == null)
234+
var sqlIn = dbCmd.SetIdsInSqlParams(idValues);
235+
if (string.IsNullOrEmpty(sqlIn))
236236
return TaskResult.Zero;
237237

238238
var sql = OrmLiteWriteCommandExtensions.GetDeleteByIdsSql<T>(sqlIn, dbCmd.GetDialectProvider());

src/ServiceStack.OrmLite/OrmLiteReadCommandExtensions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -300,10 +300,10 @@ internal static bool CanReuseParam<T>(this IDbCommand dbCmd, string paramName)
300300

301301
internal static List<T> SelectByIds<T>(this IDbCommand dbCmd, IEnumerable idValues)
302302
{
303-
var sql = idValues.GetIdsInSql();
304-
return sql == null
303+
var sqlIn = dbCmd.SetIdsInSqlParams(idValues);
304+
return string.IsNullOrEmpty(sqlIn)
305305
? new List<T>()
306-
: Select<T>(dbCmd, dbCmd.GetDialectProvider().GetQuotedColumnName(ModelDefinition<T>.PrimaryKeyName) + " IN (" + sql + ")");
306+
: Select<T>(dbCmd, dbCmd.GetDialectProvider().GetQuotedColumnName(ModelDefinition<T>.PrimaryKeyName) + " IN (" + sqlIn + ")");
307307
}
308308

309309
internal static T SingleById<T>(this IDbCommand dbCmd, object value)

src/ServiceStack.OrmLite/OrmLiteUtils.cs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -289,17 +289,19 @@ public static string GetColumnNames(this ModelDefinition modelDef, IOrmLiteDiale
289289
return dialect.GetColumnNames(modelDef);
290290
}
291291

292-
internal static string GetIdsInSql(this IEnumerable idValues)
292+
internal static string SetIdsInSqlParams(this IDbCommand dbCmd, IEnumerable idValues)
293293
{
294-
var sql = StringBuilderCache.Allocate();
295-
foreach (var idValue in idValues)
294+
var inArgs = Sql.Flatten(idValues);
295+
var sbParams = StringBuilderCache.Allocate();
296+
foreach (var item in inArgs)
296297
{
297-
if (sql.Length > 0)
298-
sql.Append(",");
299-
sql.AppendFormat("{0}".SqlFmt(idValue));
298+
if (sbParams.Length > 0)
299+
sbParams.Append(",");
300+
301+
sbParams.Append(dbCmd.AddParam(dbCmd.Parameters.Count.ToString(), item).ParameterName);
300302
}
301-
var str = StringBuilderCache.ReturnAndFree(sql);
302-
return str.Length == 0 ? null : str;
303+
var sqlIn = StringBuilderCache.ReturnAndFree(sbParams);
304+
return sqlIn;
303305
}
304306

305307
public static string SqlFmt(this string sqlText, params object[] sqlParams)

src/ServiceStack.OrmLite/OrmLiteWriteCommandExtensions.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -577,8 +577,9 @@ internal static string DeleteByIdSql<T>(this IDbCommand dbCmd, object id, ulong
577577

578578
internal static int DeleteByIds<T>(this IDbCommand dbCmd, IEnumerable idValues)
579579
{
580-
var sqlIn = idValues.GetIdsInSql();
581-
if (sqlIn == null) return 0;
580+
var sqlIn = dbCmd.SetIdsInSqlParams(idValues);
581+
if (string.IsNullOrEmpty(sqlIn))
582+
return 0;
582583

583584
var sql = GetDeleteByIdsSql<T>(sqlIn, dbCmd.GetDialectProvider());
584585

tests/ServiceStack.OrmLite.Tests/ApiSqlServerTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public void API_SqlServer_Examples()
9797
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" FROM \"Person\" WHERE \"Age\" = @Age"));
9898

9999
db.SelectByIds<Person>(new[] { 1, 2, 3 });
100-
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" FROM \"Person\" WHERE \"Id\" IN (1,2,3)"));
100+
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" FROM \"Person\" WHERE \"Id\" IN (@0,@1,@2)"));
101101

102102
db.SelectNonDefaults(new Person { Id = 1 });
103103
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" FROM \"Person\" WHERE \"Id\" = @Id"));
@@ -318,7 +318,7 @@ public void API_SqlServer_Examples()
318318
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE \"Id\" = @0"));
319319

320320
db.DeleteByIds<Person>(new[] { 1, 2, 3 });
321-
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE \"Id\" IN (1,2,3)"));
321+
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE \"Id\" IN (@0,@1,@2)"));
322322

323323
db.Delete<Person>("Age = @age", new { age = 27 });
324324
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE Age = @age"));

tests/ServiceStack.OrmLite.Tests/ApiSqliteTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public void API_Sqlite_Examples()
9595
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" FROM \"Person\" WHERE \"Age\" = @Age"));
9696

9797
db.SelectByIds<Person>(new[] { 1, 2, 3 });
98-
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" FROM \"Person\" WHERE \"Id\" IN (1,2,3)"));
98+
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" FROM \"Person\" WHERE \"Id\" IN (@0,@1,@2)"));
9999

100100
db.SelectNonDefaults(new Person { Id = 1 });
101101
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" FROM \"Person\" WHERE \"Id\" = @Id"));
@@ -323,7 +323,7 @@ public void API_Sqlite_Examples()
323323
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE \"Id\" = @0"));
324324

325325
db.DeleteByIds<Person>(new[] { 1, 2, 3 });
326-
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE \"Id\" IN (1,2,3)"));
326+
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE \"Id\" IN (@0,@1,@2)"));
327327

328328
db.Delete<Person>("Age = @age", new { age = 27 });
329329
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE Age = @age"));

tests/ServiceStack.OrmLiteV45.Tests/ApiMySqlTestsAsync.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public async Task API_MySql_Examples_Async()
9393
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT `Id`, `FirstName`, `LastName`, `Age` FROM `Person` WHERE `Age` = @Age"));
9494

9595
await db.SelectByIdsAsync<Person>(new[] { 1, 2, 3 });
96-
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT `Id`, `FirstName`, `LastName`, `Age` FROM `Person` WHERE `Id` IN (1,2,3)"));
96+
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT `Id`, `FirstName`, `LastName`, `Age` FROM `Person` WHERE `Id` IN (@0,@1,@2)"));
9797

9898
await db.SelectNonDefaultsAsync(new Person { Id = 1 });
9999
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT `Id`, `FirstName`, `LastName`, `Age` FROM `Person` WHERE `Id` = @Id"));
@@ -301,7 +301,7 @@ await db.DeleteNonDefaultsAsync(new Person { FirstName = "Jimi", Age = 27 },
301301
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM `Person` WHERE `Id` = @0"));
302302

303303
await db.DeleteByIdsAsync<Person>(new[] { 1, 2, 3 });
304-
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM `Person` WHERE `Id` IN (1,2,3)"));
304+
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM `Person` WHERE `Id` IN (@0,@1,@2)"));
305305

306306
await db.DeleteAsync<Person>("Age = @age", new { age = 27 });
307307
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM `Person` WHERE Age = @age"));

tests/ServiceStack.OrmLiteV45.Tests/ApiPostgreSqlTestsAsync.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public async Task API_PostgreSql_Examples_Async()
9292
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"id\", \"first_name\", \"last_name\", \"age\" FROM \"person\" WHERE \"age\" = :Age"));
9393

9494
await db.SelectByIdsAsync<Person>(new[] { 1, 2, 3 });
95-
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"id\", \"first_name\", \"last_name\", \"age\" FROM \"person\" WHERE \"id\" IN (1,2,3)"));
95+
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"id\", \"first_name\", \"last_name\", \"age\" FROM \"person\" WHERE \"id\" IN (:0,:1,:2)"));
9696

9797
await db.SelectNonDefaultsAsync(new Person { Id = 1 });
9898
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"id\", \"first_name\", \"last_name\", \"age\" FROM \"person\" WHERE \"id\" = :Id"));
@@ -300,7 +300,7 @@ await db.DeleteNonDefaultsAsync(new Person { FirstName = "Jimi", Age = 27 },
300300
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"person\" WHERE \"id\" = :0"));
301301

302302
await db.DeleteByIdsAsync<Person>(new[] { 1, 2, 3 });
303-
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"person\" WHERE \"id\" IN (1,2,3)"));
303+
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"person\" WHERE \"id\" IN (:0,:1,:2)"));
304304

305305
await db.DeleteAsync<Person>("age = @age", new { age = 27 });
306306
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"person\" WHERE age = @age"));

tests/ServiceStack.OrmLiteV45.Tests/ApiSqlServerTestsAsync.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public async Task API_SqlServer_Examples_Async()
9393
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" FROM \"Person\" WHERE \"Age\" = @Age"));
9494

9595
await db.SelectByIdsAsync<Person>(new[] { 1, 2, 3 });
96-
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" FROM \"Person\" WHERE \"Id\" IN (1,2,3)"));
96+
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" FROM \"Person\" WHERE \"Id\" IN (@0,@1,@2)"));
9797

9898
await db.SelectNonDefaultsAsync(new Person { Id = 1 });
9999
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" FROM \"Person\" WHERE \"Id\" = @Id"));
@@ -308,7 +308,7 @@ await db.DeleteNonDefaultsAsync(new Person { FirstName = "Jimi", Age = 27 },
308308
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE \"Id\" = @0"));
309309

310310
await db.DeleteByIdsAsync<Person>(new[] { 1, 2, 3 });
311-
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE \"Id\" IN (1,2,3)"));
311+
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE \"Id\" IN (@0,@1,@2)"));
312312

313313
await db.DeleteAsync<Person>("Age = @age", new { age = 27 });
314314
Assert.That(db.GetLastSql(), Is.EqualTo("DELETE FROM \"Person\" WHERE Age = @age"));

0 commit comments

Comments
 (0)