Skip to content

Commit 0414c0b

Browse files
authored
refactor(database, connections): dedup post-connect setup, extract StoredConnection model (#1571)
* refactor(database): extract shared post-connect setup (timeout, startup commands, schema/db restore) * refactor(connections): extract StoredConnection Codable model into its own file
1 parent 55142a1 commit 0414c0b

4 files changed

Lines changed: 471 additions & 475 deletions

File tree

TablePro/Core/Database/DatabaseManager+Health.swift

Lines changed: 38 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -147,39 +147,57 @@ extension DatabaseManager {
147147
throw error
148148
}
149149

150+
await applyTimeoutAndStartupCommands(
151+
on: driver,
152+
startupCommands: session.connection.startupCommands,
153+
connectionName: session.connection.name
154+
)
155+
await restoreSchemaAndDatabase(
156+
on: driver,
157+
savedSchema: session.currentSchema,
158+
savedDatabase: session.currentDatabase
159+
)
160+
161+
return ReconnectResult(driver: driver, effectiveConnection: connectionForDriver)
162+
}
163+
164+
func applyTimeoutAndStartupCommands(
165+
on driver: DatabaseDriver,
166+
startupCommands: String?,
167+
connectionName: String
168+
) async {
150169
let timeoutSeconds = AppSettingsManager.shared.general.queryTimeoutSeconds
151170
do {
152171
try await driver.applyQueryTimeout(timeoutSeconds)
153172
} catch {
154173
Self.logger.warning(
155-
"Query timeout not supported for \(session.connection.name): \(error.localizedDescription)"
174+
"Query timeout not supported for \(connectionName): \(error.localizedDescription)"
156175
)
157176
}
158177

159-
await executeStartupCommands(
160-
session.connection.startupCommands, on: driver, connectionName: session.connection.name
161-
)
178+
await executeStartupCommands(startupCommands, on: driver, connectionName: connectionName)
179+
}
162180

163-
if let savedSchema = session.currentSchema,
164-
let schemaDriver = driver as? SchemaSwitchable {
181+
func restoreSchemaAndDatabase(
182+
on driver: DatabaseDriver,
183+
savedSchema: String?,
184+
savedDatabase: String?
185+
) async {
186+
if let savedSchema, let schemaDriver = driver as? SchemaSwitchable {
165187
do {
166188
try await schemaDriver.switchSchema(to: savedSchema)
167189
} catch {
168190
Self.logger.warning("Failed to restore schema '\(savedSchema)' on reconnect: \(error.localizedDescription)")
169191
}
170192
}
171193

172-
// Restore database for MSSQL if session had a non-default database
173-
if let savedDatabase = session.currentDatabase,
174-
let adapter = driver as? PluginDriverAdapter {
194+
if let savedDatabase, let adapter = driver as? PluginDriverAdapter {
175195
do {
176196
try await adapter.switchDatabase(to: savedDatabase)
177197
} catch {
178198
Self.logger.warning("Failed to restore database '\(savedDatabase)' on reconnect: \(error.localizedDescription)")
179199
}
180200
}
181-
182-
return ReconnectResult(driver: driver, effectiveConnection: connectionForDriver)
183201
}
184202

185203
/// Stop health monitoring for a connection
@@ -243,37 +261,16 @@ extension DatabaseManager {
243261
)
244262
try await driver.connect()
245263

246-
let timeoutSeconds = AppSettingsManager.shared.general.queryTimeoutSeconds
247-
do {
248-
try await driver.applyQueryTimeout(timeoutSeconds)
249-
} catch {
250-
Self.logger.warning(
251-
"Query timeout not supported for \(session.connection.name): \(error.localizedDescription)"
252-
)
253-
}
254-
255-
await executeStartupCommands(
256-
session.connection.startupCommands, on: driver, connectionName: session.connection.name
264+
await applyTimeoutAndStartupCommands(
265+
on: driver,
266+
startupCommands: session.connection.startupCommands,
267+
connectionName: session.connection.name
268+
)
269+
await restoreSchemaAndDatabase(
270+
on: driver,
271+
savedSchema: activeSessions[sessionId]?.currentSchema,
272+
savedDatabase: activeSessions[sessionId]?.currentDatabase
257273
)
258-
259-
if let savedSchema = activeSessions[sessionId]?.currentSchema,
260-
let schemaDriver = driver as? SchemaSwitchable {
261-
do {
262-
try await schemaDriver.switchSchema(to: savedSchema)
263-
} catch {
264-
Self.logger.warning("Failed to restore schema '\(savedSchema)' on reconnect: \(error.localizedDescription)")
265-
}
266-
}
267-
268-
// Restore database for MSSQL if session had a non-default database
269-
if let savedDatabase = activeSessions[sessionId]?.currentDatabase,
270-
let adapter = driver as? PluginDriverAdapter {
271-
do {
272-
try await adapter.switchDatabase(to: savedDatabase)
273-
} catch {
274-
Self.logger.warning("Failed to restore database '\(savedDatabase)' on reconnect: \(error.localizedDescription)")
275-
}
276-
}
277274

278275
// Update session
279276
updateSession(sessionId) { session in

TablePro/Core/Database/DatabaseManager+Sessions.swift

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -109,17 +109,10 @@ extension DatabaseManager {
109109
try await driver.connect()
110110
try Task.checkCancellation()
111111

112-
let timeoutSeconds = AppSettingsManager.shared.general.queryTimeoutSeconds
113-
do {
114-
try await driver.applyQueryTimeout(timeoutSeconds)
115-
} catch {
116-
Self.logger.warning(
117-
"Query timeout not supported for \(connection.name): \(error.localizedDescription)"
118-
)
119-
}
120-
121-
await executeStartupCommands(
122-
resolvedConnection.startupCommands, on: driver, connectionName: connection.name
112+
await applyTimeoutAndStartupCommands(
113+
on: driver,
114+
startupCommands: resolvedConnection.startupCommands,
115+
connectionName: connection.name
123116
)
124117

125118
if let schemaDriver = driver as? SchemaSwitchable {

0 commit comments

Comments
 (0)