pgModeler 1.0.0-alpha1 is ready and waiting for you!
Another round of UI improvements and a major codebase change.

The development of 1.0.0-alpha1 took two and a half months since the launching of 1.0.0-alpha and as told previously this new development iteration would be mainly focused on moving the codebase to the newer Qt's major version. Also, there were some other important enhancements and pending bug fixes in the process.

ATTENTION: pgModeler 0.9.x settings are not compatible with pgModeler 1.0.0-alpha1. This way, in the first start of the newer version, some settings will be automatically migrated if the tool detects the configuration files related to 0.9.4 or below in the system!

Before you start using 1.0.0-alpha1!

If you installed pgModeler 1.0.0-alpha before using 1.0.0-alpha1 you may get the error "Error while interpreting XML buffer at line 0 column 0. Message generated by the parser: No declaration for attribute partial-match of element group." right before pgModeler quits during its startup.

This error occur due to an attribute of the syntax highlight files which was dropped. The solution is to manually erase the files *-highlight.conf in your user's local storage where pgModeler settings are saved: /home/(user)/. config/pgmodeler-1.0 (Linux),C:\Users\(user)\AppData\Local\pgmodeler-1.0 (Windows), /Users/(user)/Preferences/pgmodeler-1.0 (macOS). After erasing the files, start pgModeler again so the erased files can be created again by the tool.

Codebase moved to Qt 6

I'm happy to announce that pgModeler is now fully compatible with Qt 6, taking advantage of all advances that this major framework version brought. To be more specific, it builds fine on versions 6.2.4 and 6.3.0 with minor warnings that should be fixed until the stable release. The main challenge, which took more time, was to move the huge amount of deprecated code related to Qt 5.15.x to the newer API introduced by Qt 6 without breaking things. There is still some work to do to finish the migration but I can say for sure that the current state of the code is pretty stable and work satisfactorily. The only downside of migration to a new framework version is that building pgModeler on Qt 5.15.2 or below is not possible anymore.

EDIT: After testing once more the building on Qt 5, I can confirm that the codebase ported to Qt 6 is still compatible with Qt 5.15.x, so you still can build pgModeler on Qt 5. But bear in mind that there can be backward compatibility breaking at any time as soon as new features are introduced to Qt 6 exclusively and they are used by pgModeler. Due to the amount of time pgModeler takes from me, I don't intend to make the code work on both Qt 5 and 6. My goal is to make the code Qt 6 compliant only!

Custom icons sizes and UI scale factor

After releasing pgModeler 1.0.0-alpha, the major complaint about the new interface was the size of icons, buttons, and other widgets on small screens. Since the main goal of this project is to provide flexibility and freedom to the user while using the tool, I decided to make lots of adjustments to the forms and other widgets to diminish the occupied screen space. Still not satisfied, I decided to go further and added the ability to change icon sizes and the whole user interface rendering factor. So, in the Appearance settings, one can set the icon sizes on the fly using the dropdown menu Icons size. Now, to change the whole UI rendering factor, the user can set a value between 1 and 2 in Custom scale factor to increase or decrease the size of the entire UI. This option requires restarting pgModeler so the new factor can be applied. Note that the use of custom scale factors varies from system to system due to the nuances of each window management subsystem and how the Qt framework communicates with them, so, for example, using 1.5 as a scale factor has a different effect on Windows, Linux, and macOS. By default, the system scale factor is used by pgModeler.

Improved columns/constraints propagation mechanism

The columns/constraints propagation mechanism implemented by relationships is really useful when you need to quickly create relationships between tables without going through the tedious process of adding columns and foreign keys manually. But, to make this mechanism work automagically a lot of code was put on it which increased its complexity, and where there's a high level of complexity there's a high probability of having bugs. One of the most annoying problems with this feature was that in some very specific circumstances, columns and constraints created by the relationships started to disappear or lose their custom position in the table. So, after investigating and understanding what was happening I dedicated a good time to rewrite the whole objects' propagation feature, creating a more simple mechanism that produced the desired results. As a bonus of the refactoring, pgModeler now loads database models a bit faster than the older versions! I'll keep looking closer to this new implementation and provide more adjustments if needed.

