Skip to content

Releases: questdb/c-questdb-client

3.1.0

23 Nov 09:15
ced64a9

Choose a tag to compare

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

22 Sep 16:20
fa10c59

Choose a tag to compare

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-roots crate.
  • 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 fmt and clippy.
  • 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::DateTime via the chrono_timestamp feature.
  • 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 either TimestampNanos or TimestampMicros timestamps, 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 accepted std::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 TimestampNanos and TimestampMicros types support new conversion "constructor" methods that take std::time::SystemTime or chrono::DateTime (if the chrono_timestamp feature 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_ts and line_sender_buffer_at functions are now removed. Replacements:
    • line_sender_buffer_column_ts_micros (equivalent to old function) and line_sender_buffer_column_ts_nanos.
    • line_sender_buffer_at_nanos (equivalent to old function) and line_sender_buffer_at_micros.
  • You can get the current system time via the new line_sender_now_micros and line_sender_now_nanos functions.

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::ingress instead of questdb::ilp.
  • The .column() and .at() methods can now accept both timestamp_nanos and timestamp_micros
  • These same methods no longer accept std::chrono::time_point, but you can still pass in a time_point by first creating a timestamp_nanos or timestamp_micros object from it first.
  • You can get the current system time via the new timestamp_micros::now() and timestamp_nanos::now() static "constructor" functions.

Full Changelog: 2.1.3...3.0.0

2.1.3

04 Jan 12:02
ad3776e

Choose a tag to compare

What's Changed

  • Faster string serialization escaping logic.
  • Fixed name validation length error code from InvalidApi to InvalidName.

Full Changelog: 2.1.2...2.1.3

2.1.2

09 Nov 16:33
f32af37

Choose a tag to compare

What's Changed

C++ API improvements:

  • Fixed some potential linker errors due to missing inline keywords 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

26 Oct 15:49
2cd4e7f

Choose a tag to compare

What's Changed

This is a minor release and only brings a small bugfix:

  • Setting SO_REUSEADDR on outbound socket. This is helpful to users with large number of connections who previously ran out of outbound network ports.

2.1.0

05 Aug 15:13
473c21e

Choose a tag to compare

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.
    See set_marker, rewind_to_marker, clear_marker functions/methods.
  • Revised docs, broken down by language.

2.0.0

06 Jul 16:26
cca14ef

Choose a tag to compare

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 opts type 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

14 Jun 14:13

Choose a tag to compare

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

23 Mar 15:12

Choose a tag to compare

First release

  • Supports C and C++
  • Writes ILP protocol over TCP
  • Linux, MacOS and Windows support.