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

Commit 6dd126b

Browse files
committed
Add new Exec overloads that doesn't dispose of the dbCmd so it can be used on the call-site
1 parent 709a5df commit 6dd126b

File tree

4 files changed

+46
-0
lines changed

4 files changed

+46
-0
lines changed

src/ServiceStack.OrmLite.SqlServerTests/CustomSqlTests.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ public void Can_execute_stored_procedure_using_SqlProc_with_out_params()
7272
db.ExecuteSql(CreateProcedureSql);
7373

7474
var cmd = db.SqlProc("spSearchLetters", new { pLetter = "C" });
75+
76+
Assert.That(((OrmLiteCommand)cmd).IsDisposed, Is.False);
77+
7578
var pTotal = cmd.AddParam("pTotal", direction: ParameterDirection.Output);
7679
var results = cmd.ConvertToList<LetterFrequency>();
7780

src/ServiceStack.OrmLite/OrmLiteExecFilter.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ public interface IOrmLiteExecFilter
1111
IDbCommand CreateCommand(IDbConnection dbConn);
1212
void DisposeCommand(IDbCommand dbCmd, IDbConnection dbConn);
1313
T Exec<T>(IDbConnection dbConn, Func<IDbCommand, T> filter);
14+
IDbCommand Exec(IDbConnection dbConn, Func<IDbCommand, IDbCommand> filter);
1415
Task<T> Exec<T>(IDbConnection dbConn, Func<IDbCommand, Task<T>> filter);
16+
Task<IDbCommand> Exec(IDbConnection dbConn, Func<IDbCommand, Task<IDbCommand>> filter);
1517
void Exec(IDbConnection dbConn, Action<IDbCommand> filter);
1618
Task Exec(IDbConnection dbConn, Func<IDbCommand, Task> filter);
1719
IEnumerable<T> ExecLazy<T>(IDbConnection dbConn, Func<IDbCommand, IEnumerable<T>> filter);
@@ -65,6 +67,17 @@ public virtual T Exec<T>(IDbConnection dbConn, Func<IDbCommand, T> filter)
6567
}
6668
}
6769

70+
public IDbCommand Exec(IDbConnection dbConn, Func<IDbCommand, IDbCommand> filter)
71+
{
72+
var dbCmd = CreateCommand(dbConn);
73+
var ret = filter(dbCmd);
74+
if (dbCmd != null)
75+
{
76+
dbConn.SetLastCommandText(dbCmd.CommandText);
77+
}
78+
return ret;
79+
}
80+
6881
public virtual void Exec(IDbConnection dbConn, Action<IDbCommand> filter)
6982
{
7083
var dbCmd = CreateCommand(dbConn);
@@ -90,6 +103,13 @@ public virtual Task<T> Exec<T>(IDbConnection dbConn, Func<IDbCommand, Task<T>> f
90103
});
91104
}
92105

106+
public Task<IDbCommand> Exec(IDbConnection dbConn, Func<IDbCommand, Task<IDbCommand>> filter)
107+
{
108+
var dbCmd = CreateCommand(dbConn);
109+
110+
return filter(dbCmd).Then(t => t);
111+
}
112+
93113
public virtual Task Exec(IDbConnection dbConn, Func<IDbCommand, Task> filter)
94114
{
95115
var dbCmd = CreateCommand(dbConn);

src/ServiceStack.OrmLite/OrmLiteReadExpressionsApi.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,17 @@ public static IEnumerable<T> ExecLazy<T>(this IDbConnection dbConn, Func<IDbComm
3333
return OrmLiteConfig.ExecFilter.ExecLazy(dbConn, filter);
3434
}
3535

36+
public static IDbCommand Exec(this IDbConnection dbConn, Func<IDbCommand, IDbCommand> filter)
37+
{
38+
return OrmLiteConfig.ExecFilter.Exec(dbConn, filter);
39+
}
40+
41+
public static Task<IDbCommand> Exec(this IDbConnection dbConn, Func<IDbCommand, Task<IDbCommand>> filter)
42+
{
43+
return OrmLiteConfig.ExecFilter.Exec(dbConn, filter);
44+
}
45+
46+
3647
/// <summary>
3748
/// Create a new SqlExpression builder allowing typed LINQ-like queries.
3849
/// </summary>

tests/ServiceStack.OrmLite.Tests/MultipleConnectionIdTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,12 @@ public T Exec<T>(IDbConnection dbConn, Func<IDbCommand, T> filter)
156156
}
157157
}
158158

159+
public IDbCommand Exec(IDbConnection dbConn, Func<IDbCommand, IDbCommand> filter)
160+
{
161+
var cmd = CreateCommand(dbConn);
162+
return filter(cmd);
163+
}
164+
159165
public async Task<T> Exec<T>(IDbConnection dbConn, Func<IDbCommand, Task<T>> filter)
160166
{
161167
var cmd = CreateCommand(dbConn);
@@ -169,6 +175,12 @@ public async Task<T> Exec<T>(IDbConnection dbConn, Func<IDbCommand, Task<T>> fil
169175
}
170176
}
171177

178+
public async Task<IDbCommand> Exec(IDbConnection dbConn, Func<IDbCommand, Task<IDbCommand>> filter)
179+
{
180+
var cmd = CreateCommand(dbConn);
181+
return await filter(cmd);
182+
}
183+
172184
public void Exec(IDbConnection dbConn, Action<IDbCommand> filter)
173185
{
174186
var cmd = CreateCommand(dbConn);

0 commit comments

Comments
 (0)