Welcome to blog of Obsidian Wolf Labs.
Here you will find posts about our research, software libraries, open source, and products.

Why we removed FetchContent dependencies from QueryC++ and removed usage of fmtlib

06 July 2025

In QueryC++ version 4.1.0 we removed automatically dependency handling by CMakes FetchContent feature and we fully removed the usage of fmtlib. Here we would like to explain why! and we will start with why we stopped using fmtlib.

Firstly we would like to state the fmtlib is a fantastic library. The work done by Victor Zverovich (vitaut) and the contributors of fmtlib is amazing. Quite frankly, QueryC++ would not be where it is today with out fmtlib. So why move away?

One of the visions of the original designers of QueryC++ was to make it not depend on none C++ standard library (STL) functionality as possible. However, when QueryC++ first saw the day of light, std::format was not a thing yet. At least not supported by any compilers and C++20, the standard introducing std::format, was not even final. Therefore we utilised libfmt. But, not long after the release of the first public alpha of QueryC++ we was made aware the Victor Zverovich wanted to provided an STL feature (std::format) similar to fmtlib. We where also made aware that this feature would be in C++20. So we waited and waited, and finally when both the compilers clang and gcc supported std::format, we made the switch. This allows us to remove a dependency for our users, such that they only need a new enough compiler instead.

The removal of fmtlib also fostered some discussions about if we should keep the automatic dependency handling of gtest and libpqxx. Since these where (and are) only used for testing. Then a user reached out to us and asked if we could remove it because it was causing some issues when running make test. The issue was that libpqxx tests would automatically be added and run, but the user did not have an active database on her system.

Release QueryC++ version 4.1.0

06 July 2025

We are pleased to present the 4.1.0 release of QueryC++. You can get it at Codeberg. As promised by our founder Lars Kakavandi-Nielsen QueryC++ 4.0.0 was the last release where we would proclaim release to the world. We have added:

  • Conditional expression support for PostgresSQL, which also should work in other databases.
  • Added license text to all source files and SPDX License Identifiers for BSD 3-Clause license which we release QueryC++ under. We use the short identifier BSD-3-Clause.
  • Reintroduction of EXISTS functionality.
  • Removed FetchContent dependency on gtest, libpxx, and fmtlib.
  • And we swapped fmtlib for std::format.

Additionally there have been infrastructure work behind the scene for setting up a more rigours test environment. This new environment, will help us better test future releases of QueryC++ against not just Postgres and SQLite, but also mariaDB.

We are also happy to share that work on release 4.2.0 has already started, which will bring more specialised Postgres functionality.

Best, the Obsidian Wolf Labs Team.