Repository navigation
v0.9.0
Highlights
- Arrange the debugger your way. Its panels (Debugger, Variables, Watches, Breakpoints, SQL plan) are tabs you can drag into splits or floating windows, and the arrangement is kept (#163).
- Misestimates come to you. Every stop checks the plans of the statements that just ran and marks a bad estimate in the gutter on its line. The SQL panel opens only when it's needed (#162).
- Hover what you selected. Hovering a selected
art_(1)orl_order.lines(i)shows that element, with subscripts that name variables. OPAQUE values say why they can't be shown (#165, #166). - Completion in large schemas finds every name, matching by prefix, word starts or substring (#160, #161).
- INSERT exports go into the table the query reads, and a
&in a value no longer becomes a substitution variable (#158, #159).
Changed
Debugger
- The panels are tabs of their own (#163): Debugger (the stepping buttons, the state and the call stack), Variables, Watches, Breakpoints and SQL plan. Drag them into tabs, splits or floating windows, or close the ones you don't need. The arrangement is kept across restarts, and Show Debugger brings back a closed panel.
- By default they sit side by side below the code, breakpoints behind watches, and the SQL plan opens right of the code. Its tab follows the toolbar's SQL (closing it hides the plan, the checks go on) and comes to the front on a misestimate. The toolbar wraps in a narrow tab; the shortcuts are in the buttons' hover text.
- The SQL panel stays closed until it's needed (#162). Every stop checks the plans of the statements that ran in the step. One whose estimates are off by 10× or more (with at least 200 rows on one side) gets a warning in the gutter on its line, with the note as hover text, and the toolbar's SQL shows ⚠ and their number.
- The panel opens on such a statement by itself the first time it is flagged (Open the SQL panel on a misestimate, Settings → Debugger). Plan statistics moved from the debugger's toolbar to Settings → Debugger.
- Hovering a selection shows what it reads (#165): selecting
art_(1)and hovering it showedart_, the whole collection. When the mouse rests in a selection that reads as a path (art_(1),l_rec.items(2).name), the hover shows that element or field. - Subscripts can name variables of the frame in hovers and watches:
l_order.lines(i)islines(3)whileiis 3, and a text variable is a key of anINDEX BY VARCHAR2table. Hoveringamountinl_order.lines(i).amountshows the whole path, no longeri.amount. - OPAQUE values say why they have no contents (#166) when their type is declared in the package spec of the debugged body (debugging compiles only the body with debug information) or is a SQL type: the unit owner's, another owner's (
sys.odcivarchar2list) or one reached by a synonym. Oracle's debugger can't read into an OPAQUE value at all; a watch or hover on one of its elements or fields says "art_ is OPAQUE: its contents aren't available" instead of "art_ has no (1)".
Results
- INSERT statements go into the table the query reads (#158): Copy as → SQL INSERT, Export and Execute to file (
.sql) wroteinsert into my_tablewhatever the query. Forselect * from hr.orders where …they writeinsert into hr.orders, the name as the query has it. Results of joins and other queries over several tables keep the placeholdermy_table.
Fixed
- A
&in an exported value turned into a substitution variable when the INSERT statements ran (#159):'Missing (H&L)'asked forLin a SQL window (and in SQL*Plus) and inserted other text. The&is written outside the quotes now:'Missing (H' || chr(38) || 'L)'on Oracle,N'…' + NCHAR(38) + N'…'on SQL Server,E'…\x26…'on PostgreSQL and a hex literal on MySQL. - Completion:
- it offered wrong names in large schemas (#160). The popup asked once, after two letters, for the best 300 names, then only filtered those while typing on: names past the first 300 (
mxn_it…after hundreds ofmxn_a…) never showed, and names that merely contained the typed letters somewhere (mxn_access_mgmt_histformxn_it) filled the list. A list cut short is asked for again while typing on, and names match by prefix, word starts (mxn_it→mxn_inventory_transaction_tab) or substring, no longer by letters scattered through them; - it could lack objects of a large schema (#161): the schema's objects and the public synonyms were read in one query cut at 50,000 rows, in no order. The schema's objects are read in full now, the public synonyms after them. A materialized view is offered once, no longer also as its table of the same name.
- it offered wrong names in large schemas (#160). The popup asked once, after two letters, for the best 300 names, then only filtered those while typing on: names past the first 300 (
- New SQL (toolbar, File → New SQL Window, Ctrl+N) opened the window without the keyboard focus in its editor: typing went nowhere until a click into it (#157).
- Debugger: hovering a field (
nameinl_rec.name) showed its value for one frame only, then the popup was gone (#164).
Full Changelog: v0.8.0...v0.9.0