Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLluis Sanchez <lluis@novell.com>2004-04-05 14:50:02 +0400
committerLluis Sanchez <lluis@novell.com>2004-04-05 14:50:02 +0400
commit9f0f5fe6d0851315c3f56d43db6b8b1c06a3f2a4 (patch)
tree385cb869aa11fec5f4318bc115183401c0437bb6 /mcs/class/Mono.Data.SybaseClient
parent4d13dcb35199dcac306573c998f128e83550926a (diff)
* Mono.Data.SybaseClient.dll.sources: Removed SybaseConnectionPool.cs.
* Mono.Data.SybaseClient/SybaseConnection.cs: Use connection pool implemented in Mono.Data.Tds. svn path=/trunk/mcs/; revision=25033
Diffstat (limited to 'mcs/class/Mono.Data.SybaseClient')
-rw-r--r--mcs/class/Mono.Data.SybaseClient/ChangeLog6
-rw-r--r--mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient.dll.sources1
-rw-r--r--mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnection.cs28
-rw-r--r--mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnectionPool.cs167
4 files changed, 22 insertions, 180 deletions
diff --git a/mcs/class/Mono.Data.SybaseClient/ChangeLog b/mcs/class/Mono.Data.SybaseClient/ChangeLog
index 421ba21abcd..039ab70d94d 100644
--- a/mcs/class/Mono.Data.SybaseClient/ChangeLog
+++ b/mcs/class/Mono.Data.SybaseClient/ChangeLog
@@ -1,3 +1,9 @@
+2004-04-05 Lluis Sanchez Gual <lluis@ximian.com>
+
+ * Mono.Data.SybaseClient.dll.sources: Removed SybaseConnectionPool.cs.
+ * Mono.Data.SybaseClient/SybaseConnection.cs: Use connection pool
+ implemented in Mono.Data.Tds.
+
2004-04-01 Lluis Sanchez Gual <lluis@ximian.com>
* Mono.Data.SybaseClient/SybaseDataReader.cs: Null values are now
diff --git a/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient.dll.sources b/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient.dll.sources
index 9f5792ac214..547eba686b7 100644
--- a/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient.dll.sources
+++ b/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient.dll.sources
@@ -2,7 +2,6 @@ Assembly/Locale.cs
Mono.Data.SybaseClient/SybaseCommand.cs
Mono.Data.SybaseClient/SybaseCommandBuilder.cs
Mono.Data.SybaseClient/SybaseConnection.cs
-Mono.Data.SybaseClient/SybaseConnectionPool.cs
Mono.Data.SybaseClient/SybaseDataAdapter.cs
Mono.Data.SybaseClient/SybaseDataReader.cs
Mono.Data.SybaseClient/SybaseError.cs
diff --git a/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnection.cs b/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnection.cs
index b2d8397de38..67a05b55309 100644
--- a/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnection.cs
+++ b/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnection.cs
@@ -28,10 +28,10 @@ namespace Mono.Data.SybaseClient {
bool disposed = false;
// The set of SQL connection pools
- static Hashtable SybaseConnectionPools = new Hashtable ();
+ static TdsConnectionPoolManager sybaseConnectionPools = new TdsConnectionPoolManager (TdsVersion.tds50);
// The current connection pool
- SybaseConnectionPool pool;
+ TdsConnectionPool pool;
// The connection string that identifies this connection
string connectionString = null;
@@ -295,13 +295,10 @@ namespace Mono.Data.SybaseClient {
tds = new Tds50 (serverName, port, PacketSize, ConnectionTimeout);
}
else {
- pool = (SybaseConnectionPool) SybaseConnectionPools [connectionString];
- if (pool == null) {
- ParseDataSource (dataSource, out port, out serverName);
- pool = new SybaseConnectionPool (serverName, port, packetSize, ConnectionTimeout, minPoolSize, maxPoolSize);
- SybaseConnectionPools [connectionString] = pool;
- }
- tds = pool.AllocateConnection ();
+ ParseDataSource (dataSource, out port, out serverName);
+ TdsConnectionInfo info = new TdsConnectionInfo (serverName, port, packetSize, ConnectionTimeout, minPoolSize, maxPoolSize);
+ pool = sybaseConnectionPools.GetConnectionPool (connectionString, info);
+ tds = pool.GetConnection ();
}
}
catch (TdsTimeoutException e) {
@@ -312,9 +309,16 @@ namespace Mono.Data.SybaseClient {
tds.TdsInfoMessage += new TdsInternalInfoMessageEventHandler (MessageHandler);
if (!tds.IsConnected) {
- tds.Connect (parms);
- ChangeState (ConnectionState.Open);
- ChangeDatabase (parms.Database);
+ try {
+ tds.Connect (parms);
+ ChangeState (ConnectionState.Open);
+ ChangeDatabase (parms.Database);
+ }
+ catch {
+ if (pooling)
+ pool.ReleaseConnection (tds);
+ throw;
+ }
}
else if (connectionReset) {
// tds.ExecuteNonQuery ("EXEC sp_reset_connection"); FIXME
diff --git a/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnectionPool.cs b/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnectionPool.cs
deleted file mode 100644
index 8f6760815b8..00000000000
--- a/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnectionPool.cs
+++ /dev/null
@@ -1,167 +0,0 @@
-//
-// Mono.Data.SybaseClient.SybaseConnectionPool.cs
-//
-// Author:
-// Tim Coleman (tim@timcoleman.com)
-//
-// Copyright (C) 2002 Tim Coleman
-//
-
-using Mono.Data.Tds.Protocol;
-using System;
-using System.Collections;
-using System.Threading;
-
-namespace Mono.Data.SybaseClient {
- internal class SybaseConnectionPool : MarshalByRefObject, IList, ICollection, IEnumerable
- {
- #region Fields
-
- ArrayList list = new ArrayList ();
-
- int maxSize;
- int minSize;
- int packetSize;
- int port;
- int timeout;
-
- string dataSource;
-
- #endregion // Fields
-
- #region Constructors
-
- public SybaseConnectionPool (string dataSource, int port, int packetSize, int timeout, int minSize, int maxSize)
- {
- this.dataSource = dataSource;
- this.port = port;
- this.packetSize = packetSize;
- this.timeout = timeout;
- this.minSize = minSize;
- this.maxSize = maxSize;
- }
-
- #endregion // Constructors
-
- #region Properties
-
- public ITds this[int index] {
- get { return (ITds) list[index]; }
- }
-
- object IList.this[int index] {
- get { return this[index]; }
- set { throw new InvalidOperationException (); }
- }
-
- public int Count {
- get { return list.Count; }
- }
-
- public bool IsFixedSize {
- get { return false; }
- }
-
- public bool IsReadOnly {
- get { return true; }
- }
-
- public bool IsSynchronized {
- get { return false; }
- }
-
- public int MaxSize {
- get { return maxSize; }
- }
-
- public int MinSize {
- get { return minSize; }
- }
-
- public object SyncRoot {
- get { throw new InvalidOperationException (); }
- }
-
- #endregion // Properties
-
- #region Methods
-
- public int Add (object o)
- {
- return list.Add ((ITds) o);
- }
-
- public void Clear ()
- {
- list.Clear ();
- }
-
- public bool Contains (object o)
- {
- return list.Contains ((ITds) o);
- }
-
- public void CopyTo (Array array, int index)
- {
- list.CopyTo (array, index);
- }
-
- public IEnumerator GetEnumerator ()
- {
- return list.GetEnumerator ();
- }
-
- [MonoTODO]
- public ITds AllocateConnection ()
- {
- // make sure we have the minimum count (really only useful the first time)
- lock (list) {
- for (int i = Count; i < minSize; i += 1)
- Add (new Tds50 (dataSource, port, packetSize, timeout));
- }
-
- // Try to obtain a lock
- foreach (object o in list)
- if (Monitor.TryEnter (o))
- return (ITds) o;
-
- if (Count < maxSize) {
- ITds tds = new Tds50 (dataSource, port, packetSize, timeout);
- Monitor.Enter (tds);
- Add (tds);
- return tds;
- }
-
- // else we have to wait for one to be available
-
- return null;
- }
-
- public void ReleaseConnection (ITds tds)
- {
- Monitor.Exit (tds);
- }
-
- public int IndexOf (object o)
- {
- return list.IndexOf ((ITds) o);
- }
-
- public void Insert (int index, object o)
- {
- list.Insert (index, (ITds) o);
- }
-
- public void Remove (object o)
- {
- list.Remove ((ITds) o);
- }
-
- public void RemoveAt (int index)
- {
- list.RemoveAt (index);
- }
-
- #endregion // Methods
- }
-}