public static void CloseConnection(MapiSocket socket, string database)
        {
            var key = GetConnectionPoolKey(socket.Host, socket.Port, socket.Username, database);

            ConnectionInformation info;
            lock (ConnectionInfo)
            {
                info = ConnectionInfo[key];
            }

            lock (info)
            {
                info.Busy.Remove(socket);
                info.Active.Enqueue(socket);
            }
        }
        private static void SetupConnections(string host, int port, string username, string password,
            string database, int minConn, int maxConn)
        {
            var key = GetConnectionPoolKey(host, port, username, database);
            ConnectionInformation info;
            lock (ConnectionInfo)
            {
                if (!ConnectionInfo.TryGetValue(key, out info))
                    info = ConnectionInfo[key] = new ConnectionInformation(minConn, maxConn);
            }

            lock (info)
            {
                for (var i = info.Active.Count + info.Busy.Count;
                    i < info.Min || (info.Active.Count == 0 && i < info.Max);
                    i++)
                {
                    try
                    {
                        var socket = new MapiSocket();
                        socket.Connect(host, port, username, password, database);
                        info.Active.Enqueue(socket);
                    }
                    catch (IOException ex)
                    {
                        throw new MonetDbException(ex, "Problem connecting to the MonetDB server.");
                    }

                }
            }
        }
        /// <summary>
        /// Opens a database connection with the settings 
        /// specified by the <c>ConnectionString</c> property 
        /// of the provider-specific Connection object.
        /// </summary>
        public void Open()
        {
            if (State == ConnectionState.Open)
                throw new InvalidOperationException("Connection is already open");

            State = ConnectionState.Connecting;

            if (string.IsNullOrEmpty(ConnectionString))
            {
                State = ConnectionState.Closed;
                throw new InvalidOperationException("ConnectionString has not been set. Cannot connect to database.");
            }

            _socket = MonetDbConnectionFactory.GetConnection(_host, _port, _username, _password,
                                                             Database, _minPoolConnections, _maxPoolConnections);

            State = ConnectionState.Open;
        }