Skip to content

Releases: kackerx/sqlmux

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 05:41

Changelog

Features

  • ca332c8 F17.10: Preview's placeholders are known by where they came from (marks with a NUL for the kept value and score), not by what the text reads, so a member called NaN or a value that reads is shown as it is
  • 2c26db6 F17.11: a statement sqlmux sends that the command cut is run on as pages of itself (select * from (…) limit n offset m) until a page is short, up to 100000 rows; a page as long as the cut is taken as cut too, the command cannot tell its wall from the end; a user's query stays cut and says so
  • f7cb877 F17.11: an exec item that says truncated is a truncated result, as one cut at maxRows is
  • 631a299 F17.11: review of node 4 — the quick SQL's statement is not paged (a context value Quick sets, Query reads), the end of a page run is its length alone: a short or empty page ends it whatever it says of being cut
  • ca7d529 F17.12: an exec PG connection has the database level (Engine.Databases is the one current_database() says; the tree shows it, the default, on the connection's own Conn)
  • 18f1e5c F17.13: a list emptied reads back as nil, so taking the last schemas line out of a block no longer fails the readback check (a pick of all again could not be saved)
  • ed393f5 F17.13: a test of picking all again after the only schemas line was written
  • a95c3cf F17.13: environment — TestLoadDocs reads the start of SET's line (Redis 8.10 added IFEQ and the like), the nvim golden's version line is v0.12.6
  • 52847da F17.13: openPick sets the fixed schema before the one loop that reads it (the second loop was dead: the schema names go to is always loaded)
  • e425d14 F17.13: pick which databases and schemas the tree lists and loads (connections.toml databases / schemas written back in the block, the COLS list over the tree with a title, tree.pick in the right-click menu and the palette, the catalog's Tables / Functions / Sequences asked for the picked schemas only, picked/all after the name)
  • 1d4b459 F17.13: review of node 5 — the schema list keeps one picked (the schema names go to: current_schema(), public when none; MySQL's DSN database) and loads it whatever the setting names, a list left with none writes nothing; tests for the catalog's Functions and Sequences, the load's own all, MySQL's note, every session, a temp connection, the note of what is loaded, a click outside, column keys in a pick list, a catalog not read, the note's color
  • 198e631 F17.14: a result tab's heads can be dragged for the width too (Grid.Edges apart from Heads: the heads are click targets for sorting in a table tab only)
  • efd4e34 F17.14: manual column width (C-w > / C-w < / C-w = on the column the cursor is on, a count for the steps, widths kept by name on the tab and in the layout file as col_widths, the │ between two heads dragged with the mouse; a column with a width is not squeezed, capped or sized by its values; a turned grid has none)
  • f16b2c9 F17.14: tests of the drag — the region is the │ drawn (not a cell to its left), a move with a column dragged redraws the frame and the │ follows the pointer, the drag takes its pane's focus
  • cb86eb0 F17.14: the column width keys are > / < / = (the user's call after trying C-w > / C-w < / C-w =); the C-w ones are gone
  • 7d5ea0b F17.14: the edges test's switch as ifs (lint: exhaustive)
  • d6c1f18 F17.1: a tab bar that does not hold its tabs scrolls: the current one in sight, ‹N and N› for the others, clicks on them scroll a screen (§7.8)
  • 40a7295 F17.2, F17.3, F17.4, F17.6: review of node 1 — windows by two i18n keys, the quick SQL's history and forgotten hints whether or not the palette is open, one rule for RunSafe, a temporary Redis connection named by the db it connects to, the preview's vim keeps the panes' keys out, the wheel's list by the hit table
  • 481f5a5 F17.2: the quick SQL of a Redis connection runs a command on Main as the console does: replies as rows, writes kept back when read-only, dangerous ones asked, completion as the console's, kept in history.jsonl (§12, §9.8)
  • 3ee3e6a F17.3: a redis:// or rediss:// URL on the command line opens a temporary Redis connection named db@ (§14)
  • bf27547 F17.4: the 'connecting' toast of a new session goes when it is connected, '1 window' is singular, the keys reference names no feature or section of the design (§7.8, §6.7)
  • 002925d F17.5: four engines in the formula's and the npm package's description, --version from the module and vcs stamps and no (none, unknown), LICENSE in each npm package, -s -w in the formula's ldflags (§15)
  • b998661 F17.6: the wheel scrolls the palette's preview over it and the list over the list; palette.preview.focus (C-o) puts the focus in the preview, a read only vim, esc back to the list (§12)
  • b078f41 F17.7, F17.8: review of node 3 — the exec Redis scan asks no TYPE (generic key icon, the tab asks its own), an exec PG lists no other databases, a redis command needs {args...} as an item, Inline reads strings and comments with sqlkit.Scan, one runCommand for both runs, tests for the tag, an item's err, the stderr tail and the manager's list
  • 0ea8c9d F17.7: engine exec, PG dialect: a command runs each statement (internal/db/exec), the catalog, paging and quoting are postgres's over it, read only, no connect form for it (§8.8, §14)
  • d5c2878 F17.8: engine exec, Redis dialect: go-redis over a pipe that this package answers by running the command per request (RESP2 from its JSON), one db, read only, the same tree, key tab and console (§8.8)
  • 93c8d72 F17.9, F17.10: production connections (marked in the border, status block and tab titles, read only unless read_only = false is written, every write asked about under the connection's name, a form switch) and a save that shows its statements first (db.Preview and Source.Preview, one question for production whatever preview_save says)
  • 74cf0f8 F17.9, F17.10: review of node 2 — a Redis preview is plan run on the key as the tab loaded it (a reader for plan, Describe gone), the statements' order written once (db.builders), a golden and an INSERT in the preview, tests for the production title, line breaks, border color over zoom, the form's production switch, a blank TTL said as no expiry
  • 8baeb8c F17.9, F17.5: a blank or 0 TTL on a production connection is asked as no expiry (the blank arrives as 0, so the text is chosen by the TTL), the formula's desc and npm's description under brew audit's 80 characters

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 17 Oct 15:43

Changelog

Features

  • 8041bd1 F16.11: a kind icon and color before each completion candidate, an icon before each right-click menu item, none in ascii menus (§7.6, §7.7, §9.7); the Redis key type's json icon is now jsonview
  • a454866 F16.11: keyword and value glyphs as the user's blink.cmp has them, no function icon, the menu's JSON item reuses the key type's json icon, which keeps its name (§7.7)
  • b0251d0 F16.11: range loops in the menu icon color test (lint)
  • f7b55f5 F16.11: tests for the menu icon colors, the WHERE and Redis-without-DOCS candidate kinds, value and CTE kinds; drawMenu looks the icon up once and sets only the picked row's color

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 08:05

Changelog

Features

  • 796e39e F16.0: node 1 review fixes — Conn.driver() and its fallback to eng gone (the fixtures that need a driver set drv), db.Query.Desc and its branch in Select gone (the tab turns the default order into an Order of the key columns, the page tests say it so), the ORDER toast names the column, format.go asks sqlkit for its statements beside its dialect again, two test nits
  • 6eda9bb F16.0: the SQLite page test orders t_log by its rowid, the key a table with none has (the column id it had by mistake is a string literal there)
  • edfe722 F16.0a, b: db.Source under the table tab — SQLTable wraps the statements of Page, Count, Select and Save (Meta or Main as the mode says, a savepoint in a transaction, a read-only connection's save refused); the tab's fetch, count, save and export go through it, cursor paging keeps the cursor of each page seen, Count -1 shows ?, Columns.Sortable and NoInsert gate ORDER and a new row; the fake Source test and the per-engine SQLTable test
  • 2f0dac6 F16.0c, d: db.Driver (Connect, Broken, ErrorOf) split out of Engine, the driver table, Conn.drv with eng only for a SQL engine, counted.Unwrap; the run pipeline of a query (statements, read-only and dangerous judgments, the page and its LIMIT, what resets the schema, DDL, a transaction's end, no BEGIN before) behind the lang interface with sqlLang; what hint, format, templates and the query's highlight ask of the engine stays SQL's, to be given its own language where a second one is (F16.4, F16.5)
  • 8547fd6 F16.10: the dbs of a Redis server go by number in the tree, the DSN's among them and open, not first (§7.8)
  • 96c5fe4 F16.1: Redis connects — internal/db/redis (go-redis v9, one connection not a pool, RESP3, no retries and no read timeout, a cancel closes the connection so a blocked command ends and the Worker dials again, db.Conn's Exec of console lines with redis-cli's splitting and Query of one command, replies as tables, Driver's ErrorOf and Broken, WithDB for a child db, ssh through Options.Dialer); engine = redis, [redis] delimiter / scan_keys / load_all and the connection's delimiter; the form's redis engine, db row and PING test; the redis icon; nothing SQL's is asked of a connection with no engine (catalog, completion, hints, gq, quick SQL, cell filter, INSERT yank, the WHERE's, a run says it cannot yet); redis-stack-server in docker-compose and ci, testdata/seed/redis.txt, SQLMUX_TEST_REDIS
  • 2f5a1aa F16.1: a tunnel whose ssh has ended is a lost connection for every engine, so the next request dials again (db.NetworkError knows the ssh failure; it has no Unwrap, go-redis strips one level off a handshake error)
  • 54be5cc F16.2: a Redis key's delete is asked about (Delete key ?, confirm_dangerous), the menu item and dd alike (docs 934065c)
  • 024e97c F16.2: review fixes — the tree's filter result is each window's own (treeState.found), one SCAN loop for Scan and Each, just check runs the Redis tests (SQLMUX_TEST_REDIS), and tests for what the mutations left alive: the DSN's db listed, UNLINK 500 at a time (unlinkAll), typing in the filter asks, the cursor goes to the first key, the test button's PING, a cancelled dial is not a lost connection
  • c8378ab F16.2: the tree of a Redis connection — dbs as connections of their own (db0 with its size), under a db the namespaces of its keys' names by the delimiter ([redis] delimiter, the connection's over it) with how many keys each holds, then the keys with the icon and color of their type; a db is read by SCAN on Meta (never KEYS, the type of a batch in one pipeline) up to scan_keys and says what it read of how much there is; the tree's filter asks the server (SCAN MATCH, a * at each end unless typed) after the typing stops; a key is deleted, renamed (a taken name asked about) or given a TTL, a namespace deleted after finding every key under it and the question of the true number, UNLINK 500 at a time, C-c says how many went; R on a db reads it again; icon names str hash list set zset stream json in [icon]; the header counts keys
  • 03338f8 F16.3: Rebuild reads about load_all of a hash or set (the HSCAN / SSCAN calls counted) and returns the error of a read that is refused
  • d70b0f1 F16.3: Rebuild reads the entries of a hash or set as they come, scanLoop gives LoadAll of them and no more
  • 9b7c129 F16.3: a key read by HSCAN or SSCAN pages by LIMIT whatever a batch holds (the cursor of a page cut in the middle of a batch is cursor:skip)
  • f47f919 F16.3: review fixes — Quote checks the text's UTF-8 once, not per byte; Rebuild reads a hash or set by HSCAN / SSCAN up to load_all (scanLoop, shared with the page) and returns what failed; Save's checks tell a nil (the row is gone) from any other error, which is returned as it is; glob compiled once per filter and [!a] no longer a negation (Redis has only [^a]); RedisJSON integration tests (skipped without the module); tests for load_all's edge, a string's count, WRONGTYPE, the TTL in a rebuild, the change a failed command names, the key tab restored, the TTL chip
  • f00e536 F16.3a: a Redis key as a table — Key reads a string, hash, list, set, zset, stream or JSON value as rows (whole when up to load_all, else by HSCAN / SSCAN / ZRANGE offset / LRANGE / XRANGE cursor; Redis glob filter and sort locally), writes the changes back under WATCH comparing every old cell, exports up to scan_keys (ErrTruncated), rebuilds the key as commands; Columns.NoUpdate
  • 07223e3 F16.3b: a Redis key opens in a tab (↵ on it in the tree, the menu's Open) named for it, on Key as its source, with the Info row over MATCH (type, length, TTL, encoding, memory; TTL, rename and delete run on the key of the tab and the tab follows the name); layout keeps kind = "key", its key and db and no page
  • 8e3b59c F16.3c: the JSON view of a key tab is the key's own value by its type (hash an object, list and set arrays, zset [member, score], stream {id, fields}), the DDL view is the commands that make it again (Key.Rebuild, read anew each time), an export past scan_keys is a part of the key and says so, a key's state name is connection/db/key; goldens of every type's tab
  • b3a6443 F16.4: a Redis console line goes again after a reconnect only when every command of it carries the server's readonly flag (lang.Reruns; PUBLISH, EXEC, PING and what the server did not list do not), as §8.7 says
  • 9135d31 F16.4: a command the server lists as read-only goes again when the connection was lost under it (the console runs it safe, a write keeps its error and the toast to run it); the palette leaves out the quick SQL on a Redis connection
  • 25110bf F16.4: the console of a Redis connection — a command a line (redisLang: # and blank lines none, ↵ on the line the cursor is on), the commands the server lists (COMMAND, loaded once with the db) say what a read-only connection keeps back (write, may_replicate, scripts, administration) and what is asked about (@dangerous); a reply is laid out as a table (arrays of arrays of one length by column, a sorted set's pairs member / score), held whole and paged in memory, exported whole without running again; C-c on a blocking command; highlight by the server's command names; the db in the title is a dropdown of db; a line with a password is not kept in the history; gq is not offered by the palette for it
  • 35cf9f7 F16.4: the console waits for the server's commands (COMMAND is asked first, ahead of the scan of the keys, and a run before it answers says so and does not go); the completion's names are forgotten after a command that writes and when the db is read again
  • 82ad643 F16.4: the pointer of the rerun rule is §8.2
  • a9510dc F16.5: a server with no COMMAND DOCS completes the names COMMAND lists
  • c384691 F16.5: the completion tests of the keys do not depend on the hash seed of the server (db0 has more keys than the rounds read; all of them are asserted in a db of the test's own)
  • 178fd20 F16.5: the console completes and says what a command takes — COMMAND DOCS read with the commands (Doc, Arg: the signature line of a command, [] for what may be left out, … for what is given again, oneof and blocks; where the next word goes, by tokens, blocks and what is given again), the signature line with the current argument lit (a blank between the fields), candidates for command names, subcommands, the tokens of an argument, the keys of the db (a few rounds of SCAN MATCH once the typing stops) and a hash's fields (HKEYS up to load_all), quoted when they have to be; a server before 7 completes the names alone
  • 484cfc1 F16.6: the arrow keys of the grid and the tree are in default.toml, vim mode as well as not (nvim's NORMAL has them); default-novim.toml keeps PgUp / PgDn / Delete and the query's keys; the hints of vim = false still name the arrows first
  • 8d5f70a F16.8: s in the JSON view is a flash-style jump over its text, as in a query (§6.10, §6.4)
  • ac9726c F16.8: the jump's tests hold the nearest match and the gutter out; the text area of a JSON view in one place (§6.10)
  • ff01374 F16...
Read more

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 03:28

Changelog

Features

  • d2b10e0 F15.10: a value's candidates come only where one begins — after a ( , = <> or !=, not once it is typed (after 1 or now() and a blank)
  • cf7934b F15.10: value completion — where a value of a column goes (an INSERT row, an UPDATE's SET, a condition) the candidates are the column's: a time's now() and current_timestamp, an enum's labels quoted or a boolean's, null, default (not in a condition), from the cell options' own choices; a string typed there matches whole
  • c97a5df F15.11: INSERT INTO t and a blank offers (all columns) values () with a tabstop in the values' parentheses, an UPDATE's SET lists its own table's columns only, and a name that has to be quoted is completed quoted (sqlkit.Dialect.NeedsQuote; the §9.7 ponytail limit is gone)
  • 1ae0694 F15.11: an UPDATE's SET takes the columns branch once the catalog knows one of its tables, though its columns are still being asked for (no list until they come, not the tables and keywords of a word anywhere)
  • c3cd6a5 F15.11: node 3 review fixes — no NULL in a condition; one reserved-word table per dialect (MySQL 8.4 RESERVED, SQLite keywords) for quoting; UPDATE's SET lists every table before it (MySQL join); ARRAY[…] commas are not a row's; INSERT INTO's parse once (intoAt, with its alias) and the name test once (isName); the WHERE's values come from valueChoices; ui.Truncate for the ellipsis; the unreachable table condition goes
  • e056ebf F15.1: a restored table tab with no schema gets db.schema.table once the catalog is in; the quit question lists a connection and its database both
  • e25ca90 F15.1: review fixes — the palette lists and opens the tables of every database by one key (Conn.tableKey, shared with state.json), titles and questions name the database, WithDatabase drops the URL query's dbname, the connection dropdown's current item does nothing, labels in toasts, tests of what survived
  • 563c626 F15.1a: Engine.Databases (PG: pg_database minus templates, closed and unconnectable ones), Connection.Database override (postgres.WithDatabase on either DSN form), Conn.inDB child connections, the list read with the catalog, history.jsonl's db field
  • 25b1df2 F15.1b: PG's tree is connection, database, schema; a database dials on open as a Conn of its own, kept by the layout, query state, table keys and history; query.schema lists the databases first
  • 65bdceb F15.2: node 4 review fixes — MySQL through ssh gives up at the DSN's timeout (connect ctx), and a process Close ended is no ssh failure; the driver's ssh network registered once, each connection's dialer in its own ctx (also for KILL), so concurrent connects keep ssh's own words; tests for both and for the 4 KB tail
  • 72cead7 F15.2: ssh tunnel — connections.toml's ssh = "user@host" dials the server through the local ssh -W host:port (BatchMode, ExitOnForwardFailure), its stdin and stdout the net.Conn of pgx's DialFunc and the MySQL driver's registered dial; ssh's stderr is the connection's error, a cancel dials through it too; the connection form has an ssh row in the fold (not for a file), checked not to be an option; README says ssh-add first
  • 333ad64 F15.2: the ssh tests' and Close's ignored errors written as ignored (lint clean), dialSSH without the argument that never varied
  • cdd7293 F15.3: the line of the field a query's value goes in — sqlkit.ValueContext reads INSERT's VALUES row, UPDATE's SET, a condition's and a call's argument with CompletionContext's scanner; ui.Signature draws it over the cursor's line (under the first), the current field lit; [query] hints = false
  • 76e1d13 F15.4: a tip on the status bar — one line about a feature, changed every 30 s and by a click on it (palette scope ? lists them all), the key it names the one the user's keymap has now, dropped first when the bar is short; [ui] tips = false turns it off
  • 3e4318b F15.4: node 4 review fixes — the tips list in the palette has the rows with a key only (tested), no key column on a tip row, the placeholder test read straight, the tipsInTests comment
  • 9cb77b8 F15.5: Editor.FitView takes the text's width from the value editor, which keeps it by Version: no cache of the editor's own; tests for the dd of the longest line and for a text too wide to fit
  • 07bf0a2 F15.5: the value editor's box is as wide as its longest line (a tab at its tabstop, the gutter and border in): half the pane at least, the pane at most, left at the cell and moved left at the pane's edge
  • 5945d8b F15.5: the value editor's width and the view's fit are kept for the text's version (Editor.Version): the walk of a text of some MB on every key made f12.2c's 200 j take 21 s instead of 5; tests for what the keys follow
  • 2f6945d F15.6: the ORDER and COLS box is as wide as its columns (the pane at most), not widened to its hints: they wrap in two rows and the last whole ones are left out when two are not enough
  • 2b16e62 F15.7: a jump's pattern that no text on the screen has ends the jump, the cursor where it was and the character dropped, as flash.nvim does; a paste the same
  • e57b9d5 F15.8/F15.9/F15.5/F15.6: M15 review of batch 1 — a snippet ends with the cursor out of every tabstop in INSERT / SELECT (nvim's CursorMovedI), not in NORMAL, and a change is put where the cursor is after it; esc in the value editor and the JSON view puts out the lit matches first (q leaves at once); the value box has the cursor's column past the longest line and the view goes back to the left as the box widens (FitView); Query.Width and drawLine share glyph; hints of a row are fitted by leadingHints in the box, the dropdown and the palette; spanAt for hits and stops; tests for the mutations that survived
  • 44ef06f F15.8: a line break typed in a tabstop takes the blanks after the cursor: the change reaches over the tabstop's end, which is still the one being filled in, so the snippet is alive with the cursor in it
  • 0b4a268 F15.8: snipSync's comment, as it is
  • e24125c F15.8: snipSync's tabstop end is max(to, b) + d, and its comment says what a change over the end of the tabstop being filled in does
  • 003765c F15.8: snippets and SELECT mode in the editor, after nvim's vim.snippet and Select-mode (measured on nvim 0.12.4): a tabstop selected, what is typed or pasted takes its place in INSERT, BS and Del delete it into NORMAL, Tab and S-Tab go between the tabstops (the last Tab to the snippet's end), tabstops still to come on the visual color; the structure templates' placeholders are the tabstops; the modeless editor selects and types over them as well
  • e2a7df2 F15.9: a test that the 关闭 button asks before it drops a change not written back
  • ceaafed F15.9: an editor's search lights its matches (search, search_current) until esc in NORMAL and leaves the pattern with [cur/total] at the right end under the text until the next key, W after a wrap, >99 past 99 (nvim search.c update_search_stat, measured on nvim 0.12.4); the query, the value editor and the JSON view alike
  • 11b2716 F15.9: the JSON view is gj, not gJ; it pages and refreshes by the keys the table's and the result's scope have for it, as the user has them (Context.Only), and json.page.* / json.refresh are gone
  • e3a14f6 F15.9: the hint row's buttons (回表格, 关闭) close with the matches of a search lit, only the esc key puts them out first; tests for the hint fitting at its edges (the first hint cut by the border, the palette's gap) and the modeless snippet's end

Others

  • 51481f4 release: the Homebrew formula's ldflags carry the commit and date (the tap job passes them to tap-formula.sh), so --version is no longer (none, unknown)

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 07:27

Changelog

Features

  • 7249b71 F14.1: M14 docs 122dbb1 — a SQLite path that is no file is an error, not a new empty database (mode=rw by default, mode=rwc makes one); DATABASE_URL opens a connection only when connections.toml has none
  • 1a0cc8c F14.1: M14 review of node 2 — A1-8 (a trigger's body is one statement after SQLite's complete.c; no BEGIN before pragma / attach / detach in the manual mode; DATE / DATETIME / TIMESTAMP shown as the standard text and compared by julianday; a REAL compared by number, ?N numbered args; a blob key makes the table read only; temporary connections out of the manager, named by what is free, with a new query), B9-19 (the rollback hook, partial unique indexes, a typeless key found by Eq, no LIMIT after VALUES, a blob is always , rowid and generated columns read only, PRAGMA query_only is a read-only break, no hidden password, the file row of an existing connection, broken connections.toml is the error, case-insensitive names by the dialect), C20-22 (one read loop for MySQL and SQLite in db.EachRow, Capped and SQLArgs; dead code out; references: lazysql drivers/sqlite.go, SQLite complete.c), suggestions a-d, tests on SQLite in the engines' integration tests
  • 3ed5ffe F14.1: SQLite (modernc.org/sqlite, no cgo; binary +3.8 MB to 26.8 MB, cold build 6.6s to 8.0s, the four goreleaser targets build in 30s): internal/db/sqlite (Conn, Engine, catalog by pragma_table_xinfo, rowid as the key and its first column for a table with none, REAL text as SQLite writes it, DEFAULT left out of an INSERT), the SQLite dialect, engine = sqlite with the file as the form's one field, the tree with no schema level, sqlmux ./x.db | postgres://… | mysql://… and DATABASE_URL as a connection kept nowhere
  • babadc1 F14.1: a rowid table's primary key that may hold NULLs is no row identity (docs 9d04fb0): the unique index or the rowid is; t_bk and t_ck in the seed are NOT NULL
  • 5c8c908 F14.1: review round 2 — Eq as two terms that each search an index (the second is one expression of the key, NULL for other text; the AND on the column made a scan of a TEXT or untyped key), the existence check reads mode from the DSN, a duplicate comment out
  • 646750f F14.2: M14 review of node 1 — items 1 (a run whose schema was not set is no statement: a failed and a cancelled SET tested), 2 (C-r over the candidate list is the history's, tested), suggestion a (historySQLMax and historyPath unexported)
  • d250487 F14.2: query history: every statement a query ran (result or failure, a cancel) is a line of history.jsonl, cut to [query] history_max at the start; C-r in a query's INSERT (query.history, also vim = false and the palette) opens the dropdown of the connection's statements, fuzzy filtered, ↵ puts one at the cursor
  • ac7e189 F14.3: M14 review of node 3 — MySQL index statements from statistics (prefix length, DESC, FULLTEXT / SPATIAL, INVISIBLE, an expression as ((expr)), made again they are the same index), group ids a column cannot take, openRef by c.table and revealTab, a dropped PG function an error, plain views no Indexes / Keys and matviews Indexes only, tests for the key order, the extension functions and the toasts (referenced: pgtui internal/db/metadata for PG constraints and indexes; MySQL has no statement of an index to port, built from information_schema.statistics)
  • fa24277 F14.3: a SPATIAL index's statement has no prefix length (statistics reports 32 for one, CREATE SPATIAL INDEX answers 1089); one in the round trip test
  • dce5fc5 F14.3: the tree's objects: a table's Indexes and Keys (fetched with its columns, ↵ on an index shows its statement, on a foreign key opens the table it points at), a schema's Functions (↵ puts the definition in a new query) and Sequences; Indexes, Keys, Functions, Sequences and FunctionDef on the three engines; seeds with indexes, functions and sequences
  • 5a90b97 F14.4: M14 review of node 3 — the placeholder selected without modes too (what is typed takes its place), the palette's Rename table…, MySQL's rename keeps the table's own database, cursorColumn reused, the dead view branch out; tests for each template's selection, an index node, nodes that are no table, a connection not up, and the menu's ends
  • a0d04ed F14.4: lint of the selection test
  • 44433ac F14.4: structure change templates: Add column…, Add index…, Rename…, Drop column…, Drop index… in the table node's menu (a view's: rename) and the palette, each a statement of the engine's own in a new query on the table's connection, the first placeholder (, , , , <new_name>) selected; a column or index the cursor is on is written in
  • 90f51a5 F14.5: M14 review of node 3 — the read only editor's keys, effects and drawing once for the value box and the JSON view (roKey, roDid, textView), a paste, ↵, grid.edit and the ↵ edit hint change no cell behind the view, the view kept over a result's paging and rerun (and turned as it was), the jsonview scope works without modes, esc takes a selection first, :q leaves, q is bound not hard-coded, T (vim's) is no longer taken, clicks and drags in the text, the WHERE typed over the view is the WHERE's, an unchanged page leaves the editor alone, Load keeps no undo step in a read only editor, changes shown by what they hold, the result menu has it, the hint row is ]/[ 翻页 · esc 回表格 from the keymap
  • 8ad392d F14.5: the page of a table or a result as a JSON array in a read only vim in the grid's place (grid.view.json, gJ, the menu and the palette): each record as Y has it, a JSON chip on the query bar, esc or q back to the table, the text following the page and the changes, ] [ R as the table's or the result's, exclusive with transpose
  • 5bf0fe1 F14.6: a cancelled MySQL statement whose KILL cannot get through no longer holds the Worker: 5s after the cancel the driver's ctx is cancelled, the connection closed and the next request redials, as Postgres' DeadlineDelay does (the ponytail limit of F5.4 gone)
  • 463879b F14.7: M14 review of node 3 — the config keeps the theme's unknown keys, not a sentence made before the language is set (the start's note was English for a Chinese user): UnknownKeys and the theme switch say them; one sentence for config.toml, connections.toml and themes (key(s)); a section it does not know is told once; the theme switch keeps both the note and the config.toml reminder; en for 翻页 / 回表格
  • dda0fb8 F14.7: a theme file's unknown keys (tokens, [icon] names and their fields) load and become a start-up note, themes/.toml: unknown keys …, and the theme.switch toast; a color that is no #rrggbb is still an error
  • 55f6d85 F14.7: an unknown [icon] entry is told by its name whatever shape it has (a string was a type error that stopped the start); its keys are not told one by one
  • b6014bf F14.8: M14 review of node 3 — Replace's left = 0 follows nvim's do_filter (ex_cmds.c) in its comment, a test for a last line indented past the view (left 9 for a width of 52 and an indent of 60, measured on nvim 0.12.4), a read only editor's Load keeps no undo step
  • 15974fe F14.8: a text replaced, as gq does, is viewed from its left again: the old view's sideways scroll is dropped in Editor.Replace, where sidescroll kept it with the cursor a few columns off its edge

v0.2.1

Choose a tag to compare

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

Changelog

Features

  • b1cb1c6 F11.1-F11.3: node 1 review fixes
  • 58f81cb F11.1: --version and the GoReleaser release workflow
  • 06d3dea F11.2: the Homebrew formula is made from the tag's source and pushed to the tap
  • 9037e7e F11.3: npm/sqlmux/bin/sqlmux.js was ignored by bin/ in .gitignore; the ignores are the root's
  • a774700 F11.3: the npm packages, a shell package over four platform packages

v0.2.0

Choose a tag to compare

@kackerx kackerx released this 10 Oct 23:51

First tagged release with an installable module path. This is the third round of usage feedback (M10, F10.1–F10.12): source only, no prebuilt binaries yet.

Install

go install github.com/kackerx/sqlmux/cmd/sqlmux@v0.2.0

Requires Go 1.26+. Prebuilt binaries, a Homebrew tap and an npm package are planned for the next release.

New

  • Record selection on tables: m marks the current record, v / V starts a VISUAL range, esc keeps it. d marks the selected records for deletion (C-s commits, as before), y copies them as a JSON array. Works in transposed view and on result tabs; the chip row shows N selected.
  • flash.nvim-style jump: s on a table, the tree, a query or the result area, type a few characters, press the label that appears next to a match. Works across panes; smartcase; ↵ jumps to the nearest match.
  • Connection groups: group = "prod" in connections.toml (or the new form field) groups connections under ── prod ── separators in the tree and the connection manager.
  • Paged query results: a query's result holds 500 rows a page ([query] max_rows); ] / [ on the result tab page through statements that got the automatic LIMIT. CSV export names its page.
  • Column order: J / K in COLS move the current column; the order is saved in layout files (order_cols) and used by yank / transpose.
  • The WHERE history / favorites list fills the pane instead of stopping at 8 rows, and flips above the input when there is no room below.
  • A new session asks for its name first (prefilled with the smallest free number).
  • The workspace in the tree lists tabs directly under windows with a ① / ② pane prefix; the pane level is gone.
  • The sidebar shows « / » toggles instead of key text.
  • Deleting an open query file from the tree closes its tabs everywhere instead of refusing.

Breaking

  • console is now query everywhere (the DataGrip wording): the tree node is Queries, actions are query.* (query.new, query.format, query.schema, query.conn, query.rename, …), keymap tables are [keys.query] and [map.query.*], the config section is [query], the theme icon key is query. Old keys are not aliased: an old [keys.console] table fails sqlmux keys --check. The data directory consoles/ and its console_<n>.sql files migrate to queries/ and query_<n>.sql on first start; renamed files are left alone.
  • The module path is github.com/kackerx/sqlmux (it was sqlmux), which is what makes go install work.

Full list: specs/m10-feedback3/task.md.