Releases: questdb/c-questdb-client
3.1.0
What's Changed
This release adds support for reading TLS CA root certificates from the host operating system.
The default remains to use the root certificates provided by the webpki-roots Rust crate.
The TLS negotiation is still performed by using the rustls Rust crate, and not using OpenSSL or other OS-specific TLS APIs.
This new feature is particularly valuable when using QuestDB Enterprise in corporate environments where the set of trusted root CA certificates is custom to the organisation and deployed to each OS's root CA certificate store.
To enable this feature:
If programming in Rust:
SenderBuilder::new(...) .tls(Tls::Enabled(CertificateAuthority::OsRoots))If programming in C:
line_sender_opts* opts = ...; line_sender_opts_tls_os_roots(opts);If programming in C++:
questdb::ingress::opts opts{...}; opts.tls_os_roots(opts);Full Changelog: 3.0.0...3.1.0
3.0.0
What's Changed
The new release 3.0 brings a number of minor improvements and some (small) breaking API changes.
- Fixed a bug where timestamp columns could not accept values before Jan 1st 1970 UTC.
- TCP connections now use
SO_KEEPALIVE. This should ensure that connections don't drop after a period of inactivity. - Upgraded dependencies to newer library versions. This also includes the latest
webpki-rootscrate. - Disabled compiling tests and examples in the default built from CMake (C and C++) reducing the amount of code that gets built when using the questdb client as a dependency: These are now hidden behind an option. Should improve compile times.
- Disabled code generation of additional tests in the default build. This should fix some reported built time issues and improve compile times.
- Updated to the newer version of the CMake corrosion library to compile the Rust code from CMake.
- Fixed a Windows build linker issue. This was introduced as the dependencies were not pinned.
- Pinned the dependencies so builds are more reproducible, avoiding issues like the aforementioned linker error.
- General code cleanup in Rust with
fmtandclippy. - System tests now use the latest QuestDB version: 7.3.2.
- Updated documentation to emphasize good practices.
- Improvements in timestamp handling.
- In Rust, optional support for
chrono::DateTimevia thechrono_timestampfeature. - New APIs to get the current timestamp as micros or nanos in Rust, C and C++.
Breaking Changes
Here are the changes that may require some minor code changes.
This release does not change the minimum supported QuestDB server version.
Rust
- The
.at(..)and.column_ts(..)methods now can take eitherTimestampNanosorTimestampMicrostimestamps, depending on what is most convenient. It should be noted that - as of writing - QuestDB stores (regardless) all timestamps as micros. This statement holds true also for the designated timestamp. - In earlier versions, the
.at(..)and.column_ts(..)methods also acceptedstd::time::SystemTime. This is no longer the case, as it cause confusion on the precision that was being used for the conversion. - To compensate, both
TimestampNanosandTimestampMicrostypes support new conversion "constructor" methods that takestd::time::SystemTimeorchrono::DateTime(if thechrono_timestampfeature is enabled).
C
- The include has been renamed from
#include <questdb/ilp/line_sender.h>to#include <questdb/ingress/line_sender.h>. - The
line_sender_buffer_column_tsandline_sender_buffer_atfunctions are now removed. Replacements:line_sender_buffer_column_ts_micros(equivalent to old function) andline_sender_buffer_column_ts_nanos.line_sender_buffer_at_nanos(equivalent to old function) andline_sender_buffer_at_micros.
- You can get the current system time via the new
line_sender_now_microsandline_sender_now_nanosfunctions.
C++
- The include has been renamed from
#include <questdb/ilp/line_sender.hpp>to#include <questdb/ingress/line_sender.hpp>. - The new namespace is
questdb::ingressinstead ofquestdb::ilp. - The
.column()and.at()methods can now accept bothtimestamp_nanosandtimestamp_micros - These same methods no longer accept
std::chrono::time_point, but you can still pass in atime_pointby first creating atimestamp_nanosortimestamp_microsobject from it first. - You can get the current system time via the new
timestamp_micros::now()andtimestamp_nanos::now()static "constructor" functions.
Full Changelog: 2.1.3...3.0.0
2.1.3
What's Changed
- Faster string serialization escaping logic.
- Fixed name validation length error code from
InvalidApitoInvalidName.
Full Changelog: 2.1.2...2.1.3
2.1.2
What's Changed
C++ API improvements:
- Fixed some potential linker errors due to missing
inlinekeywords in the C++ header file. - Removed memory allocation from
questdb::ilp::line_sender_buffer's constructor: This is now performed lazily. This makes it easier to use the type with concurrent queues that set a buffer by reference.
2.1.1
2.1.0
What's Changed
This is a minor release and brings a few new features:
- For the first time, we expose the Rust API which forms the foundation of this library:
- The buffer API now supports setting a marker and rolling back to it in case of an error.
Seeset_marker,rewind_to_marker,clear_markerfunctions/methods. - Revised docs, broken down by language.
2.0.0
What's Changed
This is a new major release of the c-questdb-client bringing in a number of new features:
- Authentication support.
- Full-connection encryption via TLS.
- Improved validation of table names and column names.
- Support for TIMESTAMP columns in ILP.
- A new
optstype for setting up connection parameters. - More flexible API splitting buffer construction from networking.
- Helper macros to work with UTF-8 literals in C.
- A number of C++ API tweaks and fixes.
To learn more, take a look at the updated documentation and example code.
Full Changelog: 1.1.0...2.0.0
1.1.0
What's Changed
- Rewrite of the core logic in Rust, whilst retaining the same C and C++ API and no new runtime dependencies.
- Improved float to string serialization fixing issue #3.
- The CMake target has now been renamed to "questb_client": You will need to update your CMakeLists.txt and recompile.
1.0.0
First release
- Supports C and C++
- Writes ILP protocol over TCP
- Linux, MacOS and Windows support.