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

Commit bdceb68

Browse files
committed
Refactor RowCount into DialectProvider so Oracle can have custom impl
1 parent fd05747 commit bdceb68

File tree

4 files changed

+13
-3
lines changed

4 files changed

+13
-3
lines changed

src/ServiceStack.OrmLite.Oracle/OracleOrmLiteDialectProvider.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,5 +1095,10 @@ public override string ToSelectStatement(ModelDefinition modelDef,
10951095

10961096
return sb.ToString();
10971097
}
1098+
1099+
public override string ToRowCountStatement(string innerSql)
1100+
{
1101+
return "SELECT COUNT(*) FROM ({0})".Fmt(innerSql);
1102+
}
10981103
}
10991104
}

src/ServiceStack.OrmLite/Expressions/ReadExpressionCommandExtensions.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,12 @@ internal static long GetCount(this IDbCommand dbCmd, string sql)
118118

119119
internal static long RowCount<T>(this IDbCommand dbCmd, SqlExpression<T> expression)
120120
{
121-
var sql = "SELECT COUNT(*) FROM ({0})".Fmt(expression.ToSelectStatement());
122-
return dbCmd.Scalar<long>(sql);
121+
return dbCmd.Scalar<long>(dbCmd.GetDialectProvider().ToRowCountStatement(expression.ToSelectStatement()));
123122
}
124123

125124
internal static long RowCount(this IDbCommand dbCmd, string sql)
126125
{
127-
return dbCmd.Scalar<long>("SELECT COUNT(*) FROM ({0})".Fmt(sql));
126+
return dbCmd.Scalar<long>(dbCmd.GetDialectProvider().ToRowCountStatement(sql));
128127
}
129128

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

src/ServiceStack.OrmLite/IOrmLiteDialectProvider.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,5 +163,6 @@ string ToCreateIndexStatement<T>(Expression<Func<T, object>> field,
163163
Task<long> InsertAndGetLastInsertIdAsync<T>(IDbCommand dbCmd, CancellationToken token);
164164

165165
string GetLoadChildrenSubSelect<From>(ModelDefinition modelDef, SqlExpression<From> expr);
166+
string ToRowCountStatement(string innerSql);
166167
}
167168
}

src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1399,6 +1399,11 @@ public virtual string GetLoadChildrenSubSelect<From>(ModelDefinition modelDef, S
13991399
return subSql;
14001400
}
14011401

1402+
public virtual string ToRowCountStatement(string innerSql)
1403+
{
1404+
return "SELECT COUNT(*) FROM ({0}) AS COUNT".Fmt(innerSql);
1405+
}
1406+
14021407
//Async API's, should be overrided by Dialect Providers to use .ConfigureAwait(false)
14031408
//Default impl below uses TaskAwaiter shim in async.cs
14041409

0 commit comments

Comments
 (0)