Skip to content

Commit 5354e83

Browse files
authored
Cleanup | SqlConnectionFactory <- DbConnectionFactory (#3435)
* Sort modifiers * Replace all usages of DbConnectionFactory with SqlConnectionFactory let's see how this goes... * Move member variables and constructor * Move properties over * Move pool clearing methods * Move Create*Connection methods over * Move CreateConnectionPoolGroupProviderInfo * Move QueuePool*ForRelease * Move TryGetConnection * Move CreateReplaceConnectionContinuation * Move TryGetConnectionCompletedContinuation * Move GetConnectionPool * Move GetConnectionPoolGroup * Move GetMetaDataFactory and PruneConnectionPoolGroups # Conflicts: # src/Microsoft.Data.SqlClient/src/Microsoft/Data/ProviderBase/DbConnectionFactory.cs * Move CompletedTask and merge FindConnectionOptions (and cleanup CreateMetaDataFactory) * Remove DbConnectionFactory * Make timer period times based on milliseconds instead of seconds * Fix reflection references to Db/SqlConnectionFactory * Addressing called out expression bodies * Address @mdaigle's comments * Unseal class, temporarily, just for @mdaigle
1 parent 92ea063 commit 5354e83

File tree

18 files changed

+846
-857
lines changed

18 files changed

+846
-857
lines changed

src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,6 @@
9999
<Compile Include="$(CommonSourceRoot)\Microsoft\Data\ProviderBase\DbConnectionClosed.cs">
100100
<Link>Microsoft\Data\ProviderBase\DbConnectionClosed.cs</Link>
101101
</Compile>
102-
<Compile Include="$(CommonSourceRoot)\Microsoft\Data\ProviderBase\DbConnectionFactory.cs">
103-
<Link>Microsoft\Data\ProviderBase\DbConnectionFactory.cs</Link>
104-
</Compile>
105102
<Compile Include="$(CommonSourceRoot)Microsoft\Data\SqlClient\ConnectionPool\ChannelDbConnectionPool.cs">
106103
<Link>Microsoft\Data\SqlClient\ConnectionPool\ChannelDbConnectionPool.cs</Link>
107104
</Compile>

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,7 +1274,7 @@ public override void ChangeDatabase(string database)
12741274
/// <include file='../../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnection.xml' path='docs/members[@name="SqlConnection"]/ClearAllPools/*' />
12751275
public static void ClearAllPools()
12761276
{
1277-
SqlConnectionFactory.SingletonInstance.ClearAllPools();
1277+
SqlConnectionFactory.Instance.ClearAllPools();
12781278
}
12791279

12801280
/// <include file='../../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnection.xml' path='docs/members[@name="SqlConnection"]/ClearPool/*' />
@@ -1285,7 +1285,7 @@ public static void ClearPool(SqlConnection connection)
12851285
DbConnectionOptions connectionOptions = connection.UserConnectionOptions;
12861286
if (connectionOptions != null)
12871287
{
1288-
SqlConnectionFactory.SingletonInstance.ClearPool(connection);
1288+
SqlConnectionFactory.Instance.ClearPool(connection);
12891289
}
12901290
}
12911291

@@ -2267,7 +2267,7 @@ public static void ChangePassword(string connectionString, string newPassword)
22672267

22682268
SqlConnectionPoolKey key = new SqlConnectionPoolKey(connectionString, credential: null, accessToken: null, accessTokenCallback: null);
22692269

