Skip to content

Releases

SQLShelf v1.4.1

Choose a tag to compare

@github-actions github-actions released this 28 Oct 21:35
4958e41

Changelog

[1.4.1] - 2026-10-28

Changed

  • Search results, closest first — a search lists the queries whose name holds every searched word first, then those whose description does, then those that only have it in the SQL or its tables; within each, the name and the description weigh more than the SQL. A script that repeats an alias like p_cdc no longer outranks the query named "Pedidos_CDC"
  • Relevance sort — the Sort menu offers "Relevance (closest first)" while a search is shown, and a search starts with it. A search remembers its own sort, apart from the one used to browse folders. Date and folder groups follow the best result they hold

Fixed

  • Primary buttons react to the mouse — "New query", "Copy SQL" and "Save" now lighten under the mouse and darken while pressed, in both themes

[1.4.0] - 2026-10-26

Added

  • SQL dialects — besides T-SQL, queries in PostgreSQL, MySQL, MariaDB, Oracle (PL/SQL) and BigQuery are read in their own dialect. The dialect is read from the syntax: GO lines, [brackets], DECLARE @, TOP and #temp for T-SQL; :: casts, $$ bodies, ILIKE and ON CONFLICT for PostgreSQL; backtick names, LIMIT 5, 10, AUTO_INCREMENT and ON DUPLICATE KEY for MySQL (and WITH SYSTEM VERSIONING, ENGINE=Aria or /*M! for MariaDB); FROM DUAL, ROWNUM, NVL, VARCHAR2, CONNECT BY and slash lines for Oracle; `project.dataset.table`, SAFE_CAST, STRUCT<…> and INT64 for BigQuery. Comments and strings say nothing, so -- LIMIT 5, 10 or 'GO' change no guess. A query with no clear sign is generic SQL and is read as T-SQL, as every query was before
  • Choosing a query's dialect — the edit form has a Dialect field: Automatic, which shows what the syntax reads as, each dialect, or Generic SQL. A choice is written to the metadata block as dialect: and always wins over the syntax; Automatic removes it. The block accepts the usual names (PL/SQL, SQL Server, pg, bq…) and keeps the spelling it has; a name the app does not know is left alone
  • Each dialect, read as itself — tables and columns are indexed with that dialect's parser, and statements are split by its rules: Oracle's / lines and q'[…]' strings, MySQL's DELIMITER, PostgreSQL's $$ bodies, each dialect's procedural blocks and dynamic SQL. The query diagram is drawn in the dialect the metadata names, or else the one the syntax shows
  • dialect: search operator — dialect:oracle keeps the queries read as Oracle, in the search box and in quick search; it takes the same names as the metadata block, so dialect:plsql and dialect:sqlserver work too. The search help and the empty-list hint mention it
  • Dialect in the editor and the status bar — both name the dialect the open query is read as, instead of a fixed "T-SQL", with a tooltip saying why: declared in the file header, read from the syntax (with the signs that gave it away), or none detected
  • Colours per dialect — the editor and the grid thumbnails colour each query in its dialect: # comments and "…" strings in MySQL and BigQuery, backtick names, Oracle's q'[…]' strings and each dialect's own keywords (LIMIT, RETURNING, QUALIFY, CONNECT BY…). A quoted name is drawn as a name, so [order] and `order` no longer show a keyword

Changed

  • Index rebuilt once — the index stores each query's dialect; it moves to schema version 6 and rebuilds itself the first time a folder is opened

Fixed

  • T-SQL after END or PRINT — a statement right after an END or a PRINT line was read as part of it and left out; it is now indexed and drawn in the diagram

Docs

  • docs/sql-dialects.md describes how the dialect is chosen, what each part of the app does with it, and the cases that must not regress

[1.3.0] - 2026-10-26

Added

  • Query diagram — a Diagram tab next to SQL in the details panel (Ctrl+Shift+D) draws the selected query from its text alone, without touching the database: tables grouped by schema, temp tables, CTEs and derived tables, and the result, each with the columns the query uses and what it does with them (join, where, group by, the expression of an output column). Joins show their kind on the line between the two columns, data flows are dashed, and each filter sits on its column with the short condition in the editor's syntax colours; a node counts its filters, a HAVING sits under the result and a node with more than eight columns ends in a "+N more" row. The strip shows how many tables, joins and filters there are, with Fit, zoom and the zoom level; drag to pan, Ctrl+wheel to zoom. The analysis runs in the background and the last 32 are kept, so moving through the list never waits on it. The tab you pick is remembered; Edit, Select all and Copy SQL still act on the SQL
  • Query diagram, interaction — click a node to light it and its neighbours and dim the rest (Esc or a click on the canvas clears it). Hovering explains what is drawn: a join's kind, condition and line, the flows a bundle carries, each filter of a column with its clause (and why a filter in the ON of an outer join keeps the rows of the other side), the HAVING row. Double-click a node or a column to see its text selected on the SQL tab; right-click for Go to SQL, Search in all queries (tables) and Copy name, or, on the canvas, Fit and Rearrange. Nodes and groups can be dragged, a group folds by its chevron, "+N columns" shows every column, and Rearrange puts everything back. A script with several statements gets a selector in the strip to draw one at a time, and the strip's ⋯ menu hides or shows the result. Notices say when the analysis is partial, naming the word where the parser stopped and its line (Go to line selects it), when there is dynamic SQL, and when more than 60 objects leave only the headers (with Show columns); a dismissed notice stays dismissed for that query. Above 400 KB the analysis waits for Analyze anyway. While editing, the diagram follows the text a moment after typing stops and keeps what you moved; text that reads worse half-typed keeps the last good diagram, marked outdated. Ctrl+0 fits, Ctrl+= and Ctrl+- zoom
  • Query diagram, own window — the strip's expand button opens the diagram in a window of its own ("Diagram — file.sql — SQLShelf") that follows the query selected in the main window, also while the details panel shows the SQL. Its bar names the query and its folder path, picks a statement in a script with several, and has Rearrange, Fit, zoom, Export, Go to SQL (the selected table's text, or just the SQL tab) and a ⋯ menu to show the result and the legend. A legend in the corner explains the lines and the key icon; the status bar counts what is drawn and names the selected node, its connections and its statements. The window never blocks the main one, closing it is not quitting, and its place, its size and the legend choice are remembered; Esc clears the selection, then closes it
  • Diagram export — Export PNG…, Export SVG… and Copy image, in the window's bar, the strip's ⋯ menu and the canvas's right-click menu. The image is the whole diagram, not what fits on screen, with nothing selected: PNG at twice its size, SVG without the dot grid and titled with the query's file name. The name proposed is <query>.diagram.png (or .svg) next to the query; the file is written in the background and the status bar says where it went or why it could not be saved

Internal

  • Query diagram, statement splitting — first step towards the query diagram (docs/query-diagram.md). core/sql_segments.py cuts a T-SQL script into batches at GO lines (with a count, a comment or Windows line endings) and each batch into its SELECT, INSERT, UPDATE, DELETE and MERGE statements, with exact offsets, so each one can be parsed on its own. Control flow stays out (IF … ELSE, BEGIN … END, TRY … CATCH, DECLARE, procedure and trigger headers), and so do the DML words that do not start a statement: inside strings and quoted names, CASE … ELSE … END, WITH (NOLOCK), WITH CHECK, UPDATE STATISTICS, permissions, trigger events, foreign key rules and OFFSET … FETCH. A batch the tokenizer rejects is skipped alone. Nothing changes on screen yet
  • Query diagram, graph model — core/query_graph.py reads each statement on its own and turns the script into nodes (tables, temp tables, table variables, CTEs, derived tables and APPLY results, the result of each statement) and edges (joins with their kind and condition, EXISTS/IN lookups, data flows into INSERT, UPDATE, DELETE, MERGE, SELECT … INTO and OUTPUT INTO). Each column knows its role (key, filter, written, read, output), each filter keeps its clause, its short form, whether it sits inside an OR and where it is in the text. Nodes are shared between statements, unqualified names join their qualified form, self-joins get one node per alias, and for_statement() gives one statement alone. Dynamic SQL is noted; a statement that does not parse is read leniently and marked approximate, or skipped alone. The diagram is built from the text only, never from the database. Nothing changes on screen yet
  • Query diagram, layout — core/graph_layout.py places the graph without Qt: one frame per schema, plus frames for unqualified tables, temp tables, CTEs and derived tables, and results. Frames go in layers from left to right along the data flows, with joins pointing away from the base table of each statement and cycles broken; within a layer, frames and nodes are ordered to cross less, and a frame with more than six nodes splits into columns. Joins inside a column turn into brackets on the right, flows on the left, each in its own lane; flows into a result leave each frame once; longer edges pass between nodes and never through one, and meet the row of the column they use. The same graph always gives the same picture, about 4 ms for 50 nodes. Nothing changes on screen y...
Read more

SQLShelf v1.4.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 02:11
ef57974

Changelog

[1.4.0] - 2026-10-26

