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

Commit 4290229

Browse files
committed
Change ConvertToList to handle scalars as well
1 parent 6dd126b commit 4290229

12 files changed

+270
-255
lines changed

lib/ServiceStack.Client.dll

0 Bytes
Binary file not shown.

lib/ServiceStack.Common.dll

0 Bytes
Binary file not shown.

lib/ServiceStack.Interfaces.dll

0 Bytes
Binary file not shown.

src/ServiceStack.OrmLite.SqlServerTests/CustomSqlTests.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,5 +82,20 @@ public void Can_execute_stored_procedure_using_SqlProc_with_out_params()
8282
Assert.That(pTotal.Value, Is.EqualTo("3"));
8383
}
8484
}
85+
86+
[Test]
87+
public void Can_execute_stored_proceduce_returning_scalars()
88+
{
89+
using (var db = OpenDbConnection())
90+
{
91+
using (var cmd = db.SqlProc(
92+
"GetUserIdsFromEmailAddresses", new { EmailAddresses = "[email protected]" }))
93+
{
94+
var userIds = cmd.ConvertToList<int>();
95+
96+
Assert.That(userIds.Count, Is.GreaterThan(0));
97+
}
98+
}
99+
}
85100
}
86101
}

src/ServiceStack.OrmLite/Async/OrmLiteReadCommandExtensionsAsync.cs

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ internal static Task<T> SingleAsync<T>(this IDbCommand dbCmd, object anonType, C
120120

121121
internal static Task<T> SingleAsync<T>(this IDbCommand dbCmd, string sql, object anonType, CancellationToken token)
122122
{
123-
if (OrmLiteReadCommandExtensions.IsScalar<T>())
123+
if (OrmLiteUtils.IsScalar<T>())
124124
return dbCmd.ScalarAsync<T>(sql, anonType, token);
125125

126126
dbCmd.SetParameters<T>(anonType, excludeDefaults: false);
@@ -142,19 +142,15 @@ internal static Task<List<T>> WhereAsync<T>(this IDbCommand dbCmd, object anonTy
142142
{
143143
dbCmd.SetFilters<T>(anonType);
144144

145-
return OrmLiteReadCommandExtensions.IsScalar<T>()
146-
? dbCmd.ColumnAsync<T>(null, token)
147-
: dbCmd.ConvertToListAsync<T>(null, token);
145+
return dbCmd.ConvertToListAsync<T>(null, token);
148146
}
149147

150148
internal static Task<List<T>> SelectAsync<T>(this IDbCommand dbCmd, string sql, object anonType, CancellationToken token)
151149
{
152150
if (anonType != null) dbCmd.SetParameters<T>(anonType, excludeDefaults: false);
153151
dbCmd.CommandText = dbCmd.GetDialectProvider().ToSelectStatement(typeof(T), sql);
154152

155-
return OrmLiteReadCommandExtensions.IsScalar<T>()
156-
? dbCmd.ColumnAsync<T>(null, token)
157-
: dbCmd.ConvertToListAsync<T>(null, token);
153+
return dbCmd.ConvertToListAsync<T>(null, token);
158154
}
159155

160156
internal static Task<List<T>> SelectAsync<T>(this IDbCommand dbCmd, string sql, Dictionary<string, object> dict, CancellationToken token)
@@ -163,9 +159,7 @@ internal static Task<List<T>> SelectAsync<T>(this IDbCommand dbCmd, string sql,
163159

164160
dbCmd.CommandText = dbCmd.GetDialectProvider().ToSelectStatement(typeof(T), sql);
165161

166-
return OrmLiteReadCommandExtensions.IsScalar<T>()
167-
? dbCmd.ColumnAsync<T>(null, token)
168-
: dbCmd.ConvertToListAsync<T>(null, token);
162+
return dbCmd.ConvertToListAsync<T>(null, token);
169163
}
170164

171165
internal static Task<List<T>> SqlListAsync<T>(this IDbCommand dbCmd, string sql, object anonType, CancellationToken token)
@@ -197,19 +191,15 @@ internal static Task<List<T>> SqlColumnAsync<T>(this IDbCommand dbCmd, string sq
197191
if (anonType != null) dbCmd.SetParameters<T>(anonType, excludeDefaults: false);
198192
dbCmd.CommandText = sql;
199193

200-
return OrmLiteReadCommandExtensions.IsScalar<T>()
201-
? dbCmd.ColumnAsync<T>(null, token)
202-
: dbCmd.ConvertToListAsync<T>(null, token);
194+
return dbCmd.ConvertToListAsync<T>(null, token);
203195
}
204196

205197
internal static Task<List<T>> SqlColumnAsync<T>(this IDbCommand dbCmd, string sql, Dictionary<string, object> dict, CancellationToken token)
206198
{
207199
if (dict != null) dbCmd.SetParameters(dict, false);
208200
dbCmd.CommandText = sql;
209201

210-
return OrmLiteReadCommandExtensions.IsScalar<T>()
211-
? dbCmd.ColumnAsync<T>(null, token)
212-
: dbCmd.ConvertToListAsync<T>(null, token);
202+
return dbCmd.ConvertToListAsync<T>(null, token);
213203
}
214204

215205
internal static Task<T> SqlScalarAsync<T>(this IDbCommand dbCmd, string sql, object anonType, CancellationToken token)

src/ServiceStack.OrmLite/Async/OrmLiteResultsFilterExtensionsAsync.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,10 @@ public static Task<List<T>> ConvertToListAsync<T>(this IDbCommand dbCmd, string
5757

5858
var dialectProvider = dbCmd.GetDialectProvider();
5959
return dbCmd.ExecReaderAsync(dbCmd.CommandText, token)
60-
.Then(reader => reader.ConvertToListAsync<T>(dialectProvider, token)).Unwrap();
60+
.Then(reader =>
61+
OrmLiteUtils.IsScalar<T>()
62+
? reader.ColumnAsync<T>(dialectProvider, token)
63+
: reader.ConvertToListAsync<T>(dialectProvider, token)).Unwrap();
6164
}
6265

6366
public static Task<IList> ConvertToListAsync(this IDbCommand dbCmd, Type refType, string sql, CancellationToken token)

src/ServiceStack.OrmLite/OrmLiteReadCommandExtensions.cs

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,6 @@ internal static IDataReader ExecReader(this IDbCommand dbCmd, string sql, IEnume
6767
return dbCmd.ExecuteReader();
6868
}
6969

70-
public static bool IsScalar<T>()
71-
{
72-
return typeof(T).IsValueType || typeof(T) == typeof(string);
73-
}
74-
7570
internal static List<T> Select<T>(this IDbCommand dbCmd)
7671
{
7772
return SelectFmt<T>(dbCmd, (string)null);
@@ -342,7 +337,7 @@ internal static T Single<T>(this IDbCommand dbCmd, object anonType)
342337

343338
internal static T Single<T>(this IDbCommand dbCmd, string sql, object anonType)
344339
{
345-
if (IsScalar<T>()) return Scalar<T>(dbCmd, sql, anonType);
340+
if (OrmLiteUtils.IsScalar<T>()) return Scalar<T>(dbCmd, sql, anonType);
346341

347342
dbCmd.SetParameters<T>(anonType, excludeDefaults: false);
348343

@@ -363,29 +358,23 @@ internal static List<T> Where<T>(this IDbCommand dbCmd, object anonType)
363358
{
364359
dbCmd.SetFilters<T>(anonType);
365360

366-
return IsScalar<T>()
367-
? dbCmd.Column<T>()
368-
: dbCmd.ConvertToList<T>();
361+
return dbCmd.ConvertToList<T>();
369362
}
370363

371364
internal static List<T> Select<T>(this IDbCommand dbCmd, string sql, object anonType = null)
372365
{
373366
if (anonType != null) dbCmd.SetParameters<T>(anonType, excludeDefaults: false);
374367
dbCmd.CommandText = dbCmd.GetDialectProvider().ToSelectStatement(typeof(T), sql);
375368

376-
return IsScalar<T>()
377-
? dbCmd.Column<T>()
378-
: dbCmd.ConvertToList<T>();
369+
return dbCmd.ConvertToList<T>();
379370
}
380371

381372
internal static List<T> Select<T>(this IDbCommand dbCmd, string sql, Dictionary<string, object> dict)
382373
{
383374
if (dict != null) SetParameters(dbCmd, (IDictionary<string, object>)dict, (bool)false);
384375
dbCmd.CommandText = dbCmd.GetDialectProvider().ToSelectStatement(typeof(T), sql);
385376

386-
return IsScalar<T>()
387-
? dbCmd.Column<T>()
388-
: dbCmd.ConvertToList<T>();
377+
return dbCmd.ConvertToList<T>();
389378
}
390379

391380
internal static List<T> SqlList<T>(this IDbCommand dbCmd, string sql, object anonType = null)
@@ -417,19 +406,15 @@ internal static List<T> SqlColumn<T>(this IDbCommand dbCmd, string sql, object a
417406
if (anonType != null) dbCmd.SetParameters<T>(anonType, excludeDefaults: false);
418407
dbCmd.CommandText = sql;
419408

420-
return IsScalar<T>()
421-
? dbCmd.Column<T>()
422-
: dbCmd.ConvertToList<T>();
409+
return dbCmd.ConvertToList<T>();
423410
}
424411

425412
internal static List<T> SqlColumn<T>(this IDbCommand dbCmd, string sql, Dictionary<string, object> dict)
426413
{
427414
if (dict != null) SetParameters(dbCmd, dict, false);
428415
dbCmd.CommandText = sql;
429416

430-
return IsScalar<T>()
431-
? dbCmd.Column<T>()
432-
: dbCmd.ConvertToList<T>();
417+
return dbCmd.ConvertToList<T>();
433418
}
434419

435420
internal static T SqlScalar<T>(this IDbCommand dbCmd, string sql, object anonType = null)

src/ServiceStack.OrmLite/OrmLiteResultsFilterExtensions.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@ public static List<T> ConvertToList<T>(this IDbCommand dbCmd, string sql = null)
6363

6464
using (var reader = dbCmd.ExecReader(dbCmd.CommandText))
6565
{
66-
return reader.ConvertToList<T>(dbCmd.GetDialectProvider());
66+
return OrmLiteUtils.IsScalar<T>()
67+
? reader.Column<T>(dbCmd.GetDialectProvider())
68+
: reader.ConvertToList<T>(dbCmd.GetDialectProvider());
6769
}
6870
}
6971

@@ -252,6 +254,5 @@ internal static Dictionary<K, List<V>> Lookup<K, V>(this IDbCommand dbCmd, strin
252254
return reader.Lookup<K, V>(dbCmd.GetDialectProvider());
253255
}
254256
}
255-
256257
}
257258
}

src/ServiceStack.OrmLite/OrmLiteUtils.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ public static T CreateInstance<T>()
2727
return (T)ReflectionExtensions.CreateInstance<T>();
2828
}
2929

