Hey everyone, I hope you're well and healthy!
Well, before I start to describe this new release I would like to say that it's pretty sad that things are really chaotic these days on our world and I would like to let a humble message here: This virus spreading across the globe is causing lots of problems, infections, deaths and political-economics issues as we have been seeing lately. I hope that we, as a single species, can help each other and put an end to this pandemic as soon as possible. So, let's trust our scientists, doctors and nursers who are in the battle front against this plague. They are sacrificing themselves to save millions of lives and they deserve our eternal respect! Also, let's trust World Health Organization and local Health Authorities who are acting as better as they can providing the guidelines against this world emergency! Finally, and not less important, if you can stay home then, please, STAY HOME! Let's go out only in extreme necessity without forgetting about the protection measures until we can get back to our normal lives safe and sound... acting together makes us stronger!
Now let's talk about pgModeler! This release starts a new development timeline and I hope that in six months we can reach the desired maturing state to launch the stable version 0.9.3. For now, there's a lot of things to be done. The 0.9.3-alpha is just the beginning. From time to time I'll elect one release to be more focused on polishing what is already present in the tool, thus, 0.9.3 will be the chosen one where I'll introduce, this time, more bug fixes and small improvements than big new features. Of course, I'll not forget to bring something really new even if it comes in form of a feature preview that will be improved in the next major releases. Honestly, pgModeler is already a feature-rich tool (compared to its initial versions) and any feature request can be postponed a little bit. For now I want to improve maintenance rate, increase code collaboration from third-party and deliver an ever more stable product. Let's see if I can achieve that! :)
Okay, that said let's see what 0.9.3-alpha brings us!
Objects multi selection
Despite sounding as a trivial feature the multi selection in pgModeler covered only graphical objects and could be performed only in the canvas area. The object finder widget as well the model objects widget lacked this ability due some implementation details... until now. After patching some key portions of the code I could make that more than one item on the mentioned widgets can be selected by holding
Ctrl and clicking items. Also, it's possible to hold
Shift and drag the mouse in order to select a contiguous set of items. This is a great step since you can apply an action (from the context menu triggered by right click) in a set of objects speeding up the design process.
Multiple objects renaming
The objects multi selection led us to the inevitable implementation of the multiple object renaming feature. As the name suggest, you can now rename a set of selected objects. In that case, pgModeler will solve the majority of conflicts in the names by performing automatic disambiguation. But please take a lot of care when using this feature! Since objects are strongly tied (mainly relationships, tables, constraints and columns) renaming a set of objects may result in undesired behavior like permanent relationships invalidation which causes their automatic erasing as well as the erasing of any object that somehow is related to them, for instance, tables, constraints and columns leading to the loss of semantics in a model.
Change objects Z stacking
This feature was initially introduced via this pull request. Basically, one is able to move graphical objects (except schemas and relationships) in the Z stack. The Z coordinate in pgModeler holds the drawing precedence of an object. So, the major the Z value of an object the more on top of other objects that one will be rendered. Currently, this feature only sends the object to the very bottom or top in the Z stack, so, there's no way to specify a middle term. Finally, any change in the Z stack will be persisted in the database model file so in the next loading the previous state can be restored.
Quickly sorting results in data manipulation form
In data manipulation form is now possible to quickly sort results without use the
Order & Limit field in the filter settings. This is useful if need to sort data by only one column. Basically, if you click the column name o the top of the results grid a new query will be performed by attaching the
ORDER BY [column] ASC|DESC in the internal query used to retrieve data. You may be wondering "Why not just sorting the data in the grid without querying again?". The response is: the results are different when you sort data in a query and in the UI component. In the database system, collation settings and other system parameters are taken into the account when the sort is performed. Now, in the UI this rule is not always followed at least I couldn't find the optimum way to that data in UI only, so let me know if there's a simple way to perform that in Qt! :)
Minor UI changes
This release also brings some small UI improvements in order to highlight really useful features that still aren't known by all users. I'm talking about the actions
Fix model and
Object's metadata , previously presented in the control toolbar at main window they were moved to the model editing toolbar. If you still don't know what are the model fix dialog and the objects metadata handling it worth a reading here and here.
Another change in the main window was on the action
More . Previously, this action had a selected set of database model actions. Now, it'll hold all the actions of the context menu related to the current selection in the canvas area.
For months the pgModeler installers were different across the supported platforms. Initially, on Windows, we have been using InnoSetup and on Linux the Qt Installer Framework. Both are great installer toolkits but having two different technologies were causing problems on the maintenance. So, I decided to move everything to Qt Installer Framework since Qt is the main framework on this project. But the first version of the Qt based installer for Windows had a lot of problems (extensively discussed here and here) so after some research and help from other users I could find the correct solution for Windows specifically, then I had to practically rewrite everything related to that OS. Now, the installer on Windows and Linux are capable of performing installations for the current user or system wide, associate *.dbm files correctly and create start menu entry (Windows only). I've tested exhaustively the installers and they are working as expected. But if they doen't behave as described here, please let me know.
For macOS nothing changes. We still have to rely on dmg images to deliver binary packages to our users which is not a bad thing. I have to say that the solution adopted by macOS by using application bundles are pretty good because requires less effort from developers to distribute their softwares. The only downside of pgModeler on macOS is that it doesn't support dbm file association to the application bundle... yet!
There were several fixes and changes over all parts of the tool. Despite the majority being in the core code which will not be perceived by the users there were important fixes in the model validation, reverse engineering and diff processes making theses operations produce even more reliable results.
If you compile pgModeler by yourself know that now it fully supports Qt 5.14.x as we're constantly updating the source code to the latest Qt version in order to avoid breaking things since they (Qt company) are restraining the access to LTS versions to their paying costumers. For a pretty small project like pgModeler is out of question to turn a paying costumer in order to have the access to the LTS versions, unfortunately. So, expect for now on that pgModeler code will follow the Qt upgrades as quickly as possible.
Finally, all the changes of this release are described in the CHANGELOG.md, don't forget to take a reading there.
That's it. Enjoy this new release and, as always, I'll be waiting your feedback! ;)
Stay safe and see you soon!