Skip to content

Commit bfb9803

Browse files
authored
Merge pull request #590 from mikependon/repodb-adhocs
Fixes for #589.
2 parents b52f100 + af2e45e commit bfb9803

File tree

1 file changed

+115
-39
lines changed

1 file changed

+115
-39
lines changed

RepoDb.Core/RepoDb/Extensions/DbConnectionExtension.cs

Lines changed: 115 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ internal static async Task<IEnumerable<dynamic>> ExecuteQueryAsyncInternal(this
315315
}
316316

317317
// Execute the actual method
318-
using (var command = CreateDbCommandForExecution(connection: connection,
318+
using (var command = await CreateDbCommandForExecutionAsync(connection: connection,
319319
commandText: commandText,
320320
param: param,
321321
commandType: commandType,
@@ -836,7 +836,7 @@ private static async Task<IEnumerable<TResult>> ExecuteQueryAsyncInternalForType
836836
}
837837

838838
// Execute the actual method
839-
using (var command = CreateDbCommandForExecution(connection: connection,
839+
using (var command = await CreateDbCommandForExecutionAsync(connection: connection,
840840
commandText: commandText,
841841
param: param,
842842
commandType: commandType,
@@ -1088,7 +1088,7 @@ internal static async Task<IDataReader> ExecuteReaderAsyncInternal(this IDbConne
10881088
{
10891089
// Variables
10901090
var setting = connection.GetDbSetting();
1091-
var command = CreateDbCommandForExecution(connection: connection,
1091+
var command = await CreateDbCommandForExecutionAsync(connection: connection,
10921092
commandText: commandText,
10931093
param: param,
10941094
commandType: commandType,
@@ -1244,7 +1244,7 @@ internal static async Task<int> ExecuteNonQueryAsyncInternal(this IDbConnection
12441244
IDbTransaction transaction,
12451245
bool skipCommandArrayParametersCheck)
12461246
{
1247-
using (var command = CreateDbCommandForExecution(connection: connection,
1247+
using (var command = await CreateDbCommandForExecutionAsync(connection: connection,
12481248
commandText: commandText,
12491249
param: param,
12501250
commandType: commandType,
@@ -1384,7 +1384,7 @@ internal static async Task<object> ExecuteScalarAsyncInternal(this IDbConnection
13841384
IDbTransaction transaction,
13851385
bool skipCommandArrayParametersCheck)
13861386
{
1387-
using (var command = CreateDbCommandForExecution(connection: connection,
1387+
using (var command = await CreateDbCommandForExecutionAsync(connection: connection,
13881388
commandText: commandText,
13891389
param: param,
13901390
commandType: commandType,
@@ -1526,7 +1526,7 @@ internal static async Task<TResult> ExecuteScalarAsyncInternal<TResult>(this IDb
15261526
IDbTransaction transaction,
15271527
bool skipCommandArrayParametersCheck)
15281528
{
1529-
using (var command = CreateDbCommandForExecution(connection: connection,
1529+
using (var command = await CreateDbCommandForExecutionAsync(connection: connection,
15301530
commandText: commandText,
15311531
param: param,
15321532
commandType: commandType,
@@ -2255,6 +2255,41 @@ internal static IEnumerable<Field> GetQualifiedFields<TEntity>(IEnumerable<Field
22552255
where TEntity : class =>
22562256
fields ?? (typeof(TEntity).IsClassType() == false ? Field.Parse(entity) : FieldCache.Get<TEntity>());
22572257

2258+
/// <summary>
2259+
///
2260+
/// </summary>
2261+
/// <param name="commandText"></param>
2262+
/// <param name="parameterName"></param>
2263+
/// <param name="values"></param>
2264+
/// <param name="dbSetting"></param>
2265+
/// <returns></returns>
2266+
internal static string ToRawSqlWithArrayParams(string commandText,
2267+
string parameterName,
2268+
IEnumerable<object> values,
2269+
IDbSetting dbSetting)
2270+
{
2271+
// Check for the defined parameter
2272+
if (commandText.IndexOf(parameterName) < 0)
2273+
{
2274+
return commandText;
2275+
}
2276+
2277+
// Return if there is no values
2278+
if (values?.Any() != true)
2279+
{
2280+
return commandText;
2281+
}
2282+
2283+
// Get the variables needed
2284+
var parameters = values.Select((value, index) =>
2285+
string.Concat(parameterName, index).AsParameter(dbSetting));
2286+
2287+
// Replace the target parameter
2288+
return commandText.Replace(parameterName.AsParameter(dbSetting), parameters.Join(", "));
2289+
}
2290+
2291+
#region CreateDbCommandForExecution
2292+
22582293
/// <summary>
22592294
///
22602295
/// </summary>
@@ -2279,9 +2314,81 @@ internal static DbCommand CreateDbCommandForExecution(this IDbConnection connect
22792314
// Validate
22802315
ValidateTransactionConnectionObject(connection, transaction);
22812316

2317+
// Open
2318+
connection.EnsureOpen();
2319+
2320+
// Call
2321+
return CreateDbCommandForExecutionInternal(connection: connection,
2322+
commandText: commandText,
2323+
param: param,
2324+
commandType: commandType,
2325+
commandTimeout: commandTimeout,
2326+
transaction: transaction,
2327+
entityType: entityType,
2328+
skipCommandArrayParametersCheck: skipCommandArrayParametersCheck);
2329+
}
2330+
2331+
/// <summary>
2332+
///
2333+
/// </summary>
2334+
/// <param name="connection"></param>
2335+
/// <param name="commandText"></param>
2336+
/// <param name="param"></param>
2337+
/// <param name="commandType"></param>
2338+
/// <param name="commandTimeout"></param>
2339+
/// <param name="transaction"></param>
2340+
/// <param name="entityType"></param>
2341+
/// <param name="skipCommandArrayParametersCheck"></param>
2342+
/// <returns></returns>
2343+
internal static async Task<DbCommand> CreateDbCommandForExecutionAsync(this IDbConnection connection,
2344+
string commandText,
2345+
object param = null,
2346+
CommandType? commandType = null,
2347+
int? commandTimeout = null,
2348+
IDbTransaction transaction = null,
2349+
Type entityType = null,
2350+
bool skipCommandArrayParametersCheck = true)
2351+
{
2352+
// Validate
2353+
ValidateTransactionConnectionObject(connection, transaction);
2354+
2355+
// Open
2356+
await connection.EnsureOpenAsync();
2357+
2358+
// Call
2359+
return CreateDbCommandForExecutionInternal(connection: connection,
2360+
commandText: commandText,
2361+
param: param,
2362+
commandType: commandType,
2363+
commandTimeout: commandTimeout,
2364+
transaction: transaction,
2365+
entityType: entityType,
2366+
skipCommandArrayParametersCheck: skipCommandArrayParametersCheck);
2367+
}
2368+
2369+
/// <summary>
2370+
///
2371+
/// </summary>
2372+
/// <param name="connection"></param>
2373+
/// <param name="commandText"></param>
2374+
/// <param name="param"></param>
2375+
/// <param name="commandType"></param>
2376+
/// <param name="commandTimeout"></param>
2377+
/// <param name="transaction"></param>
2378+
/// <param name="entityType"></param>
2379+
/// <param name="skipCommandArrayParametersCheck"></param>
2380+
/// <returns></returns>
2381+
private static DbCommand CreateDbCommandForExecutionInternal(this IDbConnection connection,
2382+
string commandText,
2383+
object param = null,
2384+
CommandType? commandType = null,
2385+
int? commandTimeout = null,
2386+
IDbTransaction transaction = null,
2387+
Type entityType = null,
2388+
bool skipCommandArrayParametersCheck = true)
2389+
{
22822390
// Command
22832391
var command = connection
2284-
.EnsureOpen()
22852392
.CreateCommand(commandText, commandType, commandTimeout, transaction);
22862393

22872394
// Func
@@ -2327,38 +2434,7 @@ internal static DbCommand CreateDbCommandForExecution(this IDbConnection connect
23272434
return (DbCommand)command;
23282435
}
23292436

2330-
/// <summary>
2331-
///
2332-
/// </summary>
2333-
/// <param name="commandText"></param>
2334-
/// <param name="parameterName"></param>
2335-
/// <param name="values"></param>
2336-
/// <param name="dbSetting"></param>
2337-
/// <returns></returns>
2338-
internal static string ToRawSqlWithArrayParams(string commandText,
2339-
string parameterName,
2340-
IEnumerable<object> values,
2341-
IDbSetting dbSetting)
2342-
{
2343-
// Check for the defined parameter
2344-
if (commandText.IndexOf(parameterName) < 0)
2345-
{
2346-
return commandText;
2347-
}
2348-
2349-
// Return if there is no values
2350-
if (values?.Any() != true)
2351-
{
2352-
return commandText;
2353-
}
2354-
2355-
// Get the variables needed
2356-
var parameters = values.Select((value, index) =>
2357-
string.Concat(parameterName, index).AsParameter(dbSetting));
2358-
2359-
// Replace the target parameter
2360-
return commandText.Replace(parameterName.AsParameter(dbSetting), parameters.Join(", "));
2361-
}
2437+
#endregion
23622438

23632439
#region GetCommandArrayParameters
23642440

0 commit comments

Comments
 (0)