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

Commit 7e581a5

Browse files
committed
Change Count to sum counts of all rows returned not just the first scalar value.
1 parent 42ae6e3 commit 7e581a5

File tree

3 files changed

+19
-14
lines changed

3 files changed

+19
-14
lines changed

src/ServiceStack.OrmLite/Expressions/ReadExtensions.cs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -90,30 +90,35 @@ internal static TKey Scalar<T, TKey>(this IDbCommand dbCmd,
9090

9191
internal static long Count<T>(this IDbCommand dbCmd)
9292
{
93-
SqlExpression<T> expression = OrmLiteConfig.DialectProvider.SqlExpression<T>();
94-
string sql = expression.ToCountStatement();
95-
return dbCmd.Scalar<long>(sql);
93+
var expression = OrmLiteConfig.DialectProvider.SqlExpression<T>();
94+
var sql = expression.ToCountStatement();
95+
return GetCount(dbCmd, sql);
9696
}
9797

9898
internal static long Count<T>(this IDbCommand dbCmd, Func<SqlExpression<T>, SqlExpression<T>> expression)
9999
{
100100
var expr = OrmLiteConfig.DialectProvider.SqlExpression<T>();
101-
string sql = expression(expr).ToCountStatement();
102-
return dbCmd.Scalar<long>(sql);
101+
var sql = expression(expr).ToCountStatement();
102+
return GetCount(dbCmd, sql);
103103
}
104104

105105
internal static long Count<T>(this IDbCommand dbCmd, SqlExpression<T> expression)
106106
{
107-
string sql = expression.ToCountStatement();
108-
return dbCmd.Scalar<long>(sql);
107+
var sql = expression.ToCountStatement();
108+
return GetCount(dbCmd, sql);
109109
}
110110

111111
internal static long Count<T>(this IDbCommand dbCmd, Expression<Func<T, bool>> predicate)
112112
{
113113
var ev = OrmLiteConfig.DialectProvider.SqlExpression<T>();
114114
ev.Where(predicate);
115-
string sql = ev.ToCountStatement();
116-
return dbCmd.Scalar<long>(sql);
115+
var sql = ev.ToCountStatement();
116+
return GetCount(dbCmd, sql);
117+
}
118+
119+
internal static long GetCount(this IDbCommand dbCmd, string sql)
120+
{
121+
return dbCmd.Column<long>(sql).Sum();
117122
}
118123

119124
internal static List<T> LoadSelect<T>(this IDbCommand dbCmd, Func<SqlExpression<T>, SqlExpression<T>> expression)

tests/ServiceStack.OrmLite.Tests/Expression/SqlExpressionTests.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,11 +264,13 @@ public void Can_do_ToCountStatement_with_SqlExpression_if_expression_has_groupby
264264
.Select(x => x.Letter)
265265
.GroupBy(x => x.Letter);
266266

267-
query.ToCountStatement().Print();
268-
269267
var count = db.Count(query);
268+
db.GetLastSql().Print();
269+
Assert.That(count, Is.EqualTo(7));
270270

271-
Assert.That(count, Is.EqualTo(2));
271+
var rowCount = db.Select(query).Count;
272+
db.GetLastSql().Print();
273+
Assert.That(rowCount, Is.EqualTo(2));
272274
}
273275
}
274276

tests/ServiceStack.OrmLite.Tests/MockAllApiTests.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,6 @@ public void Can_mock_all_Scalar_Apis()
181181
{
182182
Assert.That(db.Scalar<Person, int>(x => Sql.Max(x.Age)), Is.EqualTo(1000));
183183
Assert.That(db.Scalar<Person, int>(x => Sql.Max(x.Age), x => x.Age < 50), Is.EqualTo(1000));
184-
Assert.That(db.Count<Person>(x => x.Age < 50), Is.EqualTo(1000));
185-
Assert.That(db.Count(db.From<Person>().Where(x => x.Age < 50)), Is.EqualTo(1000));
186184
Assert.That(db.Scalar<int>("SELECT COUNT(*) FROM Person WHERE Age > @age", new { age = 40 }), Is.EqualTo(1000));
187185
Assert.That(db.ScalarFmt<int>("SELECT COUNT(*) FROM Person WHERE Age > {0}", 40), Is.EqualTo(1000));
188186

0 commit comments

Comments
 (0)