Repository navigation
Releases: evs-chris/pg-difficult
Release list
v2.0.0
Version 2.0.0 replaces the Deno server with a go implementation. This is a mostly compatible port with a little bit of rearchitecture to hopefully remove some of the buggy textures encountered when running multiple concurrent diffs.
Bugs
- As mentioed above, hopefully all of the quirks related to multiple concurent diffs have been resolved.
- Entries windows for stopped diffs are now labelled as such and moved to the other windows list rather than just falling off the menu entirely.
Features
- Diff segments can now be handled globally, separately, or both. Global diffs all share the same segment. Separate diffs have a segment to themselves. The option to do one or the other or ask on each diff start is in settings and defaults to global.
- There is now a
postmanscratch pad type that can load in a set of postman services and help run them from either the client or server. It can also be used as a sort of curl replacement by defining your own endpoints. - The client can now use the location hash to open scratch pads, optionally maximized. This makes it possible to link among markdown scratch pads.
raport+textblocks in markdown may now set their output language.htmlscratch pads can now run interactively in an iframe and have style and script injection helpers and console proxying.jsonscratch pads may now be used as report sources by selecting the scratch pad source in the designer and entering the path to the desired scratch pad.- All eval contexts now have access to global data sources, including filter contexts and eval pads. Things that allow downloading their content will now also allow for providing that content as a data source. Global data sources may be provided with new functions available to the raport scratch pad.
- Local operators provided to scratch pads now have docs in the operator reference.
- There is now a Raui runner available for keyboard switching to windows and opening scratch pads and reports.
ctrl+spacewill open the runner. The runner will also evaluate raport expressions, which is useful for quick calculations. - There is now a
widget+intervalwidget available to markdown pads that will count down a specified interval and notify if it elapses. The countdown can be reset to the initial interval with a button. This is useful to keep track of things that need to happen repeatedly within a certain period, but may complete sooner. - Search filtering now uses
flikerather thanilike, which means wildcards are no longer needed when looking for the middle of a string. - The client will now offer to switch to client-only mode when disconnected from the server. It can also be reconnected later if the server becomes available again.
- The leak monitor can now optionally show all connections to the server.
- The leak monitor can now ask the server to terminate backends, which it will do, depending on whether the connection user is a superuser.
- The schema viewer will now show a table's schema if it's not
public. - Copied things now get a
- Copyappended to their name to make it easier to distinguish what just got added and modified if you forget to change the name before saving. - The host explorer can now remove connections.
markdownscratch pad code blocks andraportscratch pad eval results now have a hover copy button to copy text to the clipboard.
v1.15.0
Bugs
- Printing rendered markdown from a scratch pad will now include CSS for highlighted code blocks.
- Raport scratch pad context can now be only whitespace without breaking evaluation.
- Code blocks in rendered markdown force word break so stuff like long JSON blobs with no spaces don't disappear off the end of the block.
- Selects in dark mode will no longer become unreadable in some browsers.
- The favicon will now correctly match the selected color scheme.
- Undo with multiple running diffs will now try harder to prevent cross-contamination among the diffs that leads to not being able to undo.
Features
- Markdown scratch pads now have basic support for highlighting raport, raport template (raport-tpl, raport-template, rptpl) and ejs (underscore, lodash) code blocks.
- Markdown scratch pads can now use raport and raport-template to output HTML into the markdown viewer by adding
+htmlto code blocks flagged as raport or raport template. - The scratch pad tree now supports filtering/searching within scratch pads. Searching within scratch pads requires using a raport expression in the filter input e.g.
:string in text. - Password fields now include a way to view the password as plain text.
- Diff entries now include the timestamp of the diff in their hover tooltip.
- There is now basic support for parameterized queries.
- If there is a raport scratch pad named pg-difficult/context, it will be used to preload all raport expression evaluations.
- Raport scratch pads that produce arrays of objects or arrays of arrays will have the option to view the results as a table.
- JSON scratch pads now offer tree and table views as appropriate.
- Markdown code fences can now be given options that affect their rendering. Options are passed as raport key/value pairs.
- JSON:
pretty:1will stringify the JSON with indents when rendering. - csv+table:
headerandorderwill be passed through to raport csv parser.
- JSON:
- Markdown code fences have experimental support for a few widgets, where the state of the widget is maintained in the code block.
- widget+counter renders a basic +/- counter.
- widget+clock renders a text clock. The code fence option,
precision(mmors), controls the time display. - widget+timer renders a timer with a duration input and control buttons. Code fence options that control timer behavior include
precision(same as clock),sound('dong', 'time-beep', 'notify-whistle', 'whistle', 'relax', and 'next'),message(a string shown as a browser notification title),body(a string for a browser notification body), and timeout (a number of seconds for which to show a browser notification). - widget+pomodoro renders a pomodoro widget that shows the time remaining and which stage is currently running. Options passed to the code fence to control the intervals are the same as those for the timer plus
on(the working interval) andoff(the break interval).sound,message, andbodymay be objects with a 'work' and 'break' key that will be used with the corresponding transition.
- Markdown scratch pads can now include cross-links to other scratch pads in the form
#scratchplus the full name of the other pad e.g.[other pad](#scratch/path/to/other pad) - Uploading and downloading scratch pads will now automatically handle extensions if the file name doesn't already include them.
- There is now a server state debugger, accessible from Settings, that allows inspecting server state in an ephemeral raport pad.
v1.14.0
Bugs
- Diff entries with only nested JSON changes will no longer break undo when skip empty changesets is enabled.
- The raport scratch pad operator docs now correctly includes formats.
Features
- Links in rendered markdown scratch pads now render legibly and will open with a blank target.
- Markdown checkboxes are now supported with ordered lists in rendered markdown scratch pads.
- Raport scratch pads can now have an addition context expression provided.
- Markdown scratch pads now support csv+table and raport+table code fences for rendering embedded data as a table. The csv version is much more convenient than building a markdown table, and the raport version allows computation to build a table, possibly based on tabular or csv input.
- Clicking the unsaved banner on a scratch pad will now trigger a save.
- The favicon will now update to match the select color scheme on browsers that support svg favicons.
Not Really Bugs and Not Really Features
- The project now requires deno2 to build and uses the deno2 file embedding support rather than a pre-assembled module of base64 file contents.
v1.13.2
Bugs
- Report sources that load or cache data will now remove any stored data before saving the definition to avoid bloat. In more extreme cases, this could result in failure to save or sync the definition.
- Newly opened windows will now have a correct title on mobile layouts without have to reselect them from the window list on the menu.
- The client-only client will no longer offer to stop the server.
Features
- There is now a setting to set the default control panel tab.
- Markdown scratch pads will now render asynchronously and support having their rendered content printed or downloaded.
- Diff segments can now be collapsed and expanded.
- Markdown scratch pads can now have fenced raport+text code that is evaluated to a code block at render.
- Host explorer reports have better support for parameters, including more appropiate inputs for different typed parameters.
- Host explorer visual reports can now be run as delimited with configurable delimiters and quotes. This is utilizing underlying support in raport that renders the first repeater to text.
- Report sources can now be conditional, meaning they can be skipped if they aren't necessary for the report to run based on the parameters it is given. If a source is elided, it can supply an alternate expression for its data or it will resolve to an empty array.
- Schema explorers that have a connection to a database now have a button on the tab bar to refresh the schema.
- Diff entries with no changes (empty changesets) can now be hidden and can also be optionally skipped when running undo on them.
- Diff viewers now show how many entries are currently visible of the entry total.
v1.13.1
- Remote sync servers will now be initialized the same way as the local store is to ensure that partial syncs work correctly.
- Check requests from the client should no longer time out if the server has become disconnected.
- Markdown tables and headers will now render more legibly in the viewer.
v1.13.0
This release is built with Deno 2.
Bugs
- Relative times older than the current day will now render correctly.
- Diff listeners will no longer readily leak connections.
- Leak monitors will now reconnect if the server loses connection with the target database instance.
- The diff trigger can now handle inserts and deletes on postgres 10.
- Starting and stopping diffs now uses a single message to the server to improve performance on laggy connections.
- All uses of connection management now explicitly specify a timeout so socket timeouts don't result in hung connections.
- The query tool can now run statements that can't be run in a transaction, like create database.
- Diff HTML can be downloaded directly by hold alt.
- Diff autoscroll will now work on unfocused browser tabs.
- The raport scratch pad language reference will now follow the ui scale setting.
- The diff and scratch pad result object trees will once again render leaf values.
Features
- The server now supports requiring basic auth to connect. This is not a substitute for actual security, but it can prevent minor mishaps in a trusted environment.
- The server will now accept a config file as an option that is read as a raport expression and the resulting object may contain keys that match the cli flags in addition to a users dictionary with password values that can be used with basic auth.
- The leak monitor now includes query and session liveliness information.
- There is a new fetch data source available to reports that can run fetches through the server.
- Multi-database queries now include timing info and a completion estimate.
- Diff segments can now be undone and hidden with one click by holding alt and clicking undo. This will also leave the segment name intact, and the undo segment will also be hidden.
- Scratch pads, reports, and queries can now be downloaded. Scratch pads and reports can be uploaded from a local file or copied as a new entry.
- The wait cursor is now universal.
- Markdown scratch pads now support images in code fences with svg+inline, png+base64, and jpeg+base64.
- Raport scratch pads will show literal output in the tree tab if the result is not an object.
- Scratch pads now have local editor options that override the global settings only for their window.
- Report paths are now separated from their names and are editable in the report designer.
- Host-only reports are now displayed in a tree view in the host explorer.
- Tree view items with long names will now marquee scroll the names on hover.
- Raport scratch pads now support log message aggregation from raport 0.25.0.
- Raport scratch pads now support highlighting spaceless symbolic binary operations.
v1.12.1
v1.12.0
NOTE: This version moves from browser local storage to pouchdb, which greatly increases the amount of storage available and allows for syncing with external couchdb-compatible data stores. Existing settings will be imported on the first load of the client, and the local storage versions will be removed. You may want to export your settings before running this version.
This version also introduces a schema change to the diff recording tables that allows for hiding entries. Attempting to hide segments in a diff resumed from an older version will fail.
Bugs
- Diff details are now memoized, so lage diff views should no longer be make the windowing system laggy.
- Report designers will now follow the selected color scheme.
- View definitions are now directly compared during schema comparison. Prior to this release, schema comparison that supported views only considered the columns of the view and not the statement that generated them.
Features
- Reports, queries, and scratch pads can be named with
/s to place them in sub-directories, as they are now displayed in a tree view rather than an orderable list. - There is now a scale setting and a meta tag to try to make mobile browsers a little less painful to use. Tooltips will display in a toast if poked.
- Settings and local data are now stored in a pouchdb instance, which can be configured to selectively sync with a couchdb-compatible server.
- Scratch pads now have an unsaved indicator, support manual saving, and can be configured not to autosave.
- Connections can now specify their use type, so diff connections can be excluded from host explorers and vice versa. You can now edit a host explorer connection by shift+clicking the host refresh button.
- Local diff once again supports raport as a value display mode.
- Diff segments may now be hidden using a new button in the segment header. This is particularly useful during testing where an action has to be undone several times before the desired outcome is achieved. Hidden segments are not removed from the tracking database or downloadable output. Hiding segments in a downloaded file will persist the hidden state when the file is downloaded again.
- Downloading a diff will now ask for a file name with the old automatic file name set as the default.
- The client being disconnected from the server will now only block portions of the UI that require a server connection to be useful.
- Scratch pads in markdown mode now have a view tab that renders the markdown as html. Fenced code blocks support highlighting for a selection of languages, and check lists render checkboxes that will update the source text when changed.
- There is now an Eval Pad button on the control panel that opens an expression pad for quick convenient calculations.
v1.11.0
Bugs
- Client-only-mode no longer shows some of the newer server settings.
- If you happen to have two tabs open on the same browser instance pointed at the same pg-difficult server (storage namespace), settings changes in one will be propagated to the other a few seconds later. Scratch pads count as settings.
- Local diff data is no longer persisted in browser storage. This was a holdover from the tool's origin.
- Actions that required a ctrl+click will now also be triggered by a shift+click because Apple just has to be extra special.
- Schemas will now compare views and functions in addition to tables.
- Comparing two schemas from within the host explorer is now possible.
- Provided query result report sources will now persist correctly.
- The query all source for reports can now successfully run the query for sample data against the first visible database in the tree.
- Object viewer trees will no longer spike browser resource usage quite so much.
- Editor settings are now correctly applied to query views in the host explorer and report source editor.
- Query all reports will no longer run if you select 'No' in the confirmation.
- Delimited reports run from the host explorer will now show readable output in the viewer.
Features
- Scratch pads now support raport expressions, and scratch pads in raport mode can evaluate expressions and view the results. Various bits of data can be exposed to raport pads as data sources by shift-clicking a download button, applying a query all, etc. There are also language and operator docs in the evaluation pane of the pad.
- The sticky headers in the schema viewer are now slightly less confusing.
- Query all queries will now show a progress toast as they are running.
- There are now options to name and provide a different color set for a client. This should allow different instances to be distinguished more easily.
- There is now an option to directly download host explorer reports rather than just viewing.
- Tab size and soft tab mode are now options for the editor.
- There is now a concurrency option for query all in the host explorer that allows using from 1 to 500 concurrent connections rather than the default 10.
- You can now create reports from the host explorer and close a selected report once it has been selected. The run buttons for query all reports will now give you visual feedback if the report can't run because there are no active databases against which to run it.
v1.10.0
Bugs
- Older versions of postgres (down to at least 9.5) are now supported by the schema gatherer in the server.
- Auto-scrolling at the end of a diff as new entries arrive auto scrolls again.
- Apparently the win64 build won't work without also showing a terminal window, so it'll do that again.
Somewhere between bugs and features
- Active diffs will now attempt to be disconnect tolerant, so if you're on a flaky connection, the server won't crash or cease sending diff entries as they come in without notifying. Active diffs that become disconnected will get an indicator next to them in the menu.
Features
- Diffs that are starting and stopping will show the wait indicator in the title bar while the server is starting and stopping the diff in the selected database, and the button to start the diff will disable until the server responds.
- Diff connections can now specify table patterns to ignore for diffing, with
__pgdifficult_%andpgdifficult.%automatically ignored. - Diff connections can specify the maximum value length to show up in a diff entry. It happens that browsers don't deal well with dropping 180mb of binary string into a div. This value currently defaults to 0, because it does affect undo support. If you don't want to specifically exclude a full table, this is a good option to set to something like 10,000. If a value exceeds the specified length, it will be replaced with a string that includes the md5 of the data.
- Diff connections can now specify the format of update entries, where the whole record for both the old and new records are stored, the whole old record and the just the changes of the new record are stored, or just the changes in both the old and new records are stored.
- The pg-difficult name at the top of the menu is now a link to the github page.
- Query and scratch editors now have selectable themes in settings, and scratch editors have more available modes.
- There are line number, relative line number, and highlight selected word options for editors.
- vim mode editors now have j -> gj and k -> gk in normal mode, and jk or kj -> esc in insert mode mappings because I like them.
- There is now a local diff tool that compares two objects that can be sourced from csv, xml, json, query rows, or diff entries. Shift+click on a table row will copy it to the clipboard and make it available to the local diff tool. Clicking a diff entry header will copy the new value, and shift+clicking a diff entry header will copy the old value.