Skip to content

Commit 8ca5d1e

Browse files
authored
Annotate SqlServer and Redis caches for nullability (#40319)
Contributes to #5680
1 parent b1df1de commit 8ca5d1e

12 files changed

+91
-83
lines changed

src/Caching/SqlServer/src/DatabaseOperations.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,12 @@ public void DeleteCacheItem(string key)
7777
}
7878
}
7979

80-
public virtual byte[] GetCacheItem(string key)
80+
public virtual byte[]? GetCacheItem(string key)
8181
{
8282
return GetCacheItem(key, includeValue: true);
8383
}
8484

85-
public virtual async Task<byte[]> GetCacheItemAsync(string key, CancellationToken token = default(CancellationToken))
85+
public virtual async Task<byte[]?> GetCacheItemAsync(string key, CancellationToken token = default(CancellationToken))
8686
{
8787
token.ThrowIfCancellationRequested();
8888

@@ -194,7 +194,7 @@ public virtual void SetCacheItem(string key, byte[] value, DistributedCacheEntry
194194
}
195195
}
196196

197-
protected virtual byte[] GetCacheItem(string key, bool includeValue)
197+
protected virtual byte[]? GetCacheItem(string key, bool includeValue)
198198
{
199199
var utcNow = SystemClock.UtcNow;
200200

@@ -208,7 +208,7 @@ protected virtual byte[] GetCacheItem(string key, bool includeValue)
208208
query = SqlQueries.GetCacheItemWithoutValue;
209209
}
210210

211-
byte[] value = null;
211+
byte[]? value = null;
212212
using (var connection = new SqlConnection(ConnectionString))
213213
using (var command = new SqlCommand(query, connection))
214214
{
@@ -238,7 +238,7 @@ protected virtual byte[] GetCacheItem(string key, bool includeValue)
238238
return value;
239239
}
240240

241-
protected virtual async Task<byte[]> GetCacheItemAsync(string key, bool includeValue, CancellationToken token = default(CancellationToken))
241+
protected virtual async Task<byte[]?> GetCacheItemAsync(string key, bool includeValue, CancellationToken token = default(CancellationToken))
242242
{
243243
token.ThrowIfCancellationRequested();
244244

@@ -254,7 +254,7 @@ protected virtual byte[] GetCacheItem(string key, bool includeValue)
254254
query = SqlQueries.GetCacheItemWithoutValue;
255255
}
256256

