Bug Fixes¶
Advanced Query Analyzer¶
Syntax coloring drifted right and was slow on long queries¶
Issue. Color landed one character further right on every line after the first, so on a long script the coloring ended up well away from the text it belonged to. Tokens near the end of a long query were not colored at all. The coloring was also slow enough to be felt while typing.
Resolution. Color now lands on the token it belongs to on every line, and the whole script is colored however long it is. A keystroke on a 100-line query went from 1,230 ms to 13 ms, and on a 1,000-line query from 9.1 seconds to 56 ms.
The caret could disappear while typing¶
Issue. The caret could be mid-blink as a character landed, leaving no visible cursor until the next blink.
Resolution. The caret is drawn solid as you type.
A completion could be inserted into the wrong query¶
Issue. Accepting a completion could insert it into a different tab's query. Where the cursor had been moved with the mouse or the arrow keys after typing began, accepting a completion could also delete everything between the original word and the new cursor position.
Resolution. A completion is inserted into the query it was raised from, at the word it was raised on, and nothing else in the script is touched.
The completion list could be stranded on screen or hidden behind the window¶
Issue. The completion list could be left on screen with no way to close it, open some distance from the text being typed, or render behind the analyzer window where it could not be seen at all.
Resolution. The list opens beside the word being typed, in front of the analyzer, and closes with the query it belongs to.
The group panel designer could fail on an empty tree¶
Issue. The Advanced Group Panel designer on the Query Analyzer report read the selected node and its details without checking that either existed. Removing the last element left nothing selected, and a node exists briefly before its details are attached, so Add New, Remove, Save and simply moving through the tree could each raise an error. The guard written to catch this raised the error it was meant to prevent. Removing every element could also hand the report the wrong list back.
Resolution. Every read of the tree tolerates no selection and a node with no details attached. Emptying the tree yields an empty element list, and an element whose identifier repeats an existing one is added rather than refused.
One timed-out schema query disabled IntelliSense for the session¶
Issue. A single schema query that timed out switched IntelliSense off for the life of the window. The only way to get it back was to close the analyzer and open it again.
Resolution. A failed schema query no longer disables IntelliSense. The next request is attempted normally.
Tables with the same name in different schemas were merged¶
Issue. Where two schemas each held a table of the same name, their columns came back as a single list. The list carried duplicate entries, and a column that exists in both tables could be offered with the data type from the wrong one.
Resolution. Each table is held separately under its own schema, with its own columns and data types.
The completion filter lagged one keystroke behind¶
Issue. The list filtered on the text as it stood before the last keystroke rather than after it. Typing . also left the previous list of suggestions on screen instead of moving to the columns of the object in front of it.
Resolution. The list filters on what is on screen, including immediately after a ..
Screen elements displaced on 4K monitors in the Query Analyzer¶
Issue. On a 4K or other high-resolution monitor, controls in the Query Analyzer could be drawn out of position.
Resolution. The Query Analyzer scales correctly on high-resolution displays.
Reports and grids¶
A report that failed to build could erase its saved column layout¶
Issue. A grid's column layout has no copy of its own — it is rebuilt from the columns on screen and written back to your settings file. Applying a layout clears the grid's columns before it rebuilds them, so a run that failed part way through left the grid empty. The next save wrote that emptiness back over the layout, and a save happens on an ordinary action: dragging a column, changing a filter, or simply closing the box. Every column was then gone for good, and the only way back was an older settings file.
Resolution. A layout that did not finish is marked as incomplete, and an incomplete grid is never saved over the layout it came from. A report that fails still shows the error and an empty grid, but the layout behind it is intact and returns the next time the report runs. Drilldowns are covered by the same guard.
The Grid Layout Editor did not fit on screen¶
Issue. The Grid Layout Editor window was taller than a 720p desktop, and its controls overlapped and clipped each other instead of rearranging when the window was resized. Row Colors ran off the right edge with no way to bring it back into view, and Reset to Default sat off the left edge entirely.
Resolution. The window has been rebuilt so it fits the monitor it opens on, from 720p upwards, and every control stays reachable at any size.
Tabs, menus and saved settings¶
Shared Tabs and Permanent Tabs menus never refreshed¶
Issue. Both menus were built on the first right-click of a session and never rebuilt. A tab shared after that point never appeared on the menu, and a tab that had been deleted stayed listed and could still be clicked.
Resolution. Both menus are rebuilt when they open, so they list what is actually saved at that moment.
Saved report criteria could point at the wrong field¶
Issue. Saved criteria are stored against element numbers, and the element being replaced was found by matching part of the text rather than the whole value. Replacing element 94 also rewrote element 2094, and replacing element 12 corrupted elements 1218, 1219, 1220, 1225 and 1226. The criteria still loaded without an error — they simply referred to different data than the report had been saved with.
Resolution. Elements are matched on the whole value, so replacing one leaves every other element alone.
Table overrides were lost when older settings were loaded¶
Issue. For users whose settings were still in an older format, the entire table override list was discarded the first time those settings were loaded. There was no error and no warning; the overrides were simply gone.
Resolution. Settings in the older format are read in full, and the table override list is carried across intact.
Administration¶
Collection notes never reached the A/R aging report on Macola® ES¶
Issue. Macola® ES right-justifies the customer number, and the A/R aging report joins collection notes on an exact match. A note saved against a trimmed customer number therefore never matched a customer on the report, so collection notes entered on Macola® ES never appeared on the aging report at all.
Resolution. Customer numbers are stored in the form the aging report joins on. Notes saved after the upgrade appear on the report, and a note saved before it corrects itself the next time it is saved.
Stability and display¶
Two memory leaks slowed PULSE Dashboard over a long session¶
Issue. Two objects were never released. One leaked on every right-click of a report grid. The other held an entire report — the grid, the chart and the data behind them — for the rest of the session, once for every box that had been maximized. On a long working day both added up, and PULSE Dashboard grew slower the more it was used.
Resolution. Both are released when the report or the menu that owns them closes. Memory now returns to where it started as reports are closed.
Job Scheduler failed when the log folder was missing¶
Issue. The Job Scheduler writes an activity log to a folder on disk. If that folder did not exist — on a new installation, or after it had been removed — the logger raised an exception rather than creating it.
Resolution. The activity log folder is created when it is missing, and the Job Scheduler runs normally.
Screen elements displaced on 4K monitors in User Control¶
Issue. The high-resolution display problem corrected in 5.65.1 remained on the User Control screen, where controls could still be drawn out of position on a 4K monitor.
Resolution. The User Control screen now scales correctly on high-resolution displays.
Configuration screens were taller or wider than the screen¶
Issue. Twelve configuration screens opened larger than a 1280×720 desktop, so part of each one — usually the OK and Cancel buttons along the bottom edge — sat off the screen or behind the taskbar. Several were fixed-size dialogs, which left no way to drag them back into view. The screens affected were the User Activity Report, User Control, the Job Editor, PULSE MRP Setup, Excess Inventory settings, Query Matrix, Add Table to Matrix, the Grid Layout Editor (described above), the User Matrix Editor, Custom Field Authorization, On-time Shipping Graph settings, and Current Balances settings on Macola® Progression.
Resolution. Every configuration screen in PULSE Dashboard now fits a 1280×720 desktop with the taskbar allowed for. Three that could not simply be made smaller — PULSE MRP Setup, the Job Editor and Excess Inventory settings — are resizable, with a scroll bar where the content is taller than the window, and give the space back on a larger monitor.
Some screens drew controls outside their own window¶
Issue. Nine screens laid out content past their own edge, so part of it was never drawn. Calendar Settings lost the right 65 pixels of both the years and the periods grid — most of the entry columns — and, being a fixed-size dialog, could not be dragged open. The SQL connection screen and the About box each cut all but a few pixels off their OK and Cancel buttons. The Email Service Info editor lost the SMTP message field entirely and clipped five other fields. The Schedule Editor lost the right edge of the scheduler control, Run Job clipped its send emails checkbox, and the Color Definition screen clipped two checkboxes.
Resolution. Each of these screens has been sized to its own content, and every control is drawn inside the window that holds it.
An unresolvable column reference in a saved layout¶
Issue. A grid layout refers to its columns by an internal element number. The range check on that lookup could never fail, because it measured the wrong thing, and it did not test for a negative number at all — which is what a calculated column carries. A layout that named a column the report could not resolve was therefore read past the end of the list rather than refused.
Resolution. The lookup is checked against the real bounds of the list at both ends, and an element number it cannot resolve returns nothing, which is what every part of the product that calls it already expects.