Added

  • SQL dialects — besides T-SQL, queries in PostgreSQL, MySQL, MariaDB, Oracle (PL/SQL) and BigQuery are read in their own dialect. The dialect is read from the syntax: GO lines, [brackets], DECLARE @, TOP and #temp for T-SQL; :: casts, $$ bodies, ILIKE and ON CONFLICT for PostgreSQL; backtick names, LIMIT 5, 10, AUTO_INCREMENT and ON DUPLICATE KEY for MySQL (and WITH SYSTEM VERSIONING, ENGINE=Aria or /*M! for MariaDB); FROM DUAL, ROWNUM, NVL, VARCHAR2, CONNECT BY and slash lines for Oracle; `project.dataset.table`, SAFE_CAST, STRUCT<…> and INT64 for BigQuery. Comments and strings say nothing, so -- LIMIT 5, 10 or 'GO' change no guess. A query with no clear sign is generic SQL and is read as T-SQL, as every query was before
  • Choosing a query's dialect — the edit form has a Dialect field: Automatic, which shows what the syntax reads as, each dialect, or Generic SQL. A choice is written to the metadata block as dialect: and always wins over the syntax; Automatic removes it. The block accepts the usual names (PL/SQL, SQL Server, pg, bq…) and keeps the spelling it has; a name the app does not know is left alone
  • Each dialect, read as itself — tables and columns are indexed with that dialect's parser, and statements are split by its rules: Oracle's / lines and q'[…]' strings, MySQL's DELIMITER, PostgreSQL's $$ bodies, each dialect's procedural blocks and dynamic SQL. The query diagram is drawn in the dialect the metadata names, or else the one the syntax shows
  • dialect: search operator — dialect:oracle keeps the queries read as Oracle, in the search box and in quick search; it takes the same names as the metadata block, so dialect:plsql and dialect:sqlserver work too. The search help and the empty-list hint mention it
  • Dialect in the editor and the status bar — both name the dialect the open query is read as, instead of a fixed "T-SQL", with a tooltip saying why: declared in the file header, read from the syntax (with the signs that gave it away), or none detected
  • Colours per dialect — the editor and the grid thumbnails colour each query in its dialect: # comments and "…" strings in MySQL and BigQuery, backtick names, Oracle's q'[…]' strings and each dialect's own keywords (LIMIT, RETURNING, QUALIFY, CONNECT BY…). A quoted name is drawn as a name, so [order] and `order` no longer show a keyword

Changed

  • Index rebuilt once — the index stores each query's dialect; it moves to schema version 6 and rebuilds itself the first time a folder is opened

Fixed

  • T-SQL after END or PRINT — a statement right after an END or a PRINT line was read as part of it and left out; it is now indexed and drawn in the diagram

Docs

  • docs/sql-dialects.md describes how the dialect is chosen, what each part of the app does with it, and the cases that must not regress

[1.3.0] - 2026-10-26

Added

  • Query diagram — a Diagram tab next to SQL in the details panel (Ctrl+Shift+D) draws the selected query from its text alone, without touching the database: tables grouped by schema, temp tables, CTEs and derived tables, and the result, each with the columns the query uses and what it does with them (join, where, group by, the expression of an output column). Joins show their kind on the line between the two columns, data flows are dashed, and each filter sits on its column with the short condition in the editor's syntax colours; a node counts its filters, a HAVING sits under the result and a node with more than eight columns ends in a "+N more" row. The strip shows how many tables, joins and filters there are, with Fit, zoom and the zoom level; drag to pan, Ctrl+wheel to zoom. The analysis runs in the background and the last 32 are kept, so moving through the list never waits on it. The tab you pick is remembered; Edit, Select all and Copy SQL still act on the SQL
  • Query diagram, interaction — click a node to light it and its neighbours and dim the rest (Esc or a click on the canvas clears it). Hovering explains what is drawn: a join's kind, condition and line, the flows a bundle carries, each filter of a column with its clause (and why a filter in the ON of an outer join keeps the rows of the other side), the HAVING row. Double-click a node or a column to see its text selected on the SQL tab; right-click for Go to SQL, Search in all queries (tables) and Copy name, or, on the canvas, Fit and Rearrange. Nodes and groups can be dragged, a group folds by its chevron, "+N columns" shows every column, and Rearrange puts everything back. A script with several statements gets a selector in the strip to draw one at a time, and the strip's ⋯ menu hides or shows the result. Notices say when the analysis is partial, naming the word where the parser stopped and its line (Go to line selects it), when there is dynamic SQL, and when more than 60 objects leave only the headers (with Show columns); a dismissed notice stays dismissed for that query. Above 400 KB the analysis waits for Analyze anyway. While editing, the diagram follows the text a moment after typing stops and keeps what you moved; text that reads worse half-typed keeps the last good diagram, marked outdated. Ctrl+0 fits, Ctrl+= and Ctrl+- zoom
  • Query diagram, own window — the strip's expand button opens the diagram in a window of its own ("Diagram — file.sql — SQLShelf") that follows the query selected in the main window, also while the details panel shows the SQL. Its bar names the query and its folder path, picks a statement in a script with several, and has Rearrange, Fit, zoom, Export, Go to SQL (the selected table's text, or just the SQL tab) and a ⋯ menu to show the result and the legend. A legend in the corner explains the lines and the key icon; the status bar counts what is drawn and names the selected node, its connections and its statements. The window never blocks the main one, closing it is not quitting, and its place, its size and the legend choice are remembered; Esc clears the selection, then closes it
  • Diagram export — Export PNG…, Export SVG… and Copy image, in the window's bar, the strip's ⋯ menu and the canvas's right-click menu. The image is the whole diagram, not what fits on screen, with nothing selected: PNG at twice its size, SVG without the dot grid and titled with the query's file name. The name proposed is <query>.diagram.png (or .svg) next to the query; the file is written in the background and the status bar says where it went or why it could not be saved

Internal

  • Query diagram, statement splitting — first step towards the query diagram (docs/query-diagram.md). core/sql_segments.py cuts a T-SQL script into batches at GO lines (with a count, a comment or Windows line endings) and each batch into its SELECT, INSERT, UPDATE, DELETE and MERGE statements, with exact offsets, so each one can be parsed on its own. Control flow stays out (IF … ELSE, BEGIN … END, TRY … CATCH, DECLARE, procedure and trigger headers), and so do the DML words that do not start a statement: inside strings and quoted names, CASE … ELSE … END, WITH (NOLOCK), WITH CHECK, UPDATE STATISTICS, permissions, trigger events, foreign key rules and OFFSET … FETCH. A batch the tokenizer rejects is skipped alone. Nothing changes on screen yet
  • Query diagram, graph model — core/query_graph.py reads each statement on its own and turns the script into nodes (tables, temp tables, table variables, CTEs, derived tables and APPLY results, the result of each statement) and edges (joins with their kind and condition, EXISTS/IN lookups, data flows into INSERT, UPDATE, DELETE, MERGE, SELECT … INTO and OUTPUT INTO). Each column knows its role (key, filter, written, read, output), each filter keeps its clause, its short form, whether it sits inside an OR and where it is in the text. Nodes are shared between statements, unqualified names join their qualified form, self-joins get one node per alias, and for_statement() gives one statement alone. Dynamic SQL is noted; a statement that does not parse is read leniently and marked approximate, or skipped alone. The diagram is built from the text only, never from the database. Nothing changes on screen yet
  • Query diagram, layout — core/graph_layout.py places the graph without Qt: one frame per schema, plus frames for unqualified tables, temp tables, CTEs and derived tables, and results. Frames go in layers from left to right along the data flows, with joins pointing away from the base table of each statement and cycles broken; within a layer, frames and nodes are ordered to cross less, and a frame with more than six nodes splits into columns. Joins inside a column turn into brackets on the right, flows on the left, each in its own lane; flows into a result leave each frame once; longer edges pass between nodes and never through one, and meet the row of the column they use. The same graph always gives the same picture, about 4 ms for 50 nodes. Nothing changes on screen yet

Tests

  • Statement splitting: the six reference scripts of the diagram spec (a SELECT with joins, a DMV script with a temp table and a CTE, an ETL with GO and MERGE, a procedure with TRY … CATCH, IF … ELSE, a DBA file), GO forms, CRLF, CASE, every use of WITH, quoted words, action words, a rejected batch and malformed input, with every offset checked against the text
  • Query graph: the reference scripts and every case of the spec table — join labels, self-joins, APPLY, temp tables and variables, dynamic SQL, unreadable statements, unqualified columns, OUTPUT INTO, MERGE, CTEs and UNION, and the short form, clause, OR and span of each filter
  • Diagram layout: the reference scripts and random graphs of up to 50 nodes never overlap, keep each node in its frame, send flows forw...
Read more

SQLShelf v1.3.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 14:49
cb7f625

Changelog

[1.3.0] - 2026-10-26

Added

  • Query diagram — a Diagram tab next to SQL in the details panel (Ctrl+Shift+D) draws the selected query from its text alone, without touching the database: tables grouped by schema, temp tables, CTEs and derived tables, and the result, each with the columns the query uses and what it does with them (join, where, group by, the expression of an output column). Joins show their kind on the line between the two columns, data flows are dashed, and each filter sits on its column with the short condition in the editor's syntax colours; a node counts its filters, a HAVING sits under the result and a node with more than eight columns ends in a "+N more" row. The strip shows how many tables, joins and filters there are, with Fit, zoom and the zoom level; drag to pan, Ctrl+wheel to zoom. The analysis runs in the background and the last 32 are kept, so moving through the list never waits on it. The tab you pick is remembered; Edit, Select all and Copy SQL still act on the SQL
  • Query diagram, interaction — click a node to light it and its neighbours and dim the rest (Esc or a click on the canvas clears it). Hovering explains what is drawn: a join's kind, condition and line, the flows a bundle carries, each filter of a column with its clause (and why a filter in the ON of an outer join keeps the rows of the other side), the HAVING row. Double-click a node or a column to see its text selected on the SQL tab; right-click for Go to SQL, Search in all queries (tables) and Copy name, or, on the canvas, Fit and Rearrange. Nodes and groups can be dragged, a group folds by its chevron, "+N columns" shows every column, and Rearrange puts everything back. A script with several statements gets a selector in the strip to draw one at a time, and the strip's ⋯ menu hides or shows the result. Notices say when the analysis is partial, naming the word where the parser stopped and its line (Go to line selects it), when there is dynamic SQL, and when more than 60 objects leave only the headers (with Show columns); a dismissed notice stays dismissed for that query. Above 400 KB the analysis waits for Analyze anyway. While editing, the diagram follows the text a moment after typing stops and keeps what you moved; text that reads worse half-typed keeps the last good diagram, marked outdated. Ctrl+0 fits, Ctrl+= and Ctrl+- zoom
  • Query diagram, own window — the strip's expand button opens the diagram in a window of its own ("Diagram — file.sql — SQLShelf") that follows the query selected in the main window, also while the details panel shows the SQL. Its bar names the query and its folder path, picks a statement in a script with several, and has Rearrange, Fit, zoom, Export, Go to SQL (the selected table's text, or just the SQL tab) and a ⋯ menu to show the result and the legend. A legend in the corner explains the lines and the key icon; the status bar counts what is drawn and names the selected node, its connections and its statements. The window never blocks the main one, closing it is not quitting, and its place, its size and the legend choice are remembered; Esc clears the selection, then closes it
  • Diagram export — Export PNG…, Export SVG… and Copy image, in the window's bar, the strip's ⋯ menu and the canvas's right-click menu. The image is the whole diagram, not what fits on screen, with nothing selected: PNG at twice its size, SVG without the dot grid and titled with the query's file name. The name proposed is <query>.diagram.png (or .svg) next to the query; the file is written in the background and the status bar says where it went or why it could not be saved

