Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 03:28
· 227 commits to main since this release

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)