Repository navigation
Releases
v0.9.5 - Service Pack 1
What's New in v0.9.5 SP1
Keboola Integration (New)
Full end-to-end integration with the Keboola data platform for cloud
transformation pipelines. Upload a raw CSV, run a BigQuery or Snowflake
transformation, and download the cleaned result — all from within the app.
Pipeline flow
- Upload raw CSV to Keboola Storage, automatically replacing any existing
table with the same display name (no manual cleanup between runs). - Transform — creates or updates the transformation config in Keboola
(BigQuery and Snowflake supported; DuckDB planned). - Trigger the transformation job via the Queue API.
- Wait for completion with configurable timeout (default 300s).
- Download the cleaned output table as CSV into a configurable directory.
Pipeline cancellation
- Cancel button in the runner dialog. Stops within one poll cycle (~2s).
- Sends a server-side kill to the Queue API so the Keboola job doesn't
continue running after cancellation. - Correctly handled during any step (upload, transform, trigger, wait).
Editor bridge
- SQL transformations are edited in the studio's main editor (full syntax
highlighting, autocomplete, find/replace). - A magic
keboola://<profile>/sqlURI routes Ctrl+S back to the profile
instead of a file on disk.
Profile management
- Multiple profiles (one per dataset or engine) stored as JSON in
~/.config/sql-schema-studio/. - API tokens stored in the system keyring, never in JSON.
Schema Cache
A new in-memory cache for table structures eliminates redundant
information_schema.columns queries.
- TTL-based expiry (default 5 minutes) — self-heals if a change happens
outside the app. - DDL invalidation —
CREATE/ALTER/DROP/TRUNCATE/RENAMEclears
the cache immediately.INSERT/UPDATE/DELETEdo not, since table
structure is unchanged. - Observable behavior — cache hit/miss logged at DEBUG level for tuning.
Query History Improvements
- Category filter — All / SELECT / INSERT / UPDATE / DELETE / DDL / Other.
- Refresh Entry — re-save an old query to the database if it's been
pushed out of the default window. - Robust Load — loading a query no longer fails for entries outside the
default 50-entry window; all 1000 most recent are visible and loadable. - Clear History now asks for confirmation.
Theme Mode Split
Editor and terminal color schemes now have independent light/dark modes.
- Editor theme mode — Auto / Light / Dark. Filters the editor color
scheme dropdown to matching variants. - Terminal theme mode — Auto / Light / Dark. Completely independent of
the editor, so you can have a dark editor for code readability and a light
terminal for daylight output. - Auto follows the system
gtk-application-prefer-dark-themesetting at
dialog-open time.
Better Table Preview
Double-clicking a table in the browser now mirrors DBeaver's behavior:
- No auto-execution — the preview query is inserted into the editor but
not run. Press F5 to execute. - Reuses empty tabs — if the active tab is empty, the preview replaces
its content. Otherwise a new tab opens. - Status bar hint — "Preview for schema.table loaded. Press F5 to run."
Aligned Results Tables
Query result tables now use symmetric cell padding, so the │ separators
line up perfectly under monospace fonts. Long values are truncated with an
ellipsis at 40 characters to keep the layout intact.
Also added format_data_type() — a static helper that shortens verbose
PostgreSQL type names for display:
character varying(50)→varchar(50)timestamp without time zone→timestampnumeric(10, 2)→numeric(10,2)
Download Filename Fix
Keboola's export_to_file names the downloaded file after the table, but
whether it includes a .csv suffix depends on the API version. The
downloader now tries four glob patterns in order and renames the file to
.csv if needed, so the result is immediately usable by file managers,
Excel, and pandas.
Log Tab Fix
The Log tab in the results panel was empty because LogHandler.emit()
called a _log() method that had been dropped, and the handler was attached
to the root logger (whose level is WARNING) instead of the application
logger. Both are fixed — the Log tab now shows all application logs
(connection, cache miss/hit, preview loads, query execution) in real time.
Bug Fixes
Connection Dialog
- UnboundLocalError on non-SSH failure — testing a non-SSH connection
that fails referencedtunnelin the except block before it was assigned.
Movedtunnel = Nonebefore the try and used afinallyclause.
Python Hook Executor
load_hookalways raised ValueError — the raise statement was outside
the validation if-block. Moved it into the failure path so valid hooks
return their instance properly.
Query Executor
- Missing async wrapper —
DatabaseConnector.execute()was called by
QueryExecutorbut never defined. Added an async wrapper that runs the
blockingexecute_sync()in a thread pool executor.
Settings
- State leak via shallow copy —
_load()usedDEFAULTS.copy()(a
shallow copy) before passing to_deep_merge(), which writes into nested
dicts. This permanently mutatedDEFAULTS['editor']['tab_width']if any
loaded settings file had a different value. Replaced with
copy.deepcopy(DEFAULTS).
Schema Designer
- Undo/redo action loss —
_get_current_state()did not preserve the
action name, so redo always logged "Redo: unknown". The action name is now
carried across the stack swap.
Editor
- New tabs ignored user color scheme —
_setup_sql_language()
hardcoded a fallback scheme list and always picked "classic" first,
causing a visible flicker before_apply_settings_to_tab()applied the
user's choice. Now reads from Settings directly.
Browser
REFRESH_TRIGGER_COMMANDSincluded DML — a 1000-row bulk import
would trigger 1000 browser refreshes. Removed the constant; only DDL
triggers a refresh (which it already did correctly).
Actions
_on_copycrash on missing focus — added guard forNonefocus
widgets.
Tests
The test suite grew from 71 to 212 unit tests, all passing:
| Suite | Tests |
|---|---|
| Connection dialog | 5 |
| DB connector | 16 |
| Models | 12 |
| Query executor | 3 |
| Keboola (client, profiles) | 20 |
| Keboola pipeline | 14 |
| Schema cache | 19 |
| Schema parser | 33 |
| Settings | 14 |
| Query history | 36 |
| DataBridge (Python ↔ Perl) | 16 |
| Results panel formatting | 20 |
| Total | 212 |
The new test_settings suite caught the DEFAULTS.copy() state leak.
The new test_schema_parser suite verified the parser handles comments,
CHECK constraints, composite keys, schema-qualified tables, and real-world
schemas without silently dropping columns or FKs.
Documentation
CONTRIBUTING.md,ROADMAP.md, andREADME.mdupdated for v0.9.5.- Fixed RGB tuple corruption from the version-bump script (
(0.3, 0.5, 0.9)was being mangled into(0.3, 0.5, 0.9.5)inSCHEMA_COLORS).
Deferred to v0.9.9 (SP2)
- FK Editor dialog (direction, ON DELETE / ON UPDATE rules)
- Bidirectional FK arrows in the schema designer
- Lazy loading in the database browser
- Migration generator (up/down SQL diffs)
- Schema comparison (live DB vs designer)
- pg_dump / GraphQL export
Upgrading from v0.9.5
No database migration needed. Existing ~/.config/sql-schema-studio/settings.json
and keboola_profiles.json are forward-compatible. The theme_mode setting
is replaced by theme_mode_editor and theme_mode_terminal; the old value
is ignored and both default to "auto".
What's Changed
- fix(connection): resolve UnboundLocalError in test connection by @Peter-L-SVK
- fix(hooks): load_hook always raised ValueError by @Peter-L-SVK
- feat(core): add async execute() wrapper to DatabaseConnector by @Peter-L-SVK
- fix(keboola): align client import between hook and config dialog by @Peter-L-SVK
- feat(keboola): phase 1 — client, profiles, engines by @Peter-L-SVK
- feat(keboola): phase 2 — transformation pipeline + hook integration by @Peter-L-SVK
- feat(keboola): phase 3 — UI integration by @Peter-L-SVK
- fix(keboola): resolve five API integration bugs by @Peter-L-SVK
- feat(browser): add schema cache and safer table preview by @Peter-L-SVK
- fix(results): align table columns, shorten types, fix Log tab by @Peter-L-SVK
- test(core): add SchemaCache unit tests by @Peter-L-SVK
- test(core): add SchemaParser unit tests by @Peter-L-SVK
- test(utils): add Settings unit tests by @Peter-L-SVK
- test(core): add QueryHistory unit tests by @Peter-L-SVK
- test: add DataBridge and ResultsPanel.format_data_type tests by @Peter-L-SVK
- fix(utils): use deepcopy of DEFAULTS in Settings._load by @Peter-L-SVK
- fix(schema_designer): preserve action name through undo/redo by @Peter-L-SVK
- chore(config): remove unused REFRESH_TRIGGER_COMMANDS by @Peter-L-SVK
- fix(editor): new tabs respect user's color scheme by @Peter-L-SVK
- feat(preferences): split theme mode into editor and terminal by @Peter-L-SVK
- fix(query_history): robust load, category filter, refresh entry by @Peter-L-SVK
- feat(keboola): add pipeline cancellation by @Peter-L-SVK
- fix(keboola): delete existing table before upload by @Peter-L-SVK
- fix(keboola): ensure downloaded CSV has .csv extension by @Peter-L-SVK
Full Changelog: https://github.com/Peter-L-...
v0.9.1
What's New in v0.9.1 hotfix
Worker Pool Stability (Critical Fix)
Synthetic data generator worker crashes no longer poison the entire process pool.
Previously, unhandled exceptions in _generate_chunk (connection failures, faker
import errors, bad presets) would kill the spawned worker, making
ProcessPoolExecutor refuse all further work with "A child process terminated
abruptly, the process pool is not usable anymore."
- Wrapped
_generate_chunkbody in try/except — returns 0 on error instead of
crashing the worker - Added
_reset_pool()to worker_pool.py to recreate a broken pool - Multi-CPU path now catches
BrokenProcessPooland retries once with a fresh pool
Packaging Overhaul
RPM and DEB packages are now more robust and user-friendly:
Single Source of Truth — All Python dependencies are managed exclusively
through pyproject.toml. No more duplicate requirements in packaging scripts
or generated requirements.txt files.
Smart Dependency Installer — New sql-schema-studio-install-deps helper
script guides users through installing Python dependencies with their preferred
method:
pipx(recommended — isolated environment)pip --user(user-only installation)- System-wide with appropriate flags (Ubuntu 24.04+ PEP 668 support)
Auto-Detection — Launcher now checks for missing packages and provides clear
installation instructions instead of failing with cryptic import errors.
Package→Import Mapping — Properly handles packages with different import names
(PyGObject → gi, pycairo → cairo, scikit-learn → sklearn).
Robust File Installation — Icon and desktop file installation with fallback
SVG placeholders. Fixed ModuleNotFoundError by properly setting PYTHONPATH.
Documentation
README updated with simplified installation workflow:
- Unified pattern for both RPM and DEB packages
sql-schema-studio-install-depsintegrated into post-install workflow- Removed scattered pip install commands
- Updated troubleshooting section for new workflow
Upgrading from v0.9.0
-
Remove old version:
# RPM sudo dnf reinstall ./sql-schema-studio-0.9* # DEB sudo dpkg -r sql-schema-studio
-
Install v0.9.1 using the instructions in README
-
Install Python dependencies:
sql-schema-studio-install-deps
-
Launch:
sql-schema-studio
No database migration needed.
What's Changed
- feat(schema): add visual schema designer with relationship editor by @Peter-L-SVK in #5
- v0.4.0 — Schema Designer Import, Preferences & Persistence by @Peter-L-SVK in #6
- v0.5.0 — Cleanup, Multi-CPU Worker Pool, Hook System & Query History by @Peter-L-SVK in #8
- v0.6.0 — AI Index Advisor, Hook Execution & Query Categorization by @Peter-L-SVK in #10
- docs: add WSL2 installation instructions for Windows by @Peter-L-SVK in #11
- v0.7.0 — Data Import/Export, Schema Designer Enhancements & File Operations by @Peter-L-SVK in #13
- Feat/v0.8.0 by @Peter-L-SVK in #14
- v0.8.0 — Hooks, Optimization & AI/ML Foundation by @Peter-L-SVK in #15
- docs: add screenshots up to date by @Peter-L-SVK in #16
- docs: roadmap: v1.0.0 feats adition by @Peter-L-SVK in #17
- feat: SQL Schema Studio v0.9.0 - Multi-tab Editor, Hooks, Schema Designer Pro by @Peter-L-SVK in #18
- Revert "feat: SQL Schema Studio v0.9.0 - Multi-tab Editor, Hooks, Schema Designer Pro" by @Peter-L-SVK in #19
- feat: SQL Schema Studio v0.9.0 - Multi-tab Editor, Hooks, Schema Designer Pro by @Peter-L-SVK in #21
- Feat: SQL Schema Studio v0.9.0 - Multi-tab Editor, Hooks, Schema Designer Pro by @Peter-L-SVK in #22
- feat: v0.9.0 — Multi-tab editor, schema designer pro, analytics engine, and SSH tunnel by @Peter-L-SVK in #23
- fix(ci): add contents:write permission to RPM and DEB release workflows by @Peter-L-SVK in #25
- fix(ci): install pyproject.toml runtime dependencies before packaging by @Peter-L-SVK in #27
- fix(ci): clean up dependencies by @Peter-L-SVK in #29
- fix(packaging): resolve RPM installation and module import issues by @Peter-L-SVK in #30
- docs(roadmap, readme): correction of files to reflect current state of app by @Peter-L-SVK in #31
- hotfix(hooks): prevent worker crashes from poisoning the process pool by @Peter-L-SVK in #32
Full Changelog: v0.9.0i...v0.9.1
v0.9.0
What's New in v0.9.0
Multi-Tab SQL Editor
The single editor has been replaced with a full multi-tab editing experience:
- Tab management: Ctrl+T opens a new tab, Ctrl+W closes the current tab. Tabs can
be reordered by dragging within the notebook. - Unsaved changes: modified tabs show a bullet indicator (•) and trigger a
confirmation dialog on window close or File > Quit. - Session restore: open tabs and their content are restored on next startup so your
workspace survives application restarts. - SQL autocomplete: a custom popover-based autocompleter suggests keywords, table
names, and column names as you type. Can be toggled on/off in Preferences. - Find and Replace: Ctrl+F reveals the search bar with case-sensitive toggle (Aa),
whole-word toggle (ab|), previous/next navigation (Shift+F3 / F3), single replace,
and Replace All. All search operations now respect both toggles consistently.
Schema Designer Pro
The visual schema designer received a major upgrade with professional drawing capabilities:
Drawing Engine
- Parallel path routing: FK relationship lines are computed asynchronously across
multiple CPU cores using the worker pool's ProcessPoolExecutor. Python's GIL is
bypassed so the UI remains fully responsive during routing. Results stream back via
GLib.idle_add for smooth canvas updates. - Line jumps + waypoints: lines intelligently route around other relationships with
clean arc jumps where lines cross. Waypoints for each FK pair are computed concurrently. - Bidirectional arrows: directional arrows show relationship flow. Click any
relationship line to toggle its direction — cardinality labels swap automatically
(1 at source, N at target). - Zoom and Pan: scroll to zoom, drag to pan, with theme-aware background grid.
Interaction & Editing
- Undo/Redo: full action stack covering table moves, FK creation/deletion, color
changes, and column edits. Standard Ctrl+Z / Ctrl+Shift+Z shortcuts. - Popover color picker: right-click any table header to choose from preset color
schemes or pick a custom color. Active table has a distinct highlight border. - Column editor dialog: add, remove, and modify columns directly from the canvas.
Analytics Engine & AI Tools
A new Polars-based analytics subsystem powers both AI-assisted analysis and interactive
data exploration:
-
9 AI analyzers: schema quality scoring, index recommendation, query plan analysis,
table growth prediction, dead tuple monitoring, and more — all running on Polars
DataFrames for performance. -
Right-click analytics menu: right-click any table or view in the database browser
to run statistical analysis:Function Description Percentile Bands p10, p25, p50, p75, p90, IQR distribution summary Trend Forecast Linear regression with slope, R-squared, next 5 values Anomaly Detection IQR-based outlier detection (1.5x rule) Moving Average 7-period rolling mean, last 10 values Exponential Smoothing ETS with span=12, last 10 values Correlation Matrix Pearson correlation across all numeric columns Smart column detection automatically skips surrogate keys (id, serial, *_id) and
prefers NUMERIC/REAL types over INTEGER. NULL values are handled gracefully across
all functions.
SSH Tunnel
Full SSH tunnel implementation replaces the v0.8 stub. Connect to remote PostgreSQL
servers through SSH with password or key-based authentication. A single tunnel
connection is reused across queries to minimize overhead.
Built-in Terminal
A VTE-based terminal is embedded in the application with customizable colors and
fonts. Correct spawn arguments support bash, zsh, and fish shells out of the box.
The vte291-gtk4 package is now a required dependency.
New Hooks
- Synthetic Data Generator: generates configurable test datasets with multiple
presets (e-commerce, users, logs). Multi-CPU support for generating
millions of rows across worker processes. - Keboola Normalizer: cloud integration hook that normalizes schemas for the
Keboola data platform, handling column naming conventions and type mapping.
Code Quality & CI/CD
- Black formatting applied project-wide for consistent code style.
- mypy and flake8 checks passing with project configuration in pyproject.toml.
- CI/CD pipeline with GitHub Actions: PR checks, RPM build (Fedora/RHEL),
and DEB build (Debian/Ubuntu).
Refactoring
The codebase has been reorganized into modular packages for maintainability:
results.pysplit intosrc/ui/results/with a separate themes module for
Unicode box-drawing table formatting.window.pysplit intosrc/ui/window/with mixins for browser panel, status
bar, and menu-building concerns.- Editor tabs extracted to
src/ui/editor/with separateeditor_tabs.py
container andeditor_tab.pyindividual tab classes. - Schema designer extracted to
src/ui/schema_designer/with decomposed mixins
for FK drawing, path routing, undo/redo, and interaction.
Preferences
confirm_closepreference now wired to actual close behavior — disable to skip
the unsaved changes dialog.- Autocomplete toggle added to the Preferences dialog under the Editor section.
Bug Fixes
Find and Replace
- Whole-word toggle now respected during navigation: when whole-word matching
was enabled, the navigation pass (F3 / Shift+F3) used GTK's built-in search
which only filtered by case sensitivity, ignoring word boundaries entirely.
The cursor would jump to partial matches (e.g. "ordering" when searching
"order") while only the substring was highlighted, creating visual inconsistency.
Navigation is now backed by the same\b<word>\bregex used for highlighting. - Whole-word toggle now respected during Replace All: the replacement pass
previously substituted partial matches regardless of the toggle. It now wraps
the pattern with\bboundaries when whole-word is active. - Debounce timer warnings eliminated: "Source ID was not found when attempting
to remove it" warnings no longer appear in terminal output. The debounce ID is
now consumed inside the timeout callback and cleared after cancellation,
preventing attempts to remove already-fired GLib source IDs.
Database Browser
- GTK4 popover lifecycle: eliminated "Broken accounting of active state"
warnings and phantom input grabs by claiming event sequences via
Gtk.EventSequenceState.CLAIMED after popup(). - Popover dismissal: added set_autohide(True) so clicking outside the
context menu dismisses it cleanly, and removed unparent() calls that
corrupted GTK4's internal widget tree during teardown. - Lambda late-binding: replaced nested-lambda closure chain with plain
Python button attributes to prevent wrong func_id dispatch across the
GLib.idle_add C extension boundary. - psycopg2 parameter parser crash: double-escaped percent signs in
NOT LIKE '%%\_id'so the LIKE pattern reaches PostgreSQL correctly instead
of being misinterpreted as a parameter placeholder. - Gesture scoping: left-click gesture now bound to button 1 only and
right-click gesture bound to button 3. Previously the left-click gesture
was incorrectly firing on right-clicks as well. - Defensive cursor handling: guard against zero-width or None cursor rows
before indexing, preventing IndexError on malformed query results.
Schema Designer
- Memory leak fixed: worker pool processes are properly cleaned up after
each routing batch instead of accumulating across redraws. - Crash fixes: reopening the designer after a file drop, working with
empty canvases, and FK selection when tables overlap all no longer crash. - Arrowhead angles corrected for curve and orthogonal line styles so
arrowheads always point in the visually correct direction. - Cardinality labels correctly placed with 1 at the FK source and N at
the target, matching FK semantics.
Data Safety
- Autocommit:
db_connector.execute_syncnow setsconn.autocommit = True
to prevent implicit transaction blocks from holding locks.
Upgrading from v0.8.0
No database migration needed. The vte291-gtk4 and paramiko packages are new
dependencies. Settings and hook results in ~/.config/sql-schema-studio/ are
forward-compatible.
What's Changed
- feat(schema): add visual schema designer with relationship editor by @Peter-L-SVK in #5
- v0.4.0 — Schema Designer Import, Preferences & Persistence by @Peter-L-SVK in #6
- v0.5.0 — Cleanup, Multi-CPU Worker Pool, Hook System & Query History by @Peter-L-SVK in #8
- v0.6.0 — AI Index Advisor, Hook Execution & Query Categorization by @Peter-L-SVK in #10
- docs: add WSL2 installation instructions for Windows by @Peter-L-SVK in #11
- v0.7.0 — Data Import/Export, Schema Designer Enhancements & File Operations by @Peter-L-SVK in #13
- Feat/v0.8.0 by @Peter-L-SVK in #14
- v0.8.0 — Hooks, Optimization & AI/ML Foundation by @Peter-L-SVK in #15
- docs: add screenshots up to date by @Peter-L-SVK in h...
v0.8.0
What's New in v0.8.0
Hook System Complete
Three production-ready hooks now ship with the application:
Auto-Vacuum Advisor — Analyzes table bloat from pg_stat_all_tables, calculates dead
tuple ratios, and recommends VACUUM operations with priority levels (CRITICAL >50%,
HIGH >20%, MEDIUM >10%, LOW >5%). Includes ML-based growth prediction with scikit-learn.
Schema Anomaly Detector — Runs 9 detection rules against your database: missing
primary keys, foreign key columns without indexes, nullable FK columns, tables without
indexes, VARCHAR without length limits, tables without comments, and more. Generates
specific SQL fixes for each issue.
PostgreSQL Log Analyzer (Perl) — Parses PostgreSQL log files using three methods:
remote SQL via pg_read_file (if pg_monitor role granted), local CSV, and local text.
Categorizes errors and provides fix suggestions.
JSON Export
Hook results are automatically saved with timestamps. The "Export All to JSON" button
combines all saved results into a single export file. Results dialog now shows error
samples, categories, and supports copy-to-clipboard.
Performance
Schema designer FK lookup optimized from O(relationships × tables) to O(relationships)
using hash map indexing.
SSH Tunnel Foundation
SSH tunnel support stub and paramiko dependency added. Full implementation planned
for v0.9.0. Currently the application connects via direct PostgreSQL connection.
Packaging
- RPM and DEB build scripts included (
scripts/packaging/) - Desktop launcher file (
.desktop) ready - Dependencies moved to
pyproject.toml
Upgrading from v0.7.0
No database migration needed. Hook results are stored in a new directory:
~/.config/sql-schema-studio/hook_results/
v0.7.0
What's New in v0.7.0
Schema Designer Enhancements
- Three FK line styles: straight, S-curve, and orthogonal with toggle buttons
- Arrow heads showing FK direction with 1:N cardinality labels
- Column-level connection points for precise foreign key targeting
- Dynamic scrollbars that auto-adjust to table positions
- Grid lines between columns for better readability
- Double-click to delete relationships
- Larger table dimensions for easier column targeting
Data Import/Export
- Export query results to CSV with column headers
- Export query results to JSON as array of objects
- Import CSV files with preview dialog showing columns and row count
- Import JSON files with preview dialog
- Auto-creates destination table if it does not exist
- Batch insert for performance on large datasets
File Operations
- Open SQL files (.sql, .psql) into editor (Ctrl+O)
- Save editor content to file (Ctrl+S)
- Save As with file dialog (Ctrl+Shift+S)
Keyboard Shortcuts
- Edit menu: Undo (Ctrl+Z), Redo (Ctrl+Y), Cut (Ctrl+X), Copy (Ctrl+C), Paste (Ctrl+V)
- GTK4 auto-displays shortcuts in menu labels
Fixes
- autocommit=True for immediate DDL execution (CREATE TABLE now works correctly)
- Browser auto-refresh after DDL/DML statements
- Status bar and toolbar properly updated on disconnect
- PRIMARY KEY extraction from CREATE TABLE body during SQL import
- Mypy type annotations fixed across codebase
Upgrading from v0.6.0
No database migration needed. Settings file is backward compatible.
v0.6.0
What's New in v0.6.0
AI Index Advisor
- Analyzes database tables and recommends missing indexes
- Checks foreign key columns, date columns, and categorical columns
- Three priority levels: HIGH (foreign keys), MEDIUM (date/*_id), LOW (status/type)
- Generates CREATE INDEX statements ready for review and execution
- Accessible from Tools > AI Index Advisor
Hook System Execution
- Hooks can now be executed directly from the Hook Manager
- "Run Selected" button executes Python and Perl plugins
- Results displayed immediately in a dialog
- Proper error handling with descriptive messages
- Sample hooks included: Auto-Vacuum Advisor, Schema Anomaly Detector, Log Analyzer
Query History Categorization
- Each query automatically categorized by type
- Categories: SELECT, INSERT, UPDATE, DELETE, DDL, OTHER
- New Type column in Query History dialog
- Filter and search through categorized history
UI Improvements
- Delete key removes selected table in Schema Designer
- Press Enter in password field to connect
- Application icon in window title bar and about dialog
- SQLite Consortium and KDE Plasma Team added to credits
- pycairo dependency added for Kubuntu compatibility
Documentation
- Updated screenshots for all major features
- Simplified architecture section in README
- Planned features roadmap updated
Upgrading from v0.5.0
Query history database will be automatically upgraded with the new category column. No manual migration needed.
v0.5.0
What's New in v0.5.0
SQL Import Overhaul
- Replaced regex-based SQL parsing with proper
sqlparse-based parser - New
SchemaParserclass handles CREATE TABLE, ALTER TABLE FK, and inline REFERENCES - Handles quoted identifiers correctly (no more broken imports)
Multi-CPU Worker Pool
ProcessPoolExecutorinfrastructure for parallel CPU processing- Bypasses Python GIL — true multi-core analytics ready
- Global singleton with lazy initialization
- N-1 cores used to keep the UI responsive
Hook System
- Hook manager dialog shows all installed Python and Perl hooks
- Enable/disable toggle per hook
- Sample hooks included: Auto-Vacuum Advisor, Schema Anomaly Detector (Python)
- PostgreSQL Log Analyzer (Perl)
- Plugin registry auto-discovers hooks in
src/hooks/python_hooks/andsrc/hooks/perl_hooks/
Query History
- Every executed query saved to local SQLite database
- Tracks execution time, row count, and success/failure
- Search and filter through history
- Load any previous query back to the editor with one click
- Clear history option
Code Cleanup
- Removed dead code from preferences dialog
- Fixed duplicate condition check
- Cleaned up unused imports across the codebase
- Version headers bumped to 0.5.0
Upgrading from v0.4.0
Query history uses a new SQLite database. It will be created automatically on first query execution:
ls ~/.config/sql-schema-studio/query_history.dbv0.4.0
What's New in v0.4.0
Schema Designer Import
- Drag tables from database browser onto the designer canvas
- Columns load automatically from live database
- Import .sql files with CREATE TABLE and ALTER TABLE FK parsing
- Visual FK lines with 1:N notation between tables
- Right-click specific columns to create FK relationships
- Select and delete tables with automatic relationship cleanup
- Generate SQL with quoted identifiers and FK constraints
Preferences
- Editor settings dialog (Edit → Preferences)
- System font picker for the SQL editor
- Color scheme selector with all installed GtkSourceView themes
- Tab width, spaces/tabs, line numbers, highlight line options
- Settings stored in ~/.config/sql-schema-studio/settings.json
- Preferences apply immediately to the live editor
Window State Persistence
- Window size and position saved on close
- Browser panel width persisted across sessions
- Settings restored on startup
Fixes
- FK direction corrected — constraint now added to the referencing table
- SQL import handles quoted table names from pg_dump exports
- libadwaita removed from pip requirements (system package only)
- Debug output replaced with proper logging
- Code cleanup — unused imports and variables removed
Upgrading from v0.3.0
Delete your old settings file to get the new defaults:
rm ~/.config/sql-schema-studio/settings.jsonv0.3.0
What's New in v0.3.0
Schema Designer
- Visual canvas with drag-and-drop table placement
- Column editor with support for 18 PostgreSQL data types
- Primary key, nullable, and length constraints per column
- Table renaming and column add/remove
- Right-click to create foreign key relationships between tables
- Visual relationship lines with 1:N cardinality notation
- Column-level FK targeting — click the specific column to reference
- Select and delete tables with automatic relationship cleanup
- Generate SQL button produces CREATE TABLE and ALTER TABLE FK statements
- Accessible from Tools menu and toolbar button
GUI Polish
- System theme colors adapt to light, dark, and custom themes
- Accent-colored Run, Connect, and Save buttons
- Destructive-colored Stop and Delete buttons
- Fallback colors for older GTK themes
- Proper text contrast in all theme variants
v0.2.0
What's New in v0.2.0
Security
- Passwords are now stored in the system keyring (Secret Service, Keychain,
Credential Manager) instead of plain text - Connection profiles serialize without passwords via
to_dict() - Profile deletion cleans up stored credentials automatically
Logging
- All
print()calls replaced with structured logging - Centralized logger factory (
get_logger()) ensures consistent namespacing - Configurable log levels via
configure_root_logger() - Every button click, connection event, and error now produces a log entry
Configuration
- New
src/config.pymodule with frozenset constants - No more magic strings for excluded schemas, DDL/DML commands, defaults
- Parameterized
!= ALL(%s)query for schema filtering
SQL Safety
- Identifier quoting in generated DDL (schemas, tables, columns, constraints)
- Comment escaping in table comments
Threading
- Thread-safe query counter with
threading.Lock - Task cancellation on query timeout
- Proper cleanup of cancelled background tasks
UI
- Password visibility toggle (eye icon) in connection dialog
- System dependency documentation for Debian/Fedora
Code Quality
- Public properties (
is_connected,active_profile_name) replace
direct private attribute access across all modules - Updated architecture documentation in README
- All 29 tests passing