Internal

  • Query diagram, statement splitting — first step towards the query diagram (docs/query-diagram.md). core/sql_segments.py cuts a T-SQL script into batches at GO lines (with a count, a comment or Windows line endings) and each batch into its SELECT, INSERT, UPDATE, DELETE and MERGE statements, with exact offsets, so each one can be parsed on its own. Control flow stays out (IF … ELSE, BEGIN … END, TRY … CATCH, DECLARE, procedure and trigger headers), and so do the DML words that do not start a statement: inside strings and quoted names, CASE … ELSE … END, WITH (NOLOCK), WITH CHECK, UPDATE STATISTICS, permissions, trigger events, foreign key rules and OFFSET … FETCH. A batch the tokenizer rejects is skipped alone. Nothing changes on screen yet
  • Query diagram, graph model — core/query_graph.py reads each statement on its own and turns the script into nodes (tables, temp tables, table variables, CTEs, derived tables and APPLY results, the result of each statement) and edges (joins with their kind and condition, EXISTS/IN lookups, data flows into INSERT, UPDATE, DELETE, MERGE, SELECT … INTO and OUTPUT INTO). Each column knows its role (key, filter, written, read, output), each filter keeps its clause, its short form, whether it sits inside an OR and where it is in the text. Nodes are shared between statements, unqualified names join their qualified form, self-joins get one node per alias, and for_statement() gives one statement alone. Dynamic SQL is noted; a statement that does not parse is read leniently and marked approximate, or skipped alone. The diagram is built from the text only, never from the database. Nothing changes on screen yet
  • Query diagram, layout — core/graph_layout.py places the graph without Qt: one frame per schema, plus frames for unqualified tables, temp tables, CTEs and derived tables, and results. Frames go in layers from left to right along the data flows, with joins pointing away from the base table of each statement and cycles broken; within a layer, frames and nodes are ordered to cross less, and a frame with more than six nodes splits into columns. Joins inside a column turn into brackets on the right, flows on the left, each in its own lane; flows into a result leave each frame once; longer edges pass between nodes and never through one, and meet the row of the column they use. The same graph always gives the same picture, about 4 ms for 50 nodes. Nothing changes on screen yet

Tests

  • Statement splitting: the six reference scripts of the diagram spec (a SELECT with joins, a DMV script with a temp table and a CTE, an ETL with GO and MERGE, a procedure with TRY … CATCH, IF … ELSE, a DBA file), GO forms, CRLF, CASE, every use of WITH, quoted words, action words, a rejected batch and malformed input, with every offset checked against the text
  • Query graph: the reference scripts and every case of the spec table — join labels, self-joins, APPLY, temp tables and variables, dynamic SQL, unreadable statements, unqualified columns, OUTPUT INTO, MERGE, CTEs and UNION, and the short form, clause, OR and span of each filter
  • Diagram layout: the reference scripts and random graphs of up to 50 nodes never overlap, keep each node in its frame, send flows forward and route around nodes; the layers of screen 07, joins away from the base, broken cycles, columns, brackets, bundles, anchored rows and the time limit — 1020 tests
  • Diagram tab: what each node shows (column order, roles, expressions, badges, filter counts, the colours of a condition), the eight-row limit and the HAVING row, anchors and widths, the scene of the reference scripts, fit and zoom, the Analyzing, empty and failed states, live theme and language, and the group colours; in the window, the tab draws the selected query, Ctrl+Shift+D, the remembered tab, stale results, the cache, Edit and Select all going back to the SQL, and fast navigation through 12 queries that never parses on the GUI thread — 1131 tests
  • Diagram interaction: tooltips (join kinds, bundles, outer-join filters, OR, the line limit), the large-text limit in UTF-8 bytes, regressed analyses, statement labels and lines; selection and dimming, dragging nodes and frames, folding, "+N columns", Rearrange, double-click, Esc, zoom keys and the three menus driven with real mouse and key events; the statement selector, the result toggle and the notices; in the window, Go to SQL selecting the right text (also after an emoji), Search in all queries, one statement at a time, live re-analysis while editing with the outdated mark, and Analyze anyway — 1215 tests
  • Diagram window and export: the window's title and path (cut with an ellipsis when narrow), the status bar's counts, selection and flashes, the statement selector, the bar driving the canvas, the legend's place and remembered choice, the saved geometry, Esc, theme and language without a new analysis; the export actions waiting for a diagram, the whole diagram at twice its size with nothing selected, the SVG's title and size; in the main window, a window that follows the selection, closing it without quitting, Go to SQL from it, PNG and SVG written where the user chooses, a failed or cancelled export and Copy image — 1255 tests
  • Partial analysis: where the parser stopped (the token, its line and its offsets, with LF and CRLF, in a later statement of a script, a long token cut short), the notice naming it, and Go to line selecting it in the editor; a rejected batch going to its first word — 1264 tests

[1.2.0] - 2026-10-23

Added

  • Grid view — a third way to see the list, next to Details and Content. Each query is a card with a thumbnail of the first lines of its SQL, drawn with the editor's syntax colours, plus its name, when it changed and a dot for each tag. Groups fold, the star shows on hover and on favorites, the arrow keys, Home, End and Page Up/Down move between cards and Enter opens one. The thumbnails are read in the background, so scrolling never waits on the disk; the view you pick is remembered

Changed

  • Wider search field — the search field in the address bar is wider than the navigation (Back, Forward, Up and the breadcrumb), which keeps its place at the left; both grow with ...
Read more

SQLShelf v1.2.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 00:53
94ffbf7

Changelog

[Unreleased]

[1.2.0] - 2026-10-23

Added

  • Grid view — a third way to see the list, next to Details and Content. Each query is a card with a thumbnail of the first lines of its SQL, drawn with the editor's syntax colours, plus its name, when it changed and a dot for each tag. Groups fold, the star shows on hover and on favorites, the arrow keys, Home, End and Page Up/Down move between cards and Enter opens one. The thumbnails are read in the background, so scrolling never waits on the disk; the view you pick is remembered

Changed

  • Wider search field — the search field in the address bar is wider than the navigation (Back, Forward, Up and the breadcrumb), which keeps its place at the left; both grow with the window instead of using fixed widths
  • Menu at the left of the command bar — the menu is the first item, and its button is now a hamburger (☰) with a "Menu" tooltip instead of three dots, so it reads as a menu
  • Import folder — the Open folder button (and its quick search action) is now called Import folder

[1.1.0] - 2026-10-22

Added

  • Address bar with history — Back, Forward and Up (Alt+←, Alt+→, Alt+↑) walk through what you looked at: library, folder, tag, favorites, recent or a search. Typing a search is one history step, not one per keystroke. The breadcrumb next to the arrows shows where you are and jumps back to any level; the search field says what it searches in
  • Command bar — New query, Open folder, Sort, Group and View, Quick search, a details-panel toggle (Alt+P) and a ⋯ menu that holds everything the menu bar had
  • Status bar — query and selection counts on the left; on the right, the index state, a progress bar while a folder is indexed, and how many folders are being watched
  • Remembered layout — panel widths, the details panel being shown or hidden, the sort order and the menu bar choice survive a restart

