Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6019b64

Browse files
Merge pull request vapor#25 from SandorDobi/master
Automatically check server version for proper schema generation strategy
2 parents ed8bcfb + 2baa26f commit 6019b64

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

‎Sources/FluentPostgreSQL/FluentPostgreSQLProvider.swift‎

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public final class FluentPostgreSQLProvider: Provider {
1717

1818
/// See `Provider.register(_:)`
1919
public func register(_ services: inout Services) throws {
20+
try services.register(PostgreSQLVersionCheckProvider())
2021
try services.register(FluentProvider())
2122
try services.register(PostgreSQLProvider())
2223
}
@@ -25,5 +26,39 @@ public final class FluentPostgreSQLProvider: Provider {
2526
public func boot(_ worker: Container) throws { }
2627
}
2728

29+
/// check server version and override _globalEnableIdentityColumns
30+
/// dirty workaround for missing pre migration hook
31+
public final class PostgreSQLVersionCheckProvider: Provider {
32+
/// See `Provider.repositoryName`
33+
public static let repositoryName = "fluent-postgresql"
34+
35+
public init() {}
36+
/// See `Provider.register(_:)`
37+
public func register(_ services: inout Services) throws {}
38+
39+
/// See `Provider.boot(_:)`
40+
public func boot(_ worker: Container) throws {
41+
try worker.withConnection(to: .psql) { conn in
42+
conn.simpleQuery("SELECT current_setting('server_version') as version").map(to: Void.self) { rows in
43+
_serverVersion = try rows[0]["version"]!.decode(String.self)
44+
if let versionString = _serverVersion {
45+
let pointIndex = versionString.index(of: ".") ?? versionString.endIndex
46+
let majorVersion = versionString[..<pointIndex]
47+
if let ver = Int(majorVersion) {
48+
_globalEnableIdentityColumns = ver < 10 ? false: _globalEnableIdentityColumns
49+
}
50+
}
51+
}
52+
}.wait()
53+
}
54+
55+
// get current server version
56+
public static func getServerVersion() -> String {
57+
return _serverVersion ?? "N/A"
58+
}
59+
}
60+
61+
/// server version string
62+
internal var _serverVersion: String?
2863
/// Enabled by default
29-
internal var _globalEnableIdentityColumns: Bool = true
64+
internal var _globalEnableIdentityColumns: Bool = true

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /