예제 #1
0
 public MySqlField(Driver driver)
 {
     this.driver = driver;
     connVersion = driver.Version;
     maxLength = 1;
     binaryOk = true;
 }
예제 #2
0
        public static Driver Create(MySqlConnectionStringBuilder settings)
        {
            Driver d = null;
            #if !CF
            try
            {
                if (MySqlTrace.QueryAnalysisEnabled || settings.Logging || settings.UseUsageAdvisor)
                    d = new TracingDriver(settings);
            }
            catch (TypeInitializationException ex)
            {
                if (!(ex.InnerException is SecurityException))
                    throw ex;
                //Only rethrow if InnerException is not a SecurityException. If it is a SecurityException then
                //we couldn't initialize MySqlTrace because we don't have unmanaged code permissions.
            }
            #endif
            if (d == null)
                d = new Driver(settings);

            d.Open();
            return d;
        }
 public NativeDriver(Driver owner)
 {
     this.owner = owner;
     threadId = -1;
 }
예제 #4
0
 private void EnqueueIdle(Driver driver)
 {
     driver.IdleSince = DateTime.Now;
     idlePool.Enqueue(driver);
 }
예제 #5
0
        /// <summary>
        /// Removes a connection from the in use pool.  The only situations where this method
        /// would be called are when a connection that is in use gets some type of fatal exception
        /// or when the connection is being returned to the pool and it's too old to be
        /// returned.
        /// </summary>
        /// <param name="driver"></param>
        public void RemoveConnection(Driver driver)
        {
            lock ((inUsePool as ICollection).SyncRoot)
            {
                if (inUsePool.Contains(driver))
                {
                    inUsePool.Remove(driver);
                    Interlocked.Increment(ref available);
                    autoEvent.Set();
                }
            }

            // if we are being cleared and we are out of connections then have
            // the manager destroy us.
            if (beingCleared && NumConnections == 0)
                MySqlPoolManager.RemoveClearedPool(this);
        }
예제 #6
0
        public void ReleaseConnection(Driver driver)
        {
            lock ((inUsePool as ICollection).SyncRoot)
            {
                if (inUsePool.Contains(driver))
                    inUsePool.Remove(driver);
            }

            if (driver.ConnectionLifetimeExpired() || beingCleared)
            {
                driver.Close();
                Debug.Assert(!idlePool.Contains(driver));
            }
            else
            {
                lock ((idlePool as ICollection).SyncRoot)
                {
                    EnqueueIdle(driver);
                }
            }

            Interlocked.Increment(ref available);
            autoEvent.Set();
        }
예제 #7
0
 public static Driver Create(MySqlConnectionStringBuilder settings)
 {
     Driver d = new Driver(settings);
     d.Open();
     return d;
 }
        public static void RemoveConnection(Driver driver)
        {
            Debug.Assert(driver != null);

            MySqlPool pool = driver.Pool;
            if (pool == null) return;

            pool.RemoveConnection(driver);
        }