Skip to content

Commit 227cd4a

Browse files
committed
fix: address review issues - skip double fetch, restore stale cleanup, fix error path
1 parent d9e4c77 commit 227cd4a

4 files changed

Lines changed: 29 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2121

2222
### Fixed
2323

24+
- Create Database dialog showing MySQL charset/collation options for all database types; now shows database-specific options (encoding/LC_COLLATE for PostgreSQL, hidden for Redis/etcd)
2425
- SSH Tunnel not working with `~/.ssh/config` profiles (#672): added `Include` directive support, SSH token expansion (`%d`, `%h`, `%u`, `%r`), multi-word `Host` filtering, and detailed handshake error messages
2526

2627
## [0.30.1] - 2026-04-10

TablePro/Views/Main/Extensions/MainContentCoordinator+Navigation.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ extension MainContentCoordinator {
423423
await refreshTables()
424424
} catch {
425425
toolbarState.databaseName = previousDatabase
426-
await refreshTables()
426+
sidebarLoadingState = .error(error.localizedDescription)
427427

428428
navigationLogger.error("Failed to switch database: \(error.localizedDescription, privacy: .public)")
429429
AlertHelper.showErrorSheet(

TablePro/Views/Main/MainContentCommandActions.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,9 @@ final class MainContentCommandActions {
713713
if let driver = DatabaseManager.shared.driver(for: self.connection.id) {
714714
coordinator?.toolbarState.databaseVersion = driver.serverVersion
715715
}
716-
await coordinator?.refreshTables()
716+
if coordinator?.sidebarLoadingState != .loading {
717+
await coordinator?.refreshTables()
718+
}
717719
coordinator?.initRedisKeyTreeIfNeeded()
718720
}
719721
}

TablePro/Views/Main/MainContentCoordinator.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,30 @@ final class MainContentCoordinator {
365365
DatabaseManager.shared.updateSession(connectionId) { $0.tables = tables }
366366
let currentDb = DatabaseManager.shared.session(for: connectionId)?.activeDatabase
367367
await schemaProvider.resetForDatabase(currentDb, tables: tables, driver: driver)
368+
369+
// Clean up stale selections and pending operations for tables that no longer exist
370+
if let vm = sidebarViewModel {
371+
let validNames = Set(tables.map(\.name))
372+
let staleSelections = vm.selectedTables.filter { !validNames.contains($0.name) }
373+
if !staleSelections.isEmpty {
374+
vm.selectedTables.subtract(staleSelections)
375+
}
376+
let stalePendingDeletes = vm.pendingDeletes.subtracting(validNames)
377+
if !stalePendingDeletes.isEmpty {
378+
vm.pendingDeletes.subtract(stalePendingDeletes)
379+
for name in stalePendingDeletes {
380+
vm.tableOperationOptions.removeValue(forKey: name)
381+
}
382+
}
383+
let stalePendingTruncates = vm.pendingTruncates.subtracting(validNames)
384+
if !stalePendingTruncates.isEmpty {
385+
vm.pendingTruncates.subtract(stalePendingTruncates)
386+
for name in stalePendingTruncates {
387+
vm.tableOperationOptions.removeValue(forKey: name)
388+
}
389+
}
390+
}
391+
368392
sidebarLoadingState = .loaded
369393
} catch {
370394
sidebarLoadingState = .error(error.localizedDescription)

0 commit comments

Comments
 (0)