Changed

  • New theme, without qt-material — the interface now uses Qt's Fusion style with a palette and stylesheet generated from design tokens (sqlshelf/ui/tokens.py → sqlshelf/ui/theme.py). Buttons are no longer upper case or outlined in green; green is kept for selection, focus and the primary action. This is the first slice (F1) of the redesign in docs/redesign-ui.md
  • Sentence-case labels — sidebar and details-panel section titles (Browse, Folders, Tags, Tables, …) are no longer written in capitals, in all three languages
  • Editor colours and font — new syntax colours for both themes, italic comments, and Cascadia Mono 13 px (falling back to Consolas, then the system monospace font)
  • Three-panel window — sidebar, query list and details panel in one resizable row; the menu bar is hidden by default (View → Show Menu Bar brings it back) and every shortcut keeps working without it. This is the second slice (F2) of the redesign
  • Sidebar as a folder tree — All queries, Favorites and Recent, then every library folder with its subfolders (expand with the chevron; clicking a name opens it), then the most used tags with a colour dot and "All tags" for the rest. Every row shows how many queries it holds; Recent and the tags count what is inside the folder in view. Opening a folder moved to the + next to Folders. This is the third slice (F3) of the redesign
  • Browse subfolders — choosing a subfolder lists only the queries under it, and search, Recent and tags stay inside it
  • Indexing no longer opens a dialog — progress shows in the status bar and the window stays usable
  • Every library folder is watched — changes on disk are picked up in all open folders, not only the one in view
  • Query list rebuilt — a Details view with Name, Tables, Tags and Modified columns (click Name or Modified to sort; the Sort menu follows) and a Content view with the description, table chips and every tag on taller rows. Queries are grouped by date (Today, Yesterday, This week, This month, Older), by folder or not at all, from the Group menu; groups fold with a click and stay folded when the list refreshes. The star shows on hover and on the selected row, and a click on it adds or removes the favorite without changing the selection. Search terms are marked in names and tables, ignoring accents and case the way the search does. Tables and Tags give way when the list gets narrow, and an empty list explains how to search. This is the fourth slice (F4) of the redesign
  • Fuller row menu — Copy SQL, Edit metadata, Add to favorites, Open in SSMS, Copy path, Reveal in Explorer and Duplicate. Copy SQL on a query that is not open reads it in the background, and Edit metadata opens the details panel in edit mode
  • Theme switching reaches the tag chips — the tag chips in the details panel kept the old theme's colours after a dark/light switch until another query was opened
  • Details panel rebuilt — a header with the file icon, the title (two lines at most, the rest in a tooltip), the file name and a star; then Copy SQL, Edit, Open in SSMS and a ⋯ menu (Select all, Copy path, Copy folder path, Reveal in Explorer). Below, the description — or a hint to write one — and a grid with the tags (click one to list its queries), the tables (click to find them in the SQL), the folder (click to reveal it) and when and by whom the file was last changed. Rows with nothing to show are hidden. A thin strip above the editor shows the line count, the file's encoding and the dialect. The old editor toolbar is gone: its actions live in the panel now. This is the fifth slice (F5) of the redesign
  • Panel actions wait for the query — Copy SQL, Edit and Open stay disabled until the SQL is in the editor, so they never act on the previous query
  • Open externally outside Windows — where SSMS does not exist, the button opens the file in its default application
  • Edit mode rebuilt — an Editing banner with Cancel and Save (Ctrl S) replaces the panel header, and the form has labelled fields for title, description (three lines tall), tags, author and the creation date. Tags are chips with a × to remove them; typing filters the library's tags with how many queries use each, the typed part marked, and Enter adds the picked one or creates a new tag (the popup says which). A comma or space ends a tag, Backspace in the empty field removes the last one, and Esc closes the suggestions before it cancels the edit. The strip above the editor shows "editable" and the cursor's line and column. The file is written in the background, every field the form does not show is kept, and a failed save stays in edit mode with nothing lost. This is the sixth slice (F6) of the redesign
  • Author in the form — the author can be set while editing; leaving it empty removes it from the file
  • Search chips — typing table:, col:, tag: or date: followed by a value and a space, Enter or Tab turns it into a chip inside the search field; × removes a chip and Backspace in the empty input removes the last one. The search itself is unchanged: chips and the remaining text are sent as before
  • Scope bar while searching — "Search in" switches between the whole library and the folder the search started from, next to the result count and "Clear search"
  • Search results grouped by folder — a search groups its results by folder by default and remembers its own grouping, apart from the one used when browsing
  • Tag views count results — the status bar says "N results" in a tag view, as it does in a search
  • Quick search rebuilt — Ctrl+P, or Quick search in the command bar, opens a card over the dimmed window. It lists the library's queries, filtered as you type by name, path or tag, ignoring accents and case, with the typed part marked and name matches first; each row shows its folder and when it changed. Below come the actions — New query, Open folder, Reindex library — filtered by the same words. ↑/↓ move, Enter opens, Ctrl+C copies the selected query's SQL without opening it, and Tab turns the word being typed into table:, then tag:, then back. table:, tag: and date: narrow the list as in the search field. The queries load in the background, so opening it never waits on the index; Esc, a click outside it or moving the focus elsewhere closes it. This is the eighth slice (F8) of the redesign
  • Reindex the whole library — Reindex in the quick search reindexes every library folder, not only the one in view

Removed

  • qt-material dependency — one fewer package to install and bundle

Fixed

  • Favorites from another folder — starring a query listed from a different library folder (All queries, Favorites, a search across the library) now updates that folder's index instead of the one in view
  • Removing a folder closes its index — the index database used to stay open after the folder was removed from the sidebar
  • Esc outside edit mode — it no longer reloads the open query from disk
  • Details after saving — the panel shows the saved title, description and tags right away instead of the ones from before the edit

Tests

  • Theme tokens: both themes define the same keys, tag colours are stable across runs, and every text colour has at least 4.5:1 contrast on every background; plus a live-switch check and a guard against all-caps UI strings
  • Navigation history (back, forward, up, dropping the forward stack on a new step), layout settings, and the main window offscreen: shortcuts with the menu bar hidden, Alt+P, Alt+arrows, search history and the status bar — 268 tests
  • Sidebar: folder trees and their counts, subfolder prefixes (no LIKE wildcards, case kept), tag and Recent counts per folder, the summary off the UI thread, and the sidebar widget itself (rows, active row, chevron and + clicks, folded tags); in the window, a subfolder narrows the list and the tags, and opening a query updates Recent — 334 tests
  • Query list: date buckets around midnight, the first day of the week and a month change; f...
Read more

SQLShelf v1.1.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 02:12

Changelog

[Unreleased]

[1.1.0] - 2026-10-22

Added

  • Address bar with history — Back, Forward and Up (Alt+←, Alt+→, Alt+↑) walk through what you looked at: library, folder, tag, favorites, recent or a search. Typing a search is one history step, not one per keystroke. The breadcrumb next to the arrows shows where you are and jumps back to any level; the search field says what it searches in
  • Command bar — New query, Open folder, Sort, Group and View, Quick search, a details-panel toggle (Alt+P) and a ⋯ menu that holds everything the menu bar had
  • Status bar — query and selection counts on the left; on the right, the index state, a progress bar while a folder is indexed, and how many folders are being watched
  • Remembered layout — panel widths, the details panel being shown or hidden, the sort order and the menu bar choice survive a restart

Changed

  • New theme, without qt-material — the interface now uses Qt's Fusion style with a palette and stylesheet generated from design tokens (sqlshelf/ui/tokens.py → sqlshelf/ui/theme.py). Buttons are no longer upper case or outlined in green; green is kept for selection, focus and the primary action. This is the first slice (F1) of the redesign in docs/redesign-ui.md
  • Sentence-case labels — sidebar and details-panel section titles (Browse, Folders, Tags, Tables, …) are no longer written in capitals, in all three languages
  • Editor colours and font — new syntax colours for both themes, italic comments, and Cascadia Mono 13 px (falling back to Consolas, then the system monospace font)
  • Three-panel window — sidebar, query list and details panel in one resizable row; the menu bar is hidden by default (View → Show Menu Bar brings it back) and every shortcut keeps working without it. This is the second slice (F2) of the redesign
  • Sidebar as a folder tree — All queries, Favorites and Recent, then every library folder with its subfolders (expand with the chevron; clicking a name opens it), then the most used tags with a colour dot and "All tags" for the rest. Every row shows how many queries it holds; Recent and the tags count what is inside the folder in view. Opening a folder moved to the + next to Folders. This is the third slice (F3) of the redesign
  • Browse subfolders — choosing a subfolder lists only the queries under it, and search, Recent and tags stay inside it
  • Indexing no longer opens a dialog — progress shows in the status bar and the window stays usable
  • Every library folder is watched — changes on disk are picked up in all open folders, not only the one in view
  • Query list rebuilt — a Details view with Name, Tables, Tags and Modified columns (click Name or Modified to sort; the Sort menu follows) and a Content view with the description, table chips and every tag on taller rows. Queries are grouped by date (Today, Yesterday, This week, This month, Older), by folder or not at all, from the Group menu; groups fold with a click and stay folded when the list refreshes. The star shows on hover and on the selected row, and a click on it adds or removes the favorite without changing the selection. Search terms are marked in names and tables, ignoring accents and case the way the search does. Tables and Tags give way when the list gets narrow, and an empty list explains how to search. This is the fourth slice (F4) of the redesign
  • Fuller row menu — Copy SQL, Edit metadata, Add to favorites, Open in SSMS, Copy path, Reveal in Explorer and Duplicate. Copy SQL on a query that is not open reads it in the background, and Edit metadata opens the details panel in edit mode
  • Theme switching reaches the tag chips — the tag chips in the details panel kept the old theme's colours after a dark/light switch until another query was opened
  • Details panel rebuilt — a header with the file icon, the title (two lines at most, the rest in a tooltip), the file name and a star; then Copy SQL, Edit, Open in SSMS and a ⋯ menu (Select all, Copy path, Copy folder path, Reveal in Explorer). Below, the description — or a hint to write one — and a grid with the tags (click one to list its queries), the tables (click to find them in the SQL), the folder (click to reveal it) and when and by whom the file was last changed. Rows with nothing to show are hidden. A thin strip above the editor shows the line count, the file's encoding and the dialect. The old editor toolbar is gone: its actions live in the panel now. This is the fifth slice (F5) of the redesign
  • Panel actions wait for the query — Copy SQL, Edit and Open stay disabled until the SQL is in the editor, so they never act on the previous query
  • Open externally outside Windows — where SSMS does not exist, the button opens the file in its default application
  • Edit mode rebuilt — an Editing banner with Cancel and Save (Ctrl S) replaces the panel header, and the form has labelled fields for title, description (three lines tall), tags, author and the creation date. Tags are chips with a × to remove them; typing filters the library's tags with how many queries use each, the typed part marked, and Enter adds the picked one or creates a new tag (the popup says which). A comma or space ends a tag, Backspace in the empty field removes the last one, and Esc closes the suggestions before it cancels the edit. The strip above the editor shows "editable" and the cursor's line and column. The file is written in the background, every field the form does not show is kept, and a failed save stays in edit mode with nothing lost. This is the sixth slice (F6) of the redesign
  • Author in the form — the author can be set while editing; leaving it empty removes it from the file
  • Search chips — typing table:, col:, tag: or date: followed by a value and a space, Enter or Tab turns it into a chip inside the search field; × removes a chip and Backspace in the empty input removes the last one. The search itself is unchanged: chips and the remaining text are sent as before
  • Scope bar while searching — "Search in" switches between the whole library and the folder the search started from, next to the result count and "Clear search"
  • Search results grouped by folder — a search groups its results by folder by default and remembers its own grouping, apart from the one used when browsing
  • Tag views count results — the status bar says "N results" in a tag view, as it does in a search
  • Quick search rebuilt — Ctrl+P, or Quick search in the command bar, opens a card over the dimmed window. It lists the library's queries, filtered as you type by name, path or tag, ignoring accents and case, with the typed part marked and name matches first; each row shows its folder and when it changed. Below come the actions — New query, Open folder, Reindex library — filtered by the same words. ↑/↓ move, Enter opens, Ctrl+C copies the selected query's SQL without opening it, and Tab turns the word being typed into table:, then tag:, then back. table:, tag: and date: narrow the list as in the search field. The queries load in the background, so opening it never waits on the index; Esc, a click outside it or moving the focus elsewhere closes it. This is the eighth slice (F8) of the redesign
  • Reindex the whole library — Reindex in the quick search reindexes every library folder, not only the one in view

Removed

  • qt-material dependency — one fewer package to install and bundle

