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 20 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -99,9 +99,6 @@
<Compile Include="$(CommonSourceRoot)\Microsoft\Data\ProviderBase\DbConnectionClosed.cs">
<Link>Microsoft\Data\ProviderBase\DbConnectionClosed.cs</Link>
</Compile>
<Compile Include="$(CommonSourceRoot)\Microsoft\Data\ProviderBase\DbConnectionFactory.cs">
<Link>Microsoft\Data\ProviderBase\DbConnectionFactory.cs</Link>
</Compile>
<Compile Include="$(CommonSourceRoot)Microsoft\Data\SqlClient\ConnectionPool\ChannelDbConnectionPool.cs">
<Link>Microsoft\Data\SqlClient\ConnectionPool\ChannelDbConnectionPool.cs</Link>
</Compile>
Expand Down
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 DbConnectionFactory s_connectionFactory = SqlConnectionFactory.SingletonInstance;
private static readonly SqlConnectionFactory s_connectionFactory = SqlConnectionFactory.Instance;

private DbConnectionOptions _userConnectionOptions;
private DbConnectionPoolGroup _poolGroup;
Expand All @@ -42,7 +42,7 @@ internal int CloseCount
}
}

internal DbConnectionFactory ConnectionFactory
internal SqlConnectionFactory ConnectionFactory
{
get
{
Expand Down Expand Up @@ -156,9 +156,7 @@ override protected DbCommand CreateDbCommand()
{
using (TryEventScope.Create("<prov.DbConnectionHelper.CreateDbCommand|API> {0}", ObjectID))
{
DbCommand command = null;
DbProviderFactory providerFactory = ConnectionFactory.ProviderFactory;
command = providerFactory.CreateCommand();
DbCommand command = SqlClientFactory.Instance.CreateCommand();
command.Connection = this;
return command;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3049,9 +3049,13 @@ internal bool ThreadHasParserLockForClose
}
}

internal override bool TryReplaceConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource<DbConnectionInternal> retry, DbConnectionOptions userOptions)
internal override bool TryReplaceConnection(
DbConnection outerConnection,
SqlConnectionFactory connectionFactory,
TaskCompletionSource<DbConnectionInternal> retry,
DbConnectionOptions userOptions)
{
return base.TryOpenConnectionInternal(outerConnection, connectionFactory, retry, userOptions);
return TryOpenConnectionInternal(outerConnection, connectionFactory, retry, userOptions);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -285,9 +285,6 @@
<Compile Include="$(CommonSourceRoot)\Microsoft\Data\ProviderBase\DbConnectionClosed.cs">
<Link>Microsoft\Data\ProviderBase\DbConnectionClosed.cs</Link>
</Compile>
<Compile Include="$(CommonSourceRoot)\Microsoft\Data\ProviderBase\DbConnectionFactory.cs">
<Link>Microsoft\Data\ProviderBase\DbConnectionFactory.cs</Link>
</Compile>
<Compile Include="$(CommonSourceRoot)Microsoft\Data\ProviderBase\DbConnectionInternal.cs">
<Link>Microsoft\Data\ProviderBase\DbConnectionInternal.cs</Link>
</Compile>
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 @@ -2197,7 +2197,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 || connectionOptions.Authentication == SqlAuthenticationMethod.ActiveDirectoryIntegrated)
{
throw SQL.ChangePasswordConflictsWithSSPI();
Expand Down Expand Up @@ -2249,7 +2249,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 @@ -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 DbConnectionFactory _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 @@ -69,7 +69,7 @@ internal int CloseCount
}
}

internal DbConnectionFactory ConnectionFactory
internal SqlConnectionFactory ConnectionFactory
{
get
{
Expand Down Expand Up @@ -203,17 +203,16 @@ override protected DbCommand CreateDbCommand()
{
using (TryEventScope.Create("<prov.DbConnectionHelper.CreateDbCommand|API> {0}", ObjectID))
{
DbProviderFactory providerFactory = ConnectionFactory.ProviderFactory;
DbCommand command = providerFactory.CreateCommand();
DbCommand command = SqlClientFactory.Instance.CreateCommand();
command.Connection = this;
return command;
}
}

private static System.Security.CodeAccessPermission CreateExecutePermission()
{
DBDataPermission p = (DBDataPermission)SqlConnectionFactory.SingletonInstance.ProviderFactory.CreatePermission(System.Security.Permissions.PermissionState.None);
p.Add(String.Empty, String.Empty, KeyRestrictionBehavior.AllowOnly);
DBDataPermission p = (DBDataPermission)SqlClientFactory.Instance.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 @@ -3081,9 +3081,13 @@ internal bool ThreadHasParserLockForClose
}
}

internal override bool TryReplaceConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource<DbConnectionInternal> retry, DbConnectionOptions userOptions)
internal override bool TryReplaceConnection(
DbConnection outerConnection,
SqlConnectionFactory connectionFactory,
TaskCompletionSource<DbConnectionInternal> retry,
DbConnectionOptions userOptions)
{
return base.TryOpenConnectionInternal(outerConnection, connectionFactory, retry, userOptions);
return TryOpenConnectionInternal(outerConnection, connectionFactory, retry, userOptions);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,18 @@ internal static Exception ExceptionWithStackTrace(Exception e)
}
}

