@@ -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
0 commit comments