Okay... this release was planned to be the final 0.9.0 but I was tempted by the will of including new features on it and the result is a good set of improvements on the tool that will demand some feedback from the users so they can be properly polished for the final launch. In this second and last beta we have brought features mainly directioned to the database modeling but, not forgetting the essence of this project, we made some adjustments and patches in other parts of the tool so we can always keep delivering a quality open source software. Now, let's start to detail the main changes of this version!
Automatically arrange objects
The auto arrangement feature is a two years old request and consists in a process that will sort tables and views in a hierarchical way by walking through the relationships that connect these objects placing them vertically aligned with their counterpart (parent). Tables and views without any link as well textboxes are placed at the bottom of the rearranged model.
Currently, there is only one sort mode. Since the automatic arrangement of objects over the canvas is not a trivial problem, I decided to release only one mode for now and keep improving it. New sorting modes will be added gradually. In order to trigger the auto arrangement feature you should click the highlighted icon as displayed in the image below.
Depending on the size of your model the process will take some time. After completing the result will be something like the animation below. The process basically takes the table or view with the major amount of relationships connected and uses it as the root of the hierarchy. The next step is to place aside the root all the tables and views that are directly linked to it. This routine is then repeated until all linked tables are arranged close to their parents or counterparts. If there are tables or views without relationships attached they will be placed at the bottom of the canvas. This rule is applied to text boxes that naturally are standalone objects being not possible to link them to any other object.
It worth to note that any custom point in relationships will be removed and the lines will be broken in such way to make the visualization better. Of course, this is not a perfect method to rearrange objects but it is a good starting point mainly if you are doing reverse engineering on huge databases and have no idea on how to organize them properly.
The magnifier tool is used to show a portion of the zoomed out model where the mouse cursor is in the normal scaling so the user can identify which object is currently focused. In order to see this feature in action, in a zoomed out model (zoom factor < 100%) hold
Ctrl + Alt and a preview box will appear at the bottom-right corner of the canvas. Once displayed the preview area move the mouse over the canvas and see the section covered by the magnifier tool (blue rectangle) being shown in the preview. In this mode you can select the focused object or even activate the context menu for it.
Improved object selection
As part of the set of improvements in database design, the object selection was modified in such way that is possible to select graphical objects by their kinds separately or all of them at once (classical mode). In order to select all graphical objects no matter their kind, just hit
Ctrl + A. Now, to use the alternative selection mode (by object kind), right-click the canvas area and focus the action Select all and the submenu will be displayed. Select the desired item and see all objects of the chosen kind being selected. This feature seems simple, in fact, but when working with an enormous model this comes handy when you need to work with a separated set of objects.
Generic SQL objects
In this release, we have introduced the Generic SQL objects as an alternative way to use custom SQL code freely without attach them to other objects via Custom SQL dialog. In short, a Generic SQL object is a plain text object that stores user defined code and the held code is executed in the order that it was created. As any other object in the model, Generic SQL objects can have their creation order modified in the Swap Ids dialog to fit the user's need. The user must take extreme caution with these objects since pgModeler will not do any sanity check or even check if the code can harm the server when executed.
Acceptance of unsupported server versions
Another change presented by this version is that pgModeler will not fail or refuse to connect to a PostgreSQL server if the version of the latter is not supported yet. For example, we are about to receive PostgreSQL 10 but pgModeler supports only 9.0 to 9.6, so if you try to connect to a newer server pgModeler will connect to it but falling back to 9.6 until it receives the needed patches to be able generate code specifically to PostgreSQL 10. There is no magic here, pgModeler only relies in the backward compatibility of the server which is able to run code of the 9.x series without problems. If you plan to use this feature in PostgreSQL 8.x there are bad news for you: it'll not work and we really recommend you to stop using 8.x series.
Miscellaneous fixes and changes
There were minor changes and fixes including the solving of memory leaks that could cause unexpected crashes in very specific situations. Other improvements were: the ability to use code snippets in SQL input fields in views, functions, custom SQL dialogs; added a widget that shows some info about the canvas and the selected objects at the bottom of main window in design view; enhanced the performance of the import, diff and export processess by fine tuning the output widget. The complete list of changes of this release is available in the CHANGELOG.md file.
I'm really happy that we're almost there! pgModeler is in a good form for final release but I'll be gathering all feedbacks and fixing things as soon as possible. For now, I'll be out on a vacation for one month (I really need this!) but in August I'll get back to my work on pgModeler with a refreshed mind and full of new ideas. I'm planning to release the stable 0.9.0 in the middle of September or earlier if no serious problem is detected.
Lastly, we still need donations to achieve our goal on the campaign to buy a Mac mini to improve the macOS version of pgModeler. Any amount is welcome and much appreciated! ;)