Fixed

  • Favorites from another folder — starring a query listed from a different library folder (All queries, Favorites, a search across the library) now updates that folder's index instead of the one in view
  • Removing a folder closes its index — the index database used to stay open after the folder was removed from the sidebar
  • Esc outside edit mode — it no longer reloads the open query from disk
  • Details after saving — the panel shows the saved title, description and tags right away instead of the ones from before the edit

Tests

  • Theme tokens: both themes define the same keys, tag colours are stable across runs, and every text colour has at least 4.5:1 contrast on every background; plus a live-switch check and a guard against all-caps UI strings
  • Navigation history (back, forward, up, dropping the forward stack on a new step), layout settings, and the main window offscreen: shortcuts with the menu bar hidden, Alt+P, Alt+arrows, search history and the status bar — 268 tests
  • Sidebar: folder trees and their counts, subfolder prefixes (no LIKE wildcards, case kept), tag and Recent counts per folder, the summary off the UI thread, and the sidebar widget itself (rows, active row, chevron and + clicks, folded tags); in the window, a subfolder narrows the list and the tags, and opening a query updates Recent — 334 tests
  • Query list: date buckets around midnight, the first day of the week and a month change; folder labels; term marking across accents, case and several terms; and the list widget offscreen — group order, selection kept when regrouping or sorting, header and star clicks, keyboard moving over group rows, folded groups surviving a refresh, Content view and narrow-width columns, and every cell painting — 405 tests
  • Details panel: modification text, line elision, the editor strip and the shared title/description/tags reading; the panel offscreen — hidden empty rows, action and chip signals, the ⋯ menu, the Open label per platform, Portuguese labels, and a chip replaced from its own click; in the window, the strip and actions after a query loads, Copy SQL without the frontmatter, Ctrl+E and Esc — 471 tests
  • Edit mode: keeping unknown frontmatter keys and dropping an empty author; tag normalizing, splitting and suggestion order (prefix first, then use, ignoring accents and case); match spans inside words; the creation date text; the tag field offscreen — Enter, comma and space, ×, Backspace, suggestions with counts, Up/Dow...
Read more

SQLShelf v1.0.11

Choose a tag to compare

@github-actions github-actions released this 18 Sep 01:06

Changelog

[1.0.11] - 2026-09-17

Changed

  • Leaner metadata panel — the query header no longer shows column and alias chips, only table names, which is what's actually useful at a glance

[1.0.10] - 2026-09-15

Fixed

  • Table names in the query list — aliases and T-SQL @variables were being indexed and shown where table names belong; UPDATE t SET ... FROM MyTable t listed t, and EXEC @rv = dbo.MyProc listed rv. Across a 192-file library this removed every bogus name
  • Modification date losing its first digit — the date column rendered 4/09/2026 18:56 instead of 14/09/2026 18:56, because the column was measured with the wrong font metrics and then elided
  • Search dying on a quote — typing " built an unterminated FTS5 expression; the error was swallowed and the box returned nothing, so search looked dead until the text was cleared. Quotes are now escaped
  • Search silently losing whole folders — an UPDATE on an indexed row, including a modification-time-only touch from a cloud-sync client, erased table and column names from the full-text row, so table: and col: searches stopped matching. The FTS row is now written by the indexer, which is the only code that has the names

Performance

  • Interface no longer freezes during indexing — reads and writes use separate SQLite connections, so navigating and searching no longer queue behind a reindex. Opening a 59-file folder stalls the interface for 212 ms instead of 713 ms, and searching during a full reindex of 109 files stays under 10 ms
  • Faster text search — dropped the per-row snippet generation that accounted for 87 of the 92 ms a text search took on a 109-file folder, for a string the interface never displayed

Internal

  • Project is now type-checked with mypy and formatted with black, both wired into pyproject.toml, with the development tools recorded in requirements-dev.txt

Tests

  • Regression coverage for alias and variable extraction, special characters in search, and full-text consistency after reindexing — 174 tests

[1.0.9] - 2026-08-12

Changed

  • Default query ordering — query lists now open with the most recently modified files first in every navigation view
  • Large-file rendering — scripts above 1,000 lines remain fully viewable and editable while expensive whole-document syntax and occurrence highlighting are suspended

Fixed

  • Navigation freezes — switching among folders, Favorites, Recent, tags and global navigation no longer blocks the interface on file reads or SQLite index locks
  • Redundant query reloads — refreshing or reordering a result list preserves the selected query without reopening the same file
  • Alias extraction cache — table aliases are now persisted in index schema v4, avoiding repeated sqlglot parsing during navigation
  • Stale query display — the previous SQL body is cleared while a newly selected file loads asynchronously, preventing actions from targeting old content

Tests

  • Added UI regression coverage for large files, selection preservation, cross-folder result identity and default modification-date ordering

[1.0.8] - 2026-08-03

Added

  • Access log & Reports dialog — SQLShelf now records when a query is opened, copied, or opened in SSMS; Help → Reports shows the most-accessed queries and tags across all loaded folders
  • Modification date column — the query list now shows each file's last-modified date/time (dd/mm/aaaa HH:MM) alongside the table name

Fixed

  • Large .sql file performance — opening, editing and navigating large SQL files (1000+ lines) no longer freezes the UI: object extraction (sqlglot) now runs off the UI thread with debouncing and caching, occurrence highlighting is capped and debounced, and the syntax highlighter's keyword patterns were merged into a single regex for faster re-scans

[1.0.7] - 2026-06-23

Added

  • System tray — closing the main window now minimizes SQLShelf to the Windows system tray; double-click the tray icon or Restore to bring it back
  • Windows autostart — new toggle in Preferences (Edit → Preferences) to launch SQLShelf automatically on Windows login via the registry
  • Quit action — File → Quit exits the application immediately without minimizing to the tray
  • Status bar result count — the status bar shows how many queries match the current search in real time
  • Statistics dialog — Help → Statistics shows a summary of the open project: total queries, tags, tables, columns and index size
  • Version in About dialog — Help → About now displays the current application version

Changed

  • Preferences moved to Edit menu — Preferences action relocated to Edit → Preferences for better discoverability
  • Open in SSMS removed — View → Open in SSMS action removed; use the clickable file path chip in the metadata panel to open a file externally

Fixed

  • Tray exit — QApplication.quit() is now called on the tray Quit action, ensuring the event loop exits cleanly when the main window is hidden

Docs

  • Added comprehensive database schema reference (docs/database-schema.md) covering every table, column, trigger, index and search operator

[1.0.6] - 2026-06-22

Added

  • Force reindex progress modal — clicking Forçar Indexação now runs the scan in a background thread and shows a progress dialog with a progress bar, instead of blocking the UI silently

[1.0.5] - 2026-06-22

Added

  • Alias chips — table aliases extracted from the SQL body (e.g. FROM Orders AS o → chip o) are displayed as a dedicated ALIASES section in the metadata panel; clicking navigates to the first occurrence in the editor
  • Select All / Copy buttons — two buttons added to the editor toolbar in view mode: Select All selects the full SQL body; Copy copies it to the clipboard without selecting

Fixed

  • Ctrl+N shortcut — removed a duplicate QShortcut("Ctrl+N") that caused the Ambiguous shortcut overload: Ctrl+N warning in the terminal; the shortcut on the menu action is sufficient

Changed

  • Occurrence highlighting — placing the cursor on a word (or selecting text) highlights all other occurrences in the SQL editor with a distinct background + foreground color, preserving readability over syntax-highlighted tokens
  • Metadata chip navigation — left-clicking a table, column or alias chip now jumps to the first occurrence of that token in the current SQL editor (whole-word, case-insensitive); right-click shows a context menu with Go to occurrence, Search in all queries and Copy name
  • File path chip — right-click now shows a context menu: Copy absolute path, Copy folder path, Reveal in Explorer

[1.0.4] - 2026-06-16

Added

  • Check for Updates — new menu item under Help; queries the GitHub Releases API in a background thread and shows a dialog with the result; if a newer version is found, offers a direct "Download Update" button (downloads and launches the Windows installer) or "Open Release Page" (browser); a silent check also runs 5 s after startup and displays a status-bar notification if an update is available
  • Sort button (⇅) in query list — dropdown with four options: Name A→Z, Name Z→A, Modified newest, Modified oldest; active option shows a checkmark; sort persists across searches; translated in English, Portuguese (PT-BR) and Spanish
  • Portable distribution — Windows and Linux releases now include a portable .zip alongside the installer/AppImage; extract and run with no installation required

Fixed

  • Query list panel minimum width — a second setMinimumWidth(200) call was silently overriding the 360 px set earlier, causing the panel to shrink on smaller screens; both calls are now 360 px
  • Query list panel resizing — panel now uses setMinimumWidth instead of setFixedWidth so it never shrinks below 360 px but can still grow when the splitter is dragged or the window is maximized

Changed

  • Tables/columns chip sections — wrapped in a scroll area (max 52 px height) so queries with many tables or columns no longer push the SQL editor off screen
  • Search bar — removed the help (?) button; search operator tooltip moved to the search field itself, visible on hover
  • Quick Search rename — "Command Palette" renamed to "Quick Search" across all locales (EN, PT-BR, ES) to better reflect its purpose; hint and placeholder text now fully localized

[1.0.3] - 2026-06-15

Added

  • Tag autocomplete — typing in the tag field (query editor and New Query dialog) now suggests existing tags from the index
  • Sort by modification date — query list is sorted by file modification time (newest first) by default across all views (All queries, folder, search results)
  • Modification date in metadata panel — file's last modification date is shown as a dedicated section below the file path
  • date: search filter — search bar and command palette (Ctrl+P) now support date:DD/MM/YYYY to filter queries modified on a specific day; can be combined with other operators (e.g. date:15/06/2026 tag:report)

[1.0.2] - 2025-06-14

Fixed

  • About dialog links now display in the app's accent green color (#0ADE99)

[1.0.1] - 2025-06-14

Fixed

  • UI labels showing translation keys (e.g. SIDEBAR.OPEN_FOLDER) instead of text — locales/ directory was missing from the PyInstaller bundle

[1.0.0] - 2025-06-14

