Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,5 @@ struct PostgreSQLCapabilities: Sendable, Equatable {

var hasDatabaseICULocale: Bool { serverVersion >= 150_000 }
var hasDatabaseLocale: Bool { serverVersion >= 170_000 }
var hasModernICUSyntax: Bool { serverVersion >= 160_000 }
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ extension PostgreSQLPluginDriver {
func fetchColumns(table: String, schema: String?) async throws -> [PluginColumnInfo] {
let safeSchema = escapeLiteralForColumns(currentSchema ?? "public")
let safeTable = escapeLiteralForColumns(table)
let caps = capabilities
let caps = versionedCapabilities
let identityProjection = caps.hasIdentityColumns ? "a.attidentity" : "NULL::text"
let generatedProjection = caps.hasGeneratedColumns ? "a.attgenerated" : "NULL::text"
let attributeJoin = (caps.hasIdentityColumns || caps.hasGeneratedColumns) ? """
Expand Down Expand Up @@ -60,7 +60,7 @@ extension PostgreSQLPluginDriver {

func fetchAllColumns(schema: String?) async throws -> [String: [PluginColumnInfo]] {
let safeSchema = escapeLiteralForColumns(currentSchema ?? "public")
let caps = capabilities
let caps = versionedCapabilities
let identityProjection = caps.hasIdentityColumns ? "a.attidentity" : "NULL::text"
let generatedProjection = caps.hasGeneratedColumns ? "a.attgenerated" : "NULL::text"
let attributeJoin = (caps.hasIdentityColumns || caps.hasGeneratedColumns) ? """
Expand Down
18 changes: 9 additions & 9 deletions Plugins/PostgreSQLDriverPlugin/PostgreSQLPluginDriver.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ final class PostgreSQLPluginDriver: PluginDatabaseDriver, @unchecked Sendable {
var supportsTransactions: Bool { true }
var serverVersion: String? { libpqConnection?.serverVersion() }
var serverVersionNumber: Int32 { libpqConnection?.serverVersionNumber() ?? 0 }
var capabilities: PostgreSQLCapabilities {
var versionedCapabilities: PostgreSQLCapabilities {
PostgreSQLCapabilities(serverVersion: serverVersionNumber)
}
var parameterStyle: ParameterStyle { .dollar }
Expand Down Expand Up @@ -234,7 +234,7 @@ final class PostgreSQLPluginDriver: PluginDatabaseDriver, @unchecked Sendable {

func fetchTables(schema: String?) async throws -> [PluginTableInfo] {
let schemaLiteral = escapeLiteral(schema ?? _currentSchema)
let caps = capabilities
let caps = versionedCapabilities

var unions: [String] = [
"""
Expand Down Expand Up @@ -284,7 +284,7 @@ final class PostgreSQLPluginDriver: PluginDatabaseDriver, @unchecked Sendable {


func fetchIndexes(table: String, schema: String?) async throws -> [PluginIndexInfo] {
let columnOrdering = capabilities.hasArrayPosition
let columnOrdering = versionedCapabilities.hasArrayPosition
? "ORDER BY array_position(ix.indkey, a.attnum)"
: "ORDER BY a.attnum"
let query = """
Expand Down Expand Up @@ -433,7 +433,7 @@ final class PostgreSQLPluginDriver: PluginDatabaseDriver, @unchecked Sendable {
func fetchTableDDL(table: String, schema: String?) async throws -> String {
let safeTable = escapeLiteral(table)
let quotedTable = "\"\(table.replacingOccurrences(of: "\"", with: "\"\""))\""
let caps = capabilities
let caps = versionedCapabilities

let identityClause: String = caps.hasIdentityColumns ? """
CASE
Expand Down Expand Up @@ -672,7 +672,7 @@ final class PostgreSQLPluginDriver: PluginDatabaseDriver, @unchecked Sendable {
}

func fetchDependentSequences(table: String, schema: String?) async throws -> [(name: String, ddl: String)] {
guard capabilities.hasSequencesCatalog else { return [] }
guard versionedCapabilities.hasSequencesCatalog else { return [] }
let safeTable = escapeLiteral(table)
let query = """
SELECT s.sequencename,
Expand Down Expand Up @@ -720,7 +720,7 @@ final class PostgreSQLPluginDriver: PluginDatabaseDriver, @unchecked Sendable {
]

func createDatabaseFormSpec() async throws -> PluginCreateDatabaseFormSpec? {
let supportsProvider = capabilities.hasDatabaseICULocale
let supportsProvider = versionedCapabilities.hasDatabaseICULocale

async let templateDefaultsTask = fetchTemplate1Defaults()
async let collationsTask = fetchCollations()
Expand Down Expand Up @@ -813,7 +813,7 @@ final class PostgreSQLPluginDriver: PluginDatabaseDriver, @unchecked Sendable {

var sql = "CREATE DATABASE \"\(quotedName)\" ENCODING '\(encoding)'"

let supportsProvider = capabilities.hasDatabaseICULocale
let supportsProvider = versionedCapabilities.hasDatabaseICULocale
let provider = supportsProvider ? (request.values["provider"] ?? "libc") : "libc"

switch provider {
Expand Down Expand Up @@ -873,7 +873,7 @@ final class PostgreSQLPluginDriver: PluginDatabaseDriver, @unchecked Sendable {
)
}
let escapedIcu = escapeLiteral(icuLocale)
if let major = majorVersion, major >= 16 {
if versionedCapabilities.hasModernICUSyntax {
sql += " LOCALE_PROVIDER 'icu' LOCALE '\(escapedIcu)' TEMPLATE template0"
} else {
sql += " LOCALE_PROVIDER 'icu' ICU_LOCALE '\(escapedIcu)' LC_COLLATE 'C' LC_CTYPE 'C' TEMPLATE template0"
Expand Down Expand Up @@ -903,7 +903,7 @@ final class PostgreSQLPluginDriver: PluginDatabaseDriver, @unchecked Sendable {
}

private func fetchTemplate1Defaults() async -> Template1Defaults? {
let caps = capabilities
let caps = versionedCapabilities
let selectColumns: String
if caps.hasDatabaseLocale {
selectColumns = "datcollate, datctype, datlocprovider, datlocale"
Expand Down
Loading