2270-
SqlConnectionString connectionOptions = SqlConnectionFactory.FindSqlConnectionOptions(key);
2270+
SqlConnectionString connectionOptions = SqlConnectionFactory.Instance.FindSqlConnectionOptions(key);
22712271
if (connectionOptions.IntegratedSecurity)
22722272
{
22732273
throw SQL.ChangePasswordConflictsWithSSPI();
@@ -2316,7 +2316,7 @@ public static void ChangePassword(string connectionString, SqlCredential credent
23162316

23172317
SqlConnectionPoolKey key = new SqlConnectionPoolKey(connectionString, credential, accessToken: null, accessTokenCallback: null);
23182318

2319-
SqlConnectionString connectionOptions = SqlConnectionFactory.FindSqlConnectionOptions(key);
2319+
SqlConnectionString connectionOptions = SqlConnectionFactory.Instance.FindSqlConnectionOptions(key);
23202320

23212321
// Check for connection string values incompatible with SqlCredential
23222322
if (!string.IsNullOrEmpty(connectionOptions.UserID) || !string.IsNullOrEmpty(connectionOptions.Password))
@@ -2354,7 +2354,7 @@ private static void ChangePassword(string connectionString, SqlConnectionString
23542354
}
23552355
SqlConnectionPoolKey key = new SqlConnectionPoolKey(connectionString, credential, accessToken: null, accessTokenCallback: null);
23562356

2357-
SqlConnectionFactory.SingletonInstance.ClearPool(key);
2357+
SqlConnectionFactory.Instance.ClearPool(key);
23582358
}
23592359

23602360
internal Task<T> RegisterForConnectionCloseNotification<T>(Task<T> outerTask, object value, int tag)

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnectionHelper.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ namespace Microsoft.Data.SqlClient
1717
{
1818
public sealed partial class SqlConnection : DbConnection
1919
{
20-
private static readonly DbConnectionFactory s_connectionFactory = SqlConnectionFactory.SingletonInstance;
20+
private static readonly SqlConnectionFactory s_connectionFactory = SqlConnectionFactory.Instance;
2121

2222
private DbConnectionOptions _userConnectionOptions;
2323
private DbConnectionPoolGroup _poolGroup;
@@ -42,7 +42,7 @@ internal int CloseCount
4242
}
4343
}
4444

45-
internal DbConnectionFactory ConnectionFactory
45+
internal SqlConnectionFactory ConnectionFactory
4646
{
4747
get
4848
{
@@ -156,9 +156,7 @@ override protected DbCommand CreateDbCommand()
156156
{
157157
using (TryEventScope.Create("<prov.DbConnectionHelper.CreateDbCommand|API> {0}", ObjectID))
158158
{
159-
DbCommand command = null;
160-
DbProviderFactory providerFactory = ConnectionFactory.ProviderFactory;
161-
command = providerFactory.CreateCommand();
159+
DbCommand command = SqlClientFactory.Instance.CreateCommand();
162160
command.Connection = this;
163161
return command;
164162
}

src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3078,9 +3078,13 @@ internal bool ThreadHasParserLockForClose
30783078
}
30793079
}
30803080

3081-
internal override bool TryReplaceConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource<DbConnectionInternal> retry, DbConnectionOptions userOptions)
3081+
internal override bool TryReplaceConnection(
3082+
DbConnection outerConnection,
3083+
SqlConnectionFactory connectionFactory,
3084+
TaskCompletionSource<DbConnectionInternal> retry,
3085+
DbConnectionOptions userOptions)
30823086
{
3083-
return base.TryOpenConnectionInternal(outerConnection, connectionFactory, retry, userOptions);
3087+
return TryOpenConnectionInternal(outerConnection, connectionFactory, retry, userOptions);
30843088
}
30853089
}
30863090

src/Microsoft.Data.SqlClient/netfx/src/Microsoft.Data.SqlClient.csproj

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,9 +285,6 @@
285285
<Compile Include="$(CommonSourceRoot)\Microsoft\Data\ProviderBase\DbConnectionClosed.cs">
286286
<Link>Microsoft\Data\ProviderBase\DbConnectionClosed.cs</Link>
287287
</Compile>
288-
<Compile Include="$(CommonSourceRoot)\Microsoft\Data\ProviderBase\DbConnectionFactory.cs">
289-
<Link>Microsoft\Data\ProviderBase\DbConnectionFactory.cs</Link>
290-
</Compile>
291288
<Compile Include="$(CommonSourceRoot)Microsoft\Data\ProviderBase\DbConnectionInternal.cs">
292289
<Link>Microsoft\Data\ProviderBase\DbConnectionInternal.cs</Link>
293290
</Compile>