First public release of SQLShelf — open-source desktop SQL query manager built with Python + PySide6.

Features

Core

  • Open and index any folder of .sql files with automatic frontmatter YAML detection
  • Multi-folder explorer with persistent project selection and global "All queries" view
  • Full-text search (FTS5) with table:, col:, and tag: prefix filters
  • Debounced async search with green search bar styling
  • File watcher (watchdog) ...
Read more

SQLShelf v1.0.10

Choose a tag to compare

@github-actions github-actions released this 15 Sep 17:23

Changelog

[1.0.10] - 2026-09-15

Fixed

  • Table names in the query list — aliases and T-SQL @variables were being indexed and shown where table names belong; UPDATE t SET ... FROM MyTable t listed t, and EXEC @rv = dbo.MyProc listed rv. Across a 192-file library this removed every bogus name
  • Modification date losing its first digit — the date column rendered 4/09/2026 18:56 instead of 14/09/2026 18:56, because the column was measured with the wrong font metrics and then elided
  • Search dying on a quote — typing " built an unterminated FTS5 expression; the error was swallowed and the box returned nothing, so search looked dead until the text was cleared. Quotes are now escaped
  • Search silently losing whole folders — an UPDATE on an indexed row, including a modification-time-only touch from a cloud-sync client, erased table and column names from the full-text row, so table: and col: searches stopped matching. The FTS row is now written by the indexer, which is the only code that has the names

Performance

  • Interface no longer freezes during indexing — reads and writes use separate SQLite connections, so navigating and searching no longer queue behind a reindex. Opening a 59-file folder stalls the interface for 212 ms instead of 713 ms, and searching during a full reindex of 109 files stays under 10 ms
  • Faster text search — dropped the per-row snippet generation that accounted for 87 of the 92 ms a text search took on a 109-file folder, for a string the interface never displayed

Internal

  • Project is now type-checked with mypy and formatted with black, both wired into pyproject.toml, with the development tools recorded in requirements-dev.txt

Tests

  • Regression coverage for alias and variable extraction, special characters in search, and full-text consistency after reindexing — 174 tests

[1.0.9] - 2026-08-12

Changed

  • Default query ordering — query lists now open with the most recently modified files first in every navigation view
  • Large-file rendering — scripts above 1,000 lines remain fully viewable and editable while expensive whole-document syntax and occurrence highlighting are suspended

Fixed

  • Navigation freezes — switching among folders, Favorites, Recent, tags and global navigation no longer blocks the interface on file reads or SQLite index locks
  • Redundant query reloads — refreshing or reordering a result list preserves the selected query without reopening the same file
  • Alias extraction cache — table aliases are now persisted in index schema v4, avoiding repeated sqlglot parsing during navigation
  • Stale query display — the previous SQL body is cleared while a newly selected file loads asynchronously, preventing actions from targeting old content

Tests

  • Added UI regression coverage for large files, selection preservation, cross-folder result identity and default modification-date ordering

[1.0.8] - 2026-08-03

Added

  • Access log & Reports dialog — SQLShelf now records when a query is opened, copied, or opened in SSMS; Help → Reports shows the most-accessed queries and tags across all loaded folders
  • Modification date column — the query list now shows each file's last-modified date/time (dd/mm/aaaa HH:MM) alongside the table name

Fixed

  • Large .sql file performance — opening, editing and navigating large SQL files (1000+ lines) no longer freezes the UI: object extraction (sqlglot) now runs off the UI thread with debouncing and caching, occurrence highlighting is capped and debounced, and the syntax highlighter's keyword patterns were merged into a single regex for faster re-scans

[1.0.7] - 2026-06-23

Added

  • System tray — closing the main window now minimizes SQLShelf to the Windows system tray; double-click the tray icon or Restore to bring it back
  • Windows autostart — new toggle in Preferences (Edit → Preferences) to launch SQLShelf automatically on Windows login via the registry
  • Quit action — File → Quit exits the application immediately without minimizing to the tray
  • Status bar result count — the status bar shows how many queries match the current search in real time
  • Statistics dialog — Help → Statistics shows a summary of the open project: total queries, tags, tables, columns and index size
  • Version in About dialog — Help → About now displays the current application version

Changed

  • Preferences moved to Edit menu — Preferences action relocated to Edit → Preferences for better discoverability
  • Open in SSMS removed — View → Open in SSMS action removed; use the clickable file path chip in the metadata panel to open a file externally

Fixed

  • Tray exit — QApplication.quit() is now called on the tray Quit action, ensuring the event loop exits cleanly when the main window is hidden

Docs

  • Added comprehensive database schema reference (docs/database-schema.md) covering every table, column, trigger, index and search operator

[1.0.6] - 2026-06-22

Added

  • Force reindex progress modal — clicking Forçar Indexação now runs the scan in a background thread and shows a progress dialog with a progress bar, instead of blocking the UI silently

[1.0.5] - 2026-06-22

Added

  • Alias chips — table aliases extracted from the SQL body (e.g. FROM Orders AS o → chip o) are displayed as a dedicated ALIASES section in the metadata panel; clicking navigates to the first occurrence in the editor
  • Select All / Copy buttons — two buttons added to the editor toolbar in view mode: Select All selects the full SQL body; Copy copies it to the clipboard without selecting

Fixed

  • Ctrl+N shortcut — removed a duplicate QShortcut("Ctrl+N") that caused the Ambiguous shortcut overload: Ctrl+N warning in the terminal; the shortcut on the menu action is sufficient

Changed

  • Occurrence highlighting — placing the cursor on a word (or selecting text) highlights all other occurrences in the SQL editor with a distinct background + foreground color, preserving readability over syntax-highlighted tokens
  • Metadata chip navigation — left-clicking a table, column or alias chip now jumps to the first occurrence of that token in the current SQL editor (whole-word, case-insensitive); right-click shows a context menu with Go to occurrence, Search in all queries and Copy name
  • File path chip — right-click now shows a context menu: Copy absolute path, Copy folder path, Reveal in Explorer

[1.0.4] - 2026-06-16

Added

  • Check for Updates — new menu item under Help; queries the GitHub Releases API in a background thread and shows a dialog with the result; if a newer version is found, offers a direct "Download Update" button (downloads and launches the Windows installer) or "Open Release Page" (browser); a silent check also runs 5 s after startup and displays a status-bar notification if an update is available
  • Sort button (⇅) in query list — dropdown with four options: Name A→Z, Name Z→A, Modified newest, Modified oldest; active option shows a checkmark; sort persists across searches; translated in English, Portuguese (PT-BR) and Spanish
  • Portable distribution — Windows and Linux releases now include a portable .zip alongside the installer/AppImage; extract and run with no installation required

Fixed

  • Query list panel minimum width — a second setMinimumWidth(200) call was silently overriding the 360 px set earlier, causing the panel to shrink on smaller screens; both calls are now 360 px
  • Query list panel resizing — panel now uses setMinimumWidth instead of setFixedWidth so it never shrinks below 360 px but can still grow when the splitter is dragged or the window is maximized

Changed

  • Tables/columns chip sections — wrapped in a scroll area (max 52 px height) so queries with many tables or columns no longer push the SQL editor off screen
  • Search bar — removed the help (?) button; search operator tooltip moved to the search field itself, visible on hover
  • Quick Search rename — "Command Palette" renamed to "Quick Search" across all locales (EN, PT-BR, ES) to better reflect its purpose; hint and placeholder text now fully localized

[1.0.3] - 2026-06-15

Added

  • Tag autocomplete — typing in the tag field (query editor and New Query dialog) now suggests existing tags from the index
  • Sort by modification date — query list is sorted by file modification time (newest first) by default across all views (All queries, folder, search results)
  • Modification date in metadata panel — file's last modification date is shown as a dedicated section below the file path
  • date: search filter — search bar and command palette (Ctrl+P) now support date:DD/MM/YYYY to filter queries modified on a specific day; can be combined with other operators (e.g. date:15/06/2026 tag:report)

[1.0.2] - 2025-06-14

Fixed

  • About dialog links now display in the app's accent green color (#0ADE99)

[1.0.1] - 2025-06-14

Fixed

  • UI labels showing translation keys (e.g. SIDEBAR.OPEN_FOLDER) instead of text — locales/ directory was missing from the PyInstaller bundle

[1.0.0] - 2025-06-14

First public release of SQLShelf — open-source desktop SQL query manager built with Python + PySide6.

Features

Core

  • Open and index any folder of .sql files with automatic frontmatter YAML detection
  • Multi-folder explorer with persistent project selection and global "All queries" view
  • Full-text search (FTS5) with table:, col:, and tag: prefix filters
  • Debounced async search with green search bar styling
  • File watcher (watchdog) with ~500ms debounce — index stays in sync without manual refresh
  • SQLite index is fully regeneratable; .sql files on disk are the source of truth

Editor

  • SQL syntax highlighting ...
Read more

SQLShelf v1.0.9

Choose a tag to compare

@github-actions github-actions released this 12 Aug 15:17
63ad028

Changelog

[1.0.9] - 2026-08-12

Changed

  • Default query ordering — query lists now open with the most recently modified files first in every navigation view
  • Large-file rendering — scripts above 1,000 lines remain fully viewable and editable while expensive whole-document syntax and occurrence highlighting are suspended

Fixed

  • Navigation freezes — switching among folders, Favorites, Recent, tags and global navigation no longer blocks the interface on file reads or SQLite index locks
  • Redundant query reloads — refreshing or reordering a result list preserves the selected query without reopening the same file
  • Alias extraction cache — table aliases are now persisted in index schema v4, avoiding repeated sqlglot parsing during navigation
  • Stale query display — the previous SQL body is cleared while a newly selected file loads asynchronously, preventing actions from targeting old content

Tests

  • Added UI regression coverage for large files, selection preservation, cross-folder result identity and default modification-date ordering

[1.0.8] - 2026-08-03

Added

  • Access log & Reports dialog — SQLShelf now records when a query is opened, copied, or opened in SSMS; Help → Reports shows the most-accessed queries and tags across all loaded folders
  • Modification date column — the query list now shows each file's last-modified date/time (dd/mm/aaaa HH:MM) alongside the table name

