[RELEASE] ScyllaDB Rust Driver 1.4.0

The ScyllaDB team is pleased to announce ScyllaDB Rust Driver 1.4.0,
an asynchronous CQL driver for Rust, optimized for Scylla, but also compatible with Apache Cassandra!

Some interesting statistics:

  • over 5.200k downloads on crates!
  • over 650 GitHub stars!

Changes

New features / enhancements:

  • Added support for Scylla’s result metadata id extension. This improves type safety (especially for SELECT * queries), and in many cases performance (because driver won’t have to request result metadata for each request). (#1463).
  • :warning: Result metadata in PreparedStatement is now mutable in order to support the above extension. It was accessible to users with PreparedStatement::get_result_set_col_specs, which is now deprecated and will return initial result metadata. Use get_current_result_set_col_specs instead (#1445).
  • Bumped MSRV to 1.85 (#1430).
  • Thanks to the above bump, we were able to move to Rust 2024 edition (#1422).
  • Pager requests (execute_iter, query_iter) now respect client-side timeout settings, treating is as timeout for fetching a single page (#1458).
  • DeserializeRow derive macro now supports default_when_null field attribute (#1403).
  • Driver now reports the host that control connection is opened to when metadata fetch fails (#1460).
  • Removed unnecessary 'static bounds from QueryPager::rows_stream method (#1427).

Bug fixes:

  • Fixed QueryPager panic that could happen during runtime shutdown (#1456).
  • Allowed deserializing tuples with suffix of fields missing by interpreting those fields as nulls (#1453).
  • Type checking in pager methods (execute_iter, query_iter) is now performed for each page, not only the first one (#1449).
  • Fixed race condition that could potentially cause CachingSession to never drop statements from its cache (#1423).
  • Removed panicking access to buffers in scylla-cql (#1465).

Internal cleanups/refactors:

  • Use explicit matches for errors when the decision is crucial for correctness/performance (#1083).
  • Request timeout improvements (#1457).
  • Multiple refactors needed to support result metadata id extension:
    • id and lwt fields were moved to shared data of PreparedStatement (#1442).
    • Data sharing between various PreparedStatement variants have been centralized to make reasoning about it easier (#1446).
    • Metadata in results is now deserialized eagerly, instead of being deserialized in QueryResult::into_rows_result (#1461).

Documentation:

  • Bumped sphinx-scylladb-theme from 1.8.7 to 1.8.8 (#1426).
  • Documented features in Cargo.toml (#1459).

CI / developer tool improvements:

  • Integration tests now drop created keyspaces to not overwhelm database when running them multiple times (#1414).
  • Fixed test_default_policy_is_tablet_aware that started to fail because of Scylla changes (#1412).
  • Fixed clippy 1.89 & 1.90 lints (#1428, #1437).
  • Switched to using our fork of cargo-semver-checks to work around a bug in upstream (#1434).
  • Made semver-checks not fail when #[deprecated] attribute is added (#1450, #1464).

Others:

  • Added an UntranslatedPeer constructor for Node.js driver (#1466).

Congrats to all contributors and thanks everyone for using our driver!


The source code of the driver can be found here:

The official crates.io registry entry is here:

Thank you for your attention, please do not hesitate to contact us if you have any questions, issues, feature requests, or are simply interested in our driver!

Contributors since the last release:

commits author
127 Karol Baryła
24 Wojciech Przytuła
3 Mikołaj Uzarski
2 Stanisław Czech
1 Collin Styles
1 spoorn
1 dependabot[bot]