diff --git a/Package.swift b/Package.swift index cc2e74d..8248f26 100644 --- a/Package.swift +++ b/Package.swift @@ -13,10 +13,9 @@ let package = Package( .library(name: "PostgresKit", targets: ["PostgresKit"]), ], dependencies: [ - .package(url: "https://github.com/vapor/postgres-nio.git", from: "1.20.2"), - .package(url: "https://github.com/vapor/sql-kit.git", from: "3.28.0"), + .package(url: "https://github.com/vapor/postgres-nio.git", from: "1.21.1"), + .package(url: "https://github.com/vapor/sql-kit.git", from: "3.29.3"), .package(url: "https://github.com/vapor/async-kit.git", from: "1.19.0"), - .package(url: "https://github.com/apple/swift-atomics.git", from: "1.2.0") ], targets: [ .target( @@ -25,7 +24,6 @@ let package = Package( .product(name: "AsyncKit", package: "async-kit"), .product(name: "PostgresNIO", package: "postgres-nio"), .product(name: "SQLKit", package: "sql-kit"), - .product(name: "Atomics", package: "swift-atomics"), ], swiftSettings: swiftSettings ), @@ -43,7 +41,4 @@ let package = Package( var swiftSettings: [SwiftSetting] { [ .enableUpcomingFeature("ConciseMagicFile"), .enableUpcomingFeature("ForwardTrailingClosures"), - .enableUpcomingFeature("DisableOutwardActorInference"), - .enableUpcomingFeature("StrictConcurrency"), - .enableExperimentalFeature("StrictConcurrency=complete"), ] } diff --git a/Package@swift-5.9.swift b/Package@swift-5.9.swift index a7304ac..051be68 100644 --- a/Package@swift-5.9.swift +++ b/Package@swift-5.9.swift @@ -16,7 +16,6 @@ let package = Package( .package(url: "https://github.com/vapor/postgres-nio.git", from: "1.20.2"), .package(url: "https://github.com/vapor/sql-kit.git", from: "3.28.0"), .package(url: "https://github.com/vapor/async-kit.git", from: "1.19.0"), - .package(url: "https://github.com/apple/swift-atomics.git", from: "1.2.0") ], targets: [ .target( @@ -25,7 +24,6 @@ let package = Package( .product(name: "AsyncKit", package: "async-kit"), .product(name: "PostgresNIO", package: "postgres-nio"), .product(name: "SQLKit", package: "sql-kit"), - .product(name: "Atomics", package: "swift-atomics"), ], swiftSettings: swiftSettings ), @@ -45,6 +43,5 @@ var swiftSettings: [SwiftSetting] { [ .enableUpcomingFeature("ConciseMagicFile"), .enableUpcomingFeature("ForwardTrailingClosures"), .enableUpcomingFeature("DisableOutwardActorInference"), - .enableUpcomingFeature("StrictConcurrency"), .enableExperimentalFeature("StrictConcurrency=complete"), ] } diff --git a/Sources/PostgresKit/PostgresConnectionSource.swift b/Sources/PostgresKit/PostgresConnectionSource.swift index 6a53cd7..87ada6c 100644 --- a/Sources/PostgresKit/PostgresConnectionSource.swift +++ b/Sources/PostgresKit/PostgresConnectionSource.swift @@ -1,5 +1,5 @@ import NIOSSL -import Atomics +import NIOConcurrencyHelpers import AsyncKit import Logging import PostgresNIO @@ -9,7 +9,7 @@ import NIOCore public struct PostgresConnectionSource: ConnectionPoolSource { public let sqlConfiguration: SQLPostgresConfiguration - private static let idGenerator = ManagedAtomic(0) + private static let idGenerator = NIOLockedValueBox(0) public init(sqlConfiguration: SQLPostgresConfiguration) { self.sqlConfiguration = sqlConfiguration @@ -22,7 +22,7 @@ public struct PostgresConnectionSource: ConnectionPoolSource { let connectionFuture = PostgresConnection.connect( on: eventLoop, configuration: self.sqlConfiguration.coreConfiguration, - id: Self.idGenerator.wrappingIncrementThenLoad(ordering: .relaxed), + id: Self.idGenerator.withLockedValue { $0 += 1; return $0 }, logger: logger ) diff --git a/Sources/PostgresKit/PostgresDatabase+SQL.swift b/Sources/PostgresKit/PostgresDatabase+SQL.swift index d4d84bd..ed04ccb 100644 --- a/Sources/PostgresKit/PostgresDatabase+SQL.swift +++ b/Sources/PostgresKit/PostgresDatabase+SQL.swift @@ -13,25 +13,18 @@ extension PostgresDatabase { decodingContext: PostgresDecodingContext, queryLogLevel: Logger.Level? = .debug ) -> some SQLDatabase { - _PostgresSQLDatabase(database: self, encodingContext: encodingContext, decodingContext: decodingContext, queryLogLevel: queryLogLevel) + PostgresSQLDatabase(database: self, encodingContext: encodingContext, decodingContext: decodingContext, queryLogLevel: queryLogLevel) } } -private struct _PostgresSQLDatabase { +private struct PostgresSQLDatabase { let database: PDatabase let encodingContext: PostgresEncodingContext let decodingContext: PostgresDecodingContext let queryLogLevel: Logger.Level? - - init(database: PDatabase, encodingContext: PostgresEncodingContext, decodingContext: PostgresDecodingContext, queryLogLevel: Logger.Level?) { - self.database = database - self.encodingContext = encodingContext - self.decodingContext = decodingContext - self.queryLogLevel = queryLogLevel - } } -extension _PostgresSQLDatabase: SQLDatabase, PostgresDatabase { +extension PostgresSQLDatabase: SQLDatabase, PostgresDatabase { var logger: Logger { self.database.logger } @@ -51,7 +44,7 @@ extension _PostgresSQLDatabase: SQLDatabase, PostgresDatabase { func execute(sql query: any SQLExpression, _ onRow: @escaping @Sendable (any SQLRow) -> ()) -> EventLoopFuture { let (sql, binds) = self.serialize(query) - if let queryLogLevel { + if let queryLogLevel = self.queryLogLevel { self.logger.log(level: queryLogLevel, "\(sql) [\(binds)]") } return self.eventLoop.makeCompletedFuture { @@ -75,7 +68,7 @@ extension _PostgresSQLDatabase: SQLDatabase, PostgresDatabase { ) async throws { let (sql, binds) = self.serialize(query) - if let queryLogLevel { + if let queryLogLevel = self.queryLogLevel { self.logger.log(level: queryLogLevel, "\(sql) [\(binds)]") }