This commit is contained in:
goerch
2024-10-07 14:00:15 +02:00
committed by GitHub
parent 70e57f820d
commit 38df7bb89e
4 changed files with 42 additions and 12 deletions
+4 -10
View File
@@ -11,16 +11,9 @@ namespace Dapper
/// </summary>
public readonly struct CommandDefinition
{
internal static CommandDefinition ForCallback(object? parameters)
internal static CommandDefinition ForCallback(object? parameters, CommandFlags flags)
{
if (parameters is DynamicParameters)
{
return new CommandDefinition(parameters);
}
else
{
return default;
}
return new CommandDefinition(parameters is DynamicParameters ? parameters : null, flags);
}
internal void OnCompleted()
@@ -113,9 +106,10 @@ namespace Dapper
return System.Data.CommandType.StoredProcedure;
}
private CommandDefinition(object? parameters) : this()
private CommandDefinition(object? parameters, CommandFlags flags) : this()
{
Parameters = parameters;
Flags = flags;
CommandText = "";
}
+1 -1
View File
@@ -939,7 +939,7 @@ namespace Dapper
using var cmd = command.TrySetupAsyncCommand(cnn, info.ParamReader);
using var reader = await ExecuteReaderWithFlagsFallbackAsync(cmd, wasClosed, CommandBehavior.SequentialAccess | CommandBehavior.SingleResult, command.CancellationToken).ConfigureAwait(false);
if (!command.Buffered) wasClosed = false; // handing back open reader; rely on command-behavior
var results = MultiMapImpl<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TSeventh, TReturn>(null, CommandDefinition.ForCallback(command.Parameters), map, splitOn, reader, identity, true);
var results = MultiMapImpl<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TSeventh, TReturn>(null, CommandDefinition.ForCallback(command.Parameters, command.Flags), map, splitOn, reader, identity, true);
return command.Buffered ? results.ToList() : results;
}
finally
+1 -1
View File
@@ -1658,7 +1658,7 @@ namespace Dapper
var deserializers = GenerateDeserializers(identity, splitOn, reader);
deserializer = cinfo.Deserializer = new DeserializerState(hash, deserializers[0]);
otherDeserializers = cinfo.OtherDeserializers = deserializers.Skip(1).ToArray();
SetQueryCache(identity, cinfo);
if (command.AddToCache) SetQueryCache(identity, cinfo);
}
Func<DbDataReader, TReturn> mapIt = GenerateMapper(types.Length, deserializer.Func, otherDeserializers, map);
+36
View File
@@ -995,5 +995,41 @@ SET @AddressPersonId = @PersonId", p).ConfigureAwait(false))
Assert.Equal(123, c);
Assert.Equal(456, d);
}
[Fact]
public async Task AssertNoCacheWorksForMultiMap()
{
const int a = 123, b = 456;
var cmdDef = new CommandDefinition("select @a as a, @b as b;", new
{
a,
b
}, commandType: CommandType.Text, flags: CommandFlags.NoCache | CommandFlags.Buffered);
SqlMapper.PurgeQueryCache();
var before = SqlMapper.GetCachedSQLCount();
Assert.Equal(0, before);
await MarsConnection.QueryAsync<int, int, (int, int)>(cmdDef, splitOn: "b", map: (a, b) => (a, b));
Assert.Equal(0, SqlMapper.GetCachedSQLCount());
}
[Fact]
public async Task AssertNoCacheWorksForQueryAsync()
{
const int a = 123, b = 456;
var cmdDef = new CommandDefinition("select @a as a, @b as b;", new
{
a,
b
}, commandType: CommandType.Text, flags: CommandFlags.NoCache | CommandFlags.Buffered);
SqlMapper.PurgeQueryCache();
var before = SqlMapper.GetCachedSQLCount();
Assert.Equal(0, before);
await MarsConnection.QueryAsync<(int, int)>(cmdDef);
Assert.Equal(0, SqlMapper.GetCachedSQLCount());
}
}
}