Skip to content

Commit 30feb70

Browse files
committed
#3: Use PostgresConnection.Configuration for the PostgreSQL connection configuration
1 parent e4e086a commit 30feb70

File tree

2 files changed

+46
-11
lines changed

2 files changed

+46
-11
lines changed

Sources/PostgresConnectionPool/PoolConfiguration.swift

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import PostgresNIO
99
public struct PoolConfiguration {
1010

1111
/// PostgreSQL connection parameters.
12+
@available(*, deprecated, message: "Use `PostgresConnection.Configuration` etc. instead.")
1213
public struct Connection {
1314
let username: String
1415
let password: String
@@ -35,7 +36,7 @@ public struct PoolConfiguration {
3536
public let applicationName: String
3637

3738
/// Connection parameters to the database.
38-
public let connection: Connection
39+
public let postgresConfiguration: PostgresConnection.Configuration
3940

4041
/// Timeout for opening new connections to the PostgreSQL database, in seconds (default: 5 seconds).
4142
public let connectTimeout: TimeInterval
@@ -64,14 +65,14 @@ public struct PoolConfiguration {
6465

6566
public init(
6667
applicationName: String,
67-
connection: Connection,
68+
postgresConfiguration: PostgresConnection.Configuration,
6869
connectTimeout: TimeInterval = 5.0,
6970
queryTimeout: TimeInterval? = nil,
7071
poolSize: Int = 10,
7172
maxIdleConnections: Int? = nil)
7273
{
7374
self.applicationName = applicationName
74-
self.connection = connection
75+
self.postgresConfiguration = postgresConfiguration
7576
self.connectTimeout = connectTimeout.atLeast(1.0)
7677
self.queryTimeout = queryTimeout?.atLeast(1.0)
7778
self.poolSize = poolSize.atLeast(1)
@@ -82,4 +83,28 @@ public struct PoolConfiguration {
8283
}
8384
}
8485

86+
@available(*, deprecated, message: "Use `init(applicationName:postgresConfiguration:connectTimeout:queryTimeout:poolSize:maxIdleConnections:)` instead.")
87+
public init(
88+
applicationName: String,
89+
connection: Connection,
90+
connectTimeout: TimeInterval = 5.0,
91+
queryTimeout: TimeInterval? = nil,
92+
poolSize: Int = 10,
93+
maxIdleConnections: Int? = nil)
94+
{
95+
let postgresConfiguration = PostgresConnection.Configuration(
96+
host: connection.host,
97+
port: connection.port,
98+
username: connection.username,
99+
password: connection.password,
100+
database: connection.database,
101+
tls: .disable)
102+
self.init(applicationName: applicationName,
103+
postgresConfiguration: postgresConfiguration,
104+
connectTimeout: connectTimeout,
105+
queryTimeout: queryTimeout,
106+
poolSize: poolSize,
107+
maxIdleConnections: maxIdleConnections)
108+
}
109+
85110
}

Sources/PostgresConnectionPool/PostgresConnectionPool.swift

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,22 +48,32 @@ public actor PostgresConnectionPool {
4848
self.eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: configuration.poolSize * 2)
4949

5050
self.connectionName = String(configuration.applicationName.replacingPattern("[^-\\w\\d\\s()]", with: "").prefix(PostgresConnectionPool.postgresMaxNameLength))
51-
self.poolName = "\(configuration.connection.username)@\(configuration.connection.host):\(configuration.connection.port)/\(configuration.connection.database)"
5251
self.poolSize = configuration.poolSize
5352
self.maxIdleConnections = configuration.maxIdleConnections
5453
self.queryTimeout = configuration.queryTimeout
5554

55+
let dbUsername = configuration.postgresConfiguration.username
56+
let dbDatabase = configuration.postgresConfiguration.database ?? dbUsername
57+
if let host = configuration.postgresConfiguration.host,
58+
let port = configuration.postgresConfiguration.port
59+
{
60+
self.poolName = "\(dbUsername)@\(host):\(port)/\(dbDatabase)"
61+
}
62+
else if let unixSocketPath = configuration.postgresConfiguration.unixSocketPath {
63+
self.poolName = "postgresql:///\(dbDatabase)?user=\(dbUsername)&host=\(unixSocketPath)"
64+
}
65+
else if let channel = configuration.postgresConfiguration.establishedChannel {
66+
self.poolName = "\(dbUsername)@EstablishedChannel<\(channel)>/\(dbDatabase)"
67+
}
68+
else {
69+
self.poolName = "<Unknown connection>"
70+
}
71+
5672
self.onOpenConnection = configuration.onOpenConnection
5773
self.onReturnConnection = configuration.onReturnConnection
5874
self.onCloseConnection = configuration.onCloseConnection
5975

60-
var postgresConfiguration = PostgresConnection.Configuration(
61-
host: configuration.connection.host,
62-
port: configuration.connection.port,
63-
username: configuration.connection.username,
64-
password: configuration.connection.password,
65-
database: configuration.connection.database,
66-
tls: .disable)
76+
var postgresConfiguration = configuration.postgresConfiguration
6777
postgresConfiguration.options.connectTimeout = .seconds(Int64(configuration.connectTimeout))
6878
self.postgresConfiguration = postgresConfiguration
6979
}

0 commit comments

Comments
 (0)