src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnection.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1268,7 +1268,7 @@ public override void ChangeDatabase(string database)
12681268
public static void ClearAllPools()
12691269
{
12701270
(new SqlClientPermission(PermissionState.Unrestricted)).Demand();
1271-
SqlConnectionFactory.SingletonInstance.ClearAllPools();
1271+
SqlConnectionFactory.Instance.ClearAllPools();
12721272
}
12731273

12741274
/// <include file='../../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnection.xml' path='docs/members[@name="SqlConnection"]/ClearPool/*' />
@@ -1280,7 +1280,7 @@ public static void ClearPool(SqlConnection connection)
12801280
if (connectionOptions != null)
12811281
{
12821282
connectionOptions.DemandPermission();
1283-
SqlConnectionFactory.SingletonInstance.ClearPool(connection);
1283+
SqlConnectionFactory.Instance.ClearPool(connection);
12841284
}
12851285
}
12861286

@@ -2186,7 +2186,7 @@ public static void ChangePassword(string connectionString, string newPassword)
21862186

21872187
SqlConnectionPoolKey key = new SqlConnectionPoolKey(connectionString, credential: null, accessToken: null, accessTokenCallback: null);
21882188

2189-
SqlConnectionString connectionOptions = SqlConnectionFactory.FindSqlConnectionOptions(key);
2189+
SqlConnectionString connectionOptions = SqlConnectionFactory.Instance.FindSqlConnectionOptions(key);
21902190
if (connectionOptions.IntegratedSecurity || connectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryIntegrated)
21912191
{
21922192
throw SQL.ChangePasswordConflictsWithSSPI();
@@ -2238,7 +2238,7 @@ public static void ChangePassword(string connectionString, SqlCredential credent
22382238

22392239
SqlConnectionPoolKey key = new SqlConnectionPoolKey(connectionString, credential, accessToken: null, accessTokenCallback: null);
22402240

2241-
SqlConnectionString connectionOptions = SqlConnectionFactory.FindSqlConnectionOptions(key);
2241+
SqlConnectionString connectionOptions = SqlConnectionFactory.Instance.FindSqlConnectionOptions(key);
22422242

22432243
// Check for connection string values incompatible with SqlCredential
22442244
if (!string.IsNullOrEmpty(connectionOptions.UserID) || !string.IsNullOrEmpty(connectionOptions.Password))
@@ -2279,7 +2279,7 @@ private static void ChangePassword(string connectionString, SqlConnectionString
22792279
}
22802280
SqlConnectionPoolKey key = new SqlConnectionPoolKey(connectionString, credential, accessToken: null, accessTokenCallback: null);
22812281

2282-
SqlConnectionFactory.SingletonInstance.ClearPool(key);
2282+
SqlConnectionFactory.Instance.ClearPool(key);
22832283
}
22842284

22852285
internal Task<T> RegisterForConnectionCloseNotification<T>(Task<T> outerTask, object value, int tag)

src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlConnectionHelper.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace Microsoft.Data.SqlClient
1818
{
1919
public sealed partial class SqlConnection : DbConnection
2020
{
21-
private static readonly DbConnectionFactory _connectionFactory = SqlConnectionFactory.SingletonInstance;
21+
private static readonly SqlConnectionFactory _connectionFactory = SqlConnectionFactory.Instance;
2222
internal static readonly System.Security.CodeAccessPermission ExecutePermission = SqlConnection.CreateExecutePermission();
2323

2424
private DbConnectionOptions _userConnectionOptions;
@@ -69,7 +69,7 @@ internal int CloseCount
6969
}
7070
}
7171

72-
internal DbConnectionFactory ConnectionFactory
72+
internal SqlConnectionFactory ConnectionFactory
7373
{
7474
get
7575
{
@@ -203,17 +203,16 @@ override protected DbCommand CreateDbCommand()
203203
{
204204
using (TryEventScope.Create("<prov.DbConnectionHelper.CreateDbCommand|API> {0}", ObjectID))
205205
{
206-
DbProviderFactory providerFactory = ConnectionFactory.ProviderFactory;
207-
DbCommand command = providerFactory.CreateCommand();
206+
DbCommand command = SqlClientFactory.Instance.CreateCommand();
208207
command.Connection = this;
209208
return command;
210209
}
211210
}
212211

213212
private static System.Security.CodeAccessPermission CreateExecutePermission()
214213
{
215-
DBDataPermission p = (DBDataPermission)SqlConnectionFactory.SingletonInstance.ProviderFactory.CreatePermission(System.Security.Permissions.PermissionState.None);
216-
p.Add(String.Empty, String.Empty, KeyRestrictionBehavior.AllowOnly);
214+
DBDataPermission p = (DBDataPermission)SqlClientFactory.Instance.CreatePermission(System.Security.Permissions.PermissionState.None);
215+
p.Add(string.Empty, string.Empty, KeyRestrictionBehavior.AllowOnly);
217216
return p;
218217
}
219218

src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/SqlInternalConnectionTds.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3110,9 +3110,13 @@ internal bool ThreadHasParserLockForClose
31103110
}
31113111
}
31123112

3113-
internal override bool TryReplaceConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource<DbConnectionInternal> retry, DbConnectionOptions userOptions)
3113+
internal override bool TryReplaceConnection(
3114+
DbConnection outerConnection,
3115+
SqlConnectionFactory connectionFactory,
3116+
TaskCompletionSource<DbConnectionInternal> retry,
3117+
DbConnectionOptions userOptions)
31143118
{
3115-
return base.TryOpenConnectionInternal(outerConnection, connectionFactory, retry, userOptions);
3119+
return TryOpenConnectionInternal(outerConnection, connectionFactory, retry, userOptions);
31163120
}
31173121
}
31183122

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,18 @@ internal static Exception ExceptionWithStackTrace(Exception e)
130130
}
131131
}
132132