internal static Timer UnsafeCreateTimer(TimerCallback callback, object state, int dueTime, int period)
internal static Timer UnsafeCreateTimer(
TimerCallback callback,
object state,
int dueTimeMilliseconds,
int periodMilliseconds) =>
UnsafeCreateTimer(
callback,
state,
TimeSpan.FromMilliseconds(dueTimeMilliseconds),
TimeSpan.FromMilliseconds(periodMilliseconds));

internal static Timer UnsafeCreateTimer(TimerCallback callback, object state, TimeSpan dueTime, TimeSpan period)
{
// Don't capture the current ExecutionContext and its AsyncLocals onto
// a global timer causing them to live forever
Expand All @@ -154,6 +165,7 @@ internal static Timer UnsafeCreateTimer(TimerCallback callback, object state, in
}
}
}


#region COM+ exceptions
internal static ArgumentException Argument(string error)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using System.Threading.Tasks;
using Microsoft.Data.Common;
using Microsoft.Data.Common.ConnectionString;
using Microsoft.Data.SqlClient;
using Microsoft.Data.SqlClient.ConnectionPool;

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

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

internal override void CloseConnection(DbConnection owningObject, DbConnectionFactory connectionFactory)
internal override void CloseConnection(DbConnection owningObject, SqlConnectionFactory connectionFactory)
{
// not much to do here...
}
Expand All @@ -36,13 +37,24 @@ internal override void CloseConnection(DbConnection owningObject, DbConnectionFa

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

protected internal override DataTable GetSchema(DbConnectionFactory factory, DbConnectionPoolGroup poolGroup, DbConnection outerConnection, string collectionName, string[] restrictions)
=> throw ADP.ClosedConnectionError();
protected internal override DataTable GetSchema(
SqlConnectionFactory factory,
DbConnectionPoolGroup poolGroup,
DbConnection outerConnection,
string collectionName,
string[] restrictions)
{
throw ADP.ClosedConnectionError();
}

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

internal override bool TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource<DbConnectionInternal> retry, DbConnectionOptions userOptions)
=> base.TryOpenConnectionInternal(outerConnection, connectionFactory, retry, userOptions);
internal override bool TryOpenConnection(
DbConnection outerConnection,
SqlConnectionFactory connectionFactory,
TaskCompletionSource<DbConnectionInternal> retry,
DbConnectionOptions userOptions) =>
TryOpenConnectionInternal(outerConnection, connectionFactory, retry, userOptions);
}

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

internal override bool TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource<DbConnectionInternal> retry, DbConnectionOptions userOptions)
internal override bool TryOpenConnection(
DbConnection outerConnection,
SqlConnectionFactory connectionFactory,
TaskCompletionSource<DbConnectionInternal> retry,
DbConnectionOptions userOptions)
=> throw ADP.ConnectionAlreadyOpen(State);
}

Expand Down Expand Up @@ -84,15 +100,23 @@ private DbConnectionClosedConnecting() : base(ConnectionState.Connecting)
{
}

internal override void CloseConnection(DbConnection owningObject, DbConnectionFactory connectionFactory)
internal override void CloseConnection(DbConnection owningObject, SqlConnectionFactory connectionFactory)
{
connectionFactory.SetInnerConnectionTo(owningObject, DbConnectionClosedPreviouslyOpened.SingletonInstance);
}

internal override bool TryReplaceConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource<DbConnectionInternal> retry, DbConnectionOptions userOptions)
=> TryOpenConnection(outerConnection, connectionFactory, retry, userOptions);

internal override bool TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource<DbConnectionInternal> retry, DbConnectionOptions userOptions)
internal override bool TryReplaceConnection(
DbConnection outerConnection,
SqlConnectionFactory connectionFactory,
TaskCompletionSource<DbConnectionInternal> retry,
DbConnectionOptions userOptions) =>
TryOpenConnection(outerConnection, connectionFactory, retry, userOptions);

internal override bool TryOpenConnection(
DbConnection outerConnection,
SqlConnectionFactory connectionFactory,
TaskCompletionSource<DbConnectionInternal> retry,
DbConnectionOptions userOptions)
{
if (retry == null || !retry.Task.IsCompleted)
{
Expand Down Expand Up @@ -137,7 +161,11 @@ private DbConnectionClosedPreviouslyOpened() : base(ConnectionState.Closed, true
{
}

internal override bool TryReplaceConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource<DbConnectionInternal> retry, DbConnectionOptions userOptions)
=> TryOpenConnection(outerConnection, connectionFactory, retry, userOptions);
internal override bool TryReplaceConnection(
DbConnection outerConnection,
SqlConnectionFactory connectionFactory,
TaskCompletionSource<DbConnectionInternal> retry,
DbConnectionOptions userOptions) =>
TryOpenConnection(outerConnection, connectionFactory, retry, userOptions);
}
}
Loading
Loading