257-
byte[] value = null;
257+
byte[]? value = null;
258258
using (var connection = new SqlConnection(ConnectionString))
259259
using (var command = new SqlCommand(query, connection))
260260
{

src/Caching/SqlServer/src/IDatabaseOperations.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ namespace Microsoft.Extensions.Caching.SqlServer;
99

1010
internal interface IDatabaseOperations
1111
{
12-
byte[] GetCacheItem(string key);
12+
byte[]? GetCacheItem(string key);
1313

14-
Task<byte[]> GetCacheItemAsync(string key, CancellationToken token = default(CancellationToken));
14+
Task<byte[]?> GetCacheItemAsync(string key, CancellationToken token = default(CancellationToken));
1515

1616
void RefreshCacheItem(string key);
1717

src/Caching/SqlServer/src/Microsoft.Extensions.Caching.SqlServer.csproj

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<Description>Distributed cache implementation of Microsoft.Extensions.Caching.Distributed.IDistributedCache using Microsoft SQL Server.</Description>
@@ -9,7 +9,6 @@
99
<NoWarn>$(NoWarn);PKG0001</NoWarn>
1010
<IsPackable>true</IsPackable>
1111
<IsShipping>true</IsShipping>
12-
<Nullable>disable</Nullable>
1312
</PropertyGroup>
1413

1514
<ItemGroup>

src/Caching/SqlServer/src/MonoDatabaseOperations.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public MonoDatabaseOperations(
1818
{
1919
}
2020

21-
protected override byte[] GetCacheItem(string key, bool includeValue)
21+
protected override byte[]? GetCacheItem(string key, bool includeValue)
2222
{
2323
var utcNow = SystemClock.UtcNow;
2424

@@ -32,7 +32,7 @@ protected override byte[] GetCacheItem(string key, bool includeValue)
3232
query = SqlQueries.GetCacheItemWithoutValue;
3333
}
3434

35-
byte[] value = null;
35+
byte[]? value = null;
3636
using (var connection = new SqlConnection(ConnectionString))
3737
{
3838
var command = new SqlCommand(query, connection);
@@ -60,7 +60,7 @@ protected override byte[] GetCacheItem(string key, bool includeValue)
6060
return value;
6161
}
6262

63-
protected override async Task<byte[]> GetCacheItemAsync(string key, bool includeValue, CancellationToken token = default(CancellationToken))
63+
protected override async Task<byte[]?> GetCacheItemAsync(string key, bool includeValue, CancellationToken token = default(CancellationToken))
6464
{
6565
token.ThrowIfCancellationRequested();
6666

@@ -76,7 +76,7 @@ protected override byte[] GetCacheItem(string key, bool includeValue)
7676
query = SqlQueries.GetCacheItemWithoutValue;
7777
}
7878

79-
byte[] value = null;
79+
byte[]? value = null;
8080
using (var connection = new SqlConnection(ConnectionString))
8181
{
8282
var command = new SqlCommand(query, connection);

src/Caching/SqlServer/src/PublicAPI.Shipped.txt

+18-18
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
#nullable enable
2-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCache.Get(string key) -> byte[]
3-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCache.GetAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<byte[]>
4-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCache.Refresh(string key) -> void
5-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCache.RefreshAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task
6-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCache.Remove(string key) -> void
7-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCache.RemoveAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task
8-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCache.Set(string key, byte[] value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions options) -> void
9-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCache.SetAsync(string key, byte[] value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions options, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task
10-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCache.SqlServerCache(Microsoft.Extensions.Options.IOptions<Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions> options) -> void
11-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.ConnectionString.get -> string
12-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.ConnectionString.set -> void
13-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.SchemaName.get -> string
14-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.SchemaName.set -> void
15-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.SystemClock.get -> Microsoft.Extensions.Internal.ISystemClock
16-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.SystemClock.set -> void
17-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.TableName.get -> string
18-
~Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.TableName.set -> void
19-
~static Microsoft.Extensions.DependencyInjection.SqlServerCachingServicesExtensions.AddDistributedSqlServerCache(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action<Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions> setupAction) -> Microsoft.Extensions.DependencyInjection.IServiceCollection
2+
Microsoft.Extensions.Caching.SqlServer.SqlServerCache.Get(string! key) -> byte[]?
3+
Microsoft.Extensions.Caching.SqlServer.SqlServerCache.GetAsync(string! key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<byte[]?>!
4+
Microsoft.Extensions.Caching.SqlServer.SqlServerCache.Refresh(string! key) -> void
5+
Microsoft.Extensions.Caching.SqlServer.SqlServerCache.RefreshAsync(string! key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
6+
Microsoft.Extensions.Caching.SqlServer.SqlServerCache.Remove(string! key) -> void
7+
Microsoft.Extensions.Caching.SqlServer.SqlServerCache.RemoveAsync(string! key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
8+
Microsoft.Extensions.Caching.SqlServer.SqlServerCache.Set(string! key, byte[]! value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions! options) -> void
9+
Microsoft.Extensions.Caching.SqlServer.SqlServerCache.SetAsync(string! key, byte[]! value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions! options, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
10+
Microsoft.Extensions.Caching.SqlServer.SqlServerCache.SqlServerCache(Microsoft.Extensions.Options.IOptions<Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions!>! options) -> void
11+
Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.ConnectionString.get -> string?
12+
Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.ConnectionString.set -> void
13+
Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.SchemaName.get -> string?
14+
Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.SchemaName.set -> void
15+
Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.SystemClock.get -> Microsoft.Extensions.Internal.ISystemClock!
16+
Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.SystemClock.set -> void
17+
Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.TableName.get -> string?
18+
Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.TableName.set -> void
19+
static Microsoft.Extensions.DependencyInjection.SqlServerCachingServicesExtensions.AddDistributedSqlServerCache(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action<Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions!>! setupAction) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
2020
Microsoft.Extensions.Caching.SqlServer.SqlServerCache
2121
Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions
2222
Microsoft.Extensions.Caching.SqlServer.SqlServerCacheOptions.DefaultSlidingExpiration.get -> System.TimeSpan

src/Caching/SqlServer/src/SqlParameterCollectionExtensions.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public static SqlParameterCollection AddCacheItemId(this SqlParameterCollection
2222
return parameters.AddWithValue(Columns.Names.CacheItemId, SqlDbType.NVarChar, CacheItemIdColumnWidth, value);
2323
}
2424

25-
public static SqlParameterCollection AddCacheItemValue(this SqlParameterCollection parameters, byte[] value)
25+
public static SqlParameterCollection AddCacheItemValue(this SqlParameterCollection parameters, byte[]? value)
2626
{
2727
if (value != null && value.Length < DefaultValueColumnWidth)
2828
{
@@ -74,7 +74,7 @@ public static SqlParameterCollection AddWithValue(
7474
this SqlParameterCollection parameters,
7575
string parameterName,
7676
SqlDbType dbType,
77-
object value)
77+
object? value)
7878
{
7979
var parameter = new SqlParameter(parameterName, dbType);
8080
parameter.Value = value;
@@ -88,7 +88,7 @@ public static SqlParameterCollection AddWithValue(
8888
string parameterName,
8989
SqlDbType dbType,
9090
int size,
91-
object value)
91+
object? value)
9292
{
9393
var parameter = new SqlParameter(parameterName, dbType, size);
9494
parameter.Value = value;

src/Caching/SqlServer/src/SqlServerCache.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public SqlServerCache(IOptions<SqlServerCacheOptions> options)
9292
}
9393

9494
/// <inheritdoc />
95-
public byte[] Get(string key)
95+
public byte[]? Get(string key)
9696
{
9797
if (key == null)
9898
{
@@ -107,7 +107,7 @@ public byte[] Get(string key)
107107
}
108108

109109
/// <inheritdoc />
110-
public async Task<byte[]> GetAsync(string key, CancellationToken token = default(CancellationToken))
110+
public async Task<byte[]?> GetAsync(string key, CancellationToken token = default(CancellationToken))
111111
{
112112
if (key == null)
113113
{

src/Caching/SqlServer/src/SqlServerCacheOptions.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class SqlServerCacheOptions : IOptions<SqlServerCacheOptions>
1515
/// <summary>
1616
/// An abstraction to represent the clock of a machine in order to enable unit testing.
1717
/// </summary>
18-
public ISystemClock SystemClock { get; set; }
18+
public ISystemClock SystemClock { get; set; } = new SystemClock();
1919

2020
/// <summary>
2121
/// The periodic interval to scan and delete expired items in the cache. Default is 30 minutes.
@@ -25,17 +25,17 @@ public class SqlServerCacheOptions : IOptions<SqlServerCacheOptions>
2525
/// <summary>
2626
/// The connection string to the database.
2727
/// </summary>
28-
public string ConnectionString { get; set; }
28+
public string? ConnectionString { get; set; }
2929

3030
/// <summary>
3131
/// The schema name of the table.
3232
/// </summary>
33-
public string SchemaName { get; set; }
33+
public string? SchemaName { get; set; }
3434

3535
/// <summary>
3636
/// Name of the table where the cache items are stored.
3737
/// </summary>
38-
public string TableName { get; set; }
38+
public string? TableName { get; set; }
3939

4040
/// <summary>
4141
/// The default sliding expiration set for a cache entry if neither Absolute or SlidingExpiration has been set explicitly.

src/Caching/StackExchangeRedis/src/Microsoft.Extensions.Caching.StackExchangeRedis.csproj

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
<ExcludeFromSourceBuild>true</ExcludeFromSourceBuild>
99
<IsPackable>true</IsPackable>
1010
<IsShipping>true</IsShipping>
11-
<Nullable>disable</Nullable>
1211
</PropertyGroup>
1312

1413
<ItemGroup>

src/Caching/StackExchangeRedis/src/PublicAPI.Shipped.txt

+20-20
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
#nullable enable
2-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Get(string key) -> byte[]
3-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.GetAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<byte[]>
4-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.RedisCache(Microsoft.Extensions.Options.IOptions<Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions> optionsAccessor) -> void
5-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Refresh(string key) -> void
6-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.RefreshAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task
7-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Remove(string key) -> void
8-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.RemoveAsync(string key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task
9-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Set(string key, byte[] value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions options) -> void
10-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.SetAsync(string key, byte[] value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions options, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task
11-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.Configuration.get -> string
12-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.Configuration.set -> void
13-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConfigurationOptions.get -> StackExchange.Redis.ConfigurationOptions
14-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConfigurationOptions.set -> void
15-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConnectionMultiplexerFactory.get -> System.Func<System.Threading.Tasks.Task<StackExchange.Redis.IConnectionMultiplexer>>
16-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConnectionMultiplexerFactory.set -> void
17-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.InstanceName.get -> string
18-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.InstanceName.set -> void
19-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ProfilingSession.get -> System.Func<StackExchange.Redis.Profiling.ProfilingSession>
20-
~Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ProfilingSession.set -> void
21-
~static Microsoft.Extensions.DependencyInjection.StackExchangeRedisCacheServiceCollectionExtensions.AddStackExchangeRedisCache(this Microsoft.Extensions.DependencyInjection.IServiceCollection services, System.Action<Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions> setupAction) -> Microsoft.Extensions.DependencyInjection.IServiceCollection
2+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Get(string! key) -> byte[]?
3+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.GetAsync(string! key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task<byte[]?>!
4+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.RedisCache(Microsoft.Extensions.Options.IOptions<Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions!>! optionsAccessor) -> void
5+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Refresh(string! key) -> void
6+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.RefreshAsync(string! key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
7+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Remove(string! key) -> void
8+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.RemoveAsync(string! key, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
9+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Set(string! key, byte[]! value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions! options) -> void
10+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.SetAsync(string! key, byte[]! value, Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions! options, System.Threading.CancellationToken token = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task!
11+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.Configuration.get -> string?
12+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.Configuration.set -> void
13+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConfigurationOptions.get -> StackExchange.Redis.ConfigurationOptions?
14+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConfigurationOptions.set -> void
15+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConnectionMultiplexerFactory.get -> System.Func<System.Threading.Tasks.Task<StackExchange.Redis.IConnectionMultiplexer!>!>?
16+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ConnectionMultiplexerFactory.set -> void
17+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.InstanceName.get -> string?
18+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.InstanceName.set -> void
19+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ProfilingSession.get -> System.Func<StackExchange.Redis.Profiling.ProfilingSession!>?
20+
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions.ProfilingSession.set -> void
21+
static Microsoft.Extensions.DependencyInjection.StackExchangeRedisCacheServiceCollectionExtensions.AddStackExchangeRedisCache(this Microsoft.Extensions.DependencyInjection.IServiceCollection! services, System.Action<Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions!>! setupAction) -> Microsoft.Extensions.DependencyInjection.IServiceCollection!
2222
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache
2323
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache.Dispose() -> void
2424
Microsoft.Extensions.Caching.StackExchangeRedis.RedisCacheOptions

0 commit comments

Comments
 (0)