PostgreSQL 15 basic support

Yeah, I know, PostgreSQL 15 is still in the beta stage until the day this post is being written, but we have some users that like to push pgModeler to its limits (thanks for that!) and end up finding out problems that were not predicted while developing using a stable version of the database system. So, I had to make a small patch to include PostgreSQL 15 as the default version used by pgModeler as well as adjust some catalog queries used by the SQL tool and the reverse engineering feature so it can correctly connect and retrieve information from system catalogs specifically on that RDBMS version. I consider the patch experimental since PostgreSQL 15 is still under development and probably will receive more enhancements and fixes that can nullify the patch applied to pgModeler making it fail again to connect to the database. I'll keep track of this situation and add more fixes if the current patch is not enough.

Miscellaneous

This version brings 56 entries, between improvements and bug fixes in several parts of the tool. You can check the complete changelog of this release here, anyway some key changes/fixes are described below:

  • pgModeler now saves and restores the QFileDialog instances geometry/state in the file filedlg.conf.
  • Minor improvement in DatabaseExplorerWidget::dropObject to show the complete location of the object being dropped (schema, table, DB).
  • In DatabaseImportHelper::createSchema if the schema to be created is public or pg_catalog, pgModeler will just ignore them because these schemas already exist in the model being imported.
  • When printing a model with page numbers enabled pgModeler now will add the column and row info of the current page being printed.
  • Adjusted the behavior of ObjectFinderWidget, now "Exact match" option is only enabled when using regular expressions.
  • Adjusted the generation of CDATA elements in XML schema files.
  • Adjusted the syntax highlighting conf files.
  • Removed the support to partial-match attribute in syntax highlight conf files.
  • Forcing C++17 building and the deprecation of any API before Qt 6.
  • Changing the catalog query filter in PgModelerCliApp::importDatabase and ModelDatabaseDiffForm::importDatabase to avoid retrieving and creating system objects unnecessarily.
  • The delete operation on ModelWidget now displays a wait cursor while running.
  • Fixed a bug in ConnectionsConfigWidget::openConnectionsConfiguration that was preventing reloading the original conf file when the user clicked cancel.
  • Fixed a bug in AppearanceConfigWidget that was not applying the font style correctly to the source code preview.
  • Minor fix in LineNumbersWidget to render numbers in the correct height.
  • Fixed the resizing and positioning of the code completion widget in the first show.
  • Fix a crash in ObjectsScene::mousePressEvent when building with Qt 6.
  • Minor fix in ModelObjectsWidget::updateObjectsList. Instead of using an empty pattern, we needed to force the wildcard * so the search returns all objects.
  • Minor fix in ElementsTableWidget to display "Default" in Sorting and Nulls columns instead of a blank text when no sorting method is defined for an element.
  • Fixed a bug in PhysicalTable::setColumnsAttribute that was ignoring exclude constraints when determining the use of the last comma in the table's SQL code.
  • Import process now correctly configures sorting options for excluding constraints and indexes.
  • Fixed the scattered objects arrangement mode to make tables less sparse over the canvas.
  • Fixed a crash when trying to swap relationships in SwapObjectsIdsWidget.
  • Fixed blurry icons on TaskProgressWidget.

What comes next?

Now that the UI is almost in the final shape I want for pgModeler 1.0.0, in a few days, I'll start to work on dropping the support for PostgreSQL 9.x since there is no sense in keeping the code generation, reverse engineering, and other features for a database system version that is not maintained anymore(since November 2021). Once that work is finished, I plan to resume the UI improvements (there are still a lot of things to do!) and start to create the new features scheduled for pgModeler 1.0.0.

pgModeler is on GitHub Sponsor, let's help?

If you like the work that is being made to create a quality database design tool, please become our sponsor on GitHub. Any open source project needs financial support to keep the development alive, and this is not different with pgModeler. Go ahead, be a supporter in one of the offered sponsor tiers and receive rewards for being a friend of an open source project! :D

That's it! Don't forget to leave a comment, report bugs or follow the project on Twitter!

See you next time! ;)

Comments (0) Add a comment

Add new comment

  • 0/1024