A modern, feature-rich and highly tunable C/C++ client library for Apache Cassandra® 2.1+ using exclusively Cassandra's binary protocol and Cassandra Query Language v3. This driver can also be used with other DataStax products:
The source code is made available via GitHub. Additionally binary versions of the driver (for multiple operating systems and multiple architectures) can be obtained from our Artifactory server. Binaries are available for the following operating systems:
The driver depends on the following libraries:
The version of OpenSSL and zlib provided with each Linux distribution above can be used to build the driver. A version of libuv > 1.x is provided for Rocky Linux under the dependencies directory. Packages for all three dependencies are provided for Windows distributions.
frozen<> and Cassandra version metadataThis driver works exclusively with the Cassandra Query Language v3 (CQL3) and Cassandra's native protocol. The current version works with the following server versions:
Both 32-bit (x86) and 64-bit (x64) architectures are supported
We build and test the driver on the following platforms:
A complete compatibility matrix for both Apache Cassandra® and DataStax Enterprise can be found here.
Disclaimer: DataStax products do not support big-endian systems.
The driver includes several examples in the examples directory.
#include <cassandra.h> /* Use "#include <dse.h>" when connecting to DataStax Enterpise */ #include <stdio.h> int main(int argc, char* argv[]) { /* Setup and connect to cluster */ CassFuture* connect_future = NULL; CassCluster* cluster = cass_cluster_new(); CassSession* session = cass_session_new(); char* hosts = "127.0.0.1"; if (argc > 1) { hosts = argv[1]; } /* Add contact points */ cass_cluster_set_contact_points(cluster, hosts); /* Provide the cluster object as configuration to connect the session */ connect_future = cass_session_connect(session, cluster); if (cass_future_error_code(connect_future) == CASS_OK) { CassFuture* close_future = NULL; /* Build statement and execute query */ const char* query = "SELECT release_version FROM system.local"; CassStatement* statement = cass_statement_new(query, 0); CassFuture* result_future = cass_session_execute(session, statement); if (cass_future_error_code(result_future) == CASS_OK) { /* Retrieve result set and get the first row */ const CassResult* result = cass_future_get_result(result_future); const CassRow* row = cass_result_first_row(result); if (row) { const CassValue* value = cass_row_get_column_by_name(row, "release_version"); const char* release_version; size_t release_version_length; cass_value_get_string(value, &release_version, &release_version_length); printf("release_version: '%.*s'\n", (int)release_version_length, release_version); } cass_result_free(result); } else { /* Handle error */ const char* message; size_t message_length; cass_future_error_message(result_future, &message, &message_length); fprintf(stderr, "Unable to run query: '%.*s'\n", (int)message_length, message); } cass_statement_free(statement); cass_future_free(result_future); /* Close the session */ close_future = cass_session_close(session); cass_future_wait(close_future); cass_future_free(close_future); } else { /* Handle error */ const char* message; size_t message_length; cass_future_error_message(connect_future, &message, &message_length); fprintf(stderr, "Unable to connect: '%.*s'\n", (int)message_length, message); } cass_future_free(connect_future); cass_cluster_free(cluster); cass_session_free(session); return 0; }