Example #1
0
    public MySqlPool(MySqlConnectionStringBuilder settings)
    {
      minSize = settings.MinimumPoolSize;
      maxSize = settings.MaximumPoolSize;

      available = (int)maxSize;
      autoEvent = new AutoResetEvent(false);

      if (minSize > maxSize)
        minSize = maxSize;
      this.settings = settings;
      inUsePool = new List<Driver>((int)maxSize);
      idlePool = new Queue<Driver>((int)maxSize);

      // prepopulate the idle pool to minSize
      for (int i = 0; i < minSize; i++)
        EnqueueIdle(CreateNewPooledConnection());

      procedureCache = new ProcedureCache((int)settings.ProcedureCacheSize);
    }
Example #2
0
		public override void Open()
		{
			if (State == ConnectionState.Open)
				Throw(new InvalidOperationException(Resources.ConnectionAlreadyOpen));


			SetState(ConnectionState.Connecting, true);


			try
			{
				if (settings.Pooling)
				{
					MySqlPool pool = MySqlPoolManager.GetPool(settings);
					if (driver == null || !driver.IsOpen)
						driver = pool.GetConnection();
					procedureCache = pool.ProcedureCache;

				}
				else
				{
					if (driver == null || !driver.IsOpen)
						driver = Driver.Create(settings);
					procedureCache = new ProcedureCache((int)settings.ProcedureCacheSize);
				}
			}
			catch
			{
				SetState(ConnectionState.Closed, true);
				throw;
			}


			SetState(ConnectionState.Open, false);
			driver.Configure(this);
			if (settings.Database != null && settings.Database != String.Empty)
				ChangeDatabase(settings.Database);

			// setup our schema provider
			schemaProvider = new ISSchemaProvider(this);


			// if we are opening up inside a current transaction, then autoenlist
			// TODO: control this with a connection string option


			hasBeenOpen = true;
			SetState(ConnectionState.Open, true);
		}