Skip to content

Cleanup | SqlConnectionFactory <- DbConnectionFactory #3435

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 21 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1272,7 +1272,7 @@ public override void ChangeDatabase(string database)
/// <include file='../../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnection.xml' path='docs/members[@name="SqlConnection"]/ClearAllPools/*' />
public static void ClearAllPools()
{
SqlConnectionFactory.SingletonInstance.ClearAllPools();
SqlConnectionFactory.Instance.ClearAllPools();
}

/// <include file='../../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnection.xml' path='docs/members[@name="SqlConnection"]/ClearPool/*' />
Expand All @@ -1283,7 +1283,7 @@ public static void ClearPool(SqlConnection connection)
DbConnectionOptions connectionOptions = connection.UserConnectionOptions;
if (connectionOptions != null)
{
SqlConnectionFactory.SingletonInstance.ClearPool(connection);
SqlConnectionFactory.Instance.ClearPool(connection);
}
}

Expand Down Expand Up @@ -2265,7 +2265,7 @@ public static void ChangePassword(string connectionString, string newPassword)

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

SqlConnectionString connectionOptions = SqlConnectionFactory.FindSqlConnectionOptions(key);
SqlConnectionString connectionOptions = SqlConnectionFactory.Instance.FindSqlConnectionOptions(key);
if (connectionOptions.IntegratedSecurity)
{
throw SQL.ChangePasswordConflictsWithSSPI();
Expand Down Expand Up @@ -2314,7 +2314,7 @@ public static void ChangePassword(string connectionString, SqlCredential credent

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

SqlConnectionString connectionOptions = SqlConnectionFactory.FindSqlConnectionOptions(key);
SqlConnectionString connectionOptions = SqlConnectionFactory.Instance.FindSqlConnectionOptions(key);

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

SqlConnectionFactory.SingletonInstance.ClearPool(key);
SqlConnectionFactory.Instance.ClearPool(key);
}

internal Task<T> RegisterForConnectionCloseNotification<T>(Task<T> outerTask, object value, int tag)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ namespace Microsoft.Data.SqlClient
{
public sealed partial class SqlConnection : DbConnection
{
private static readonly SqlConnectionFactory s_connectionFactory = SqlConnectionFactory.SingletonInstance;
private static readonly SqlConnectionFactory s_connectionFactory = SqlConnectionFactory.Instance;

private DbConnectionOptions _userConnectionOptions;
private DbConnectionPoolGroup _poolGroup;
Expand Down Expand Up @@ -157,7 +157,7 @@ override protected DbCommand CreateDbCommand()
using (TryEventScope.Create("<prov.DbConnectionHelper.CreateDbCommand|API> {0}", ObjectID))
{
DbCommand command = null;
DbProviderFactory providerFactory = ConnectionFactory.ProviderFactory;
DbProviderFactory providerFactory = SqlConnectionFactory.ProviderFactory;
command = providerFactory.CreateCommand();
command.Connection = this;
return command;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1266,7 +1266,7 @@ public override void ChangeDatabase(string database)
public static void ClearAllPools()
{
(new SqlClientPermission(PermissionState.Unrestricted)).Demand();
SqlConnectionFactory.SingletonInstance.ClearAllPools();
SqlConnectionFactory.Instance.ClearAllPools();
}

/// <include file='../../../../../../../doc/snippets/Microsoft.Data.SqlClient/SqlConnection.xml' path='docs/members[@name="SqlConnection"]/ClearPool/*' />
Expand All @@ -1278,7 +1278,7 @@ public static void ClearPool(SqlConnection connection)
if (connectionOptions != null)
{
connectionOptions.DemandPermission();
SqlConnectionFactory.SingletonInstance.ClearPool(connection);
SqlConnectionFactory.Instance.ClearPool(connection);
}
}

Expand Down Expand Up @@ -2290,7 +2290,7 @@ private static void ChangePassword(string connectionString, SqlConnectionString
}
SqlConnectionPoolKey key = new SqlConnectionPoolKey(connectionString, credential, accessToken: null, accessTokenCallback: null);

SqlConnectionFactory.SingletonInstance.ClearPool(key);
SqlConnectionFactory.Instance.ClearPool(key);
}

internal Task<T> RegisterForConnectionCloseNotification<T>(Task<T> outerTask, object value, int tag)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ namespace Microsoft.Data.SqlClient
{
public sealed partial class SqlConnection : DbConnection
{
private static readonly SqlConnectionFactory _connectionFactory = SqlConnectionFactory.SingletonInstance;
private static readonly SqlConnectionFactory _connectionFactory = SqlConnectionFactory.Instance;
internal static readonly System.Security.CodeAccessPermission ExecutePermission = SqlConnection.CreateExecutePermission();

private DbConnectionOptions _userConnectionOptions;
Expand Down Expand Up @@ -203,7 +203,7 @@ override protected DbCommand CreateDbCommand()
{
using (TryEventScope.Create("<prov.DbConnectionHelper.CreateDbCommand|API> {0}", ObjectID))
{
DbProviderFactory providerFactory = ConnectionFactory.ProviderFactory;
DbProviderFactory providerFactory = SqlConnectionFactory.ProviderFactory;
DbCommand command = providerFactory.CreateCommand();
command.Connection = this;
return command;
Expand All @@ -212,7 +212,7 @@ override protected DbCommand CreateDbCommand()

private static System.Security.CodeAccessPermission CreateExecutePermission()
{
DBDataPermission p = (DBDataPermission)SqlConnectionFactory.SingletonInstance.ProviderFactory.CreatePermission(System.Security.Permissions.PermissionState.None);
DBDataPermission p = (DBDataPermission)SqlConnectionFactory.ProviderFactory.CreatePermission(System.Security.Permissions.PermissionState.None);
p.Add(String.Empty, String.Empty, KeyRestrictionBehavior.AllowOnly);
return p;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ namespace Microsoft.Data.ProviderBase
{
internal abstract class DbConnectionFactory
{
internal int ObjectID { get; } = Interlocked.Increment(ref _objectTypeCount);

public void ClearAllPools()
{
using (TryEventScope.Create(nameof(SqlConnectionFactory)))
Expand Down Expand Up @@ -479,7 +477,7 @@ internal DbMetaDataFactory GetMetaDataFactory(DbConnectionPoolGroup connectionPo
return metaDataFactory;
}

private void PruneConnectionPoolGroups(object state)
protected void PruneConnectionPoolGroups(object state)
{
// when debugging this method, expect multiple threads at the same time
SqlClientEventSource.Log.TryAdvancedTraceEvent("<prov.DbConnectionFactory.PruneConnectionPoolGroups|RES|INFO|CPOOL> {0}", ObjectID);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ private SqlConnectionFactory()
_poolsToRelease = new List<IDbConnectionPool>();
_poolGroupsToRelease = new List<DbConnectionPoolGroup>();
_pruningTimer = ADP.UnsafeCreateTimer(
new TimerCallback(PruneConnectionPoolGroups),
PruneConnectionPoolGroups,
state: null,
PruningDueTime,
PruningPeriod);
Expand All @@ -62,11 +62,17 @@ private SqlConnectionFactory()
}

#endregion

#region Properties

public static readonly SqlConnectionFactory SingletonInstance = new SqlConnectionFactory();

public DbProviderFactory ProviderFactory => SqlClientFactory.Instance;
internal static DbProviderFactory ProviderFactory => SqlClientFactory.Instance;
internal static SqlConnectionFactory Instance { get; } = new SqlConnectionFactory();

internal int ObjectId { get; } = Interlocked.Increment(ref s_objectTypeCount);

#endregion

protected override DbConnectionInternal CreateConnection(
DbConnectionOptions options,
DbConnectionPoolKey poolKey,
Expand Down Expand Up @@ -260,9 +266,9 @@ internal override DbConnectionPoolGroupProviderInfo CreateConnectionPoolGroupPro
return new SqlConnectionPoolGroupProviderInfo((SqlConnectionString)connectionOptions);
}

internal static SqlConnectionString FindSqlConnectionOptions(SqlConnectionPoolKey key)
internal SqlConnectionString FindSqlConnectionOptions(SqlConnectionPoolKey key)
{
SqlConnectionString connectionOptions = (SqlConnectionString)SingletonInstance.FindConnectionOptions(key);
SqlConnectionString connectionOptions = (SqlConnectionString)FindConnectionOptions(key);
if (connectionOptions == null)
{
connectionOptions = new SqlConnectionString(key.ConnectionString);
Expand Down