getConnection method

Future<DatabaseConnection> getConnection()

Gets a connection from the pool

Implementation

Future<DatabaseConnection> getConnection() async {
  if (_isClosed) {
    throw DatabaseConnectionError('Connection pool is closed');
  }

  // Return available connection if exists
  if (_availableConnections.isNotEmpty) {
    final conn = _availableConnections.removeFirst();
    _activeConnections.add(conn);
    return conn;
  }

  // Create new connection if under limit
  if (_activeConnections.length < _maxConnections) {
    final conn = DatabaseReader.createConnection(_connectionString);
    _activeConnections.add(conn);
    return conn;
  }

  // Wait for a connection to become available
  await Future.delayed(Duration(milliseconds: 100));
  return getConnection();
}