30+
public static bool IsScalar<T>()
31+
{
32+
return typeof(T).IsValueType || typeof(T) == typeof(string);
33+
}
34+
3035
public static T ConvertTo<T>(this IDataReader dataReader, IOrmLiteDialectProvider dialectProvider)
3136
{
3237
var fieldDefs = ModelDefinition<T>.Definition.AllFieldDefinitionsArray;

tests/ServiceStack.OrmLite.Tests/ApiSqliteTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public void API_Sqlite_Examples()
3535
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" \nFROM \"Person\"\nWHERE (\"Age\" > 40)"));
3636

3737
db.Select<Person>(q => q.Where(x => x.Age > 40).OrderBy(x => x.Id));
38-
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" \nFROM \"Person\"\nWHERE (\"Age\" > 40)\nORDER BY \"Id\" ASC"));
38+
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" \nFROM \"Person\"\nWHERE (\"Age\" > 40)\nORDER BY \"Id\""));
3939

4040
db.Select<Person>(q => q.Where(x => x.Age > 40));
4141
Assert.That(db.GetLastSql(), Is.EqualTo("SELECT \"Id\", \"FirstName\", \"LastName\", \"Age\" \nFROM \"Person\"\nWHERE (\"Age\" > 40)"));

0 commit comments

Comments
 (0)