133-
internal static Timer UnsafeCreateTimer(TimerCallback callback, object state, int dueTime, int period)
133+
internal static Timer UnsafeCreateTimer(
134+
TimerCallback callback,
135+
object state,
136+
int dueTimeMilliseconds,
137+
int periodMilliseconds) =>
138+
UnsafeCreateTimer(
139+
callback,
140+
state,
141+
TimeSpan.FromMilliseconds(dueTimeMilliseconds),
142+
TimeSpan.FromMilliseconds(periodMilliseconds));
143+
144+
internal static Timer UnsafeCreateTimer(TimerCallback callback, object state, TimeSpan dueTime, TimeSpan period)
134145
{
135146
// Don't capture the current ExecutionContext and its AsyncLocals onto
136147
// a global timer causing them to live forever
@@ -154,6 +165,7 @@ internal static Timer UnsafeCreateTimer(TimerCallback callback, object state, in
154165
}
155166
}
156167
}
168+
157169

158170
#region COM+ exceptions
159171
internal static ArgumentException Argument(string error)

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

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

1314
namespace Microsoft.Data.ProviderBase
@@ -27,7 +28,7 @@ protected DbConnectionClosed(ConnectionState state, bool hidePassword, bool allo
2728

2829
public override void ChangeDatabase(string database) => throw ADP.ClosedConnectionError();
2930

30-
internal override void CloseConnection(DbConnection owningObject, DbConnectionFactory connectionFactory)
31+
internal override void CloseConnection(DbConnection owningObject, SqlConnectionFactory connectionFactory)
3132
{
3233
// not much to do here...
3334
}
@@ -36,13 +37,24 @@ internal override void CloseConnection(DbConnection owningObject, DbConnectionFa
3637

3738
public override void EnlistTransaction(System.Transactions.Transaction transaction) => throw ADP.ClosedConnectionError();
3839

39-
protected internal override DataTable GetSchema(DbConnectionFactory factory, DbConnectionPoolGroup poolGroup, DbConnection outerConnection, string collectionName, string[] restrictions)
40-
=> throw ADP.ClosedConnectionError();
40+
protected internal override DataTable GetSchema(
41+
SqlConnectionFactory factory,
42+
DbConnectionPoolGroup poolGroup,
43+
DbConnection outerConnection,
44+
string collectionName,
45+
string[] restrictions)
46+
{
47+
throw ADP.ClosedConnectionError();
48+
}
4149

4250
protected override DbReferenceCollection CreateReferenceCollection() => throw ADP.ClosedConnectionError();
4351

44-
internal override bool TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource<DbConnectionInternal> retry, DbConnectionOptions userOptions)
45-
=> base.TryOpenConnectionInternal(outerConnection, connectionFactory, retry, userOptions);
52+
internal override bool TryOpenConnection(
53+
DbConnection outerConnection,
54+
SqlConnectionFactory connectionFactory,
55+
TaskCompletionSource<DbConnectionInternal> retry,
56+
DbConnectionOptions userOptions) =>
57+
TryOpenConnectionInternal(outerConnection, connectionFactory, retry, userOptions);
4658
}
4759

