|
3 | 3 | <channel> |
4 | 4 | <title>TablePro</title> |
5 | 5 | <item> |
6 | | - <title>0.16.1</title> |
7 | | - <pubDate>Mon, 09 Mar 2026 16:52:20 +0000</pubDate> |
8 | | - <sparkle:version>30</sparkle:version> |
9 | | - <sparkle:shortVersionString>0.16.1</sparkle:shortVersionString> |
| 6 | + <title>0.17.0</title> |
| 7 | + <pubDate>Wed, 11 Mar 2026 05:20:22 +0000</pubDate> |
| 8 | + <sparkle:version>31</sparkle:version> |
| 9 | + <sparkle:shortVersionString>0.17.0</sparkle:shortVersionString> |
10 | 10 | <sparkle:minimumSystemVersion>14.0</sparkle:minimumSystemVersion> |
11 | | - <description><![CDATA[<body style="font-family: -apple-system, sans-serif; font-size: 13px; padding: 8px;"><h3>Fixed</h3> |
| 11 | + <description><![CDATA[<body style="font-family: -apple-system, sans-serif; font-size: 13px; padding: 8px;"><h3>Added</h3> |
12 | 12 | <ul> |
13 | | -<li>Stale filter causing repeated errors when restoring tabs after schema/database switch (#237)</li> |
14 | | -<li>Sidebar showing old tables during database/schema switch instead of loading state</li> |
15 | | -<li>Sidebar search field disappearing when no tables match filter on macOS 15 and earlier (#235)</li> |
16 | | -<li>Disabled plugin database types still appearing in connection form picker</li> |
17 | | -<li>Main window not closing before reopening welcome screen on connection failure</li> |
| 13 | +<li>DuckDB database support — connect to `.duckdb` files, query CSV/Parquet/JSON files via SQL, schema navigation, and DuckDB extension management</li> |
| 14 | +<li>MongoDB configurable auth database (`authSource`) — authenticate against any database instead of hardcoded `admin`</li> |
| 15 | +</ul> |
| 16 | +<h3>Fixed</h3> |
| 17 | +<ul> |
| 18 | +<li>MongoDB Read Preference, Write Concern, and Redis Database not persisted across app restarts</li> |
| 19 | +<li>Result truncation at 100K rows now reported to UI via `PluginQueryResult.isTruncated` instead of being silently discarded</li> |
| 20 | +<li>DELETE and UPDATE queries using all columns in WHERE clause instead of just the primary key for PostgreSQL, Redshift, MSSQL, and ClickHouse</li> |
| 21 | +<li>SSL/TLS always being enabled for MongoDB, Redis, and ClickHouse connections due to case mismatch in SSL mode string comparison (#249)</li> |
| 22 | +<li>Redis sidebar click showing data briefly then going empty due to double-navigation race condition (#251)</li> |
| 23 | +<li>MongoDB showing "Invalid database name: ''" when connecting without a database name</li> |
| 24 | +</ul> |
| 25 | +<h3>Changed</h3> |
| 26 | +<ul> |
| 27 | +<li>Namespaced `disabledPlugins` UserDefaults key to `com.TablePro.disabledPlugins` with automatic migration</li> |
| 28 | +<li>Removed unused plugin capability types (sqlDialect, aiProvider, cellRenderer, sidebarPanel)</li> |
| 29 | +<li>SQLite driver extracted from built-in bundle to downloadable plugin, reducing app size</li> |
| 30 | +<li>Unified error formatting across all database drivers via default `PluginDriverError.errorDescription`, removing 10 per-driver implementations</li> |
| 31 | +<li>Standardized async bridging: 5 queue-based drivers (MySQL, PostgreSQL, MongoDB, Redis, MSSQL) now use shared `pluginDispatchAsync` helper</li> |
| 32 | +<li>Added localization to remaining driver error messages (MySQL, PostgreSQL, ClickHouse, Oracle, Redis, MongoDB)</li> |
| 33 | +<li>NoSQL query building moved from Core to MongoDB/Redis plugins via optional `PluginDatabaseDriver` protocol methods</li> |
| 34 | +<li>Standardized parameter binding across all database drivers with improved default escaping (type-aware numeric handling, NUL byte stripping, NULL literal support)</li> |
| 35 | +</ul> |
| 36 | +<h3>Added</h3> |
| 37 | +<ul> |
| 38 | +<li>Open SQLite database files directly from Finder by double-clicking `.sqlite`, `.sqlite3`, `.db3`, `.s3db`, `.sl3`, and `.sqlitedb` files (#262)</li> |
| 39 | +<li>Export plugin options (CSV, XLSX, JSON, SQL, MQL) now persist across app restarts</li> |
| 40 | +<li>Plugins can declare settings views rendered in Settings > Plugins</li> |
| 41 | +<li>True prepared statements for MSSQL (`sp_executesql`) and ClickHouse (HTTP query parameters), eliminating string interpolation for parameterized queries</li> |
| 42 | +<li>Batch query operations for MSSQL, Oracle, and ClickHouse, eliminating N+1 query patterns for column, foreign key, and database metadata fetching; SQLite adds a batched `fetchAllForeignKeys` override within PRAGMA limitations</li> |
| 43 | +<li>`PluginDriverError` protocol in TableProPluginKit for structured error reporting from driver plugins, with richer connection error messages showing error codes and SQL states</li> |
| 44 | +<li>`pluginDispatchAsync` concurrency helper in TableProPluginKit for standardized async bridging in plugins</li> |
| 45 | +<li>Shared `PluginRowLimits` constant in TableProPluginKit with 100K row default, enforced across all 8 driver plugins (ClickHouse, MSSQL, Oracle previously had no cap)</li> |
| 46 | +<li>`driverVariant(for:)` method on `DriverPlugin` protocol for dynamic multi-type plugin dispatch, replacing hardcoded variant mapping</li> |
| 47 | +<li>Safe mode levels: per-connection setting with 6 levels (Silent, Alert, Alert Full, Safe Mode, Safe Mode Full, Read-Only) replacing the boolean read-only toggle, with confirmation dialogs and Touch ID/password authentication for stricter levels</li> |
| 48 | +<li>Preview tabs: single-click opens a temporary preview tab, double-click or editing promotes it to a permanent tab</li> |
| 49 | +<li>Import plugin system: SQL import extracted into a `.tableplugin` bundle, matching the export plugin architecture</li> |
| 50 | +<li>`ImportFormatPlugin` protocol in TableProPluginKit for building custom import format plugins</li> |
| 51 | +<li>SQLImportPlugin as the first import format plugin (SQL files and .gz compressed SQL)</li> |
| 52 | +<li>Oracle and ClickHouse shipped as downloadable plugins, reducing app bundle size for most users</li> |
| 53 | +<li>Plugin install prompt when connecting to a database whose driver plugin is not installed</li> |
| 54 | +<li>`databaseTypeIds` field on registry plugins for mapping registry entries to database types</li> |
| 55 | +<li>`build-plugin.sh` script and `build-plugin.yml` CI workflow for building standalone plugin releases</li> |
18 | 56 | </ul></body>]]></description> |
19 | | - <enclosure url="https://github.com/datlechin/TablePro/releases/download/v0.16.1/TablePro-0.16.1-arm64.zip" length="35818583" type="application/octet-stream" sparkle:edSignature="b5zP9os/ys6eWXw6RK+CNjH98IozCJ11NXgZ/E/Z0yCpy5GPc4wG2OlOWxXnxydM8OpyJ8ZOHKMff1naIhrGCQ==" sparkle:architectures="arm64"/> |
| 57 | + <enclosure url="https://github.com/datlechin/TablePro/releases/download/v0.17.0/TablePro-0.17.0-arm64.zip" length="25460981" type="application/octet-stream" sparkle:edSignature="svDu0QE+5MRTkL8rbpMQhbaGEmwbE90ObgXQDQgJm0Cjr8nsG+yZ1yFRcB4/BzdwEwyX0/YYT6DNzF25/oQeCQ==" sparkle:architectures="arm64"/> |
20 | 58 | </item> |
21 | 59 | <item> |
22 | | - <title>0.16.1</title> |
23 | | - <pubDate>Mon, 09 Mar 2026 16:52:20 +0000</pubDate> |
24 | | - <sparkle:version>30</sparkle:version> |
25 | | - <sparkle:shortVersionString>0.16.1</sparkle:shortVersionString> |
| 60 | + <title>0.17.0</title> |
| 61 | + <pubDate>Wed, 11 Mar 2026 05:20:22 +0000</pubDate> |
| 62 | + <sparkle:version>31</sparkle:version> |
| 63 | + <sparkle:shortVersionString>0.17.0</sparkle:shortVersionString> |
26 | 64 | <sparkle:minimumSystemVersion>14.0</sparkle:minimumSystemVersion> |
27 | | - <description><![CDATA[<body style="font-family: -apple-system, sans-serif; font-size: 13px; padding: 8px;"><h3>Fixed</h3> |
| 65 | + <description><![CDATA[<body style="font-family: -apple-system, sans-serif; font-size: 13px; padding: 8px;"><h3>Added</h3> |
| 66 | +<ul> |
| 67 | +<li>DuckDB database support — connect to `.duckdb` files, query CSV/Parquet/JSON files via SQL, schema navigation, and DuckDB extension management</li> |
| 68 | +<li>MongoDB configurable auth database (`authSource`) — authenticate against any database instead of hardcoded `admin`</li> |
| 69 | +</ul> |
| 70 | +<h3>Fixed</h3> |
| 71 | +<ul> |
| 72 | +<li>MongoDB Read Preference, Write Concern, and Redis Database not persisted across app restarts</li> |
| 73 | +<li>Result truncation at 100K rows now reported to UI via `PluginQueryResult.isTruncated` instead of being silently discarded</li> |
| 74 | +<li>DELETE and UPDATE queries using all columns in WHERE clause instead of just the primary key for PostgreSQL, Redshift, MSSQL, and ClickHouse</li> |
| 75 | +<li>SSL/TLS always being enabled for MongoDB, Redis, and ClickHouse connections due to case mismatch in SSL mode string comparison (#249)</li> |
| 76 | +<li>Redis sidebar click showing data briefly then going empty due to double-navigation race condition (#251)</li> |
| 77 | +<li>MongoDB showing "Invalid database name: ''" when connecting without a database name</li> |
| 78 | +</ul> |
| 79 | +<h3>Changed</h3> |
| 80 | +<ul> |
| 81 | +<li>Namespaced `disabledPlugins` UserDefaults key to `com.TablePro.disabledPlugins` with automatic migration</li> |
| 82 | +<li>Removed unused plugin capability types (sqlDialect, aiProvider, cellRenderer, sidebarPanel)</li> |
| 83 | +<li>SQLite driver extracted from built-in bundle to downloadable plugin, reducing app size</li> |
| 84 | +<li>Unified error formatting across all database drivers via default `PluginDriverError.errorDescription`, removing 10 per-driver implementations</li> |
| 85 | +<li>Standardized async bridging: 5 queue-based drivers (MySQL, PostgreSQL, MongoDB, Redis, MSSQL) now use shared `pluginDispatchAsync` helper</li> |
| 86 | +<li>Added localization to remaining driver error messages (MySQL, PostgreSQL, ClickHouse, Oracle, Redis, MongoDB)</li> |
| 87 | +<li>NoSQL query building moved from Core to MongoDB/Redis plugins via optional `PluginDatabaseDriver` protocol methods</li> |
| 88 | +<li>Standardized parameter binding across all database drivers with improved default escaping (type-aware numeric handling, NUL byte stripping, NULL literal support)</li> |
| 89 | +</ul> |
| 90 | +<h3>Added</h3> |
28 | 91 | <ul> |
29 | | -<li>Stale filter causing repeated errors when restoring tabs after schema/database switch (#237)</li> |
30 | | -<li>Sidebar showing old tables during database/schema switch instead of loading state</li> |
31 | | -<li>Sidebar search field disappearing when no tables match filter on macOS 15 and earlier (#235)</li> |
32 | | -<li>Disabled plugin database types still appearing in connection form picker</li> |
33 | | -<li>Main window not closing before reopening welcome screen on connection failure</li> |
| 92 | +<li>Open SQLite database files directly from Finder by double-clicking `.sqlite`, `.sqlite3`, `.db3`, `.s3db`, `.sl3`, and `.sqlitedb` files (#262)</li> |
| 93 | +<li>Export plugin options (CSV, XLSX, JSON, SQL, MQL) now persist across app restarts</li> |
| 94 | +<li>Plugins can declare settings views rendered in Settings > Plugins</li> |
| 95 | +<li>True prepared statements for MSSQL (`sp_executesql`) and ClickHouse (HTTP query parameters), eliminating string interpolation for parameterized queries</li> |
| 96 | +<li>Batch query operations for MSSQL, Oracle, and ClickHouse, eliminating N+1 query patterns for column, foreign key, and database metadata fetching; SQLite adds a batched `fetchAllForeignKeys` override within PRAGMA limitations</li> |
| 97 | +<li>`PluginDriverError` protocol in TableProPluginKit for structured error reporting from driver plugins, with richer connection error messages showing error codes and SQL states</li> |
| 98 | +<li>`pluginDispatchAsync` concurrency helper in TableProPluginKit for standardized async bridging in plugins</li> |
| 99 | +<li>Shared `PluginRowLimits` constant in TableProPluginKit with 100K row default, enforced across all 8 driver plugins (ClickHouse, MSSQL, Oracle previously had no cap)</li> |
| 100 | +<li>`driverVariant(for:)` method on `DriverPlugin` protocol for dynamic multi-type plugin dispatch, replacing hardcoded variant mapping</li> |
| 101 | +<li>Safe mode levels: per-connection setting with 6 levels (Silent, Alert, Alert Full, Safe Mode, Safe Mode Full, Read-Only) replacing the boolean read-only toggle, with confirmation dialogs and Touch ID/password authentication for stricter levels</li> |
| 102 | +<li>Preview tabs: single-click opens a temporary preview tab, double-click or editing promotes it to a permanent tab</li> |
| 103 | +<li>Import plugin system: SQL import extracted into a `.tableplugin` bundle, matching the export plugin architecture</li> |
| 104 | +<li>`ImportFormatPlugin` protocol in TableProPluginKit for building custom import format plugins</li> |
| 105 | +<li>SQLImportPlugin as the first import format plugin (SQL files and .gz compressed SQL)</li> |
| 106 | +<li>Oracle and ClickHouse shipped as downloadable plugins, reducing app bundle size for most users</li> |
| 107 | +<li>Plugin install prompt when connecting to a database whose driver plugin is not installed</li> |
| 108 | +<li>`databaseTypeIds` field on registry plugins for mapping registry entries to database types</li> |
| 109 | +<li>`build-plugin.sh` script and `build-plugin.yml` CI workflow for building standalone plugin releases</li> |
34 | 110 | </ul></body>]]></description> |
35 | | - <enclosure url="https://github.com/datlechin/TablePro/releases/download/v0.16.1/TablePro-0.16.1-x86_64.zip" length="33499093" type="application/octet-stream" sparkle:edSignature="6YC45YB55IA2gLH97finb649p13iWzy4qfQV2IH4VMrWq+1w4pHleQPZkUAJEGIfnh8GzcasgXHal6Hj/oSfDQ==" sparkle:architectures="x86_64"/> |
| 111 | + <enclosure url="https://github.com/datlechin/TablePro/releases/download/v0.17.0/TablePro-0.17.0-x86_64.zip" length="22699103" type="application/octet-stream" sparkle:edSignature="FhP3/UeBfWnZ0UoSCTXLPlTyN+uy4m68n5MX4eEwgQJRhAqWni76M7FD57NYwu1UYY8XaXNLWhD+QCjaYWT9CQ==" sparkle:architectures="x86_64"/> |
36 | 112 | </item> |
37 | 113 | </channel> |
38 | 114 | </rss> |
0 commit comments