github TableProApp/TablePro v0.17.0

one month ago

Added

  • DuckDB database support — connect to .duckdb files, query CSV/Parquet/JSON files via SQL, schema navigation, and DuckDB extension management
  • MongoDB configurable auth database (authSource) — authenticate against any database instead of hardcoded admin

Fixed

  • MongoDB Read Preference, Write Concern, and Redis Database not persisted across app restarts
  • Result truncation at 100K rows now reported to UI via PluginQueryResult.isTruncated instead of being silently discarded
  • DELETE and UPDATE queries using all columns in WHERE clause instead of just the primary key for PostgreSQL, Redshift, MSSQL, and ClickHouse
  • SSL/TLS always being enabled for MongoDB, Redis, and ClickHouse connections due to case mismatch in SSL mode string comparison (#249)
  • Redis sidebar click showing data briefly then going empty due to double-navigation race condition (#251)
  • MongoDB showing "Invalid database name: ''" when connecting without a database name

Changed

  • Namespaced disabledPlugins UserDefaults key to com.TablePro.disabledPlugins with automatic migration
  • Removed unused plugin capability types (sqlDialect, aiProvider, cellRenderer, sidebarPanel)
  • SQLite driver extracted from built-in bundle to downloadable plugin, reducing app size
  • Unified error formatting across all database drivers via default PluginDriverError.errorDescription, removing 10 per-driver implementations
  • Standardized async bridging: 5 queue-based drivers (MySQL, PostgreSQL, MongoDB, Redis, MSSQL) now use shared pluginDispatchAsync helper
  • Added localization to remaining driver error messages (MySQL, PostgreSQL, ClickHouse, Oracle, Redis, MongoDB)
  • NoSQL query building moved from Core to MongoDB/Redis plugins via optional PluginDatabaseDriver protocol methods
  • Standardized parameter binding across all database drivers with improved default escaping (type-aware numeric handling, NUL byte stripping, NULL literal support)

Added

  • Open SQLite database files directly from Finder by double-clicking .sqlite, .sqlite3, .db3, .s3db, .sl3, and .sqlitedb files (#262)
  • Export plugin options (CSV, XLSX, JSON, SQL, MQL) now persist across app restarts
  • Plugins can declare settings views rendered in Settings > Plugins
  • True prepared statements for MSSQL (sp_executesql) and ClickHouse (HTTP query parameters), eliminating string interpolation for parameterized queries
  • 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
  • PluginDriverError protocol in TableProPluginKit for structured error reporting from driver plugins, with richer connection error messages showing error codes and SQL states
  • pluginDispatchAsync concurrency helper in TableProPluginKit for standardized async bridging in plugins
  • Shared PluginRowLimits constant in TableProPluginKit with 100K row default, enforced across all 8 driver plugins (ClickHouse, MSSQL, Oracle previously had no cap)
  • driverVariant(for:) method on DriverPlugin protocol for dynamic multi-type plugin dispatch, replacing hardcoded variant mapping
  • 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
  • Preview tabs: single-click opens a temporary preview tab, double-click or editing promotes it to a permanent tab
  • Import plugin system: SQL import extracted into a .tableplugin bundle, matching the export plugin architecture
  • ImportFormatPlugin protocol in TableProPluginKit for building custom import format plugins
  • SQLImportPlugin as the first import format plugin (SQL files and .gz compressed SQL)
  • Oracle and ClickHouse shipped as downloadable plugins, reducing app bundle size for most users
  • Plugin install prompt when connecting to a database whose driver plugin is not installed
  • databaseTypeIds field on registry plugins for mapping registry entries to database types
  • build-plugin.sh script and build-plugin.yml CI workflow for building standalone plugin releases

Don't miss a new TablePro release

NewReleases is sending notifications on new releases.