Skip to content

Commit f779b50

Browse files
authored
Merge pull request #55 from servicetitan/cleanup-underlying-connection
Clean UnderlyingConnection on Dispose
2 parents 9af9183 + 668c09e commit f779b50

File tree

7 files changed

+161
-76
lines changed

7 files changed

+161
-76
lines changed

Orm/Xtensive.Orm.Firebird/Sql.Drivers.Firebird/Connection.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ public override void BeginTransaction()
4444
/// <inheritdoc/>
4545
public override void BeginTransaction(IsolationLevel isolationLevel)
4646
{
47-
EnsureTrasactionIsNotActive();
47+
EnsureIsNotDisposed();
48+
EnsureTransactionIsNotActive();
49+
4850
var transactionOptions = new FbTransactionOptions {WaitTimeout = TimeSpan.FromSeconds(10)};
4951
switch (SqlHelper.ReduceIsolationLevel(isolationLevel)) {
5052
case IsolationLevel.ReadCommitted:
@@ -68,6 +70,12 @@ protected override void ClearActiveTransaction()
6870
activeTransaction = null;
6971
}
7072

73+
/// <inheritdoc/>
74+
protected override void ClearUnderlyingConnection()
75+
{
76+
underlyingConnection = null;
77+
}
78+
7179
/// <inheritdoc/>
7280
public override void MakeSavepoint(string name)
7381
{

Orm/Xtensive.Orm.MySql/Sql.Drivers.MySql/Connection.cs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,12 @@
88
using System.Data.Common;
99
using System.Security;
1010
using MySql.Data.MySqlClient;
11-
using Xtensive.Orm;
1211

1312
namespace Xtensive.Sql.Drivers.MySql
1413
{
1514
internal class Connection : SqlConnection
1615
{
17-
private readonly MySqlConnection underlyingConnection;
16+
private MySqlConnection underlyingConnection;
1817
private MySqlTransaction activeTransaction;
1918

2019
/// <inheritdoc/>
@@ -40,22 +39,28 @@ public override DbParameter CreateParameter()
4039
[SecuritySafeCritical]
4140
public override void BeginTransaction()
4241
{
43-
EnsureTrasactionIsNotActive();
42+
EnsureIsNotDisposed();
43+
EnsureTransactionIsNotActive();
44+
4445
activeTransaction = underlyingConnection.BeginTransaction();
4546
}
4647

4748
/// <inheritdoc/>
4849
[SecuritySafeCritical]
4950
public override void BeginTransaction(IsolationLevel isolationLevel)
5051
{
51-
EnsureTrasactionIsNotActive();
52+
EnsureIsNotDisposed();
53+
EnsureTransactionIsNotActive();
54+
5255
activeTransaction = underlyingConnection.BeginTransaction(SqlHelper.ReduceIsolationLevel(isolationLevel));
5356
}
5457

5558
/// <inheritdoc/>
5659
public override void MakeSavepoint(string name)
5760
{
61+
EnsureIsNotDisposed();
5862
EnsureTransactionIsActive();
63+
5964
string commandText = string.Format("SAVEPOINT {0}", name);
6065
using (DbCommand command = CreateCommand(commandText))
6166
command.ExecuteNonQuery();
@@ -64,7 +69,9 @@ public override void MakeSavepoint(string name)
6469
/// <inheritdoc/>
6570
public override void RollbackToSavepoint(string name)
6671
{
72+
EnsureIsNotDisposed();
6773
EnsureTransactionIsActive();
74+
6875
string commandText = string.Format("ROLLBACK TO SAVEPOINT {0}; RELEASE SAVEPOINT {0};", name);
6976
using (DbCommand command = CreateCommand(commandText))
7077
command.ExecuteNonQuery();
@@ -73,7 +80,9 @@ public override void RollbackToSavepoint(string name)
7380
/// <inheritdoc/>
7481
public override void ReleaseSavepoint(string name)
7582
{
83+
EnsureIsNotDisposed();
7684
EnsureTransactionIsActive();
85+
7786
string commandText = string.Format("RELEASE SAVEPOINT {0}", name);
7887
using (DbCommand command = CreateCommand(commandText))
7988
command.ExecuteNonQuery();
@@ -85,6 +94,12 @@ protected override void ClearActiveTransaction()
8594
activeTransaction = null;
8695
}
8796

97+
/// <inheritdoc/>
98+
protected override void ClearUnderlyingConnection()
99+
{
100+
underlyingConnection = null;
101+
}
102+
88103
// Constructors
89104

90105
[SecuritySafeCritical]

Orm/Xtensive.Orm.Oracle/Sql.Drivers.Oracle/Connection.cs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,46 +41,53 @@ public override DbParameter CreateCursorParameter()
4141
/// <inheritdoc/>
4242
public override IBinaryLargeObject CreateBinaryLargeObject()
4343
{
44+
EnsureIsNotDisposed();
4445
return new BinaryLargeObject(underlyingConnection);
4546
}
4647

4748
/// <inheritdoc/>
4849
public override ICharacterLargeObject CreateCharacterLargeObject()
4950
{
51+
EnsureIsNotDisposed();
5052
return new CharacterLargeObject(underlyingConnection);
5153
}
5254

5355
/// <inheritdoc/>
5456
public override void BeginTransaction()
5557
{
56-
EnsureTrasactionIsNotActive();
58+
EnsureIsNotDisposed();
59+
EnsureTransactionIsNotActive();
5760
activeTransaction = underlyingConnection.BeginTransaction();
5861
}
5962

6063
/// <inheritdoc/>
6164
public override void BeginTransaction(IsolationLevel isolationLevel)
6265
{
63-
EnsureTrasactionIsNotActive();
66+
EnsureIsNotDisposed();
67+
EnsureTransactionIsNotActive();
6468
activeTransaction = underlyingConnection.BeginTransaction(SqlHelper.ReduceIsolationLevel(isolationLevel));
6569
}
6670

6771
/// <inheritdoc/>
6872
public override void MakeSavepoint(string name)
6973
{
74+
EnsureIsNotDisposed();
7075
EnsureTransactionIsActive();
7176
activeTransaction.Save(name);
7277
}
7378

7479
/// <inheritdoc/>
7580
public override void RollbackToSavepoint(string name)
7681
{
82+
EnsureIsNotDisposed();
7783
EnsureTransactionIsActive();
78-
activeTransaction.Rollback(name);
84+
activeTransaction.Rollback(name);
7985
}
8086

8187
/// <inheritdoc/>
8288
public override void ReleaseSavepoint(string name)
8389
{
90+
EnsureIsNotDisposed();
8491
EnsureTransactionIsActive();
8592
// nothing
8693
}
@@ -91,13 +98,18 @@ protected override void ClearActiveTransaction()
9198
activeTransaction = null;
9299
}
93100

101+
/// <inheritdoc/>
102+
protected override void ClearUnderlyingConnection()
103+
{
104+
underlyingConnection = null;
105+
}
106+
94107
/// <inheritdoc/>
95108
protected override DbCommand CreateNativeCommand()
96109
{
97110
return new OracleCommand {Connection = underlyingConnection, BindByName = true};
98111
}
99112

100-
101113
// Constructors
102114

103115
public Connection(SqlDriver driver)

Orm/Xtensive.Orm.PostgreSql/Sql.Drivers.PostgreSql/Connection.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,24 @@ public override DbParameter CreateParameter()
3434
[SecuritySafeCritical]
3535
public override void BeginTransaction()
3636
{
37-
EnsureTrasactionIsNotActive();
37+
EnsureIsNotDisposed();
38+
EnsureTransactionIsNotActive();
3839
activeTransaction = underlyingConnection.BeginTransaction();
3940
}
4041

4142
/// <inheritdoc/>
4243
[SecuritySafeCritical]
4344
public override void BeginTransaction(IsolationLevel isolationLevel)
4445
{
45-
EnsureTrasactionIsNotActive();
46+
EnsureIsNotDisposed();
47+
EnsureTransactionIsNotActive();
4648
activeTransaction = underlyingConnection.BeginTransaction(SqlHelper.ReduceIsolationLevel(isolationLevel));
4749
}
4850

4951
/// <inheritdoc/>
5052
public override void MakeSavepoint(string name)
5153
{
54+
EnsureIsNotDisposed();
5255
EnsureTransactionIsActive();
5356
var commandText = string.Format("SAVEPOINT {0}", name);
5457
using (var command = CreateCommand(commandText))
@@ -58,6 +61,7 @@ public override void MakeSavepoint(string name)
5861
/// <inheritdoc/>
5962
public override void RollbackToSavepoint(string name)
6063
{
64+
EnsureIsNotDisposed();
6165
EnsureTransactionIsActive();
6266
var commandText = string.Format("ROLLBACK TO SAVEPOINT {0}; RELEASE SAVEPOINT {0};", name);
6367
using (var command = CreateCommand(commandText))
@@ -67,6 +71,7 @@ public override void RollbackToSavepoint(string name)
6771
/// <inheritdoc/>
6872
public override void ReleaseSavepoint(string name)
6973
{
74+
EnsureIsNotDisposed();
7075
EnsureTransactionIsActive();
7176
var commandText = string.Format("RELEASE SAVEPOINT {0}", name);
7277
using (var command = CreateCommand(commandText))
@@ -79,6 +84,11 @@ protected override void ClearActiveTransaction()
7984
activeTransaction = null;
8085
}
8186

87+
/// <inheritdoc/>
88+
protected override void ClearUnderlyingConnection()
89+
{
90+
underlyingConnection = null;
91+
}
8292

8393
// Constructors
8494

Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/Connection.cs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,8 @@
88
using System.Data;
99
using System.Data.Common;
1010
using System.Data.SqlClient;
11-
using System.Runtime.CompilerServices;
1211
using System.Threading;
1312
using System.Threading.Tasks;
14-
using Xtensive.Orm;
1513
using SqlServerConnection = System.Data.SqlClient.SqlConnection;
1614

1715
namespace Xtensive.Sql.Drivers.SqlServer
@@ -84,38 +82,48 @@ public override Task OpenAndInitializeAsync(string initializationScript, Cancell
8482
/// <inheritdoc/>
8583
public override void BeginTransaction()
8684
{
87-
EnsureTrasactionIsNotActive();
85+
EnsureIsNotDisposed();
86+
EnsureTransactionIsNotActive();
8887
activeTransaction = underlyingConnection.BeginTransaction();
8988
}
9089

9190
/// <inheritdoc/>
9291
public override void BeginTransaction(IsolationLevel isolationLevel)
9392
{
94-
EnsureTrasactionIsNotActive();
93+
EnsureIsNotDisposed();
94+
EnsureTransactionIsNotActive();
9595
activeTransaction = underlyingConnection.BeginTransaction(isolationLevel);
9696
}
97-
97+
9898
/// <inheritdoc/>
9999
public override void MakeSavepoint(string name)
100100
{
101+
EnsureIsNotDisposed();
101102
EnsureTransactionIsActive();
102103
activeTransaction.Save(name);
103104
}
104105

105106
/// <inheritdoc/>
106107
public override void RollbackToSavepoint(string name)
107108
{
109+
EnsureIsNotDisposed();
108110
EnsureTransactionIsActive();
109111
activeTransaction.Rollback(name);
110112
}
111113

112114
/// <inheritdoc/>
113115
public override void ReleaseSavepoint(string name)
114116
{
117+
EnsureIsNotDisposed();
115118
EnsureTransactionIsActive();
116119
// nothing
117120
}
118121

122+
protected override void ClearUnderlyingConnection()
123+
{
124+
underlyingConnection = null;
125+
}
126+
119127
/// <inheritdoc/>
120128
protected override void ClearActiveTransaction()
121129
{

Orm/Xtensive.Orm.Sqlite/Sql.Drivers.Sqlite/Connection.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,10 @@
44
// Created by: Malisa Ncube
55
// Created: 2011.04.29
66

7-
using System;
87
using System.Data;
98
using System.Data.Common;
109
using System.Data.SQLite;
1110
using System.Security;
12-
using Xtensive.Orm;
1311

1412
namespace Xtensive.Sql.Drivers.Sqlite
1513
{
@@ -35,21 +33,24 @@ public override DbParameter CreateParameter()
3533
[SecuritySafeCritical]
3634
public override void BeginTransaction()
3735
{
38-
EnsureTrasactionIsNotActive();
36+
EnsureIsNotDisposed();
37+
EnsureTransactionIsNotActive();
3938
activeTransaction = underlyingConnection.BeginTransaction();
4039
}
4140

4241
/// <inheritdoc/>
4342
[SecuritySafeCritical]
4443
public override void BeginTransaction(IsolationLevel isolationLevel)
4544
{
46-
EnsureTrasactionIsNotActive();
45+
EnsureIsNotDisposed();
46+
EnsureTransactionIsNotActive();
4747
activeTransaction = underlyingConnection.BeginTransaction(SqlHelper.ReduceIsolationLevel(isolationLevel));
4848
}
4949

5050
/// <inheritdoc/>
5151
public override void MakeSavepoint(string name)
5252
{
53+
EnsureIsNotDisposed();
5354
EnsureTransactionIsActive();
5455
var commandText = string.Format("SAVEPOINT {0}", name);
5556
using (var command = CreateCommand(commandText))
@@ -59,6 +60,7 @@ public override void MakeSavepoint(string name)
5960
/// <inheritdoc/>
6061
public override void RollbackToSavepoint(string name)
6162
{
63+
EnsureIsNotDisposed();
6264
EnsureTransactionIsActive();
6365
var commandText = string.Format("ROLLBACK TO SAVEPOINT {0}; RELEASE SAVEPOINT {0};", name);
6466
using (var command = CreateCommand(commandText))
@@ -68,6 +70,7 @@ public override void RollbackToSavepoint(string name)
6870
/// <inheritdoc/>
6971
public override void ReleaseSavepoint(string name)
7072
{
73+
EnsureIsNotDisposed();
7174
EnsureTransactionIsActive();
7275
var commandText = string.Format("RELEASE SAVEPOINT {0}", name);
7376
using (var command = CreateCommand(commandText))
@@ -80,6 +83,11 @@ protected override void ClearActiveTransaction()
8083
activeTransaction = null;
8184
}
8285

86+
/// <inheritdoc/>
87+
protected override void ClearUnderlyingConnection()
88+
{
89+
underlyingConnection = null;
90+
}
8391

8492
// Constructors
8593

0 commit comments

Comments
 (0)