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

Commit f6654a6

Browse files
committed
Add Db Param overloads for primary API's
1 parent b89dfb8 commit f6654a6

File tree

6 files changed

+218
-55
lines changed

6 files changed

+218
-55
lines changed

src/ServiceStack.OrmLite/Expressions/ReadExpressionCommandExtensions.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,12 @@ internal static long Count<T>(this IDbCommand dbCmd, Expression<Func<T, bool>> p
111111
return GetCount(dbCmd, sql, ev.Params);
112112
}
113113

114-
internal static long GetCount(this IDbCommand dbCmd, string sql, IEnumerable<IDbDataParameter> sqlParams = null)
114+
internal static long GetCount(this IDbCommand dbCmd, string sql)
115+
{
116+
return dbCmd.Column<long>(sql).Sum();
117+
}
118+
119+
internal static long GetCount(this IDbCommand dbCmd, string sql, IEnumerable<IDbDataParameter> sqlParams)
115120
{
116121
return dbCmd.Column<long>(sql, sqlParams).Sum();
117122
}

src/ServiceStack.OrmLite/OrmLiteReadApi.cs

Lines changed: 79 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System.Collections;
33
using System.Collections.Generic;
44
using System.Data;
5-
using System.Linq;
65
using System.Linq.Expressions;
76

87
namespace ServiceStack.OrmLite
@@ -27,6 +26,17 @@ public static List<T> Select<T>(this IDbConnection dbConn, string sql)
2726
return dbConn.Exec(dbCmd => dbCmd.Select<T>(sql));
2827
}
2928

29+
/// <summary>
30+
/// Returns results from using sql. E.g:
31+
/// <para>db.Select&lt;Person&gt;("Age &gt; 40")</para>
32+
33+
/// <para>db.Select&lt;Person&gt;("SELECT * FROM Person WHERE Age &gt; @age", new[] { db.CreateParam("age", 40) })</para>
34+
/// </summary>
35+
public static List<T> Select<T>(this IDbConnection dbConn, string sql, IEnumerable<IDbDataParameter> sqlParams)
36+
{
37+
return dbConn.Exec(dbCmd => dbCmd.Select<T>(sql, sqlParams));
38+
}
39+
3040
/// <summary>
3141
/// Returns results from using a parameterized query. E.g:
3242
/// <para>db.Select&lt;Person&gt;("Age &gt; @age", new { age = 40})</para>
@@ -166,6 +176,15 @@ public static T Single<T>(this IDbConnection dbConn, object anonType)
166176
return dbConn.Exec(dbCmd => dbCmd.Single<T>(anonType));
167177
}
168178

