Skip to content

Releases

v0.9.5 - Service Pack 1

Choose a tag to compare

@Peter-L-SVK Peter-L-SVK released this 09 Oct 23:01
6d8859b

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>/sql URI 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/RENAME clears
    the cache immediately. INSERT/UPDATE/DELETE do 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-theme setting 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 → timestamp
  • numeric(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 referenced tunnel in the except block before it was assigned.
    Moved tunnel = None before the try and used a finally clause.

Python Hook Executor

  • load_hook always 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
    QueryExecutor but never defined. Added an async wrapper that runs the
    blocking execute_sync() in a thread pool executor.

Settings

  • State leak via shallow copy — _load() used DEFAULTS.copy() (a
    shallow copy) before passing to _deep_merge(), which writes into nested
    dicts. This permanently mutated DEFAULTS['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_COMMANDS included 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_copy crash on missing focus — added guard for None focus
    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, and README.md updated 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) in SCHEMA_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-...

Read more

v0.9.1

Choose a tag to compare

@Peter-L-SVK Peter-L-SVK released this 01 Jul 12:52
453faac

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_chunk body 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 BrokenProcessPool and 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-deps integrated into post-install workflow
  • Removed scattered pip install commands
  • Updated troubleshooting section for new workflow

Upgrading from v0.9.0

  1. Remove old version:

    # RPM
    sudo dnf reinstall ./sql-schema-studio-0.9*
    
    # DEB
    sudo dpkg -r sql-schema-studio
  2. Install v0.9.1 using the instructions in README

  3. Install Python dependencies:

    sql-schema-studio-install-deps
  4. 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

Choose a tag to compare

@Peter-L-SVK Peter-L-SVK released this 30 Jun 20:41
69f959f

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.py split into src/ui/results/ with a separate themes module for
    Unicode box-drawing table formatting.
  • window.py split into src/ui/window/ with mixins for browser panel, status
    bar, and menu-building concerns.
  • Editor tabs extracted to src/ui/editor/ with separate editor_tabs.py
    container and editor_tab.py individual tab classes.
  • Schema designer extracted to src/ui/schema_designer/ with decomposed mixins
    for FK drawing, path routing, undo/redo, and interaction.

Preferences

  • confirm_close preference 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>\b regex 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 \b boundaries 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_sync now sets conn.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...
Read more

v0.8.0

Choose a tag to compare

@Peter-L-SVK Peter-L-SVK released this 05 Jun 18:54
Immutable release. Only release title and notes can be modified.

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

Choose a tag to compare

@Peter-L-SVK Peter-L-SVK released this 03 Jun 14:05
Immutable release. Only release title and notes can be modified.

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

Choose a tag to compare

@Peter-L-SVK Peter-L-SVK released this 31 May 19:15
Immutable release. Only release title and notes can be modified.

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

Choose a tag to compare

@Peter-L-SVK Peter-L-SVK released this 28 May 14:33
Immutable release. Only release title and notes can be modified.

What's New in v0.5.0

SQL Import Overhaul

  • Replaced regex-based SQL parsing with proper sqlparse-based parser
  • New SchemaParser class handles CREATE TABLE, ALTER TABLE FK, and inline REFERENCES
  • Handles quoted identifiers correctly (no more broken imports)

Multi-CPU Worker Pool

  • ProcessPoolExecutor infrastructure 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/ and src/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.db

v0.4.0

Choose a tag to compare

@Peter-L-SVK Peter-L-SVK released this 27 May 12:50
Immutable release. Only release title and notes can be modified.

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.json

v0.3.0

Choose a tag to compare

@Peter-L-SVK Peter-L-SVK released this 26 May 14:27
Immutable release. Only release title and notes can be modified.

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

Choose a tag to compare

@Peter-L-SVK Peter-L-SVK released this 25 May 13:18
Immutable release. Only release title and notes can be modified.
1f900d9

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.py module 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