Skip to content

Commit 2835b29

Browse files
committed
Merge remote-tracking branch 'upstream/main' into recent-tables
# Conflicts: # CHANGELOG.md
2 parents 061ac89 + ad82403 commit 2835b29

109 files changed

Lines changed: 7113 additions & 5490 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99

1010
### Added
1111

12+
- Each filter row has a checkbox to turn it on or off and an Apply button to filter by just that row. The main Apply runs every active filter, and disabled filters stay in the panel for later. (#1561)
13+
- Importing connections from other apps now detects duplicates by host, port, database, and username, and lets you replace, add a copy, or skip each one before import.
14+
- Oracle connections negotiate Native Network Encryption when the server asks for it, so servers with `SQLNET.ENCRYPTION_SERVER` or `SQLNET.CRYPTO_CHECKSUM_SERVER` set to REQUIRED now connect (AES with a SHA crypto-checksum), matching what SQL Developer and DBeaver do. (#483)
15+
- Oracle connections follow listener redirects, so RAC SCAN listeners, shared server, and load-balanced setups now connect instead of failing during the handshake. (#483)
1216
- Recent section at the top of the Tables sidebar tracks the last 10 tables you opened per connection and database, in-memory for the session. Off by default, turn it on in Settings > General > Sidebar. (#1352)
1317

1418
### Changed
@@ -29,11 +33,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2933

3034
### Fixed
3135

36+
- Query result columns now follow the order in the SELECT. Adding or removing a column no longer leaves new columns stuck at the end of the grid. (#1565)
37+
- JSON file import works again. It failed to load in 0.48.0.
38+
- SQL export quotes empty or malformed values in numeric columns instead of writing them unquoted, which could produce invalid INSERT statements.
3239
- SQL Server: connections work when the login can only reach its own database, such as an Azure SQL contained user. The database is now sent during login. Previously it was switched afterward, which the server rejected with a "Login failed" error.
3340
- Custom Copy and Cut shortcuts now take effect in the SQL editor.
3441
- The Delete shortcut in the data grid now follows a custom binding.
3542
- Find Next (Cmd+G) and Find Previous (Cmd+Shift+G) now work in the editor.
3643
- Pagination buttons no longer fire their page shortcut twice.
44+
- Running a PostgreSQL script with a `DO $$ ... $$` block or a dollar-quoted function body no longer fails with an unterminated dollar-quoted string error. (#1559)
45+
- AWS IAM connections no longer ask for a password on connect or reconnect. IAM supplies the credentials, so the prompt was never needed. The same now holds for any auth mode that replaces the password, such as a Postgres password file.
46+
- Oracle connection failures show the listener's actual reason (such as an unknown service name) instead of a generic "server closed the connection" message. (#483)
3747

3848
## [0.48.0] - 2026-06-02
3949

CLAUDE.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ These govern every decision — code, architecture, tooling, and process:
1212
4. **Clean code** — self-explanatory naming, early returns over nested conditionals, small focused functions. No comments in the codebase — code must be self-documenting through clear naming and structure.
1313
5. **Root cause fixes** — don't patch symptoms. Diagnose the underlying issue, add logging to debug if needed, then fix the actual cause.
1414
6. **No hacky solutions** — no backward-compatibility shims, no temporary workarounds left in place, no duct tape. If the right fix is harder, do the right fix.
15-
7. **Testability**if a feature is testable, write tests. When tests fail, fix the source code — never adjust tests to match incorrect output.
15+
7. **Testability**every testable code change needs unit/function tests, and UI/user-flow changes should add UI automation where they run deterministically. When tests fail, fix the source code — never adjust tests to match incorrect output.
1616
8. **Maintainability** — follow existing patterns but offer refactors when they improve quality. Extract into extensions when approaching size limits. Group by domain logic.
1717
9. **Scalability** — design for the plugin system's open-ended nature. `DatabaseType` is a struct, not an enum. All switches need `default:`.
1818

@@ -52,6 +52,7 @@ swiftformat . # Format code
5252
xcodebuild -project TablePro.xcodeproj -scheme TablePro test -skipPackagePluginValidation
5353
xcodebuild -project TablePro.xcodeproj -scheme TablePro test -skipPackagePluginValidation -only-testing:TableProTests/TestClassName
5454
xcodebuild -project TablePro.xcodeproj -scheme TablePro test -skipPackagePluginValidation -only-testing:TableProTests/TestClassName/testMethodName
55+
xcodebuild -project TablePro.xcodeproj -scheme TablePro test -skipPackagePluginValidation -only-testing:TableProUITests
5556

5657
# DMG
5758
scripts/create-dmg.sh
@@ -172,8 +173,9 @@ Missing a case produces a wrong "{Language} Query" title on the first frame.
172173
| User preferences | UserDefaults | `AppSettingsStorage` / `AppSettingsManager` |
173174
| Query history | SQLite FTS5 | `QueryHistoryStorage` |
174175
| Tab state | JSON persistence | `TabPersistenceService` / `TabStateStorage` |
175-
| Filter presets | UserDefaults | `FilterSettingsStorage` |
176-
| Per-table filters | UserDefaults | `FilterSettingsStorage` (saves `appliedFilters` only) |
176+
| Filter defaults | UserDefaults | `FilterSettingsStorage` (default column/operator, panel state) |
177+
| Filter presets | UserDefaults | `FilterPresetStorage` |
178+
| Per-table filters | JSON files | `FilterSettingsStorage` (one file per connection + database + schema + table; saves the valid working set, each row's enabled flag included) |
177179
| Favorite tables | UserDefaults | `FavoriteTablesStorage` (per connection + database + schema; iCloud-synced) |
178180

179181
### Logging & Debugging
@@ -229,7 +231,7 @@ These are **non-negotiable** — never skip them:
229231
- Settings changes → `docs/customization/settings.mdx`
230232
- Database driver changes → `docs/databases/*.mdx`
231233
232-
4. **Tests**: Write tests for testable features. When tests fail, fix the source code — never adjust tests to match incorrect output. Tests define expected behavior.
234+
4. **Tests**: Every change with testable behavior must include or update unit/function tests. UI and user-flow changes should add or update `TableProUITests` UI automation where the flow runs deterministically; if it can't, note why in the PR description. When tests fail, fix the source code — never adjust tests to match incorrect output. Tests define expected behavior.
233235
234236
5. **Lint after changes**: Run `swiftlint lint --strict` to verify compliance.
235237

0 commit comments

Comments
 (0)