Fixed

  • Large .sql file performance — opening, editing and navigating large SQL files (1000+ lines) no longer freezes the UI: object extraction (sqlglot) now runs off the UI thread with debouncing and caching, occurrence highlighting is capped and debounced, and the syntax highlighter's keyword patterns were merged into a single regex for faster re-scans

[1.0.7] - 2026-06-23

Added

  • System tray — closing the main window now minimizes SQLShelf to the Windows system tray; double-click the tray icon or Restore to bring it back
  • Windows autostart — new toggle in Preferences (Edit → Preferences) to launch SQLShelf automatically on Windows login via the registry
  • Quit action — File → Quit exits the application immediately without minimizing to the tray
  • Status bar result count — the status bar shows how many queries match the current search in real time
  • Statistics dialog — Help → Statistics shows a summary of the open project: total queries, tags, tables, columns and index size
  • Version in About dialog — Help → About now displays the current application version

Changed

  • Preferences moved to Edit menu — Preferences action relocated to Edit → Preferences for better discoverability
  • Open in SSMS removed — View → Open in SSMS action removed; use the clickable file path chip in the metadata panel to open a file externally

Fixed

  • Tray exit — QApplication.quit() is now called on the tray Quit action, ensuring the event loop exits cleanly when the main window is hidden

Docs

  • Added comprehensive database schema reference (docs/database-schema.md) covering every table, column, trigger, index and search operator

[1.0.6] - 2026-06-22

Added

  • Force reindex progress modal — clicking Forçar Indexação now runs the scan in a background thread and shows a progress dialog with a progress bar, instead of blocking the UI silently

[1.0.5] - 2026-06-22

Added

  • Alias chips — table aliases extracted from the SQL body (e.g. FROM Orders AS o → chip o) are displayed as a dedicated ALIASES section in the metadata panel; clicking navigates to the first occurrence in the editor
  • Select All / Copy buttons — two buttons added to the editor toolbar in view mode: Select All selects the full SQL body; Copy copies it to the clipboard without selecting

Fixed

  • Ctrl+N shortcut — removed a duplicate QShortcut("Ctrl+N") that caused the Ambiguous shortcut overload: Ctrl+N warning in the terminal; the shortcut on the menu action is sufficient

Changed

  • Occurrence highlighting — placing the cursor on a word (or selecting text) highlights all other occurrences in the SQL editor with a distinct background + foreground color, preserving readability over syntax-highlighted tokens
  • Metadata chip navigation — left-clicking a table, column or alias chip now jumps to the first occurrence of that token in the current SQL editor (whole-word, case-insensitive); right-click shows a context menu with Go to occurrence, Search in all queries and Copy name
  • File path chip — right-click now shows a context menu: Copy absolute path, Copy folder path, Reveal in Explorer

[1.0.4] - 2026-06-16

Added

  • Check for Updates — new menu item under Help; queries the GitHub Releases API in a background thread and shows a dialog with the result; if a newer version is found, offers a direct "Download Update" button (downloads and launches the Windows installer) or "Open Release Page" (browser); a silent check also runs 5 s after startup and displays a status-bar notification if an update is available
  • Sort button (⇅) in query list — dropdown with four options: Name A→Z, Name Z→A, Modified newest, Modified oldest; active option shows a checkmark; sort persists across searches; translated in English, Portuguese (PT-BR) and Spanish
  • Portable distribution — Windows and Linux releases now include a portable .zip alongside the installer/AppImage; extract and run with no installation required

Fixed

  • Query list panel minimum width — a second setMinimumWidth(200) call was silently overriding the 360 px set earlier, causing the panel to shrink on smaller screens; both calls are now 360 px
  • Query list panel resizing — panel now uses setMinimumWidth instead of setFixedWidth so it never shrinks below 360 px but can still grow when the splitter is dragged or the window is maximized

Changed

  • Tables/columns chip sections — wrapped in a scroll area (max 52 px height) so queries with many tables or columns no longer push the SQL editor off screen
  • Search bar — removed the help (?) button; search operator tooltip moved to the search field itself, visible on hover
  • Quick Search rename — "Command Palette" renamed to "Quick Search" across all locales (EN, PT-BR, ES) to better reflect its purpose; hint and placeholder text now fully localized

[1.0.3] - 2026-06-15

Added

  • Tag autocomplete — typing in the tag field (query editor and New Query dialog) now suggests existing tags from the index
  • Sort by modification date — query list is sorted by file modification time (newest first) by default across all views (All queries, folder, search results)
  • Modification date in metadata panel — file's last modification date is shown as a dedicated section below the file path
  • date: search filter — search bar and command palette (Ctrl+P) now support date:DD/MM/YYYY to filter queries modified on a specific day; can be combined with other operators (e.g. date:15/06/2026 tag:report)

[1.0.2] - 2025-06-14

Fixed

  • About dialog links now display in the app's accent green color (#0ADE99)

[1.0.1] - 2025-06-14

Fixed

  • UI labels showing translation keys (e.g. SIDEBAR.OPEN_FOLDER) instead of text — locales/ directory was missing from the PyInstaller bundle

[1.0.0] - 2025-06-14

First public release of SQLShelf — open-source desktop SQL query manager built with Python + PySide6.

Features

Core

  • Open and index any folder of .sql files with automatic frontmatter YAML detection
  • Multi-folder explorer with persistent project selection and global "All queries" view
  • Full-text search (FTS5) with table:, col:, and tag: prefix filters
  • Debounced async search with green search bar styling
  • File watcher (watchdog) with ~500ms debounce — index stays in sync without manual refresh
  • SQLite index is fully regeneratable; .sql files on disk are the source of truth

Editor

  • SQL syntax highlighting via QSyntaxHighlighter
  • Line numbers and current-line highlight
  • Metadata panel with read/edit mode (title, description, tags, favorite, author)
  • Tag chips with inline editor
  • Clickable absolute file path in metadata panel
  • Copy frontmatter template to clipboard (Edit menu)

UI

  • Light and dark themes via Settings → Theme (live switching)
  • Language toggle EN/PT-BR via Settings → Language (i18n system)
  • Two-line query list delegate with title, description and tag summary
  • Sidebar with priority nav (Favorites, Recent) and collapsible Browse section
  • Command palette button in toolbar
  • Logo swaps on theme toggle

Indexing

  • Progress dialog during initial indexing
  • Deindex (remove stale entries) on project close
  • Startup status feedback

Platform

Platform Artifact
Windows 10/11 x64 SQLShelf-1.0.1-windows-x64-setup.exe (Inno Setup installer)
Linux x86_64 SQLShelf-1.0.1-linux-x86_64.AppImage

Requirements (if running from source)

  • Python 3.12+
  • pip install -r requirements.txt
  • python main.py

SQLShelf v1.0.8

Choose a tag to compare

@github-actions github-actions released this 03 Aug 20:55

Changelog

[1.0.8] - 2026-08-03

Added

  • Access log & Reports dialog — SQLShelf now records when a query is opened, copied, or opened in SSMS; Help → Reports shows the most-accessed queries and tags across all loaded folders
  • Modification date column — the query list now shows each file's last-modified date/time (dd/mm/aaaa HH:MM) alongside the table name

Fixed

  • Large .sql file performance — opening, editing and navigating large SQL files (1000+ lines) no longer freezes the UI: object extraction (sqlglot) now runs off the UI thread with debouncing and caching, occurrence highlighting is capped and debounced, and the syntax highlighter's keyword patterns were merged into a single regex for faster re-scans

[1.0.7] - 2026-06-23

Added

  • System tray — closing the main window now minimizes SQLShelf to the Windows system tray; double-click the tray icon or Restore to bring it back
  • Windows autostart — new toggle in Preferences (Edit → Preferences) to launch SQLShelf automatically on Windows login via the registry
  • Quit action — File → Quit exits the application immediately without minimizing to the tray
  • Status bar result count — the status bar shows how many queries match the current search in real time
  • Statistics dialog — Help → Statistics shows a summary of the open project: total queries, tags, tables, columns and index size
  • Version in About dialog — Help → About now displays the current application version

Changed

  • Preferences moved to Edit menu — Preferences action relocated to Edit → Preferences for better discoverability
  • Open in SSMS removed — View → Open in SSMS action removed; use the clickable file path chip in the metadata panel to open a file externally

Fixed

  • Tray exit — QApplication.quit() is now called on the tray Quit action, ensuring the event loop exits cleanly when the main window is hidden

Docs

  • Added comprehensive database schema reference (docs/database-schema.md) covering every table, column, trigger, index and search operator

[1.0.6] - 2026-06-22

Added

  • Force reindex progress modal — clicking Forçar Indexação now runs the scan in a background thread and shows a progress dialog with a progress bar, instead of blocking the UI silently

[1.0.5] - 2026-06-22

Added

  • Alias chips — table aliases extracted from the SQL body (e.g. FROM Orders AS o → chip o) are displayed as a dedicated ALIASES section in the metadata panel; clicking navigates to the first occurrence in the editor
  • Select All / Copy buttons — two buttons added to the editor toolbar in view mode: Select All selects the full SQL body; Copy copies it to the clipboard without selecting

Fixed

  • Ctrl+N shortcut — removed a duplicate QShortcut("Ctrl+N") that caused the Ambiguous shortcut overload: Ctrl+N warning in the terminal; the shortcut on the menu action is sufficient

Changed

  • Occurrence highlighting — placing the cursor on a word (or selecting text) highlights all other occurrences in the SQL editor with a distinct background + foreground color, preserving readability over syntax-highlighted tokens
  • Metadata chip navigation — left-clicking a table, column or alias chip now jumps to the first occurrence of that token in the current SQL editor (whole-word, case-insensitive); right-click shows a context menu with Go to occurrence, Search in all queries and Copy name
  • File path chip — right-click now shows a context menu: Copy absolute path, Copy folder path, Reveal in Explorer

[1.0.4] - 2026-06-16

