Skip to content

Commit be95ca2

Browse files
authored
Remove connection options inheritance (#4237)
* Rename SqlConnectionString to SqlConnectionOptions * Remove the DbConnectionOptions parent class. * Fix netfx compilation issues. * Add comments and missing using. * Fix compilation issues. * Fix compilation issues. * Remove stale file. * Clean up redundant casts. * Fix unit tests. * Fix compilation issue. * Fix test connection string.
1 parent 8ed0162 commit be95ca2

29 files changed

Lines changed: 1069 additions & 1107 deletions

src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/AdapterUtil.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,7 @@ internal static ArgumentException InvalidArgumentLength(string argumentName, int
514514

515515
internal static Exception CreateSqlException(
516516
SqlAuthenticationProviderException authException,
517-
SqlConnectionString connectionOptions,
517+
SqlConnectionOptions connectionOptions,
518518
SqlConnectionInternal sender,
519519
string username)
520520
{

src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionOptions.cs

Lines changed: 0 additions & 782 deletions
This file was deleted.

src/Microsoft.Data.SqlClient/src/Microsoft/Data/Common/ConnectionString/DbConnectionString.netfx.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515

1616
namespace Microsoft.Data.Common
1717
{
18-
// @TODO: Theoretically this class could be replaced with SqlConnectionString.
18+
// Note: This class exists exclusively for use in SqlClientPermission. It provides a stable serialization format when the permission set is serialized
19+
// by Code Access Security (CAS). CAS itself is deprecated in all versions of .NET and .NET Framework, but it won't be dropped from .NET Framework.
20+
// We should maintain this class and SqlClientPermission to ensure that existing CAS-based security checks continue to work correctly on .NET Framework.
1921

2022
[Serializable] // MDAC 83147
2123
internal sealed class DbConnectionString
@@ -53,20 +55,20 @@ internal DbConnectionString(
5355
string restrictions,
5456
KeyRestrictionBehavior behavior,
5557
IReadOnlyDictionary<string, string> synonyms)
56-
: this(new DbConnectionOptions(value, synonyms), restrictions, behavior, synonyms, false)
58+
: this(new SqlConnectionOptions(value), restrictions, behavior, synonyms, false)
5759
{
5860
// The IReadOnlyDictionary doesn't need to be cloned since it isn't shared with anything else
5961
}
6062

61-
internal DbConnectionString(DbConnectionOptions connectionOptions)
63+
internal DbConnectionString(SqlConnectionOptions connectionOptions)
6264
: this(connectionOptions, (string)null, KeyRestrictionBehavior.AllowOnly, null, true)
6365
{
64-
// used by DBDataPermission to convert from DbConnectionOptions to DbConnectionString
66+
// used by DBDataPermission to convert from SqlConnectionOptions to DbConnectionString
6567
// since backward compatibility requires Everett level classes
6668
}
6769

6870
private DbConnectionString(
69-
DbConnectionOptions connectionOptions,
71+
SqlConnectionOptions connectionOptions,
7072
string restrictions,
7173
KeyRestrictionBehavior behavior,
7274
IReadOnlyDictionary<string, string> synonyms,
@@ -505,7 +507,7 @@ private static string[] ParseRestrictions(string restrictions, IReadOnlyDictiona
505507
int startPosition = nextStartPosition;
506508

507509
string keyname; // since parsing restrictions ignores values, it doesn't matter if we use ODBC rules or OLEDB rules
508-
nextStartPosition = DbConnectionOptions.GetKeyValuePair(restrictions, startPosition, buffer, false, out keyname, out _);
510+
nextStartPosition = SqlConnectionOptions.GetKeyValuePair(restrictions, startPosition, buffer, false, out keyname, out _);
509511
if (!string.IsNullOrEmpty(keyname))
510512
{
511513
#if DEBUG

src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionClosed.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using System.Threading;
99
using System.Threading.Tasks;
1010
using Microsoft.Data.Common;
11-
using Microsoft.Data.Common.ConnectionString;
1211
using Microsoft.Data.SqlClient;
1312
using Microsoft.Data.SqlClient.ConnectionPool;
1413

@@ -64,7 +63,7 @@ internal override bool TryOpenConnection(
6463
DbConnection outerConnection,
6564
SqlConnectionFactory connectionFactory,
6665
TaskCompletionSource<DbConnectionInternal> retry,
67-
DbConnectionOptions userOptions) =>
66+
SqlConnectionOptions userOptions) =>
6867
TryOpenConnectionInternal(outerConnection, connectionFactory, retry, userOptions);
6968

7069
/// <inheritdoc/>
@@ -81,7 +80,7 @@ internal override bool TryOpenConnection(
8180
DbConnection outerConnection,
8281
SqlConnectionFactory connectionFactory,
8382
TaskCompletionSource<DbConnectionInternal> retry,
84-
DbConnectionOptions userOptions)
83+
SqlConnectionOptions userOptions)
8584
=> throw ADP.ConnectionAlreadyOpen(State);
8685
}
8786

@@ -123,14 +122,14 @@ internal override bool TryReplaceConnection(
123122
DbConnection outerConnection,
124123
SqlConnectionFactory connectionFactory,
125124
TaskCompletionSource<DbConnectionInternal> retry,
126-
DbConnectionOptions userOptions) =>
125+
SqlConnectionOptions userOptions) =>
127126
TryOpenConnection(outerConnection, connectionFactory, retry, userOptions);
128127

129128
internal override bool TryOpenConnection(
130129
DbConnection outerConnection,
131130
SqlConnectionFactory connectionFactory,
132131
TaskCompletionSource<DbConnectionInternal> retry,
133-
DbConnectionOptions userOptions)
132+
SqlConnectionOptions userOptions)
134133
{
135134
if (retry == null || !retry.Task.IsCompleted)
136135
{
@@ -179,7 +178,7 @@ internal override bool TryReplaceConnection(
179178
DbConnection outerConnection,
180179
SqlConnectionFactory connectionFactory,
181180
TaskCompletionSource<DbConnectionInternal> retry,
182-
DbConnectionOptions userOptions) =>
181+
SqlConnectionOptions userOptions) =>
183182
TryOpenConnection(outerConnection, connectionFactory, retry, userOptions);
184183
}
185184
}

src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionInternal.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
using System.Threading.Tasks;
1111
using System.Transactions;
1212
using Microsoft.Data.Common;
13-
using Microsoft.Data.Common.ConnectionString;
1413
using Microsoft.Data.SqlClient;
1514
using Microsoft.Data.SqlClient.ConnectionPool;
1615
using Microsoft.Data.SqlClient.Internal;
@@ -802,7 +801,7 @@ internal virtual bool TryOpenConnection(
802801
DbConnection outerConnection,
803802
SqlConnectionFactory connectionFactory,
804803
TaskCompletionSource<DbConnectionInternal> retry,
805-
DbConnectionOptions userOptions)
804+
SqlConnectionOptions userOptions)
806805
{
807806
throw ADP.ConnectionAlreadyOpen(State);
808807
}
@@ -811,7 +810,7 @@ internal virtual bool TryReplaceConnection(
811810
DbConnection outerConnection,
812811
SqlConnectionFactory connectionFactory,
813812
TaskCompletionSource<DbConnectionInternal> retry,
814-
DbConnectionOptions userOptions)
813+
SqlConnectionOptions userOptions)
815814
{
816815
throw ADP.MethodNotImplemented();
817816
}
@@ -914,7 +913,7 @@ protected bool TryOpenConnectionInternal(
914913
DbConnection outerConnection,
915914
SqlConnectionFactory connectionFactory,
916915
TaskCompletionSource<DbConnectionInternal> retry,
917-
DbConnectionOptions userOptions)
916+
SqlConnectionOptions userOptions)
918917
{
919918
// ?->Connecting: prevent set_ConnectionString during Open
920919
if (connectionFactory.SetInnerConnectionFrom(outerConnection, DbConnectionClosedConnecting.SingletonInstance, this))

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Connection/ServerInfo.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ internal sealed class ServerInfo
1414
/// <summary>
1515
/// Initialize server info from connection options alone.
1616
/// </summary>
17-
internal ServerInfo(SqlConnectionString userOptions)
17+
internal ServerInfo(SqlConnectionOptions userOptions)
1818
: this(userOptions, userOptions.DataSource, userOptions.ServerSPN)
1919
{ }
2020

2121
/// <summary>
2222
/// Initialize server info from connection options, but override DataSource and ServerSPN
2323
/// with given server name and server SPN.
2424
/// </summary>
25-
internal ServerInfo(SqlConnectionString userOptions, string serverName, string serverSpn)
25+
internal ServerInfo(SqlConnectionOptions userOptions, string serverName, string serverSpn)
2626
: this(userOptions, serverName)
2727
{
2828
ServerSPN = serverSpn;
@@ -33,7 +33,7 @@ internal ServerInfo(SqlConnectionString userOptions, string serverName, string s
3333
/// Initialize server info from connection options, but override DataSource with given
3434
/// server name.
3535
/// </summary>
36-
private ServerInfo(SqlConnectionString userOptions, string serverName)
36+
private ServerInfo(SqlConnectionOptions userOptions, string serverName)
3737
{
3838
Debug.Assert(userOptions != null);
3939
Debug.Assert(serverName != null, "server name should never be null");
@@ -56,7 +56,7 @@ private ServerInfo(SqlConnectionString userOptions, string serverName)
5656
/// server name.
5757
/// </summary>
5858
internal ServerInfo(
59-
SqlConnectionString userOptions,
59+
SqlConnectionOptions userOptions,
6060
RoutingInfo routing,
6161
string preRoutingServerName,
6262
string serverSpn)

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/Connection/SqlConnectionInternal.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -313,18 +313,18 @@ internal class SqlConnectionInternal : DbConnectionInternal, IDisposable
313313
/// new Login7 packet will always write out the new password (or a length of zero and no
314314
/// bytes if not present).
315315
/// - userConnectionOptions may be different to connectionOptions if the connection string
316-
/// has been expanded (see SqlConnectionString.Expand)
316+
/// has been expanded (see SqlConnectionOptions.Expand)
317317
/// </remarks>
318318
// @TODO: We really really need simplify what we pass into this. All these optional parameters need to go!
319319
internal SqlConnectionInternal(
320320
DbConnectionPoolIdentity identity,
321-
SqlConnectionString connectionOptions,
321+
SqlConnectionOptions connectionOptions,
322322
SqlCredential credential,
323323
DbConnectionPoolGroupProviderInfo providerInfo,
324324
string newPassword,
325325
SecureString newSecurePassword,
326326
bool redirectedUserInstance,
327-
SqlConnectionString userConnectionOptions = null,
327+
SqlConnectionOptions userConnectionOptions = null,
328328
SessionData reconnectSessionData = null,
329329
bool applyTransientFaultHandling = false,
330330
string accessToken = null,
@@ -508,7 +508,7 @@ internal Guid ClientConnectionId
508508
/// <summary>
509509
/// The connection options to be used for this connection.
510510
/// </summary>
511-
internal SqlConnectionString ConnectionOptions { get; }
511+
internal SqlConnectionOptions ConnectionOptions { get; }
512512

513513
/// <summary>
514514
/// The current database for this connection. Null if the connection is not open yet.
@@ -941,7 +941,7 @@ internal void CheckEnlistedTransactionBinding()
941941

942942
if (enlistedTransaction != null)
943943
{
944-
if (ConnectionOptions.TransactionBinding is SqlConnectionString.TransactionBindingEnum.ExplicitUnbind)
944+
if (ConnectionOptions.TransactionBinding is SqlConnectionOptions.TransactionBindingEnum.ExplicitUnbind)
945945
{
946946
Transaction currentTransaction = Transaction.Current;
947947
if (enlistedTransaction.TransactionInformation.Status != TransactionStatus.Active || !enlistedTransaction.Equals(currentTransaction))
@@ -1971,7 +1971,7 @@ internal override bool TryReplaceConnection(
19711971
DbConnection outerConnection,
19721972
SqlConnectionFactory connectionFactory,
19731973
TaskCompletionSource<DbConnectionInternal> retry,
1974-
DbConnectionOptions userOptions)
1974+
SqlConnectionOptions userOptions)
19751975
{
19761976
return TryOpenConnectionInternal(outerConnection, connectionFactory, retry, userOptions);
19771977
}
@@ -2233,7 +2233,7 @@ private void AttemptOneLogin(
22332233
// @TODO: Rename to meet naming conventions
22342234
private bool AttemptRetryADAuthWithTimeoutError(
22352235
SqlException sqlex,
2236-
SqlConnectionString connectionOptions, // @TODO: this is not used
2236+
SqlConnectionOptions connectionOptions, // @TODO: this is not used
22372237
TimeoutTimer timeout)
22382238
{
22392239
if (!_activeDirectoryAuthTimeoutRetryHelper.CanRetryWithSqlException(sqlex))
@@ -3140,7 +3140,7 @@ private void LoginNoFailover(
31403140
string newPassword,
31413141
SecureString newSecurePassword,
31423142
bool redirectedUserInstance,
3143-
SqlConnectionString connectionOptions,
3143+
SqlConnectionOptions connectionOptions,
31443144
SqlCredential credential,
31453145
TimeoutTimer timeout)
31463146
{
@@ -3464,7 +3464,7 @@ private void LoginWithFailover(
34643464
string newPassword,
34653465
SecureString newSecurePassword,
34663466
bool redirectedUserInstance,
3467-
SqlConnectionString connectionOptions,
3467+
SqlConnectionOptions connectionOptions,
34683468
SqlCredential credential, // @TODO: This isn't used anywhere
34693469
TimeoutTimer timeout)
34703470
{
@@ -3779,7 +3779,7 @@ private bool IsTransientError(SqlException exc)
37793779

37803780
private void OpenLoginEnlist(
37813781
TimeoutTimer timeout,
3782-
SqlConnectionString connectionOptions,
3782+
SqlConnectionOptions connectionOptions,
37833783
SqlCredential credential,
37843784
string newPassword,
37853785
SecureString newSecurePassword,
@@ -3905,7 +3905,7 @@ internal override void ResetConnection()
39053905
}
39063906
}
39073907

3908-
private void ResolveExtendedServerName(ServerInfo serverInfo, bool aliasLookup, SqlConnectionString options)
3908+
private void ResolveExtendedServerName(ServerInfo serverInfo, bool aliasLookup, SqlConnectionOptions options)
39093909
{
39103910
// @TODO: Invert to save on indentation
39113911
if (serverInfo.ExtendedServerName == null)
@@ -3946,7 +3946,7 @@ private void ResolveExtendedServerName(ServerInfo serverInfo, bool aliasLookup,
39463946
if (options.EnforceLocalHost)
39473947
{
39483948
// Verify LocalHost for |DataDirectory| usage
3949-
SqlConnectionString.VerifyLocalHostAndFixup(
3949+
SqlConnectionOptions.VerifyLocalHostAndFixup(
39503950
ref host,
39513951
enforceLocalHost: true,
39523952
fixup: true);
@@ -3958,7 +3958,7 @@ private void ResolveExtendedServerName(ServerInfo serverInfo, bool aliasLookup,
39583958
}
39593959

39603960
#if NETFRAMEWORK
3961-
private bool ShouldDisableTnir(SqlConnectionString connectionOptions)
3961+
private bool ShouldDisableTnir(SqlConnectionOptions connectionOptions)
39623962
{
39633963
bool isAzureEndPoint = ADP.IsAzureSqlServerEndpoint(connectionOptions.DataSource);
39643964

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/ChannelDbConnectionPool.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
using System.Threading.Tasks;
1313
using System.Transactions;
1414
using Microsoft.Data.Common;
15-
using Microsoft.Data.Common.ConnectionString;
1615
using Microsoft.Data.ProviderBase;
1716
using static Microsoft.Data.SqlClient.ConnectionPool.DbConnectionPoolState;
1817
using Microsoft.Data.SqlClient.Internal;
@@ -225,7 +224,7 @@ public void PutObjectFromTransactedPool(DbConnectionInternal connection)
225224
/// <inheritdoc />
226225
public DbConnectionInternal ReplaceConnection(
227226
DbConnection owningObject,
228-
DbConnectionOptions userOptions,
227+
SqlConnectionOptions userOptions,
229228
DbConnectionInternal oldConnection)
230229
{
231230
throw new NotImplementedException();
@@ -283,7 +282,7 @@ public void TransactionEnded(Transaction transaction, DbConnectionInternal trans
283282
public bool TryGetConnection(
284283
DbConnection owningObject,
285284
TaskCompletionSource<DbConnectionInternal>? taskCompletionSource,
286-
DbConnectionOptions userOptions,
285+
SqlConnectionOptions userOptions,
287286
out DbConnectionInternal? connection)
288287
{
289288
var timeout = TimeSpan.FromSeconds(owningObject.ConnectionTimeout);
@@ -384,7 +383,7 @@ public bool TryGetConnection(
384383
/// </exception>
385384
private DbConnectionInternal? OpenNewInternalConnection(
386385
DbConnection? owningConnection,
387-
DbConnectionOptions userOptions,
386+
SqlConnectionOptions userOptions,
388387
CancellationToken cancellationToken)
389388
{
390389
cancellationToken.ThrowIfCancellationRequested();
@@ -513,7 +512,7 @@ private void RemoveConnection(DbConnectionInternal connection)
513512
/// </exception>
514513
private async Task<DbConnectionInternal> GetInternalConnection(
515514
DbConnection owningConnection,
516-
DbConnectionOptions userOptions,
515+
SqlConnectionOptions userOptions,
517516
bool async,
518517
TimeSpan timeout)
519518
{

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/DbConnectionPoolGroup.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using System.Diagnostics;
99
using System.Threading;
1010
using Microsoft.Data.Common;
11-
using Microsoft.Data.Common.ConnectionString;
1211
using Microsoft.Data.ProviderBase;
1312
using Microsoft.Data.SqlClient.Internal;
1413

@@ -33,7 +32,7 @@ namespace Microsoft.Data.SqlClient.ConnectionPool
3332

3433
sealed internal class DbConnectionPoolGroup
3534
{
36-
private readonly DbConnectionOptions _connectionOptions;
35+
private readonly SqlConnectionOptions _connectionOptions;
3736
private readonly ConnectionPoolKey _poolKey;
3837
private readonly DbConnectionPoolGroupOptions _poolGroupOptions;
3938
private ConcurrentDictionary<DbConnectionPoolIdentity, IDbConnectionPool> _poolCollection;
@@ -50,7 +49,7 @@ sealed internal class DbConnectionPoolGroup
5049
private const int PoolGroupStateIdle = 2; // all pools are pruned via Clear
5150
private const int PoolGroupStateDisabled = 4; // factory pool entry pruning method
5251

53-
internal DbConnectionPoolGroup(DbConnectionOptions connectionOptions, ConnectionPoolKey key, DbConnectionPoolGroupOptions poolGroupOptions)
52+
internal DbConnectionPoolGroup(SqlConnectionOptions connectionOptions, ConnectionPoolKey key, DbConnectionPoolGroupOptions poolGroupOptions)
5453
{
5554
Debug.Assert(connectionOptions != null, "null connection options");
5655

@@ -66,7 +65,7 @@ internal DbConnectionPoolGroup(DbConnectionOptions connectionOptions, Connection
6665
_state = PoolGroupStateActive;
6766
}
6867

69-
internal DbConnectionOptions ConnectionOptions => _connectionOptions;
68+
internal SqlConnectionOptions ConnectionOptions => _connectionOptions;
7069

7170
internal ConnectionPoolKey PoolKey => _poolKey;
7271

src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/ConnectionPool/IDbConnectionPool.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
using System.Data.Common;
88
using System.Threading.Tasks;
99
using System.Transactions;
10-
using Microsoft.Data.Common.ConnectionString;
1110
using Microsoft.Data.ProviderBase;
1211

1312
#nullable enable
@@ -123,7 +122,7 @@ internal interface IDbConnectionPool
123122
/// <param name="userOptions">The user options to use if a new connection must be opened.</param>
124123
/// <param name="connection">The retrieved connection will be passed out via this parameter.</param>
125124
/// <returns>True if a connection was set in the out parameter, otherwise returns false.</returns>
126-
bool TryGetConnection(DbConnection owningObject, TaskCompletionSource<DbConnectionInternal>? taskCompletionSource, DbConnectionOptions userOptions, out DbConnectionInternal? connection);
125+
bool TryGetConnection(DbConnection owningObject, TaskCompletionSource<DbConnectionInternal>? taskCompletionSource, SqlConnectionOptions userOptions, out DbConnectionInternal? connection);
127126

128127
/// <summary>
129128
/// Replaces the internal connection currently associated with owningObject with a new internal connection from the pool.
@@ -132,7 +131,7 @@ internal interface IDbConnectionPool
132131
/// <param name="userOptions">The user options to use if a new connection must be opened.</param>
133132
/// <param name="oldConnection">The internal connection currently associated with the owning object.</param>
134133
/// <returns>A reference to the new DbConnectionInternal.</returns>
135-
DbConnectionInternal ReplaceConnection(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection);
134+
DbConnectionInternal ReplaceConnection(DbConnection owningObject, SqlConnectionOptions userOptions, DbConnectionInternal oldConnection);
136135

137136
/// <summary>
138137
/// Returns an internal connection to the pool.

0 commit comments

Comments
 (0)