Skip to content

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 28 Oct 07:08
· 455 commits to master since this release

Highlights

  • Debugger setup. When the database can't connect back to Pythia to debug, the setup finds out why (privileges, network ACL, host name, firewall) and fixes it, as you or through a DBA (#122).
  • Change values while debugging, Run to Cursor, and breakpoints and watches that survive a restart (#117).
  • Errors lead to their code. Each line of a PL/SQL error stack in Messages opens the code it was raised in, at that line (#112).
  • Sessions and Blocking Sessions on MySQL/MariaDB, PostgreSQL and SQL Server, and their users and roles in the object browser (#131, #130).
  • Bind and substitution variables in a panel next to the SQL editor instead of a dialog before each run (#110).
  • Pythia starts with the connect dialog, on the connection you used last: press Enter to connect again (#132, #134).

Added

Debugger

  • Debugger setup (Debug → Debugger Setup…, Setup… in the Debugger panel and Settings → Debugger, and on its own when a debug run can't connect) (#122):
    • tries each host the database might reach this computer by (the address the database sees, its full and short name, one you type) and says why one fails: no ACL entry, a name the server can't resolve, refused, or dropped on the way;
    • offers what's missing: Use a host that works; the grants and the ACL entry (this host, its subnet or domain, or any), run as yourself, through a saved DBA connection or a user and password, or copied for a DBA, with the script to undo it;
    • adds a firewall rule after asking: Windows Firewall (also removing rules that block Pythia, left by answering Cancel to Windows' prompt), ufw, firewalld or the macOS firewall;
    • new setting Debugger ports (Settings → Debugger) for firewall rules and ACL entries limited to a few ports.
  • Change values while stopped (#117): double-click a value in Variables or Watches, or right-click → Set value… or Set to NULL, for local variables, IN OUT and OUT parameters, record fields, collection elements and package globals. Numbers are checked against their precision and range first, and a value the database refuses says why.
  • Run to Cursor (Ctrl+F7) continues to the cursor line and stops there once, also in a unit that isn't loaded yet (#117).
  • Kept across restarts: breakpoints with whether they're enabled, their conditions and hit counts, the watches and Break on exceptions (#117).

Program windows

  • The outline has a context menu (#124): Test… and Debug… a procedure or function (overloads included, from the spec's or the body's outline), Go to body / Go to specification, Find references and Copy name. Entries that can't work (private and local subprograms, units not compiled yet) are disabled and say why.

Errors

  • Every line of a PL/SQL error stack in Messages (ORA-06512: at "OWNER.NAME", line N) is a link to the package body, procedure, function, type body or trigger at that line; hovering shows the line's code (#112).
  • Open where raised, next to Fix with AI, opens the innermost one whose source you can see. Lines in code you can't see say why on hover.

MySQL/MariaDB, PostgreSQL and SQL Server

  • Monitor → Sessions and Blocking Sessions, as on Oracle (#131):
    • every session, idle ones too, with user, host, database, program, status, wait, time, open transaction, blocker and statement; filter, sort and Active only;
    • the blocking tree shows who waits for whose locks, idle blockers with an open transaction marked;
    • double-click opens the session's details; the menu cancels its statement or ends the session after asking, and opens the statement in a SQL window;
    • the dashboard's "connections by …" bars open the sessions they count.
  • Users and roles in the object browser (#130): MySQL's users as user@host, PostgreSQL's login roles as users, SQL Server's database users and roles. Copy name and Drop…; editing and creating them stays on Oracle.
  • MySQL/MariaDB: the object browser reopens the database you picked last for each connection, unless the profile sets one (#133).

Changed

  • The connect dialog opens when Pythia starts (#132), on the connection used last with its saved password, so connecting again is one Enter (#134). On a first start it opens empty for a new connection; Cancel leaves Pythia without a connection as before.
  • SQL windows show their bind and substitution variables in a Variables panel next to the editor instead of asking in a dialog before each run (#110). The values stay visible and can be changed at any time; only a statement with a variable that has no value yet waits for one. Debug works the same way. &var keeps its value for the window like &&var.

Fixed

  • Read-only connections ran statements that aren't queries in some cases: the rest of a script after its first statement, a statement after its variables were entered, and Profile and Debug. Every statement is checked now, and Profile and Debug are refused (#115).
  • Favorites and recent objects:
    • disconnecting the connection the object browser showed, or connecting its profile again, cleared them for every connection, for good (#136);
    • they were lost, with the open project, when Pythia was closed with no document open (#118).
  • Test… and Debug…:
    • the generated block didn't compile for collections, records, %ROWTYPE, objects, BLOBs, XMLTYPE and ref cursors; it now prints them (collections element by element, records field by field, cursors row by row) (#120);
    • a unit with a quoted mixed-case name ("MyPkg") was called lowercased (#121).
  • Debugger:
    • when the debugged session couldn't connect, the panel kept saying Waiting for the session…; the run now ends and says why (#123);
    • Watch on an element of a collection with text keys (l_map('Key')) didn't find it (#119).
  • Editor:
    • trigger compile errors were marked too high, by the lines of the trigger's header (#114);
    • Switch Spec/Body jumped to the wrong overload when the body orders them differently than the spec (#125);
    • the status bar's invalid objects count didn't follow compiles in program windows, object and table editors, or PL/SQL blocks in SQL windows (#127).
  • MariaDB: explain plan failed with Unknown EXPLAIN format name: 'tree' (#128), and the Uses / Used by tabs with Unknown table 'view_table_usage' (#129).
  • Look and settings:
    • light theme: selected text was almost invisible (#111);
    • the fields of the variables prompt were only a few characters wide (#109);
    • a long hint in Settings → Queries made the settings window wider than the screen (#113);
    • Settings → Formatter: the New profile row didn't line up at a bigger interface font (#116).

Downloads

Every package comes in two flavors:

  • pythia_… / pythia-v0.7.0-<platform>…: the pure-Rust Oracle driver, so no Oracle client is needed. Take this one unless you need the other.
  • pythia-instantclient_… / …-instantclient: uses the Oracle Instant Client, which you install yourself. You need it for Oracle 11.

Installing one flavor replaces the other; settings and connections stay.

Platform Packages
Linux x86_64 .deb, .AppImage, .tar.gz
Windows x86_64 .msi, -setup.exe, .zip
macOS (Apple Silicon aarch64, Intel x64) .dmg, .tar.gz

SHA256SUMS.txt has the checksums of all files.

Full changelog: CHANGELOG.md · compare v0.6.0...v0.7.0