Added

  • Check for Updates — new menu item under Help; queries the GitHub Releases API in a background thread and shows a dialog with the result; if a newer version is found, offers a direct "Download Update" button (downloads and launches the Windows installer) or "Open Release Page" (browser); a silent check also runs 5 s after startup and displays a status-bar notification if an update is available
  • Sort button (⇅) in query list — dropdown with four options: Name A→Z, Name Z→A, Modified newest, Modified oldest; active option shows a checkmark; sort persists across searches; translated in English, Portuguese (PT-BR) and Spanish
  • Portable distribution — Windows and Linux releases now include a portable .zip alongside the installer/AppImage; extract and run with no installation required

Fixed

  • Query list panel minimum width — a second setMinimumWidth(200) call was silently overriding the 360 px set earlier, causing the panel to shrink on smaller screens; both calls are now 360 px
  • Query list panel resizing — panel now uses setMinimumWidth instead of setFixedWidth so it never shrinks below 360 px but can still grow when the splitter is dragged or the window is maximized

Changed

  • Tables/columns chip sections — wrapped in a scroll area (max 52 px height) so queries with many tables or columns no longer push the SQL editor off screen
  • Search bar — removed the help (?) button; search operator tooltip moved to the search field itself, visible on hover
  • Quick Search rename — "Command Palette" renamed to "Quick Search" across all locales (EN, PT-BR, ES) to better reflect its purpose; hint and placeholder text now fully localized

[1.0.3] - 2026-06-15

Added

  • Tag autocomplete — typing in the tag field (query editor and New Query dialog) now suggests existing tags from the index
  • Sort by modification date — query list is sorted by file modification time (newest first) by default across all views (All queries, folder, search results)
  • Modification date in metadata panel — file's last modification date is shown as a dedicated section below the file path
  • date: search filter — search bar and command palette (Ctrl+P) now support date:DD/MM/YYYY to filter queries modified on a specific day; can be combined with other operators (e.g. date:15/06/2026 tag:report)

[1.0.2] - 2025-06-14

Fixed

  • About dialog links now display in the app's accent green color (#0ADE99)

[1.0.1] - 2025-06-14

Fixed

  • UI labels showing translation keys (e.g. SIDEBAR.OPEN_FOLDER) instead of text — locales/ directory was missing from the PyInstaller bundle

[1.0.0] - 2025-06-14

First public release of SQLShelf — open-source desktop SQL query manager built with Python + PySide6.

Features

Core

  • Open and index any folder of .sql files with automatic frontmatter YAML detection
  • Multi-folder explorer with persistent project selection and global "All queries" view
  • Full-text search (FTS5) with table:, col:, and tag: prefix filters
  • Debounced async search with green search bar styling
  • File watcher (watchdog) with ~500ms debounce — index stays in sync without manual refresh
  • SQLite index is fully regeneratable; .sql files on disk are the source of truth

Editor

  • SQL syntax highlighting via QSyntaxHighlighter
  • Line numbers and current-line highlight
  • Metadata panel with read/edit mode (title, description, tags, favorite, author)
  • Tag chips with inline editor
  • Clickable absolute file path in metadata panel
  • Copy frontmatter template to clipboard (Edit menu)

UI

  • Light and dark themes via Settings → Theme (live switching)
  • Language toggle EN/PT-BR via Settings → Language (i18n system)
  • Two-line query list delegate with title, description and tag summary
  • Sidebar with priority nav (Favorites, Recent) and collapsible Browse section
  • Command palette button in toolbar
  • Logo swaps on theme toggle

Indexing

  • Progress dialog during initial indexing
  • Deindex (remove stale entries) on project close
  • Startup status feedback

Platform

Platform Artifact
Windows 10/11 x64 SQLShelf-1.0.1-windows-x64-setup.exe (Inno Setup installer)
Linux x86_64 SQLShelf-1.0.1-linux-x86_64.AppImage

Requirements (if running from source)

  • Python 3.12+
  • pip install -r requirements.txt
  • python main.py

SQLShelf v1.0.7

Choose a tag to compare

@github-actions github-actions released this 23 Jun 22:35

Changelog

[1.0.7] - 2026-06-23

Added

  • System tray — closing the main window now minimizes SQLShelf to the Windows system tray; double-click the tray icon or Restore to bring it back
  • Windows autostart — new toggle in Preferences (Edit → Preferences) to launch SQLShelf automatically on Windows login via the registry
  • Quit action — File → Quit exits the application immediately without minimizing to the tray
  • Status bar result count — the status bar shows how many queries match the current search in real time
  • Statistics dialog — Help → Statistics shows a summary of the open project: total queries, tags, tables, columns and index size
  • Version in About dialog — Help → About now displays the current application version

Changed

  • Preferences moved to Edit menu — Preferences action relocated to Edit → Preferences for better discoverability
  • Open in SSMS removed — View → Open in SSMS action removed; use the clickable file path chip in the metadata panel to open a file externally

Fixed

  • Tray exit — QApplication.quit() is now called on the tray Quit action, ensuring the event loop exits cleanly when the main window is hidden

Docs

  • Added comprehensive database schema reference (docs/database-schema.md) covering every table, column, trigger, index and search operator

[1.0.6] - 2026-06-22

Added

  • Force reindex progress modal — clicking Forçar Indexação now runs the scan in a background thread and shows a progress dialog with a progress bar, instead of blocking the UI silently

[1.0.5] - 2026-06-22

Added

  • Alias chips — table aliases extracted from the SQL body (e.g. FROM Orders AS o → chip o) are displayed as a dedicated ALIASES section in the metadata panel; clicking navigates to the first occurrence in the editor
  • Select All / Copy buttons — two buttons added to the editor toolbar in view mode: Select All selects the full SQL body; Copy copies it to the clipboard without selecting

Fixed

  • Ctrl+N shortcut — removed a duplicate QShortcut("Ctrl+N") that caused the Ambiguous shortcut overload: Ctrl+N warning in the terminal; the shortcut on the menu action is sufficient

Changed

  • Occurrence highlighting — placing the cursor on a word (or selecting text) highlights all other occurrences in the SQL editor with a distinct background + foreground color, preserving readability over syntax-highlighted tokens
  • Metadata chip navigation — left-clicking a table, column or alias chip now jumps to the first occurrence of that token in the current SQL editor (whole-word, case-insensitive); right-click shows a context menu with Go to occurrence, Search in all queries and Copy name
  • File path chip — right-click now shows a context menu: Copy absolute path, Copy folder path, Reveal in Explorer

[1.0.4] - 2026-06-16

Added

  • Check for Updates — new menu item under Help; queries the GitHub Releases API in a background thread and shows a dialog with the result; if a newer version is found, offers a direct "Download Update" button (downloads and launches the Windows installer) or "Open Release Page" (browser); a silent check also runs 5 s after startup and displays a status-bar notification if an update is available
  • Sort button (⇅) in query list — dropdown with four options: Name A→Z, Name Z→A, Modified newest, Modified oldest; active option shows a checkmark; sort persists across searches; translated in English, Portuguese (PT-BR) and Spanish
  • Portable distribution — Windows and Linux releases now include a portable .zip alongside the installer/AppImage; extract and run with no installation required

Fixed

  • Query list panel minimum width — a second setMinimumWidth(200) call was silently overriding the 360 px set earlier, causing the panel to shrink on smaller screens; both calls are now 360 px
  • Query list panel resizing — panel now uses setMinimumWidth instead of setFixedWidth so it never shrinks below 360 px but can still grow when the splitter is dragged or the window is maximized

Changed

  • Tables/columns chip sections — wrapped in a scroll area (max 52 px height) so queries with many tables or columns no longer push the SQL editor off screen
  • Search bar — removed the help (?) button; search operator tooltip moved to the search field itself, visible on hover
  • Quick Search rename — "Command Palette" renamed to "Quick Search" across all locales (EN, PT-BR, ES) to better reflect its purpose; hint and placeholder text now fully localized

[1.0.3] - 2026-06-15

Added

  • Tag autocomplete — typing in the tag field (query editor and New Query dialog) now suggests existing tags from the index
  • Sort by modification date — query list is sorted by file modification time (newest first) by default across all views (All queries, folder, search results)
  • Modification date in metadata panel — file's last modification date is shown as a dedicated section below the file path
  • date: search filter — search bar and command palette (Ctrl+P) now support date:DD/MM/YYYY to filter queries modified on a specific day; can be combined with other operators (e.g. date:15/06/2026 tag:report)

[1.0.2] - 2025-06-14

Fixed

  • About dialog links now display in the app's accent green color (#0ADE99)

[1.0.1] - 2025-06-14

Fixed

  • UI labels showing translation keys (e.g. SIDEBAR.OPEN_FOLDER) instead of text — locales/ directory was missing from the PyInstaller bundle

[1.0.0] - 2025-06-14

First public release of SQLShelf — open-source desktop SQL query manager built with Python + PySide6.

Features

Core

  • Open and index any folder of .sql files with automatic frontmatter YAML detection
  • Multi-folder explorer with persistent project selection and global "All queries" view
  • Full-text search (FTS5) with table:, col:, and tag: prefix filters
  • Debounced async search with green search bar styling
  • File watcher (watchdog) with ~500ms debounce — index stays in sync without manual refresh
  • SQLite index is fully regeneratable; .sql files on disk are the source of truth

Editor

  • SQL syntax highlighting via QSyntaxHighlighter
  • Line numbers and current-line highlight
  • Metadata panel with read/edit mode (title, description, tags, favorite, author)
  • Tag chips with inline editor
  • Clickable absolute file path in metadata panel
  • Copy frontmatter template to clipboard (Edit menu)

UI

  • Light and dark themes via Settings → Theme (live switching)
  • Language toggle EN/PT-BR via Settings → Language (i18n system)
  • Two-line query list delegate with title, description and tag summary
  • Sidebar with priority nav (Favorites, Recent) and collapsible Browse section
  • Command palette button in toolbar
  • Logo swaps on theme toggle

Indexing

  • Progress dialog during initial indexing
  • Deindex (remove stale entries) on project close
  • Startup status feedback

Platform

Platform Artifact
Windows 10/11 x64 SQLShelf-1.0.1-windows-x64-setup.exe (Inno Setup installer)
Linux x86_64 SQLShelf-1.0.1-linux-x86_64.AppImage

Requirements (if running from source)

  • Python 3.12+
  • pip install -r requirements.txt
  • python main.py