4860
internal abstract class DbConnectionBusy : DbConnectionClosed
@@ -51,7 +63,11 @@ protected DbConnectionBusy(ConnectionState state) : base(state, true, false)
5163
{
5264
}
5365

54-
internal override bool TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource<DbConnectionInternal> retry, DbConnectionOptions userOptions)
66+
internal override bool TryOpenConnection(
67+
DbConnection outerConnection,
68+
SqlConnectionFactory connectionFactory,
69+
TaskCompletionSource<DbConnectionInternal> retry,
70+
DbConnectionOptions userOptions)
5571
=> throw ADP.ConnectionAlreadyOpen(State);
5672
}
5773

@@ -84,15 +100,23 @@ private DbConnectionClosedConnecting() : base(ConnectionState.Connecting)
84100
{
85101
}
86102

87-
internal override void CloseConnection(DbConnection owningObject, DbConnectionFactory connectionFactory)
103+
internal override void CloseConnection(DbConnection owningObject, SqlConnectionFactory connectionFactory)
88104
{
89105
connectionFactory.SetInnerConnectionTo(owningObject, DbConnectionClosedPreviouslyOpened.SingletonInstance);
90106
}
91107

92-
internal override bool TryReplaceConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource<DbConnectionInternal> retry, DbConnectionOptions userOptions)
93-
=> TryOpenConnection(outerConnection, connectionFactory, retry, userOptions);
94-
95-
internal override bool TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource<DbConnectionInternal> retry, DbConnectionOptions userOptions)
108+
internal override bool TryReplaceConnection(
109+
DbConnection outerConnection,
110+
SqlConnectionFactory connectionFactory,
111+
TaskCompletionSource<DbConnectionInternal> retry,
112+
DbConnectionOptions userOptions) =>
113+
TryOpenConnection(outerConnection, connectionFactory, retry, userOptions);
114+
115+
internal override bool TryOpenConnection(
116+
DbConnection outerConnection,
117+
SqlConnectionFactory connectionFactory,
118+
TaskCompletionSource<DbConnectionInternal> retry,
119+
DbConnectionOptions userOptions)
96120
{
97121
if (retry == null || !retry.Task.IsCompleted)
98122
{
@@ -137,7 +161,11 @@ private DbConnectionClosedPreviouslyOpened() : base(ConnectionState.Closed, true
137161
{
138162
}
139163

140-
internal override bool TryReplaceConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource<DbConnectionInternal> retry, DbConnectionOptions userOptions)
141-
=> TryOpenConnection(outerConnection, connectionFactory, retry, userOptions);
164+
internal override bool TryReplaceConnection(
165+
DbConnection outerConnection,
166+
SqlConnectionFactory connectionFactory,
167+
TaskCompletionSource<DbConnectionInternal> retry,
168+
DbConnectionOptions userOptions) =>
169+
TryOpenConnection(outerConnection, connectionFactory, retry, userOptions);
142170
}
143171
}

0 commit comments

Comments
 (0)