Skip to content

Commit 9b64ce1

Browse files
committed
1 parent 9ed3525 commit 9b64ce1

File tree

4 files changed

+42
-12
lines changed

4 files changed

+42
-12
lines changed

Dapper/CommandDefinition.cs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,9 @@ namespace Dapper
1111
/// </summary>
1212
public readonly struct CommandDefinition
1313
{
14-
internal static CommandDefinition ForCallback(object? parameters)
14+
internal static CommandDefinition ForCallback(object? parameters, CommandFlags flags)
1515
{
16-
if (parameters is DynamicParameters)
17-
{
18-
return new CommandDefinition(parameters);
19-
}
20-
else
21-
{
22-
return default;
23-
}
16+
return new CommandDefinition(parameters is DynamicParameters ? parameters : null, flags);
2417
}
2518

2619
internal void OnCompleted()
@@ -113,9 +106,10 @@ internal static CommandType InferCommandType(string sql)
113106
return System.Data.CommandType.StoredProcedure;
114107
}
115108

116-
private CommandDefinition(object? parameters) : this()
109+
private CommandDefinition(object? parameters, CommandFlags flags) : this()
117110
{
118111
Parameters = parameters;
112+
Flags = flags;
119113
CommandText = "";
120114
}
121115

Dapper/SqlMapper.Async.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -939,7 +939,7 @@ private static async Task<IEnumerable<TReturn>> MultiMapAsync<TFirst, TSecond, T
939939
using var cmd = command.TrySetupAsyncCommand(cnn, info.ParamReader);
940940
using var reader = await ExecuteReaderWithFlagsFallbackAsync(cmd, wasClosed, CommandBehavior.SequentialAccess | CommandBehavior.SingleResult, command.CancellationToken).ConfigureAwait(false);
941941
if (!command.Buffered) wasClosed = false; // handing back open reader; rely on command-behavior
942-
var results = MultiMapImpl<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TSeventh, TReturn>(null, CommandDefinition.ForCallback(command.Parameters), map, splitOn, reader, identity, true);
942+
var results = MultiMapImpl<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TSeventh, TReturn>(null, CommandDefinition.ForCallback(command.Parameters, command.Flags), map, splitOn, reader, identity, true);
943943
return command.Buffered ? results.ToList() : results;
944944
}
945945
finally

Dapper/SqlMapper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1658,7 +1658,7 @@ private static IEnumerable<TReturn> MultiMapImpl<TReturn>(this IDbConnection? cn
16581658
var deserializers = GenerateDeserializers(identity, splitOn, reader);
16591659
deserializer = cinfo.Deserializer = new DeserializerState(hash, deserializers[0]);
16601660
otherDeserializers = cinfo.OtherDeserializers = deserializers.Skip(1).ToArray();
1661-
SetQueryCache(identity, cinfo);
1661+
if (command.AddToCache) SetQueryCache(identity, cinfo);
16621662
}
16631663

16641664
Func<DbDataReader, TReturn> mapIt = GenerateMapper(types.Length, deserializer.Func, otherDeserializers, map);

tests/Dapper.Tests/AsyncTests.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -995,5 +995,41 @@ public void AssertNoCacheWorksForQueryMultiple()
995995
Assert.Equal(123, c);
996996
Assert.Equal(456, d);
997997
}
998+
999+
[Fact]
1000+
public async Task AssertNoCacheWorksForMultiMap()
1001+
{
1002+
const int a = 123, b = 456;
1003+
var cmdDef = new CommandDefinition("select @a as a, @b as b;", new
1004+
{
1005+
a,
1006+
b
1007+
}, commandType: CommandType.Text, flags: CommandFlags.NoCache | CommandFlags.Buffered);
1008+
1009+
SqlMapper.PurgeQueryCache();
1010+
var before = SqlMapper.GetCachedSQLCount();
1011+
Assert.Equal(0, before);
1012+
1013+
await MarsConnection.QueryAsync<int, int, (int, int)>(cmdDef, splitOn: "b", map: (a, b) => (a, b));
1014+
Assert.Equal(0, SqlMapper.GetCachedSQLCount());
1015+
}
1016+
1017+
[Fact]
1018+
public async Task AssertNoCacheWorksForQueryAsync()
1019+
{
1020+
const int a = 123, b = 456;
1021+
var cmdDef = new CommandDefinition("select @a as a, @b as b;", new
1022+
{
1023+
a,
1024+
b
1025+
}, commandType: CommandType.Text, flags: CommandFlags.NoCache | CommandFlags.Buffered);
1026+
1027+
SqlMapper.PurgeQueryCache();
1028+
var before = SqlMapper.GetCachedSQLCount();
1029+
Assert.Equal(0, before);
1030+
1031+
await MarsConnection.QueryAsync<(int, int)>(cmdDef);
1032+
Assert.Equal(0, SqlMapper.GetCachedSQLCount());
1033+
}
9981034
}
9991035
}

0 commit comments

Comments
 (0)