179+
/// <summary>
180+
/// Returns results from using a single name, value filter. E.g:
181+
/// <para>db.Single&lt;Person&gt;("Age = @age", new[] { db.CreateParam("age",40) })</para>
182+
/// </summary>
183+
public static T Single<T>(this IDbConnection dbConn, string sql, IEnumerable<IDbDataParameter> sqlParams)
184+
{
185+
return dbConn.Exec(dbCmd => dbCmd.Single<T>(sql, sqlParams));
186+
}
187+
169188
/// <summary>
170189
/// Returns results from using a single name, value filter. E.g:
171190
/// <para>db.Single&lt;Person&gt;("Age = @age", new { age = 42 })</para>
@@ -208,7 +227,16 @@ public static T SingleWhere<T>(this IDbConnection dbConn, string name, object va
208227
/// </summary>
209228
public static T Scalar<T>(this IDbConnection dbConn, ISqlExpression sqlExpression)
210229
{
211-
return dbConn.Exec(dbCmd => dbCmd.Scalar<T>(sqlExpression.ToSelectStatement()));
230+
return dbConn.Exec(dbCmd => dbCmd.Scalar<T>(sqlExpression.ToSelectStatement(), sqlExpression.Params));
231+
}
232+
233+
/// <summary>
234+
/// Returns a single scalar value using a parameterized query. E.g:
235+
/// <para>db.Scalar&lt;int&gt;("SELECT COUNT(*) FROM Person WHERE Age &gt; @age", new[] { db.CreateParam("age",40) })</para>
236+
/// </summary>
237+
public static T Scalar<T>(this IDbConnection dbConn, string sql, IEnumerable<IDbDataParameter> sqlParams)
238+
{
239+
return dbConn.Exec(dbCmd => dbCmd.Scalar<T>(sql, sqlParams));
212240
}
213241

214242
/// <summary>
@@ -235,7 +263,7 @@ public static T ScalarFmt<T>(this IDbConnection dbConn, string sqlFormat, params
235263
/// </summary>
236264
public static List<T> Column<T>(this IDbConnection dbConn, ISqlExpression query)
237265
{
238-
return dbConn.Exec(dbCmd => dbCmd.Column<T>(query.ToSelectStatement()));
266+
return dbConn.Exec(dbCmd => dbCmd.Column<T>(query.ToSelectStatement(), query.Params));
239267
}
240268

241269
/// <summary>
@@ -265,6 +293,15 @@ public static List<T> Column<T>(this IDbConnection dbConn, string sql, object an
265293
return dbConn.Exec(dbCmd => dbCmd.Column<T>(sql, anonType));
266294
}
267295

296+
/// <summary>
297+
/// Returns the first column in a List using a SqlFormat query. E.g:
298+
/// <para>db.Column&lt;string&gt;("SELECT LastName FROM Person WHERE Age = @age", new[] { db.CreateParam("age",27) })</para>
299+
/// </summary>
300+
public static List<T> Column<T>(this IDbConnection dbConn, string sql, IEnumerable<IDbDataParameter> sqlParams)
301+
{
302+
return dbConn.Exec(dbCmd => dbCmd.Column<T>(sql, sqlParams));
303+
}
304+
268305
/// <summary>
269306
/// Returns the first column in a List using a SqlFormat query. E.g:
270307
/// <para>db.ColumnFmt&lt;string&gt;("SELECT LastName FROM Person WHERE Age = {0}", 27)</para>
@@ -292,6 +329,15 @@ public static HashSet<T> ColumnDistinct<T>(this IDbConnection dbConn, string sql
292329
return dbConn.Exec(dbCmd => dbCmd.ColumnDistinct<T>(sql, anonType));
293330
}
294331

332+
/// <summary>
333+
/// Returns the distinct first column values in a HashSet using an SqlFormat query. E.g:
334+
/// <para>db.ColumnDistinct&lt;int&gt;("SELECT Age FROM Person WHERE Age &lt; @age", new[] { db.CreateParam("age",50) })</para>
335+
/// </summary>
336+
public static HashSet<T> ColumnDistinct<T>(this IDbConnection dbConn, string sql, IEnumerable<IDbDataParameter> sqlParams)
337+
{
338+
return dbConn.Exec(dbCmd => dbCmd.ColumnDistinct<T>(sql, sqlParams));
339+
}
340+
295341
/// <summary>
296342
/// Returns the distinct first column values in a HashSet using an SqlFormat query. E.g:
297343
/// <para>db.ColumnDistinctFmt&lt;int&gt;("SELECT Age FROM Person WHERE Age &lt; {0}", 50)</para>
@@ -416,7 +462,7 @@ public static bool ExistsFmt<T>(this IDbConnection dbConn, string sqlFormat, par
416462
/// </summary>
417463
public static List<T> SqlList<T>(this IDbConnection dbConn, ISqlExpression sqlExpression)
418464
{
419-
return dbConn.Exec(dbCmd => dbCmd.SqlList<T>(sqlExpression.ToSelectStatement()));
465+
return dbConn.Exec(dbCmd => dbCmd.SqlList<T>(sqlExpression.ToSelectStatement(), sqlExpression.Params));
420466
}
421467

422468
/// <summary>
@@ -428,6 +474,15 @@ public static List<T> SqlList<T>(this IDbConnection dbConn, string sql, object a
428474
return dbConn.Exec(dbCmd => dbCmd.SqlList<T>(sql, anonType));
429475
}
430476

477+
/// <summary>
478+
/// Returns results from an arbitrary parameterized raw sql query. E.g:
479+
/// <para>db.SqlList&lt;Person&gt;("EXEC GetRockstarsAged @age", new[] { db.CreateParam("age",50) })</para>
480+
/// </summary>
481+
public static List<T> SqlList<T>(this IDbConnection dbConn, string sql, IEnumerable<IDbDataParameter> sqlParams)
482+
{
483+
return dbConn.Exec(dbCmd => dbCmd.SqlList<T>(sql, sqlParams));
484+
}
485+
431486
/// <summary>
432487
/// Returns results from an arbitrary parameterized raw sql query. E.g:
433488
/// <para>db.SqlList&lt;Person&gt;("EXEC GetRockstarsAged @age", new Dictionary&lt;string, object&gt; { { "age", 42 } })</para>
@@ -461,7 +516,7 @@ public static IDbCommand SqlProc(this IDbConnection dbConn, string name, object
461516
/// </summary>
462517
public static List<T> SqlColumn<T>(this IDbConnection dbConn, ISqlExpression sqlExpression)
463518
{
464-
return dbConn.Exec(dbCmd => dbCmd.SqlColumn<T>(sqlExpression.ToSelectStatement()));
519+
return dbConn.Exec(dbCmd => dbCmd.SqlColumn<T>(sqlExpression.ToSelectStatement(), sqlExpression.Params));
465520
}
466521

467522
/// <summary>
@@ -473,6 +528,15 @@ public static List<T> SqlColumn<T>(this IDbConnection dbConn, string sql, object
473528
return dbConn.Exec(dbCmd => dbCmd.SqlColumn<T>(sql, anonType));
474529
}
475530

531+
/// <summary>
532+
/// Returns the first column in a List using a parameterized query. E.g:
533+
/// <para>db.SqlColumn&lt;string&gt;("SELECT LastName FROM Person WHERE Age &lt; @age", new[] { db.CreateParam("age",50) })</para>
534+
/// </summary>
535+
public static List<T> SqlColumn<T>(this IDbConnection dbConn, string sql, IEnumerable<IDbDataParameter> sqlParams)
536+
{
537+
return dbConn.Exec(dbCmd => dbCmd.SqlColumn<T>(sql, sqlParams));
538+
}
539+
476540
/// <summary>
477541
/// Returns the first column in a List using a parameterized query. E.g:
478542
/// <para>db.SqlColumn&lt;string&gt;("SELECT LastName FROM Person WHERE Age &lt; @age", new Dictionary&lt;string, object&gt; { { "age", 50 } })</para>
@@ -488,7 +552,16 @@ public static List<T> SqlColumn<T>(this IDbConnection dbConn, string sql, Dictio
488552
/// </summary>
489553
public static T SqlScalar<T>(this IDbConnection dbConn, ISqlExpression sqlExpression)
490554
{
491-
return dbConn.Exec(dbCmd => dbCmd.SqlScalar<T>(sqlExpression.ToSelectStatement()));
555+
return dbConn.Exec(dbCmd => dbCmd.SqlScalar<T>(sqlExpression.ToSelectStatement(), sqlExpression.Params));
556+
}
557+
558+
/// <summary>
559+
/// Returns a single Scalar value using a parameterized query. E.g:
560+
/// <para>db.SqlScalar&lt;int&gt;("SELECT COUNT(*) FROM Person WHERE Age &lt; @age", new[]{ db.CreateParam("age",50) })</para>
561+
/// </summary>
562+
public static T SqlScalar<T>(this IDbConnection dbConn, string sql, IEnumerable<IDbDataParameter> sqlParams)
563+
{
564+
return dbConn.Exec(dbCmd => dbCmd.SqlScalar<T>(sql, sqlParams));
492565
}
493566

494567
/// <summary>

src/ServiceStack.OrmLite/OrmLiteReadCommandExtensions.cs

Lines changed: 60 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,11 @@ internal static void SetFilters<T>(this IDbCommand dbCmd, object anonType, bool
138138
dbCmd.CommandText = dbCmd.GetFilterSql<T>();
139139
}
140140

141-
internal static void SetParameters<T>(this IDbCommand dbCmd, object anonType, bool excludeDefaults)
141+
internal static IDbCommand SetParameters<T>(this IDbCommand dbCmd, object anonType, bool excludeDefaults)
142142
{
143+
if (anonType == null)
144+
return dbCmd;
145+
143146
dbCmd.Parameters.Clear();
144147
lastQueryType = null;
145148

@@ -174,6 +177,8 @@ internal static void SetParameters<T>(this IDbCommand dbCmd, object anonType, bo
174177

175178
dbCmd.Parameters.Add(p);
176179
});
180+
181+
return dbCmd;
177182
}
178183

179184
internal delegate void ParamIterDelegate(PropertyInfo pi, string columnName, object value);
@@ -240,13 +245,13 @@ internal static List<string> NonDefaultFields<T>(this object anonType)
240245
return ret;
241246
}
242247

243-
internal static void SetParameters(this IDbCommand dbCmd, object anonType, bool excludeDefaults)
248+
internal static IDbCommand SetParameters(this IDbCommand dbCmd, object anonType, bool excludeDefaults)
244249
{
245-
dbCmd.Parameters.Clear();
246-
lastQueryType = null;
247250
if (anonType == null)
248-
return;
251+
return dbCmd;
249252

253+
dbCmd.Parameters.Clear();
254+
lastQueryType = null;
250255
var pis = anonType.GetType().GetSerializableProperties();
251256

252257
foreach (var pi in pis)
@@ -267,13 +272,16 @@ internal static void SetParameters(this IDbCommand dbCmd, object anonType, bool
267272
p.Value = value ?? DBNull.Value;
268273
dbCmd.Parameters.Add(p);
269274
}
275+
return dbCmd;
270276
}
271277

272-
internal static void SetParameters(this IDbCommand dbCmd, IDictionary<string, object> dict, bool excludeDefaults)
278+
internal static IDbCommand SetParameters(this IDbCommand dbCmd, IDictionary<string, object> dict, bool excludeDefaults)
273279
{
280+
if (dict == null)
281+
return dbCmd;
282+
274283
dbCmd.Parameters.Clear();
275284
lastQueryType = null;
276-
if (dict == null) return;
277285

278286
foreach (var kvp in dict)
279287
{
@@ -291,6 +299,7 @@ internal static void SetParameters(this IDbCommand dbCmd, IDictionary<string, ob
291299
p.Value = value ?? DBNull.Value;
292300
dbCmd.Parameters.Add(p);
293301
}
302+
return dbCmd;
294303
}
295304

296305
public static void SetFilters<T>(this IDbCommand dbCmd, object anonType)
@@ -367,13 +376,22 @@ internal static T Single<T>(this IDbCommand dbCmd, object anonType)
367376
return dbCmd.ConvertTo<T>();
368377
}
369378

370-
internal static T Single<T>(this IDbCommand dbCmd, string sql, object anonType)
379+
internal static T Single<T>(this IDbCommand dbCmd, string sql, IEnumerable<IDbDataParameter> sqlParams)
371380
{
372-
if (OrmLiteUtils.IsScalar<T>()) return Scalar<T>(dbCmd, sql, anonType);
381+
dbCmd.SetParameters(sqlParams);
382+
383+
return OrmLiteUtils.IsScalar<T>()
384+
? dbCmd.Scalar<T>(sql)
385+
: dbCmd.ConvertTo<T>(dbCmd.GetDialectProvider().ToSelectStatement(typeof(T), sql));
386+
}
373387

388+
internal static T Single<T>(this IDbCommand dbCmd, string sql, object anonType)
389+
{
374390
dbCmd.SetParameters<T>(anonType, excludeDefaults: false);
375391

376-
return dbCmd.ConvertTo<T>(dbCmd.GetDialectProvider().ToSelectStatement(typeof(T), sql));
392+
return OrmLiteUtils.IsScalar<T>()
393+
? dbCmd.Scalar<T>(sql)
394+
: dbCmd.ConvertTo<T>(dbCmd.GetDialectProvider().ToSelectStatement(typeof(T), sql));
377395
}
378396

379397
internal static List<T> Where<T>(this IDbCommand dbCmd, string name, object value)
@@ -393,6 +411,12 @@ internal static List<T> Where<T>(this IDbCommand dbCmd, object anonType)
393411
return dbCmd.ConvertToList<T>();
394412
}
395413

414+
internal static List<T> Select<T>(this IDbCommand dbCmd, string sql, IEnumerable<IDbDataParameter> sqlParams)
415+
{
416+
dbCmd.SetParameters(sqlParams).CommandText = dbCmd.GetDialectProvider().ToSelectStatement(typeof(T), sql);
417+
return dbCmd.ConvertToList<T>();
418+
}
419+
396420
internal static List<T> Select<T>(this IDbCommand dbCmd, string sql, object anonType = null)
397421
{
398422
if (anonType != null) dbCmd.SetParameters<T>(anonType, excludeDefaults: false);
@@ -409,6 +433,13 @@ internal static List<T> Select<T>(this IDbCommand dbCmd, string sql, Dictionary<
409433
return dbCmd.ConvertToList<T>();
410434
}
411435

436+
internal static List<T> SqlList<T>(this IDbCommand dbCmd, string sql, IEnumerable<IDbDataParameter> sqlParams)
437+
{
438+
dbCmd.CommandText = sql;
439+
440+
return dbCmd.SetParameters(sqlParams).ConvertToList<T>();
441+
}
442+
412443
internal static List<T> SqlList<T>(this IDbCommand dbCmd, string sql, object anonType = null)
413444
{
414445
if (anonType != null) dbCmd.SetParameters<T>(anonType, excludeDefaults: false);
@@ -433,11 +464,15 @@ internal static List<T> SqlList<T>(this IDbCommand dbCmd, string sql, Action<IDb
433464
return dbCmd.ConvertToList<T>();
434465
}
435466

436-
internal static List<T> SqlColumn<T>(this IDbCommand dbCmd, string sql, object anonType = null)
467+
internal static List<T> SqlColumn<T>(this IDbCommand dbCmd, string sql, IEnumerable<IDbDataParameter> sqlParams)
437468
{
438-
if (anonType != null) dbCmd.SetParameters<T>(anonType, excludeDefaults: false);
439-
dbCmd.CommandText = sql;
469+
dbCmd.SetParameters(sqlParams).CommandText = sql;
470+
return dbCmd.ConvertToList<T>();
471+
}
440472

473+
internal static List<T> SqlColumn<T>(this IDbCommand dbCmd, string sql, object anonType = null)
474+
{
475+
dbCmd.SetParameters<T>(anonType, excludeDefaults: false).CommandText = sql;
441476
return dbCmd.ConvertToList<T>();
442477
}
443478

@@ -449,6 +484,11 @@ internal static List<T> SqlColumn<T>(this IDbCommand dbCmd, string sql, Dictiona
449484
return dbCmd.ConvertToList<T>();
450485
}
451486

487+
internal static T SqlScalar<T>(this IDbCommand dbCmd, string sql, IEnumerable<IDbDataParameter> sqlParams)
488+
{
489+
return dbCmd.SetParameters(sqlParams).Scalar<T>(sql);
490+
}
491+
452492
internal static T SqlScalar<T>(this IDbCommand dbCmd, string sql, object anonType = null)
453493
{
454494
if (anonType != null) dbCmd.SetParameters<T>(anonType, excludeDefaults: false);
@@ -674,11 +714,14 @@ internal static List<T> Column<T>(this IDataReader reader, IOrmLiteDialectProvid
674714
return columValues;
675715
}
676716

677-
internal static HashSet<T> ColumnDistinct<T>(this IDbCommand dbCmd, string sql, object anonType = null)
717+
internal static HashSet<T> ColumnDistinct<T>(this IDbCommand dbCmd, string sql, IEnumerable<IDbDataParameter> sqlParams)
678718
{
679-
if (anonType != null) dbCmd.SetParameters<T>(anonType, excludeDefaults: false);
719+
return dbCmd.SetParameters(sqlParams).ColumnDistinct<T>(sql);
720+
}
680721

681-
return dbCmd.ColumnDistinct<T>(sql);
722+
internal static HashSet<T> ColumnDistinct<T>(this IDbCommand dbCmd, string sql, object anonType = null)
723+
{
724+
return dbCmd.SetParameters<T>(anonType, excludeDefaults: false).ColumnDistinct<T>(sql);
682725
}
683726

684727
internal static HashSet<T> ColumnDistinctFmt<T>(this IDbCommand dbCmd, string sql, params object[] sqlParams)
@@ -702,9 +745,7 @@ internal static HashSet<T> ColumnDistinct<T>(this IDataReader reader, IOrmLiteDi
702745

703746
internal static Dictionary<K, List<V>> Lookup<K, V>(this IDbCommand dbCmd, string sql, object anonType = null)
704747
{
705-
if (anonType != null) SetParameters(dbCmd, anonType, (bool)false);
706-
707-
return dbCmd.Lookup<K, V>(sql);
748+
return dbCmd.SetParameters(anonType, false).Lookup<K, V>(sql);
708749
}
709750

710751
internal static Dictionary<K, List<V>> LookupFmt<K, V>(this IDbCommand dbCmd, string sql, params object[] sqlParams)

0 commit comments

Comments
 (0)