diff --git a/Makefile b/Makefile index c644cdf8..b315c9a7 100644 --- a/Makefile +++ b/Makefile @@ -138,10 +138,13 @@ SCYLLA_EXAMPLES_TO_RUN := \ concurrent_executions \ date_time \ duration \ + execution_profiles \ maps \ named_parameters \ paging \ + perf \ prepared \ + schema_meta \ simple \ ssl \ tracing \ @@ -150,12 +153,8 @@ SCYLLA_EXAMPLES_TO_RUN := \ uuids \ # auth <- unimplemented `cass_cluster_set_authenticator_callbacks()` - # execution_profiles <- unimplemented `cass_statement_set_keyspace()` # host_listener <- unimplemented `cass_cluster_set_host_listener_callback()` # logging <- unimplemented `cass_cluster_set_host_listener_callback()` - # perf <- unimplemented `cass_cluster_set_queue_size_io()` - # schema_meta <- unimplemented multiple schema-related functions - # cloud <- out of interest for us, not related to ScyllaDB endif ifndef CCM_COMMIT_ID @@ -163,7 +162,7 @@ ifndef CCM_COMMIT_ID endif ifndef SCYLLA_VERSION - SCYLLA_VERSION := release:6.1.1 + SCYLLA_VERSION := release:2025.3 endif ifndef CASSANDRA_VERSION diff --git a/examples/cloud/.gitignore b/examples/cloud/.gitignore deleted file mode 100644 index c3de202f..00000000 --- a/examples/cloud/.gitignore +++ /dev/null @@ -1 +0,0 @@ -cloud diff --git a/examples/cloud/CMakeLists.txt b/examples/cloud/CMakeLists.txt deleted file mode 100644 index 6ad10ac2..00000000 --- a/examples/cloud/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -cmake_minimum_required(VERSION 3.15) - -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ".") -set(PROJECT_EXAMPLE_NAME cloud) - -file(GLOB EXAMPLE_SRC_FILES *.c) -include_directories(${INCLUDES}) -add_executable(${PROJECT_EXAMPLE_NAME} ${EXAMPLE_SRC_FILES}) -target_link_libraries(${PROJECT_EXAMPLE_NAME} ${PROJECT_LIB_NAME_TARGET} ${CASS_LIBS}) -add_dependencies(${PROJECT_EXAMPLE_NAME} ${PROJECT_LIB_NAME_TARGET}) - -set_target_properties(${PROJECT_EXAMPLE_NAME} PROPERTIES FOLDER "Examples" - COMPILE_FLAGS "${EXAMPLE_CMAKE_C_FLAGS}") diff --git a/examples/cloud/cloud.c b/examples/cloud/cloud.c deleted file mode 100644 index c3ec301b..00000000 --- a/examples/cloud/cloud.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - This is free and unencumbered software released into the public domain. - - Anyone is free to copy, modify, publish, use, compile, sell, or - distribute this software, either in source code form or as a compiled - binary, for any purpose, commercial or non-commercial, and by any - means. - - In jurisdictions that recognize copyright laws, the author or authors - of this software dedicate any and all copyright interest in the - software to the public domain. We make this dedication for the benefit - of the public at large and to the detriment of our heirs and - successors. We intend this dedication to be an overt act of - relinquishment in perpetuity of all present and future rights to this - software under copyright law. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR - OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - - For more information, please refer to -*/ - -#include -#include - -int main(int argc, char* argv[]) { - /* Setup and connect to cluster */ - CassFuture* connect_future = NULL; - CassCluster* cluster; - CassSession* session; - - const char* secure_connect_bundle; - const char* username; - const char* password; - - if (argc < 4) { - fprintf(stderr, "Usage: %s \n", argv[0]); - return 1; - } - - secure_connect_bundle = argv[1]; - username = argv[2]; - password = argv[3]; - - cluster = cass_cluster_new(); - session = cass_session_new(); - - /* Setup driver to connect to the cloud using the secure connection bundle */ - if (cass_cluster_set_cloud_secure_connection_bundle(cluster, secure_connect_bundle) != CASS_OK) { - fprintf(stderr, "Unable to configure cloud using the secure connection bundle: %s\n", - secure_connect_bundle); - } - - cass_cluster_set_credentials(cluster, username, password); - - /* 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) { - /* Build statement and execute query */ - const char* query = "SELECT release_version FROM system.local WHERE key='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); - } 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; -} diff --git a/examples/execution_profiles/execution_profiles.c b/examples/execution_profiles/execution_profiles.c index 91b97546..a113f71a 100644 --- a/examples/execution_profiles/execution_profiles.c +++ b/examples/execution_profiles/execution_profiles.c @@ -115,7 +115,6 @@ CassError insert_into_examples(CassSession* session, const char* profile_name, c } } cass_statement_set_keyspace(statement, "execution_profiles"); - cass_statement_add_key_index(statement, 0); cass_statement_bind_string(statement, 0, key); cass_statement_bind_bool(statement, 1, value); future = cass_session_execute(session, statement); @@ -205,7 +204,7 @@ int main(int argc, char* argv[]) { /* Create a keyspace and table for the execution profile example */ execute_query(session, "CREATE KEYSPACE IF NOT EXISTS examples WITH replication = { \ - 'class': 'SimpleStrategy', 'replication_factor': '3' \ + 'class': 'NetworkTopologyStrategy', 'replication_factor': '3' \ }"); execute_query(session, "CREATE TABLE IF NOT EXISTS examples.execution_profiles ( \ key text PRIMARY KEY, \ diff --git a/examples/perf/perf.c b/examples/perf/perf.c index d036656e..bbd76efa 100644 --- a/examples/perf/perf.c +++ b/examples/perf/perf.c @@ -136,7 +136,6 @@ CassCluster* create_cluster(const char* hosts) { cass_cluster_set_contact_points(cluster, hosts); cass_cluster_set_credentials(cluster, "cassandra", "cassandra"); cass_cluster_set_num_threads_io(cluster, NUM_IO_WORKER_THREADS); - cass_cluster_set_queue_size_io(cluster, 10000); cass_cluster_set_core_connections_per_shard(cluster, 1); return cluster; } diff --git a/examples/schema_meta/schema_meta.c b/examples/schema_meta/schema_meta.c index 8e956d27..38d250d6 100644 --- a/examples/schema_meta/schema_meta.c +++ b/examples/schema_meta/schema_meta.c @@ -204,8 +204,6 @@ void print_schema_value(const CassValue* value); void print_schema_bytes(const CassValue* value); void print_schema_list(const CassValue* value); void print_schema_map(const CassValue* value); -void print_meta_field(const CassIterator* iterator, int indent); -void print_meta_fields(CassIterator* iterator, int indent); void print_column_meta(const CassColumnMeta* meta, int indent); void print_index_meta(const CassIndexMeta* meta, int indent); @@ -318,27 +316,6 @@ void print_schema_map(const CassValue* value) { cass_iterator_free(iterator); } -void print_meta_field(const CassIterator* iterator, int indent) { - const char* name; - size_t name_length; - const CassValue* value; - - cass_iterator_get_meta_field_name(iterator, &name, &name_length); - value = cass_iterator_get_meta_field_value(iterator); - - print_indent(indent); - printf("%.*s: ", (int)name_length, name); - print_schema_value(value); - printf("\n"); -} - -void print_meta_fields(CassIterator* iterator, int indent) { - while (cass_iterator_next(iterator)) { - print_meta_field(iterator, indent); - } - cass_iterator_free(iterator); -} - void print_keyspace_meta(const CassKeyspaceMeta* meta, int indent) { const char* name; size_t name_length; @@ -348,9 +325,6 @@ void print_keyspace_meta(const CassKeyspaceMeta* meta, int indent) { cass_keyspace_meta_name(meta, &name, &name_length); printf("Keyspace \"%.*s\":\n", (int)name_length, name); - print_meta_fields(cass_iterator_fields_from_keyspace_meta(meta), indent + 1); - printf("\n"); - iterator = cass_iterator_tables_from_keyspace_meta(meta); while (cass_iterator_next(iterator)) { print_table_meta(cass_iterator_get_table_meta(iterator), indent + 1); @@ -369,9 +343,6 @@ void print_table_meta(const CassTableMeta* meta, int indent) { cass_table_meta_name(meta, &name, &name_length); printf("Table \"%.*s\":\n", (int)name_length, name); - print_meta_fields(cass_iterator_fields_from_table_meta(meta), indent + 1); - printf("\n"); - iterator = cass_iterator_columns_from_table_meta(meta); while (cass_iterator_next(iterator)) { print_column_meta(cass_iterator_get_column_meta(iterator), indent + 1); @@ -396,9 +367,6 @@ void print_function_meta(const CassFunctionMeta* meta, int indent) { print_indent(indent); cass_function_meta_name(meta, &name, &name_length); printf("Function \"%.*s\":\n", (int)name_length, name); - - print_meta_fields(cass_iterator_fields_from_function_meta(meta), indent + 1); - printf("\n"); } void print_aggregate_meta(const CassAggregateMeta* meta, int indent) { @@ -408,9 +376,6 @@ void print_aggregate_meta(const CassAggregateMeta* meta, int indent) { print_indent(indent); cass_aggregate_meta_name(meta, &name, &name_length); printf("Aggregate \"%.*s\":\n", (int)name_length, name); - - print_meta_fields(cass_iterator_fields_from_aggregate_meta(meta), indent + 1); - printf("\n"); } void print_column_meta(const CassColumnMeta* meta, int indent) { @@ -420,8 +385,6 @@ void print_column_meta(const CassColumnMeta* meta, int indent) { print_indent(indent); cass_column_meta_name(meta, &name, &name_length); printf("Column \"%.*s\":\n", (int)name_length, name); - print_meta_fields(cass_iterator_fields_from_column_meta(meta), indent + 1); - printf("\n"); } void print_index_meta(const CassIndexMeta* meta, int indent) { @@ -431,6 +394,4 @@ void print_index_meta(const CassIndexMeta* meta, int indent) { print_indent(indent); cass_index_meta_name(meta, &name, &name_length); printf("Index \"%.*s\":\n", (int)name_length, name); - print_meta_fields(cass_iterator_fields_from_index_meta(meta), indent + 1); - printf("\n"); } diff --git a/include/cassandra.h b/include/cassandra.h index f063c6e7..182b4d64 100644 --- a/include/cassandra.h +++ b/include/cassandra.h @@ -1632,6 +1632,8 @@ cass_cluster_set_ssl(CassCluster* cluster, /** * Sets custom authenticator * + * Warning: This function is not yet implemented. + * * @public @memberof CassCluster * * @param[in] cluster @@ -1755,41 +1757,6 @@ CASS_EXPORT CassError cass_cluster_set_num_threads_io(CassCluster* cluster, unsigned num_threads); -/** - * Sets the size of the fixed size queue that stores - * pending requests. - * - * Default: 8192 - * - * @public @memberof CassCluster - * - * @param[in] cluster - * @param[in] queue_size - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CassError -cass_cluster_set_queue_size_io(CassCluster* cluster, - unsigned queue_size); - -/** - * Sets the size of the fixed size queue that stores - * events. - * - * Default: 8192 - * - * @public @memberof CassCluster - * - * @deprecated This is no longer useful and does nothing. Expect this to be - * removed in a future release. - * - * @param[in] cluster - * @param[in] queue_size - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CASS_DEPRECATED(CassError -cass_cluster_set_queue_size_event(CassCluster* cluster, - unsigned queue_size)); - /** * Sets the number of connections opened by the driver to each host. * @@ -1831,25 +1798,6 @@ CASS_EXPORT CassError cass_cluster_set_core_connections_per_shard(CassCluster* cluster, unsigned num_connections); -/** - * Sets the maximum number of connections made to each server in each - * IO thread. - * - * Default: 2 - * - * @public @memberof CassCluster - * - * @deprecated This is no longer useful and does nothing. Expect this to be - * removed in a future release. - * - * @param[in] cluster - * @param[in] num_connections - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CASS_DEPRECATED(CassError -cass_cluster_set_max_connections_per_host(CassCluster* cluster, - unsigned num_connections)); - /** * Sets the amount of time to wait before attempting to reconnect. * @@ -1871,6 +1819,8 @@ cass_cluster_set_reconnect_wait_time(CassCluster* cluster, * * @public @memberof CassCluster * + * Warning: This function is not yet implemented. + * * @param[in] cluster * @param[in] delay_ms Time in milliseconds to delay attempting a reconnection; * 0 to perform a reconnection immediately. @@ -1884,6 +1834,8 @@ cass_cluster_set_constant_reconnect(CassCluster* cluster, * longer between each reconnection attempt; however will maintain a constant * delay once the maximum delay is reached. * + * Warning: This function is not yet implemented. + * * Default: *
    *
  • 2000 milliseconds base delay
  • @@ -1942,165 +1894,6 @@ CASS_EXPORT CassError cass_cluster_set_coalesce_delay(CassCluster* cluster, cass_int64_t delay_us); -/** - * Sets the ratio of time spent processing new requests versus handling the I/O - * and processing of outstanding requests. The range of this setting is 1 to 100, - * where larger values allocate more time to processing new requests and smaller - * values allocate more time to processing outstanding requests. - * - * Default: 50 - * - * @public @memberof CassCluster - * - * @param[in] cluster - * @param[in] ratio - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CassError -cass_cluster_set_new_request_ratio(CassCluster* cluster, - cass_int32_t ratio); - -/** - * Sets the maximum number of connections that will be created concurrently. - * Connections are created when the current connections are unable to keep up with - * request throughput. - * - * Default: 1 - * - * @public @memberof CassCluster - * - * @deprecated This is no longer useful and does nothing. Expect this to be - * removed in a future release. - * - * @param[in] cluster - * @param[in] num_connections - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CASS_DEPRECATED(CassError -cass_cluster_set_max_concurrent_creation(CassCluster* cluster, - unsigned num_connections)); - -/** - * Sets the threshold for the maximum number of concurrent requests in-flight - * on a connection before creating a new connection. The number of new connections - * created will not exceed max_connections_per_host. - * - * Default: 100 - * - * @public @memberof CassCluster - * - * @deprecated This is no longer useful and does nothing. Expect this to be - * removed in a future release. - * - * @param[in] cluster - * @param[in] num_requests - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CASS_DEPRECATED(CassError -cass_cluster_set_max_concurrent_requests_threshold(CassCluster* cluster, - unsigned num_requests)); - -/** - * Sets the maximum number of requests processed by an IO worker - * per flush. - * - * Default: 128 - * - * @public @memberof CassCluster - * - * @deprecated This is no longer useful and does nothing. Expect this to be - * removed in a future release. - * - * @param[in] cluster - * @param[in] num_requests - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CASS_DEPRECATED(CassError -cass_cluster_set_max_requests_per_flush(CassCluster* cluster, - unsigned num_requests)); - -/** - * Sets the high water mark for the number of bytes outstanding - * on a connection. Disables writes to a connection if the number - * of bytes queued exceed this value. - * - * Default: 64 KB - * - * @public @memberof CassCluster - * - * @deprecated This is no longer useful and does nothing. Expect this to be - * removed in a future release. - * - * @param[in] cluster - * @param[in] num_bytes - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CASS_DEPRECATED(CassError -cass_cluster_set_write_bytes_high_water_mark(CassCluster* cluster, - unsigned num_bytes)); - -/** - * Sets the low water mark for number of bytes outstanding on a - * connection. After exceeding high water mark bytes, writes will - * only resume once the number of bytes fall below this value. - * - * Default: 32 KB - * - * @public @memberof CassCluster - * - * @deprecated This is no longer useful and does nothing. Expect this to be - * removed in a future release. - * - * @param[in] cluster - * @param[in] num_bytes - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CASS_DEPRECATED(CassError -cass_cluster_set_write_bytes_low_water_mark(CassCluster* cluster, - unsigned num_bytes)); - -/** - * Sets the high water mark for the number of requests queued waiting - * for a connection in a connection pool. Disables writes to a - * host on an IO worker if the number of requests queued exceed this - * value. - * - * Default: 256 - * - * @public @memberof CassCluster - * - * @deprecated This is no longer useful and does nothing. Expect this to be - * removed in a future release. - * - * @param[in] cluster - * @param[in] num_requests - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CASS_DEPRECATED(CassError -cass_cluster_set_pending_requests_high_water_mark(CassCluster* cluster, - unsigned num_requests)); - -/** - * Sets the low water mark for the number of requests queued waiting - * for a connection in a connection pool. After exceeding high water mark - * requests, writes to a host will only resume once the number of requests - * fall below this value. - * - * Default: 128 - * - * @public @memberof CassCluster - * - * @deprecated This is no longer useful and does nothing. Expect this to be - * removed in a future release. - * - * @param[in] cluster - * @param[in] num_requests - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CASS_DEPRECATED(CassError -cass_cluster_set_pending_requests_low_water_mark(CassCluster* cluster, - unsigned num_requests)); - /** * Sets the timeout for connecting to a node. * @@ -2132,6 +1925,8 @@ cass_cluster_set_request_timeout(CassCluster* cluster, /** * Sets the timeout for waiting for DNS name resolution. * + * Warning: This function is not yet implemented. + * * Default: 2000 milliseconds * * @public @memberof CassCluster @@ -2173,45 +1968,6 @@ CASS_EXPORT void cass_cluster_set_schema_agreement_interval(CassCluster* cluster, unsigned interval_ms); -/** - * Sets the maximum time to wait for tracing data to become available. - * - * Default: 15 milliseconds - * - * @param[in] cluster - * @param[in] max_wait_time_ms - */ -CASS_EXPORT void -cass_cluster_set_tracing_max_wait_time(CassCluster* cluster, - unsigned max_wait_time_ms); - -/** - * Sets the amount of time to wait between attempts to check to see if tracing is - * available. - * - * Default: 3 milliseconds - * - * @param[in] cluster - * @param[in] retry_wait_time_ms - */ -CASS_EXPORT void -cass_cluster_set_tracing_retry_wait_time(CassCluster* cluster, - unsigned retry_wait_time_ms); - -/** - * Sets the consistency level to use for checking to see if tracing data is - * available. - * - * Default: CASS_CONSISTENCY_ONE - * - * @param[in] cluster - * @param[in] consistency - */ -CASS_EXPORT void -cass_cluster_set_tracing_consistency(CassCluster* cluster, - CassConsistency consistency); - - /** * Sets credentials for plain text authentication. * @@ -2726,29 +2482,11 @@ CASS_EXPORT void cass_cluster_set_use_schema(CassCluster* cluster, cass_bool_t enabled); -/** - * Enable/Disable retrieving hostnames for IP addresses using reverse IP lookup. - * - * This is useful for authentication (Kerberos) or encryption (SSL) services - * that require a valid hostname for verification. - * - * Default: cass_false (disabled). - * - * @public @memberof CassCluster - * - * @param[in] cluster - * @param[in] enabled - * @return CASS_OK if successful, otherwise an error occurred - * - * @see cass_cluster_set_resolve_timeout() - */ -CASS_EXPORT CassError -cass_cluster_set_use_hostname_resolution(CassCluster* cluster, - cass_bool_t enabled); - /** * Enable/Disable the randomization of the contact points list. * + * Warning: This function is not yet implemented. + * * Default: cass_true (enabled). * * Important: This setting should only be disabled for debugging or @@ -2792,27 +2530,6 @@ cass_cluster_set_constant_speculative_execution_policy(CassCluster* cluster, CASS_EXPORT CassError cass_cluster_set_no_speculative_execution_policy(CassCluster* cluster); -/** - * Sets the maximum number of "pending write" objects that will be - * saved for re-use for marshalling new requests. These objects may - * hold on to a significant amount of memory and reducing the - * number of these objects may reduce memory usage of the application. - * - * The cost of reducing the value of this setting is potentially slower - * marshalling of requests prior to sending. - * - * Default: Max unsigned integer value - * - * @public @memberof CassCluster - * - * @param[in] cluster - * @param[in] num_objects - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CassError -cass_cluster_set_max_reusable_write_objects(CassCluster* cluster, - unsigned num_objects); - /** * Associates a named execution profile which can be utilized during execution. * @@ -2860,6 +2577,8 @@ cass_cluster_set_execution_profile_n(CassCluster* cluster, /** * Prepare statements on all available hosts. * + * Warning: This function is not yet implemented. + * * Default: cass_true * * @public @memberof CassCluster @@ -2872,51 +2591,11 @@ CASS_EXPORT CassError cass_cluster_set_prepare_on_all_hosts(CassCluster* cluster, cass_bool_t enabled); -/** - * Enable pre-preparing cached prepared statements when existing hosts become - * available again or when new hosts are added to the cluster. - * - * This can help mitigate request latency when executing prepared statements - * by avoiding an extra round trip in cases where the statement is - * unprepared on a freshly started server. The main tradeoff is extra background - * network traffic is required to prepare the statements on hosts as they become - * available. - * - * Default: cass_true - * - * @param cluster - * @param enabled - * @return CASS_OK if successful, otherwise an error occurred - */ -CASS_EXPORT CassError -cass_cluster_set_prepare_on_up_or_add_host(CassCluster* cluster, - cass_bool_t enabled); - -/** - * Enable the NO_COMPACT startup option. - * - * This can help facilitate uninterrupted cluster upgrades where tables using - * COMPACT_STORAGE will operate in "compatibility mode" for - * BATCH, DELETE, SELECT, and UPDATE CQL operations. - * - * Default: cass_false - * - * @cassandra{3.0.16+} - * @cassandra{3.11.2+} - * @cassandra{4.0+} - * - * @public @memberof CassCluster - * - * @param[in] cluster - * @param[in] enabled - */ -CASS_EXPORT CassError -cass_cluster_set_no_compact(CassCluster* cluster, - cass_bool_t enabled); - /** * Sets a callback for handling host state changes in the cluster. * + * Warning: This function is not yet implemented. + * * Note: The callback is invoked only when state changes in the cluster * are applicable to the configured load balancing policy(s). * @@ -2932,71 +2611,6 @@ cass_cluster_set_host_listener_callback(CassCluster* cluster, CassHostListenerCallback callback, void* data); -/** - * Sets the secure connection bundle path for processing DBaaS credentials. - * - * This will pre-configure a cluster using the credentials format provided by - * the DBaaS cloud provider. - * - * @param[in] cluster - * @param[in] path Absolute path to DBaaS credentials file. - * @return CASS_OK if successful, otherwise error occured. - */ -CASS_EXPORT CassError -cass_cluster_set_cloud_secure_connection_bundle(CassCluster* cluster, - const char* path); - -/** - * Same as cass_cluster_set_cloud_secure_connection_bundle(), but with lengths - * for string parameters. - * - * @see cass_cluster_set_cloud_secure_connection_bundle() - * - * @param[in] cluster - * @param[in] path Absolute path to DBaaS credentials file. - * @param[in] path_length Length of path variable. - * @return CASS_OK if successful, otherwise error occured. - */ -CASS_EXPORT CassError -cass_cluster_set_cloud_secure_connection_bundle_n(CassCluster* cluster, - const char* path, - size_t path_length); - -/** - * Same as cass_cluster_set_cloud_secure_connection_bundle(), but it does not - * initialize the underlying SSL library implementation. The SSL library still - * needs to be initialized, but it's up to the client application to handle - * initialization. This is similar to the function cass_ssl_new_no_lib_init(), - * and its documentation should be used as a reference to properly initialize - * the underlying SSL library. - * - * @see cass_ssl_new_no_lib_init() - * @see cass_cluster_set_cloud_secure_connection_bundle() - * - * @param[in] cluster - * @param[in] path Absolute path to DBaaS credentials file. - * @return CASS_OK if successful, otherwise error occured. - */ -CASS_EXPORT CassError -cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init(CassCluster* cluster, - const char* path); - -/** - * Same as cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init(), - * but with lengths for string parameters. - * - * @see cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init() - * - * @param[in] cluster - * @param[in] path Absolute path to DBaaS credentials file. - * @param[in] path_length Length of path variable. - * @return CASS_OK if successful, otherwise error occured. - */ -CASS_EXPORT CassError -cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init_n(CassCluster* cluster, - const char* path, - size_t path_length); - /** * Set the application name. * @@ -3078,20 +2692,6 @@ cass_cluster_set_application_version_n(CassCluster* cluster, CASS_EXPORT void cass_cluster_set_client_id(CassCluster* cluster, CassUuid client_id); -/** - * Sets the amount of time between monitor reporting event messages. - * - * Default: 300 seconds. - * - * @public @memberof CassCluster - * - * @param[in] cluster - * @param[in] interval_secs Use 0 to disable monitor reporting event messages. - */ -CASS_EXPORT void -cass_cluster_set_monitor_reporting_interval(CassCluster* cluster, - unsigned interval_secs); - /** * Sets the preferred compression algorithm. * Default: no compression. @@ -3340,6 +2940,8 @@ cass_session_get_metrics(const CassSession* session, /** * Gets a copy of this session's speculative execution metrics. * + * Warning: This function is not yet implemented. + * * @public @memberof CassSession * * @param[in] session @@ -3379,6 +2981,8 @@ cass_schema_meta_free(const CassSchemaMeta* schema_meta); /** * Gets the version of the schema metadata snapshot. * + * Warning: This function is not yet implemented. + * * @public @memberof CassSchemaMeta * * @param[in] schema_meta @@ -3391,6 +2995,8 @@ cass_schema_meta_snapshot_version(const CassSchemaMeta* schema_meta); /** * Gets the version of the connected Cassandra cluster. * + * Warning: This function is not yet implemented. + * * @public @memberof CassSchemaMeta * * @param[in] schema_meta @@ -3632,38 +3238,6 @@ cass_keyspace_meta_aggregate_by_name_n(const CassKeyspaceMeta* keyspace_meta, const char* arguments, size_t arguments_length); -/** - * Gets a metadata field for the provided name. Metadata fields allow direct - * access to the column data found in the underlying "keyspaces" metadata table. - * - * @public @memberof CassKeyspaceMeta - * - * @param[in] keyspace_meta - * @param[in] name - * @return A metadata field value. NULL if the field does not exist. - */ -CASS_EXPORT const CassValue* -cass_keyspace_meta_field_by_name(const CassKeyspaceMeta* keyspace_meta, - const char* name); - -/** - * Same as cass_keyspace_meta_field_by_name(), but with lengths for string - * parameters. - * - * @public @memberof CassKeyspaceMeta - * - * @param[in] keyspace_meta - * @param[in] name - * @param[in] name_length - * @return same as cass_keyspace_meta_field_by_name() - * - * @see cass_keyspace_meta_field_by_name() - */ -CASS_EXPORT const CassValue* -cass_keyspace_meta_field_by_name_n(const CassKeyspaceMeta* keyspace_meta, - const char* name, - size_t name_length); - /** * Gets the name of the table. * @@ -3681,6 +3255,8 @@ cass_table_meta_name(const CassTableMeta* table_meta, /** * Determine if the table is a virtual table. * + * Warning: This function is not yet implemented. + * * @public @memberof CassTableMeta * * @param[in] table_meta @@ -3748,6 +3324,8 @@ cass_table_meta_column(const CassTableMeta* table_meta, /** * Gets the index metadata for the provided index name. * + * Warning: This function is not yet implemented. + * * @public @memberof CassTableMeta * * @param[in] table_meta @@ -3763,6 +3341,8 @@ cass_table_meta_index_by_name(const CassTableMeta* table_meta, * Same as cass_table_meta_index_by_name(), but with lengths for string * parameters. * + * Warning: This function is not yet implemented. + * * @public @memberof CassTableMeta * * @param[in] table_meta @@ -3780,6 +3360,8 @@ cass_table_meta_index_by_name_n(const CassTableMeta* table_meta, /** * Gets the total number of indexes for the table. * + * Warning: This function is not yet implemented. + * * @public @memberof CassTableMeta * * @param[in] table_meta @@ -3912,6 +3494,8 @@ cass_table_meta_clustering_key(const CassTableMeta* table_meta, /** * Gets the clustering order column metadata for the provided index. * + * Warning: This function is not yet implemented. + * * @public @memberof CassTableMeta * * @param[in] table_meta @@ -3925,38 +3509,6 @@ CASS_EXPORT CassClusteringOrder cass_table_meta_clustering_key_order(const CassTableMeta* table_meta, size_t index); -/** - * Gets a metadata field for the provided name. Metadata fields allow direct - * access to the column data found in the underlying "tables" metadata table. - * - * @public @memberof CassTableMeta - * - * @param[in] table_meta - * @param[in] name - * @return A metadata field value. NULL if the field does not exist. - */ -CASS_EXPORT const CassValue* -cass_table_meta_field_by_name(const CassTableMeta* table_meta, - const char* name); - -/** - * Same as cass_table_meta_field_by_name(), but with lengths for string - * parameters. - * - * @public @memberof CassTableMeta - * - * @param[in] table_meta - * @param[in] name - * @param[in] name_length - * @return same as cass_table_meta_field_by_name() - * - * @see cass_table_meta_field_by_name() - */ -CASS_EXPORT const CassValue* -cass_table_meta_field_by_name_n(const CassTableMeta* table_meta, - const char* name, - size_t name_length); - /** * Gets the column metadata for the provided column name. * @@ -4085,55 +3637,25 @@ cass_materialized_view_meta_clustering_key_count(const CassMaterializedViewMeta* */ CASS_EXPORT const CassColumnMeta* cass_materialized_view_meta_clustering_key(const CassMaterializedViewMeta* view_meta, - size_t index); - -/** - * Gets the clustering order column metadata for the provided index. - * - * @public @memberof CassMaterializedViewMeta - * - * @param[in] view_meta - * @param[in] index - * @return The clustering order for a column. - * CASS_CLUSTERING_ORDER_NONE returned if the index is out of range. - * - * @see cass_materialized_view_meta_clustering_key_count() - */ -CASS_EXPORT CassClusteringOrder -cass_materialized_view_meta_clustering_key_order(const CassMaterializedViewMeta* view_meta, - size_t index); - -/** - * Gets a metadata field for the provided name. Metadata fields allow direct - * access to the column data found in the underlying "views" metadata view. - * - * @public @memberof CassMaterializedViewMeta - * - * @param[in] view_meta - * @param[in] name - * @return A metadata field value. NULL if the field does not exist. - */ -CASS_EXPORT const CassValue* -cass_materialized_view_meta_field_by_name(const CassMaterializedViewMeta* view_meta, - const char* name); + size_t index); /** - * Same as cass_materialized_view_meta_field_by_name(), but with lengths for string - * parameters. + * Gets the clustering order column metadata for the provided index. + * + * Warning: This function is not yet implemented. * * @public @memberof CassMaterializedViewMeta * * @param[in] view_meta - * @param[in] name - * @param[in] name_length - * @return same as cass_materialized_view_meta_field_by_name() + * @param[in] index + * @return The clustering order for a column. + * CASS_CLUSTERING_ORDER_NONE returned if the index is out of range. * - * @see cass_materialized_view_meta_field_by_name() + * @see cass_materialized_view_meta_clustering_key_count() */ -CASS_EXPORT const CassValue* -cass_materialized_view_meta_field_by_name_n(const CassMaterializedViewMeta* view_meta, - const char* name, - size_t name_length); +CASS_EXPORT CassClusteringOrder +cass_materialized_view_meta_clustering_key_order(const CassMaterializedViewMeta* view_meta, + size_t index); /** * Gets the name of the column. @@ -4171,41 +3693,11 @@ cass_column_meta_type(const CassColumnMeta* column_meta); CASS_EXPORT const CassDataType* cass_column_meta_data_type(const CassColumnMeta* column_meta); -/** - * Gets a metadata field for the provided name. Metadata fields allow direct - * access to the column data found in the underlying "columns" metadata table. - * - * @public @memberof CassColumnMeta - * - * @param[in] column_meta - * @param[in] name - * @return A metadata field value. NULL if the field does not exist. - */ -CASS_EXPORT const CassValue* -cass_column_meta_field_by_name(const CassColumnMeta* column_meta, - const char* name); - -/** - * Same as cass_column_meta_field_by_name(), but with lengths for string - * parameters. - * - * @public @memberof CassColumnMeta - * - * @param[in] column_meta - * @param[in] name - * @param[in] name_length - * @return same as cass_column_meta_field_by_name() - * - * @see cass_column_meta_field_by_name() - */ -CASS_EXPORT const CassValue* -cass_column_meta_field_by_name_n(const CassColumnMeta* column_meta, - const char* name, - size_t name_length); - /** * Gets the name of the index. * + * Warning: This function is not yet implemented. + * * @public @memberof CassIndexMeta * * @param[in] index_meta @@ -4220,6 +3712,8 @@ cass_index_meta_name(const CassIndexMeta* index_meta, /** * Gets the type of the index. * + * Warning: This function is not yet implemented. + * * @public @memberof CassIndexMeta * * @param[in] index_meta @@ -4231,6 +3725,8 @@ cass_index_meta_type(const CassIndexMeta* index_meta); /** * Gets the target of the index. * + * Warning: This function is not yet implemented. + * * @public @memberof CassIndexMeta * * @param[in] index_meta @@ -4245,6 +3741,8 @@ cass_index_meta_target(const CassIndexMeta* index_meta, /** * Gets the options of the index. * + * Warning: This function is not yet implemented. + * * @public @memberof CassIndexMeta * * @param[in] index_meta @@ -4253,41 +3751,11 @@ cass_index_meta_target(const CassIndexMeta* index_meta, CASS_EXPORT const CassValue* cass_index_meta_options(const CassIndexMeta* index_meta); -/** - * Gets a metadata field for the provided name. Metadata fields allow direct - * access to the index data found in the underlying "indexes" metadata table. - * - * @public @memberof CassIndexMeta - * - * @param[in] index_meta - * @param[in] name - * @return A metadata field value. NULL if the field does not exist. - */ -CASS_EXPORT const CassValue* -cass_index_meta_field_by_name(const CassIndexMeta* index_meta, - const char* name); - -/** - * Same as cass_index_meta_field_by_name(), but with lengths for string - * parameters. - * - * @public @memberof CassIndexMeta - * - * @param[in] index_meta - * @param[in] name - * @param[in] name_length - * @return same as cass_index_meta_field_by_name() - * - * @see cass_index_meta_field_by_name() - */ -CASS_EXPORT const CassValue* -cass_index_meta_field_by_name_n(const CassIndexMeta* index_meta, - const char* name, - size_t name_length); - /** * Gets the name of the function. * + * Warning: This function is not yet implemented. + * * @public @memberof CassFunctionMeta * * @param[in] function_meta @@ -4304,6 +3772,8 @@ cass_function_meta_name(const CassFunctionMeta* function_meta, * function's name and the function's signature: * "name(type1 type2.. typeN)". * + * Warning: This function is not yet implemented. + * * @public @memberof CassFunctionMeta * * @param[in] function_meta @@ -4318,6 +3788,8 @@ cass_function_meta_full_name(const CassFunctionMeta* function_meta, /** * Gets the body of the function. * + * Warning: This function is not yet implemented. + * * @public @memberof CassFunctionMeta * * @param[in] function_meta @@ -4332,6 +3804,8 @@ cass_function_meta_body(const CassFunctionMeta* function_meta, /** * Gets the language of the function. * + * Warning: This function is not yet implemented. + * * @public @memberof CassFunctionMeta * * @param[in] function_meta @@ -4346,6 +3820,8 @@ cass_function_meta_language(const CassFunctionMeta* function_meta, /** * Gets whether a function is called on "null". * + * Warning: This function is not yet implemented. + * * @public @memberof CassFunctionMeta * * @param[in] function_meta @@ -4357,6 +3833,8 @@ cass_function_meta_called_on_null_input(const CassFunctionMeta* function_meta); /** * Gets the number of arguments this function takes. * + * Warning: This function is not yet implemented. + * * @public @memberof CassFunctionMeta * * @param[in] function_meta @@ -4368,6 +3846,8 @@ cass_function_meta_argument_count(const CassFunctionMeta* function_meta); /** * Gets the function's argument name and type for the provided index. * + * Warning: This function is not yet implemented. + * * @public @memberof CassFunctionMeta * * @param[in] function_meta @@ -4387,6 +3867,8 @@ cass_function_meta_argument(const CassFunctionMeta* function_meta, /** * Gets the function's argument and type for the provided name. * + * Warning: This function is not yet implemented. + * * @public @memberof CassFunctionMeta * * @param[in] function_meta @@ -4401,6 +3883,8 @@ cass_function_meta_argument_type_by_name(const CassFunctionMeta* function_meta, * Same as cass_function_meta_argument_type_by_name(), but with lengths for string * parameters. * + * Warning: This function is not yet implemented. + * * @public @memberof CassFunctionMeta * * @param[in] function_meta @@ -4418,6 +3902,8 @@ cass_function_meta_argument_type_by_name_n(const CassFunctionMeta* function_meta /** * Gets the return type of the function. * + * Warning: This function is not yet implemented. + * * @public @memberof CassFunctionMeta * * @param[in] function_meta @@ -4426,41 +3912,11 @@ cass_function_meta_argument_type_by_name_n(const CassFunctionMeta* function_meta CASS_EXPORT const CassDataType* cass_function_meta_return_type(const CassFunctionMeta* function_meta); -/** - * Gets a metadata field for the provided name. Metadata fields allow direct - * access to the column data found in the underlying "functions" metadata table. - * - * @public @memberof CassFunctionMeta - * - * @param[in] function_meta - * @param[in] name - * @return A metadata field value. NULL if the field does not exist. - */ -CASS_EXPORT const CassValue* -cass_function_meta_field_by_name(const CassFunctionMeta* function_meta, - const char* name); - -/** - * Same as cass_function_meta_field_by_name(), but with lengths for string - * parameters. - * - * @public @memberof CassFunctionMeta - * - * @param[in] function_meta - * @param[in] name - * @param[in] name_length - * @return same as cass_function_meta_field_by_name() - * - * @see cass_function_meta_field_by_name() - */ -CASS_EXPORT const CassValue* -cass_function_meta_field_by_name_n(const CassFunctionMeta* function_meta, - const char* name, - size_t name_length); - /** * Gets the name of the aggregate. * + * Warning: This function is not yet implemented. + * * @public @memberof CassAggregateMeta * * @param[in] aggregate_meta @@ -4477,6 +3933,8 @@ cass_aggregate_meta_name(const CassAggregateMeta* aggregate_meta, * aggregate's name and the aggregate's signature: * "name(type1 type2.. typeN)". * + * Warning: This function is not yet implemented. + * * @public @memberof CassAggregateMeta * * @param[in] aggregate_meta @@ -4491,6 +3949,8 @@ cass_aggregate_meta_full_name(const CassAggregateMeta* aggregate_meta, /** * Gets the number of arguments this aggregate takes. * + * Warning: This function is not yet implemented. + * * @public @memberof CassAggregateMeta * * @param[in] aggregate_meta @@ -4502,6 +3962,8 @@ cass_aggregate_meta_argument_count(const CassAggregateMeta* aggregate_meta); /** * Gets the aggregate's argument type for the provided index. * + * Warning: This function is not yet implemented. + * * @public @memberof CassAggregateMeta * * @param[in] aggregate_meta @@ -4515,6 +3977,8 @@ cass_aggregate_meta_argument_type(const CassAggregateMeta* aggregate_meta, /** * Gets the return type of the aggregate. * + * Warning: This function is not yet implemented. + * * @public @memberof CassAggregateMeta * * @param[in] aggregate_meta @@ -4526,6 +3990,8 @@ cass_aggregate_meta_return_type(const CassAggregateMeta* aggregate_meta); /** * Gets the state type of the aggregate. * + * Warning: This function is not yet implemented. + * * @public @memberof CassAggregateMeta * * @param[in] aggregate_meta @@ -4537,6 +4003,8 @@ cass_aggregate_meta_state_type(const CassAggregateMeta* aggregate_meta); /** * Gets the function metadata for the aggregate's state function. * + * Warning: This function is not yet implemented. + * * @public @memberof CassAggregateMeta * * @param[in] aggregate_meta @@ -4548,6 +4016,8 @@ cass_aggregate_meta_state_func(const CassAggregateMeta* aggregate_meta); /** * Gets the function metadata for the aggregates's final function. * + * Warning: This function is not yet implemented. + * * @public @memberof CassAggregateMeta * * @param[in] aggregate_meta @@ -4559,6 +4029,8 @@ cass_aggregate_meta_final_func(const CassAggregateMeta* aggregate_meta); /** * Gets the initial condition value for the aggregate. * + * Warning: This function is not yet implemented. + * * Note: The value of the initial condition will always be * a "varchar" type for Cassandra 3.0+. * @@ -4570,38 +4042,6 @@ cass_aggregate_meta_final_func(const CassAggregateMeta* aggregate_meta); CASS_EXPORT const CassValue* cass_aggregate_meta_init_cond(const CassAggregateMeta* aggregate_meta); -/** - * Gets a metadata field for the provided name. Metadata fields allow direct - * access to the column data found in the underlying "aggregates" metadata table. - * - * @public @memberof CassAggregateMeta - * - * @param[in] aggregate_meta - * @param[in] name - * @return A metadata field value. NULL if the field does not exist. - */ -CASS_EXPORT const CassValue* -cass_aggregate_meta_field_by_name(const CassAggregateMeta* aggregate_meta, - const char* name); - -/** - * Same as cass_aggregate_meta_field_by_name(), but with lengths for string - * parameters. - * - * @public @memberof CassAggregateMeta - * - * @param[in] aggregate_meta - * @param[in] name - * @param[in] name_length - * @return same as cass_aggregate_meta_field_by_name() - * - * @see cass_aggregate_meta_field_by_name() - */ -CASS_EXPORT const CassValue* -cass_aggregate_meta_field_by_name_n(const CassAggregateMeta* aggregate_meta, - const char* name, - size_t name_length); - /*********************************************************************************** * * SSL @@ -4799,6 +4239,8 @@ cass_ssl_set_private_key_n(CassSsl* ssl, /** * Gets the IP address of the host being authenticated. * + * Warning: This function is not yet implemented. + * * @param[in] auth * @param[out] address * @@ -4811,6 +4253,8 @@ cass_authenticator_address(const CassAuthenticator* auth, /** * Gets the hostname of the host being authenticated. * + * Warning: This function is not yet implemented. + * * @public @memberof CassAuthenticator * * @param[in] auth @@ -4824,6 +4268,8 @@ cass_authenticator_hostname(const CassAuthenticator* auth, /** * Gets the class name for the server-side IAuthentication implementation. * + * Warning: This function is not yet implemented. + * * @public @memberof CassAuthenticator * * @param[in] auth @@ -4838,6 +4284,8 @@ cass_authenticator_class_name(const CassAuthenticator* auth, * Gets the user data created during the authenticator exchange. This * is set using cass_authenticator_set_exchange_data(). * + * Warning: This function is not yet implemented. + * * @public @memberof CassAuthenticator * * @param[in] auth @@ -4852,6 +4300,8 @@ cass_authenticator_exchange_data(CassAuthenticator* auth); /** * Sets the user data to be used during the authenticator exchange. * + * Warning: This function is not yet implemented. + * * @public @memberof CassAuthenticator * * @param[in] auth @@ -4866,6 +4316,8 @@ cass_authenticator_set_exchange_data(CassAuthenticator* auth, /** * Gets a response token buffer of the provided size. * + * Warning: This function is not yet implemented. + * * @public @memberof CassAuthenticator * * @param[in] auth @@ -4879,6 +4331,8 @@ cass_authenticator_response(CassAuthenticator* auth, /** * Sets the response token. * + * Warning: This function is not yet implemented. + * * @public @memberof CassAuthenticator * * @param[in] auth @@ -4893,6 +4347,8 @@ cass_authenticator_set_response(CassAuthenticator* auth, /** * Sets an error for the authenticator exchange. * + * Warning: This function is not yet implemented. + * * @public @memberof CassAuthenticator * * @param[in] auth @@ -4908,6 +4364,8 @@ cass_authenticator_set_error(CassAuthenticator* auth, * * @public @memberof CassAuthenticator * + * Warning: This function is not yet implemented. + * * @param[in] auth * @param[in] message * @param[in] message_length @@ -5079,6 +4537,8 @@ cass_future_tracing_id(CassFuture* future, * Gets a the number of custom payload items from a response future. If the future is not * ready this method will wait for the future to be set. * + * Warning: This function is not yet implemented. + * * @public @memberof CassFuture * * @param[in] future @@ -5091,6 +4551,8 @@ cass_future_custom_payload_item_count(CassFuture* future); * Gets a custom payload item from a response future at the specified index. If the future is not * ready this method will wait for the future to be set. * + * Warning: This function is not yet implemented. + * * @public @memberof CassFuture * * @param[in] future @@ -5190,27 +4652,6 @@ cass_statement_reset_parameters(CassStatement* statement, CASS_EXPORT void cass_statement_free(CassStatement* statement); -/** - * Adds a key index specifier to this a statement. - * When using token-aware routing, this can be used to tell the driver which - * parameters within a non-prepared, parameterized statement are part of - * the partition key. - * - * Use consecutive calls for composite partition keys. - * - * This is not necessary for prepared statements, as the key - * parameters are determined in the metadata processed in the prepare phase. - * - * @public @memberof CassStatement - * - * @param[in] statement - * @param[in] index - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CassError -cass_statement_add_key_index(CassStatement* statement, - size_t index); - /** * Sets the statement's keyspace. This is used for token-aware routing and when * using protocol v5 or greater it also overrides the session's current @@ -5219,6 +4660,8 @@ cass_statement_add_key_index(CassStatement* statement, * This is not necessary and will not work for bound statements, as the keyspace * is determined by the prepared statement metadata. * + * Warning: This function is not yet implemented. + * * @public @memberof CassStatement * * @param[in] statement @@ -5233,6 +4676,8 @@ cass_statement_set_keyspace(CassStatement* statement, * Same as cass_statement_set_keyspace(), but with lengths for string * parameters. * + * Warning: This function is not yet implemented. + * * @public @memberof CassStatement * * @param[in] statement @@ -5392,6 +4837,8 @@ cass_statement_set_retry_policy(CassStatement* statement, /** * Sets the statement's custom payload. * + * Warning: This function is not yet implemented. + * * @public @memberof CassStatement * * @param[in] statement @@ -6013,161 +5460,77 @@ cass_statement_bind_string_n(CassStatement* statement, * @public @memberof CassStatement * * @param[in] statement - * @param[in] name - * @param[in] value The value is copied into the statement object; the - * memory pointed to by this parameter can be freed after this call. - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CassError -cass_statement_bind_string_by_name(CassStatement* statement, - const char* name, - const char* value); - -/** - * Same as cass_statement_bind_string_by_name(), but with lengths for string - * parameters. - * - * @public @memberof CassStatement - * - * @param[in] statement - * @param[in] name - * @param[in] name_length - * @param[in] value - * @param[in] value_length - * @return same as cass_statement_bind_string_by_name() - * - * @see cass_statement_bind_string_by_name() - */ -CASS_EXPORT CassError -cass_statement_bind_string_by_name_n(CassStatement* statement, - const char* name, - size_t name_length, - const char* value, - size_t value_length); - -/** - * Binds a "blob", "varint" or "custom" to a query or bound statement at the specified index. - * - * @public @memberof CassStatement - * - * @param[in] statement - * @param[in] index - * @param[in] value The value is copied into the statement object; the - * memory pointed to by this parameter can be freed after this call. - * @param[in] value_size - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CassError -cass_statement_bind_bytes(CassStatement* statement, - size_t index, - const cass_byte_t* value, - size_t value_size); - -/** - * Binds a "blob", "varint" or "custom" to all the values with the - * specified name. - * - * @public @memberof CassStatement - * - * @param[in] statement - * @param[in] name - * @param[in] value The value is copied into the statement object; the - * memory pointed to by this parameter can be freed after this call. - * @param[in] value_size - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CassError -cass_statement_bind_bytes_by_name(CassStatement* statement, - const char* name, - const cass_byte_t* value, - size_t value_size); - -/** - * Same as cass_statement_bind_bytes_by_name(), but with lengths for string - * parameters. - * - * @public @memberof CassStatement - * - * @param[in] statement - * @param[in] name - * @param[in] name_length - * @param[in] value - * @param[in] value_size - * @return same as cass_statement_bind_bytes_by_name() - * - * @see cass_statement_bind_bytes_by_name() - */ -CASS_EXPORT CassError -cass_statement_bind_bytes_by_name_n(CassStatement* statement, - const char* name, - size_t name_length, - const cass_byte_t* value, - size_t value_size); - -/** - * Binds a "custom" to a query or bound statement at the specified index. - * - * @public @memberof CassStatement - * - * @param[in] statement - * @param[in] index - * @param[in] class_name + * @param[in] name * @param[in] value The value is copied into the statement object; the * memory pointed to by this parameter can be freed after this call. - * @param[in] value_size * @return CASS_OK if successful, otherwise an error occurred. */ CASS_EXPORT CassError -cass_statement_bind_custom(CassStatement* statement, - size_t index, - const char* class_name, - const cass_byte_t* value, - size_t value_size); +cass_statement_bind_string_by_name(CassStatement* statement, + const char* name, + const char* value); + /** - * Same as cass_statement_bind_custom(), but with lengths for string + * Same as cass_statement_bind_string_by_name(), but with lengths for string * parameters. * * @public @memberof CassStatement * * @param[in] statement + * @param[in] name + * @param[in] name_length + * @param[in] value + * @param[in] value_length + * @return same as cass_statement_bind_string_by_name() + * + * @see cass_statement_bind_string_by_name() + */ +CASS_EXPORT CassError +cass_statement_bind_string_by_name_n(CassStatement* statement, + const char* name, + size_t name_length, + const char* value, + size_t value_length); + +/** + * Binds a "blob", "varint" or "custom" to a query or bound statement at the specified index. + * + * @public @memberof CassStatement + * + * @param[in] statement * @param[in] index - * @param[in] class_name - * @param[in] class_name_length * @param[in] value The value is copied into the statement object; the * memory pointed to by this parameter can be freed after this call. * @param[in] value_size * @return CASS_OK if successful, otherwise an error occurred. */ CASS_EXPORT CassError -cass_statement_bind_custom_n(CassStatement* statement, - size_t index, - const char* class_name, - size_t class_name_length, - const cass_byte_t* value, - size_t value_size); +cass_statement_bind_bytes(CassStatement* statement, + size_t index, + const cass_byte_t* value, + size_t value_size); /** - * Binds a "custom" to all the values with the specified name. + * Binds a "blob", "varint" or "custom" to all the values with the + * specified name. * * @public @memberof CassStatement * * @param[in] statement * @param[in] name - * @param[in] class_name * @param[in] value The value is copied into the statement object; the * memory pointed to by this parameter can be freed after this call. * @param[in] value_size * @return CASS_OK if successful, otherwise an error occurred. */ CASS_EXPORT CassError -cass_statement_bind_custom_by_name(CassStatement* statement, - const char* name, - const char* class_name, - const cass_byte_t* value, - size_t value_size); +cass_statement_bind_bytes_by_name(CassStatement* statement, + const char* name, + const cass_byte_t* value, + size_t value_size); /** - * Same as cass_statement_bind_custom_by_name(), but with lengths for string + * Same as cass_statement_bind_bytes_by_name(), but with lengths for string * parameters. * * @public @memberof CassStatement @@ -6175,22 +5538,18 @@ cass_statement_bind_custom_by_name(CassStatement* statement, * @param[in] statement * @param[in] name * @param[in] name_length - * @param[in] class_name - * @param[in] class_name_length * @param[in] value * @param[in] value_size - * @return same as cass_statement_bind_custom_by_name() + * @return same as cass_statement_bind_bytes_by_name() * - * @see cass_statement_bind_custom_by_name() + * @see cass_statement_bind_bytes_by_name() */ CASS_EXPORT CassError -cass_statement_bind_custom_by_name_n(CassStatement* statement, - const char* name, - size_t name_length, - const char* class_name, - size_t class_name_length, - const cass_byte_t* value, - size_t value_size); +cass_statement_bind_bytes_by_name_n(CassStatement* statement, + const char* name, + size_t name_length, + const cass_byte_t* value, + size_t value_size); /** * Binds a "uuid" or "timeuuid" to a query or bound statement at the specified index. @@ -6708,6 +6067,8 @@ cass_batch_free(CassBatch* batch); * Note: If not set explicitly then the batch will inherit the keyspace * of the first child statement with a non-empty keyspace. * + * Warning: This function is not yet implemented. + * * @public @memberof CassBatch * * @param[in] batch @@ -6722,6 +6083,8 @@ cass_batch_set_keyspace(CassBatch* batch, * Same as cass_batch_set_keyspace(), but with lengths for string * parameters. * + * Warning: This function is not yet implemented. + * * @public @memberof CassBatch * * @param[in] batch @@ -6831,6 +6194,8 @@ cass_batch_set_retry_policy(CassBatch* batch, /** * Sets the batch's custom payload. * + * Warning: This function is not yet implemented. + * * @public @memberof CassBatch * * @param[in] batch @@ -7518,46 +6883,6 @@ cass_collection_append_bytes(CassCollection* collection, const cass_byte_t* value, size_t value_size); -/** - * Appends a "custom" to the collection. - * - * @public @memberof CassCollection - * - * @param[in] collection - * @param[in] class_name - * @param[in] value The value is copied into the collection object; the - * memory pointed to by this parameter can be freed after this call. - * @param[in] value_size - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CassError -cass_collection_append_custom(CassCollection* collection, - const char* class_name, - const cass_byte_t* value, - size_t value_size); - -/** - * Same as cass_collection_append_custom(), but with lengths for string - * parameters. - * - * @public @memberof CassCollection - * - * @param[in] collection - * @param[in] class_name - * @param[in] class_name_length - * @param[in] value - * @param[in] value_size - * @return same as cass_collection_append_custom() - * - * @see cass_collection_append_custom() - */ -CASS_EXPORT CassError -cass_collection_append_custom_n(CassCollection* collection, - const char* class_name, - size_t class_name_length, - const cass_byte_t* value, - size_t value_size); - /** * Appends a "uuid" or "timeuuid" to the collection. * @@ -7899,50 +7224,6 @@ cass_tuple_set_bytes(CassTuple* tuple, const cass_byte_t* value, size_t value_size); -/** - * Sets a "custom" in a tuple at the specified index. - * - * @public @memberof CassTuple - * - * @param[in] tuple - * @param[in] index - * @param[in] class_name - * @param[in] value The value is copied into the tuple object; the - * memory pointed to by this parameter can be freed after this call. - * @param[in] value_size - * @return CASS_OK if successful, otherwise an error occurred. - */ -CASS_EXPORT CassError -cass_tuple_set_custom(CassTuple* tuple, - size_t index, - const char* class_name, - const cass_byte_t* value, - size_t value_size); - -/** - * Same as cass_tuple_set_custom(), but with lengths for string - * parameters. - * - * @public @memberof CassTuple - * - * @param[in] tuple - * @param[in] index - * @param[in] class_name - * @param[in] class_name_length - * @param[in] value - * @param[in] value_size - * @return same as cass_tuple_set_custom() - * - * @see cass_tuple_set_custom() - */ -CASS_EXPORT CassError -cass_tuple_set_custom_n(CassTuple* tuple, - size_t index, - const char* class_name, - size_t class_name_length, - const cass_byte_t* value, - size_t value_size); - /** * Sets a "uuid" or "timeuuid" in a tuple at the specified index. * @@ -9685,6 +8966,8 @@ cass_iterator_user_types_from_keyspace_meta(const CassKeyspaceMeta* keyspace_met * Creates a new iterator for the specified keyspace metadata. * This can be used to iterate over functions. * + * Warning: This function is not yet implemented. + * * @public @memberof CassKeyspaceMeta * * @param[in] keyspace_meta @@ -9700,6 +8983,8 @@ cass_iterator_functions_from_keyspace_meta(const CassKeyspaceMeta* keyspace_meta * Creates a new iterator for the specified keyspace metadata. * This can be used to iterate over aggregates. * + * Warning: This function is not yet implemented. + * * @public @memberof CassKeyspaceMeta * * @param[in] keyspace_meta @@ -9711,24 +8996,6 @@ cass_iterator_functions_from_keyspace_meta(const CassKeyspaceMeta* keyspace_meta CASS_EXPORT CassIterator* cass_iterator_aggregates_from_keyspace_meta(const CassKeyspaceMeta* keyspace_meta); -/** - * Creates a new fields iterator for the specified keyspace metadata. Metadata - * fields allow direct access to the column data found in the underlying - * "keyspaces" metadata table. This can be used to iterate those metadata - * field entries. - * - * @public @memberof CassKeyspaceMeta - * - * @param[in] keyspace_meta - * @return A new iterator that must be freed. - * - * @see cass_iterator_get_meta_field_name() - * @see cass_iterator_get_meta_field_value() - * @see cass_iterator_free() - */ -CASS_EXPORT CassIterator* -cass_iterator_fields_from_keyspace_meta(const CassKeyspaceMeta* keyspace_meta); - /** * Creates a new iterator for the specified table metadata. * This can be used to iterate over columns. @@ -9748,6 +9015,8 @@ cass_iterator_columns_from_table_meta(const CassTableMeta* table_meta); * Creates a new iterator for the specified table metadata. * This can be used to iterate over indexes. * + * Warning: This function is not yet implemented. + * * @public @memberof CassTableMeta * * @param[in] table_meta @@ -9774,24 +9043,6 @@ cass_iterator_indexes_from_table_meta(const CassTableMeta* table_meta); CASS_EXPORT CassIterator* cass_iterator_materialized_views_from_table_meta(const CassTableMeta* table_meta); -/** - * Creates a new fields iterator for the specified table metadata. Metadata - * fields allow direct access to the column data found in the underlying - * "tables" metadata table. This can be used to iterate those metadata - * field entries. - * - * @public @memberof CassTableMeta - * - * @param[in] table_meta - * @return A new iterator that must be freed. - * - * @see cass_iterator_get_meta_field_name() - * @see cass_iterator_get_meta_field_value() - * @see cass_iterator_free() - */ -CASS_EXPORT CassIterator* -cass_iterator_fields_from_table_meta(const CassTableMeta* table_meta); - /** * Creates a new iterator for the specified materialized view metadata. * This can be used to iterate over columns. @@ -9807,94 +9058,6 @@ cass_iterator_fields_from_table_meta(const CassTableMeta* table_meta); CASS_EXPORT CassIterator* cass_iterator_columns_from_materialized_view_meta(const CassMaterializedViewMeta* view_meta); -/** - * Creates a new fields iterator for the specified materialized view metadata. - * Metadata fields allow direct access to the column data found in the - * underlying "views" metadata view. This can be used to iterate those metadata - * field entries. - * - * @public @memberof CassMaterializedViewMeta - * - * @param[in] view_meta - * @return A new iterator that must be freed. - * - * @see cass_iterator_get_meta_field_name() - * @see cass_iterator_get_meta_field_value() - * @see cass_iterator_free() - */ -CASS_EXPORT CassIterator* -cass_iterator_fields_from_materialized_view_meta(const CassMaterializedViewMeta* view_meta); - -/** - * Creates a new fields iterator for the specified column metadata. Metadata - * fields allow direct access to the column data found in the underlying - * "columns" metadata table. This can be used to iterate those metadata - * field entries. - * - * @public @memberof CassColumnMeta - * - * @param[in] column_meta - * @return A new iterator that must be freed. - * - * @see cass_iterator_get_meta_field_name() - * @see cass_iterator_get_meta_field_value() - * @see cass_iterator_free() - */ -CASS_EXPORT CassIterator* -cass_iterator_fields_from_column_meta(const CassColumnMeta* column_meta); - -/** - * Creates a new fields iterator for the specified index metadata. Metadata - * fields allow direct access to the index data found in the underlying - * "indexes" metadata table. This can be used to iterate those metadata - * field entries. - * - * @public @memberof CassIndexMeta - * - * @param[in] index_meta - * @return A new iterator that must be freed. - * - * @see cass_iterator_get_meta_field_name() - * @see cass_iterator_get_meta_field_value() - * @see cass_iterator_free() - */ -CASS_EXPORT CassIterator* -cass_iterator_fields_from_index_meta(const CassIndexMeta* index_meta); - -/** - * Creates a new fields iterator for the specified function metadata. Metadata - * fields allow direct access to the column data found in the underlying - * "functions" metadata table. This can be used to iterate those metadata - * field entries. - * - * @public @memberof CassFunctionMeta - * - * @param[in] function_meta - * @return A new iterator that must be freed. - * - * @see cass_iterator_get_meta_field() - * @see cass_iterator_free() - */ -CASS_EXPORT CassIterator* -cass_iterator_fields_from_function_meta(const CassFunctionMeta* function_meta); - -/** - * Creates a new fields iterator for the specified aggregate metadata. Metadata - * fields allow direct access to the column data found in the underlying - * "aggregates" metadata table. This can be used to iterate those metadata - * field entries. - * - * @public @memberof CassAggregateMeta - * - * @param[in] aggregate_meta - * @return A new iterator that must be freed. - * - * @see cass_iterator_get_meta_field() - * @see cass_iterator_free() - */ -CASS_EXPORT CassIterator* -cass_iterator_fields_from_aggregate_meta(const CassAggregateMeta* aggregate_meta); - /** * Advance the iterator to the next row, column or collection item. * @@ -10071,6 +9234,8 @@ cass_iterator_get_user_type(const CassIterator* iterator); * Calling cass_iterator_next() will invalidate the previous * value returned by this method. * + * Warning: This function is not yet implemented. + * * @public @memberof CassIterator * * @param[in] iterator @@ -10085,6 +9250,8 @@ cass_iterator_get_function_meta(const CassIterator* iterator); * Calling cass_iterator_next() will invalidate the previous * value returned by this method. * + * Warning: This function is not yet implemented. + * * @public @memberof CassIterator * * @param[in] iterator @@ -10113,6 +9280,8 @@ cass_iterator_get_column_meta(const CassIterator* iterator); * Calling cass_iterator_next() will invalidate the previous * value returned by this method. * + * Warning: This function is not yet implemented. + * * @public @memberof CassIterator * * @param[in] iterator @@ -10121,38 +9290,6 @@ cass_iterator_get_column_meta(const CassIterator* iterator); CASS_EXPORT const CassIndexMeta* cass_iterator_get_index_meta(const CassIterator* iterator); -/** - * Gets the metadata field name at the iterator's current position. - * - * Calling cass_iterator_next() will invalidate the previous - * value returned by this method. - * - * @public @memberof CassIterator - * - * @param[in] iterator - * @param[out] name - * @param[out] name_length - * @return CASS_OK if successful, otherwise error occurred - */ -CASS_EXPORT CassError -cass_iterator_get_meta_field_name(const CassIterator* iterator, - const char** name, - size_t* name_length); - -/** - * Gets the metadata field value at the iterator's current position. - * - * Calling cass_iterator_next() will invalidate the previous - * value returned by this method. - * - * @public @memberof CassIterator - * - * @param[in] iterator - * @return A metadata field value - */ -CASS_EXPORT const CassValue* -cass_iterator_get_meta_field_value(const CassIterator* iterator); - /*********************************************************************************** * * Row @@ -10884,6 +10021,8 @@ cass_retry_policy_free(CassRetryPolicy* policy); /** * Creates a new custom payload. * + * Warning: This function is not yet implemented. + * * @public @memberof CassCustomPayload * * @return Returns a custom payload that must be freed. @@ -10896,6 +10035,8 @@ cass_custom_payload_new(); /** * Frees a custom payload instance. * + * Warning: This function is not yet implemented. + * * @public @memberof CassCustomPayload * * @param[in] payload @@ -10906,6 +10047,8 @@ cass_custom_payload_free(CassCustomPayload* payload); /** * Sets an item to the custom payload. * + * Warning: This function is not yet implemented. + * * @public @memberof CassCustomPayload * * @param[in] payload @@ -10923,6 +10066,8 @@ cass_custom_payload_set(CassCustomPayload* payload, * Same as cass_custom_payload_set(), but with lengths for string * parameters. * + * Warning: This function is not yet implemented. + * * @public @memberof CassCustomPayload * * @param[in] payload @@ -10941,6 +10086,8 @@ cass_custom_payload_set_n(CassCustomPayload* payload, /** * Removes an item from the custom payload. * + * Warning: This function is not yet implemented. + * * @public @memberof CassCustomPayload * * @param[in] payload @@ -10954,6 +10101,8 @@ cass_custom_payload_remove(CassCustomPayload* payload, * Same as cass_custom_payload_set(), but with lengths for string * parameters. * + * Warning: This function is not yet implemented. + * * @public @memberof CassCustomPayload * * @param[in] payload @@ -11018,17 +10167,6 @@ cass_error_desc(CassError error); * ***********************************************************************************/ -/** - * Explicitly wait for the log to flush and deallocate resources. - * This *MUST* be the last call using the library. It is an error - * to call any cass_*() functions after this call. - * - * @deprecated This is no longer useful and does nothing. Expect this to be - * removed in a future release. - */ -CASS_EXPORT CASS_DEPRECATED(void -cass_log_cleanup()); - /** * Sets the log level. * @@ -11067,22 +10205,6 @@ cass_log_set_callback(CassLogCallback callback, CASS_EXPORT void cass_log_get_callback_and_data(CassLogCallback* callback_out, void** data_out); -/** - * Sets the log queue size. - * - * Note: This needs to be done before any call that might log, such as - * any of the cass_cluster_*() or cass_ssl_*() functions. - * - * Default: 2048 - * - * @deprecated This is no longer useful and does nothing. Expect this to be - * removed in a future release. - * - * @param[in] queue_size - */ -CASS_EXPORT CASS_DEPRECATED(void -cass_log_set_queue_size(size_t queue_size)); - /** * Gets the string for a log level. * @@ -11213,6 +10335,8 @@ cass_date_time_to_epoch(cass_uint32_t date, /** * Set custom allocation functions. * + * Warning: This function is not yet implemented. + * * Note: This is not thread-safe. The allocation functions must be set * before any other library function is called. * diff --git a/include/deleted_functions.h b/include/deleted_functions.h new file mode 100644 index 00000000..b3baea1a --- /dev/null +++ b/include/deleted_functions.h @@ -0,0 +1,1081 @@ +/* + * This file contains declarations of functions that have been deleted + * from the public API (`cassandra.h`) upon transition to the new C/C++ driver + * implementation as a wrapper over the Rust Driver. + * + * Each function or function group is marked with a comment indicating + * the reason for its deletion. + * + */ + +#ifndef __DELETED_H_INCLUDED__ +#define __DELETED_H_INCLUDED__ + +#include "cassandra.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Custom type - deleted due to no planned support for this legacy feature + * in the Rust Driver. */ + + /** + * Appends a "custom" to the collection. + * + * @public @memberof CassCollection + * + * @param[in] collection + * @param[in] class_name + * @param[in] value The value is copied into the collection object; the + * memory pointed to by this parameter can be freed after this call. + * @param[in] value_size + * @return CASS_OK if successful, otherwise an error occurred. + */ + CASS_EXPORT CassError + cass_collection_append_custom(CassCollection* collection, + const char* class_name, + const cass_byte_t* value, + size_t value_size); + +/** + * Same as cass_collection_append_custom(), but with lengths for string + * parameters. + * + * @public @memberof CassCollection + * + * @param[in] collection + * @param[in] class_name + * @param[in] class_name_length + * @param[in] value + * @param[in] value_size + * @return same as cass_collection_append_custom() + * + * @see cass_collection_append_custom() + */ +CASS_EXPORT CassError +cass_collection_append_custom_n(CassCollection* collection, + const char* class_name, + size_t class_name_length, + const cass_byte_t* value, + size_t value_size); + +/** + * Binds a "custom" to a query or bound statement at the specified index. + * + * @public @memberof CassStatement + * + * @param[in] statement + * @param[in] index + * @param[in] class_name + * @param[in] value The value is copied into the statement object; the + * memory pointed to by this parameter can be freed after this call. + * @param[in] value_size + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CassError +cass_statement_bind_custom(CassStatement* statement, + size_t index, + const char* class_name, + const cass_byte_t* value, + size_t value_size); + +/** + * Same as cass_statement_bind_custom(), but with lengths for string + * parameters. + * + * @public @memberof CassStatement + * + * @param[in] statement + * @param[in] index + * @param[in] class_name + * @param[in] class_name_length + * @param[in] value The value is copied into the statement object; the + * memory pointed to by this parameter can be freed after this call. + * @param[in] value_size + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CassError +cass_statement_bind_custom_n(CassStatement* statement, + size_t index, + const char* class_name, + size_t class_name_length, + const cass_byte_t* value, + size_t value_size); + +/** + * Binds a "custom" to all the values with the specified name. + * + * @public @memberof CassStatement + * + * @param[in] statement + * @param[in] name + * @param[in] class_name + * @param[in] value The value is copied into the statement object; the + * memory pointed to by this parameter can be freed after this call. + * @param[in] value_size + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CassError +cass_statement_bind_custom_by_name(CassStatement* statement, + const char* name, + const char* class_name, + const cass_byte_t* value, + size_t value_size); + +/** + * Same as cass_statement_bind_custom_by_name(), but with lengths for string + * parameters. + * + * @public @memberof CassStatement + * + * @param[in] statement + * @param[in] name + * @param[in] name_length + * @param[in] class_name + * @param[in] class_name_length + * @param[in] value + * @param[in] value_size + * @return same as cass_statement_bind_custom_by_name() + * + * @see cass_statement_bind_custom_by_name() + */ +CASS_EXPORT CassError +cass_statement_bind_custom_by_name_n(CassStatement* statement, + const char* name, + size_t name_length, + const char* class_name, + size_t class_name_length, + const cass_byte_t* value, + size_t value_size); +/** + * Sets a "custom" in a tuple at the specified index. + * + * @public @memberof CassTuple + * + * @param[in] tuple + * @param[in] index + * @param[in] class_name + * @param[in] value The value is copied into the tuple object; the + * memory pointed to by this parameter can be freed after this call. + * @param[in] value_size + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CassError +cass_tuple_set_custom(CassTuple* tuple, + size_t index, + const char* class_name, + const cass_byte_t* value, + size_t value_size); + +/** + * Same as cass_tuple_set_custom(), but with lengths for string + * parameters. + * + * @public @memberof CassTuple + * + * @param[in] tuple + * @param[in] index + * @param[in] class_name + * @param[in] class_name_length + * @param[in] value + * @param[in] value_size + * @return same as cass_tuple_set_custom() + * + * @see cass_tuple_set_custom() + */ +CASS_EXPORT CassError +cass_tuple_set_custom_n(CassTuple* tuple, + size_t index, + const char* class_name, + size_t class_name_length, + const cass_byte_t* value, + size_t value_size); + + +/* DataStax Enterprise-specific features + * The driver does not support DataStax Enterprise. */ + +/** + * Sets the secure connection bundle path for processing DBaaS credentials. + * + * This will pre-configure a cluster using the credentials format provided by + * the DBaaS cloud provider. + * + * @param[in] cluster + * @param[in] path Absolute path to DBaaS credentials file. + * @return CASS_OK if successful, otherwise error occured. + */ +CASS_EXPORT CassError +cass_cluster_set_cloud_secure_connection_bundle(CassCluster* cluster, + const char* path); + +/** + * Same as cass_cluster_set_cloud_secure_connection_bundle(), but with lengths + * for string parameters. + * + * @see cass_cluster_set_cloud_secure_connection_bundle() + * + * @param[in] cluster + * @param[in] path Absolute path to DBaaS credentials file. + * @param[in] path_length Length of path variable. + * @return CASS_OK if successful, otherwise error occured. + */ +CASS_EXPORT CassError +cass_cluster_set_cloud_secure_connection_bundle_n(CassCluster* cluster, + const char* path, + size_t path_length); + +/** + * Same as cass_cluster_set_cloud_secure_connection_bundle(), but it does not + * initialize the underlying SSL library implementation. The SSL library still + * needs to be initialized, but it's up to the client application to handle + * initialization. This is similar to the function cass_ssl_new_no_lib_init(), + * and its documentation should be used as a reference to properly initialize + * the underlying SSL library. + * + * @see cass_ssl_new_no_lib_init() + * @see cass_cluster_set_cloud_secure_connection_bundle() + * + * @param[in] cluster + * @param[in] path Absolute path to DBaaS credentials file. + * @return CASS_OK if successful, otherwise error occured. + */ +CASS_EXPORT CassError +cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init(CassCluster* cluster, + const char* path); + +/** + * Same as cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init(), + * but with lengths for string parameters. + * + * @see cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init() + * + * @param[in] cluster + * @param[in] path Absolute path to DBaaS credentials file. + * @param[in] path_length Length of path variable. + * @return CASS_OK if successful, otherwise error occured. + */ +CASS_EXPORT CassError +cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init_n(CassCluster* cluster, + const char* path, + size_t path_length); + +/** + * Sets the amount of time between monitor reporting event messages. + * + * Default: 300 seconds. + * + * @public @memberof CassCluster + * + * @param[in] cluster + * @param[in] interval_secs Use 0 to disable monitor reporting event messages. + */ +CASS_EXPORT void +cass_cluster_set_monitor_reporting_interval(CassCluster* cluster, + unsigned interval_secs); + + +/* Ancient features, which have no use nowadays. */ + +/** + * Enable the NO_COMPACT startup option. + * + * This can help facilitate uninterrupted cluster upgrades where tables using + * COMPACT_STORAGE will operate in "compatibility mode" for + * BATCH, DELETE, SELECT, and UPDATE CQL operations. + * + * Default: cass_false + * + * @cassandra{3.0.16+} + * @cassandra{3.11.2+} + * @cassandra{4.0+} + * + * @public @memberof CassCluster + * + * @param[in] cluster + * @param[in] enabled + */ +CASS_EXPORT CassError +cass_cluster_set_no_compact(CassCluster* cluster, + cass_bool_t enabled); + +/** + * Enable/Disable retrieving hostnames for IP addresses using reverse IP lookup. + * + * This is useful for authentication (Kerberos) or encryption (SSL) services + * that require a valid hostname for verification. + * + * Default: cass_false (disabled). + * + * @public @memberof CassCluster + * + * @param[in] cluster + * @param[in] enabled + * @return CASS_OK if successful, otherwise an error occurred + * + * @see cass_cluster_set_resolve_timeout() + */ +CASS_EXPORT CassError +cass_cluster_set_use_hostname_resolution(CassCluster* cluster, + cass_bool_t enabled); + + +/* Functions deprecated by the CPP Driver, which would do nothing even there. */ + +/** + * Sets the size of the fixed size queue that stores + * events. + * + * Default: 8192 + * + * @public @memberof CassCluster + * + * @deprecated This is no longer useful and does nothing. Expect this to be + * removed in a future release. + * + * @param[in] cluster + * @param[in] queue_size + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CASS_DEPRECATED(CassError +cass_cluster_set_queue_size_event(CassCluster* cluster, + unsigned queue_size)); + +/** + * Sets the maximum number of connections made to each server in each + * IO thread. + * + * Default: 2 + * + * @public @memberof CassCluster + * + * @deprecated This is no longer useful and does nothing. Expect this to be + * removed in a future release. + * + * @param[in] cluster + * @param[in] num_connections + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CASS_DEPRECATED(CassError +cass_cluster_set_max_connections_per_host(CassCluster* cluster, + unsigned num_connections)); + +/** + * Sets the maximum number of connections that will be created concurrently. + * Connections are created when the current connections are unable to keep up with + * request throughput. + * + * Default: 1 + * + * @public @memberof CassCluster + * + * @deprecated This is no longer useful and does nothing. Expect this to be + * removed in a future release. + * + * @param[in] cluster + * @param[in] num_connections + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CASS_DEPRECATED(CassError +cass_cluster_set_max_concurrent_creation(CassCluster* cluster, + unsigned num_connections)); + +/** + * Sets the threshold for the maximum number of concurrent requests in-flight + * on a connection before creating a new connection. The number of new connections + * created will not exceed max_connections_per_host. + * + * Default: 100 + * + * @public @memberof CassCluster + * + * @deprecated This is no longer useful and does nothing. Expect this to be + * removed in a future release. + * + * @param[in] cluster + * @param[in] num_requests + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CASS_DEPRECATED(CassError +cass_cluster_set_max_concurrent_requests_threshold(CassCluster* cluster, + unsigned num_requests)); + +/** + * Sets the maximum number of requests processed by an IO worker + * per flush. + * + * Default: 128 + * + * @public @memberof CassCluster + * + * @deprecated This is no longer useful and does nothing. Expect this to be + * removed in a future release. + * + * @param[in] cluster + * @param[in] num_requests + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CASS_DEPRECATED(CassError +cass_cluster_set_max_requests_per_flush(CassCluster* cluster, + unsigned num_requests)); + +/** + * Sets the high water mark for the number of bytes outstanding + * on a connection. Disables writes to a connection if the number + * of bytes queued exceed this value. + * + * Default: 64 KB + * + * @public @memberof CassCluster + * + * @deprecated This is no longer useful and does nothing. Expect this to be + * removed in a future release. + * + * @param[in] cluster + * @param[in] num_bytes + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CASS_DEPRECATED(CassError +cass_cluster_set_write_bytes_high_water_mark(CassCluster* cluster, + unsigned num_bytes)); + +/** + * Sets the low water mark for number of bytes outstanding on a + * connection. After exceeding high water mark bytes, writes will + * only resume once the number of bytes fall below this value. + * + * Default: 32 KB + * + * @public @memberof CassCluster + * + * @deprecated This is no longer useful and does nothing. Expect this to be + * removed in a future release. + * + * @param[in] cluster + * @param[in] num_bytes + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CASS_DEPRECATED(CassError +cass_cluster_set_write_bytes_low_water_mark(CassCluster* cluster, + unsigned num_bytes)); + +/** + * Sets the high water mark for the number of requests queued waiting + * for a connection in a connection pool. Disables writes to a + * host on an IO worker if the number of requests queued exceed this + * value. + * + * Default: 256 + * + * @public @memberof CassCluster + * + * @deprecated This is no longer useful and does nothing. Expect this to be + * removed in a future release. + * + * @param[in] cluster + * @param[in] num_requests + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CASS_DEPRECATED(CassError +cass_cluster_set_pending_requests_high_water_mark(CassCluster* cluster, + unsigned num_requests)); + +/** + * Sets the low water mark for the number of requests queued waiting + * for a connection in a connection pool. After exceeding high water mark + * requests, writes to a host will only resume once the number of requests + * fall below this value. + * + * Default: 128 + * + * @public @memberof CassCluster + * + * @deprecated This is no longer useful and does nothing. Expect this to be + * removed in a future release. + * + * @param[in] cluster + * @param[in] num_requests + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CASS_DEPRECATED(CassError +cass_cluster_set_pending_requests_low_water_mark(CassCluster* cluster, + unsigned num_requests)); + +/** + * Explicitly wait for the log to flush and deallocate resources. + * This *MUST* be the last call using the library. It is an error + * to call any cass_*() functions after this call. + * + * @deprecated This is no longer useful and does nothing. Expect this to be + * removed in a future release. + */ +CASS_EXPORT CASS_DEPRECATED(void +cass_log_cleanup()); + +/** + * Sets the log queue size. + * + * Note: This needs to be done before any call that might log, such as + * any of the cass_cluster_*() or cass_ssl_*() functions. + * + * Default: 2048 + * + * @deprecated This is no longer useful and does nothing. Expect this to be + * removed in a future release. + * + * @param[in] queue_size + */ +CASS_EXPORT CASS_DEPRECATED(void +cass_log_set_queue_size(size_t queue_size)); + + +/* Functions incompatible with Rust Driver's architecture */ + +/** + * Sets the ratio of time spent processing new requests versus handling the I/O + * and processing of outstanding requests. The range of this setting is 1 to 100, + * where larger values allocate more time to processing new requests and smaller + * values allocate more time to processing outstanding requests. + * + * Default: 50 + * + * @public @memberof CassCluster + * + * @param[in] cluster + * @param[in] ratio + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CassError +cass_cluster_set_new_request_ratio(CassCluster* cluster, + cass_int32_t ratio); + +/** + * Sets the maximum number of "pending write" objects that will be + * saved for re-use for marshalling new requests. These objects may + * hold on to a significant amount of memory and reducing the + * number of these objects may reduce memory usage of the application. + * + * The cost of reducing the value of this setting is potentially slower + * marshalling of requests prior to sending. + * + * Default: Max unsigned integer value + * + * @public @memberof CassCluster + * + * @param[in] cluster + * @param[in] num_objects + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CassError +cass_cluster_set_max_reusable_write_objects(CassCluster* cluster, + unsigned num_objects); + +/** + * Sets the size of the fixed size queue that stores + * pending requests. + * + * Default: 8192 + * + * @public @memberof CassCluster + * + * @param[in] cluster + * @param[in] queue_size + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CassError +cass_cluster_set_queue_size_io(CassCluster* cluster, + unsigned queue_size); + + +/* Metadata tables' raw values accessors + * Rust Driver does not store nor expose raw values of the system tables. */ + + +/** + * Gets a metadata field for the provided name. Metadata fields allow direct + * access to the column data found in the underlying "aggregates" metadata table. + * + * @public @memberof CassAggregateMeta + * + * @param[in] aggregate_meta + * @param[in] name + * @return A metadata field value. NULL if the field does not exist. + */ +CASS_EXPORT const CassValue* +cass_aggregate_meta_field_by_name(const CassAggregateMeta* aggregate_meta, + const char* name); + +/** + * Same as cass_aggregate_meta_field_by_name(), but with lengths for string + * parameters. + * + * @public @memberof CassAggregateMeta + * + * @param[in] aggregate_meta + * @param[in] name + * @param[in] name_length + * @return same as cass_aggregate_meta_field_by_name() + * + * @see cass_aggregate_meta_field_by_name() + */ +CASS_EXPORT const CassValue* +cass_aggregate_meta_field_by_name_n(const CassAggregateMeta* aggregate_meta, + const char* name, + size_t name_length); + +/** + * Gets a metadata field for the provided name. Metadata fields allow direct + * access to the column data found in the underlying "functions" metadata table. + * + * @public @memberof CassFunctionMeta + * + * @param[in] function_meta + * @param[in] name + * @return A metadata field value. NULL if the field does not exist. + */ +CASS_EXPORT const CassValue* +cass_function_meta_field_by_name(const CassFunctionMeta* function_meta, + const char* name); + +/** + * Same as cass_function_meta_field_by_name(), but with lengths for string + * parameters. + * + * @public @memberof CassFunctionMeta + * + * @param[in] function_meta + * @param[in] name + * @param[in] name_length + * @return same as cass_function_meta_field_by_name() + * + * @see cass_function_meta_field_by_name() + */ +CASS_EXPORT const CassValue* +cass_function_meta_field_by_name_n(const CassFunctionMeta* function_meta, + const char* name, + size_t name_length); + + +/** + * Gets a metadata field for the provided name. Metadata fields allow direct + * access to the column data found in the underlying "keyspaces" metadata table. + * + * @public @memberof CassKeyspaceMeta + * + * @param[in] keyspace_meta + * @param[in] name + * @return A metadata field value. NULL if the field does not exist. + */ +CASS_EXPORT const CassValue* +cass_keyspace_meta_field_by_name(const CassKeyspaceMeta* keyspace_meta, + const char* name); + +/** + * Same as cass_keyspace_meta_field_by_name(), but with lengths for string + * parameters. + * + * @public @memberof CassKeyspaceMeta + * + * @param[in] keyspace_meta + * @param[in] name + * @param[in] name_length + * @return same as cass_keyspace_meta_field_by_name() + * + * @see cass_keyspace_meta_field_by_name() + */ +CASS_EXPORT const CassValue* +cass_keyspace_meta_field_by_name_n(const CassKeyspaceMeta* keyspace_meta, + const char* name, + size_t name_length); + + +/** + * Gets a metadata field for the provided name. Metadata fields allow direct + * access to the column data found in the underlying "tables" metadata table. + * + * @public @memberof CassTableMeta + * + * @param[in] table_meta + * @param[in] name + * @return A metadata field value. NULL if the field does not exist. + */ +CASS_EXPORT const CassValue* +cass_table_meta_field_by_name(const CassTableMeta* table_meta, + const char* name); + +/** + * Same as cass_table_meta_field_by_name(), but with lengths for string + * parameters. + * + * @public @memberof CassTableMeta + * + * @param[in] table_meta + * @param[in] name + * @param[in] name_length + * @return same as cass_table_meta_field_by_name() + * + * @see cass_table_meta_field_by_name() + */ +CASS_EXPORT const CassValue* +cass_table_meta_field_by_name_n(const CassTableMeta* table_meta, + const char* name, + size_t name_length); + + +/** + * Gets a metadata field for the provided name. Metadata fields allow direct + * access to the column data found in the underlying "views" metadata view. + * + * @public @memberof CassMaterializedViewMeta + * + * @param[in] view_meta + * @param[in] name + * @return A metadata field value. NULL if the field does not exist. + */ +CASS_EXPORT const CassValue* +cass_materialized_view_meta_field_by_name(const CassMaterializedViewMeta* view_meta, + const char* name); + +/** + * Same as cass_materialized_view_meta_field_by_name(), but with lengths for string + * parameters. + * + * @public @memberof CassMaterializedViewMeta + * + * @param[in] view_meta + * @param[in] name + * @param[in] name_length + * @return same as cass_materialized_view_meta_field_by_name() + * + * @see cass_materialized_view_meta_field_by_name() + */ +CASS_EXPORT const CassValue* +cass_materialized_view_meta_field_by_name_n(const CassMaterializedViewMeta* view_meta, + const char* name, + size_t name_length); + + +/** + * Gets a metadata field for the provided name. Metadata fields allow direct + * access to the column data found in the underlying "columns" metadata table. + * + * @public @memberof CassColumnMeta + * + * @param[in] column_meta + * @param[in] name + * @return A metadata field value. NULL if the field does not exist. + */ +CASS_EXPORT const CassValue* +cass_column_meta_field_by_name(const CassColumnMeta* column_meta, + const char* name); + +/** + * Same as cass_column_meta_field_by_name(), but with lengths for string + * parameters. + * + * @public @memberof CassColumnMeta + * + * @param[in] column_meta + * @param[in] name + * @param[in] name_length + * @return same as cass_column_meta_field_by_name() + * + * @see cass_column_meta_field_by_name() + */ +CASS_EXPORT const CassValue* +cass_column_meta_field_by_name_n(const CassColumnMeta* column_meta, + const char* name, + size_t name_length); + + +/** + * Gets a metadata field for the provided name. Metadata fields allow direct + * access to the index data found in the underlying "indexes" metadata table. + * + * @public @memberof CassIndexMeta + * + * @param[in] index_meta + * @param[in] name + * @return A metadata field value. NULL if the field does not exist. + */ +CASS_EXPORT const CassValue* +cass_index_meta_field_by_name(const CassIndexMeta* index_meta, + const char* name); + +/** + * Same as cass_index_meta_field_by_name(), but with lengths for string + * parameters. + * + * @public @memberof CassIndexMeta + * + * @param[in] index_meta + * @param[in] name + * @param[in] name_length + * @return same as cass_index_meta_field_by_name() + * + * @see cass_index_meta_field_by_name() + */ +CASS_EXPORT const CassValue* +cass_index_meta_field_by_name_n(const CassIndexMeta* index_meta, + const char* name, + size_t name_length); + +/** + * Creates a new fields iterator for the specified keyspace metadata. Metadata + * fields allow direct access to the column data found in the underlying + * "keyspaces" metadata table. This can be used to iterate those metadata + * field entries. + * + * @public @memberof CassKeyspaceMeta + * + * @param[in] keyspace_meta + * @return A new iterator that must be freed. + * + * @see cass_iterator_get_meta_field_name() + * @see cass_iterator_get_meta_field_value() + * @see cass_iterator_free() + */ +CASS_EXPORT CassIterator* +cass_iterator_fields_from_keyspace_meta(const CassKeyspaceMeta* keyspace_meta); + + +/** + * Creates a new fields iterator for the specified table metadata. Metadata + * fields allow direct access to the column data found in the underlying + * "tables" metadata table. This can be used to iterate those metadata + * field entries. + * + * @public @memberof CassTableMeta + * + * @param[in] table_meta + * @return A new iterator that must be freed. + * + * @see cass_iterator_get_meta_field_name() + * @see cass_iterator_get_meta_field_value() + * @see cass_iterator_free() + */ +CASS_EXPORT CassIterator* +cass_iterator_fields_from_table_meta(const CassTableMeta* table_meta); + +/** + * Creates a new fields iterator for the specified materialized view metadata. + * Metadata fields allow direct access to the column data found in the + * underlying "views" metadata view. This can be used to iterate those metadata + * field entries. + * + * @public @memberof CassMaterializedViewMeta + * + * @param[in] view_meta + * @return A new iterator that must be freed. + * + * @see cass_iterator_get_meta_field_name() + * @see cass_iterator_get_meta_field_value() + * @see cass_iterator_free() + */ +CASS_EXPORT CassIterator* +cass_iterator_fields_from_materialized_view_meta(const CassMaterializedViewMeta* view_meta); + +/** + * Creates a new fields iterator for the specified column metadata. Metadata + * fields allow direct access to the column data found in the underlying + * "columns" metadata table. This can be used to iterate those metadata + * field entries. + * + * @public @memberof CassColumnMeta + * + * @param[in] column_meta + * @return A new iterator that must be freed. + * + * @see cass_iterator_get_meta_field_name() + * @see cass_iterator_get_meta_field_value() + * @see cass_iterator_free() + */ +CASS_EXPORT CassIterator* +cass_iterator_fields_from_column_meta(const CassColumnMeta* column_meta); + +/** + * Creates a new fields iterator for the specified index metadata. Metadata + * fields allow direct access to the index data found in the underlying + * "indexes" metadata table. This can be used to iterate those metadata + * field entries. + * + * @public @memberof CassIndexMeta + * + * @param[in] index_meta + * @return A new iterator that must be freed. + * + * @see cass_iterator_get_meta_field_name() + * @see cass_iterator_get_meta_field_value() + * @see cass_iterator_free() + */ +CASS_EXPORT CassIterator* +cass_iterator_fields_from_index_meta(const CassIndexMeta* index_meta); + +/** + * Creates a new fields iterator for the specified function metadata. Metadata + * fields allow direct access to the column data found in the underlying + * "functions" metadata table. This can be used to iterate those metadata + * field entries. + * + * @public @memberof CassFunctionMeta + * + * @param[in] function_meta + * @return A new iterator that must be freed. + * + * @see cass_iterator_get_meta_field() + * @see cass_iterator_free() + */ +CASS_EXPORT CassIterator* +cass_iterator_fields_from_function_meta(const CassFunctionMeta* function_meta); + +/** + * Creates a new fields iterator for the specified aggregate metadata. Metadata + * fields allow direct access to the column data found in the underlying + * "aggregates" metadata table. This can be used to iterate those metadata + * field entries. + * + * @public @memberof CassAggregateMeta + * + * @param[in] aggregate_meta + * @return A new iterator that must be freed. + * + * @see cass_iterator_get_meta_field() + * @see cass_iterator_free() + */ +CASS_EXPORT CassIterator* +cass_iterator_fields_from_aggregate_meta(const CassAggregateMeta* aggregate_meta); + +/** + * Gets the metadata field name at the iterator's current position. + * + * Calling cass_iterator_next() will invalidate the previous + * value returned by this method. + * + * @public @memberof CassIterator + * + * @param[in] iterator + * @param[out] name + * @param[out] name_length + * @return CASS_OK if successful, otherwise error occurred + */ +CASS_EXPORT CassError +cass_iterator_get_meta_field_name(const CassIterator* iterator, + const char** name, + size_t* name_length); + +/** + * Gets the metadata field value at the iterator's current position. + * + * Calling cass_iterator_next() will invalidate the previous + * value returned by this method. + * + * @public @memberof CassIterator + * + * @param[in] iterator + * @return A metadata field value + */ +CASS_EXPORT const CassValue* +cass_iterator_get_meta_field_value(const CassIterator* iterator); + + +/* Functions unimplemented on purpose */ + +// Binding values to unprepared statements is risky and hence +// unsupported by the Rust Driver. +/** + * Adds a key index specifier to this a statement. + * When using token-aware routing, this can be used to tell the driver which + * parameters within a non-prepared, parameterized statement are part of + * the partition key. + * + * Use consecutive calls for composite partition keys. + * + * This is not necessary for prepared statements, as the key + * parameters are determined in the metadata processed in the prepare phase. + * + * @public @memberof CassStatement + * + * @param[in] statement + * @param[in] index + * @return CASS_OK if successful, otherwise an error occurred. + */ +CASS_EXPORT CassError +cass_statement_add_key_index(CassStatement* statement, + size_t index); + +/** + * Enable pre-preparing cached prepared statements when existing hosts become + * available again or when new hosts are added to the cluster. + * + * This can help mitigate request latency when executing prepared statements + * by avoiding an extra round trip in cases where the statement is + * unprepared on a freshly started server. The main tradeoff is extra background + * network traffic is required to prepare the statements on hosts as they become + * available. + * + * Default: cass_true + * + * @param cluster + * @param enabled + * @return CASS_OK if successful, otherwise an error occurred + */ +CASS_EXPORT CassError +cass_cluster_set_prepare_on_up_or_add_host(CassCluster* cluster, + cass_bool_t enabled); + + +/* Request tracing API + * Explanation: the semantics is weird. CPP Driver waits for tracing info + * to become available by performing queries to tracing tables with the + * parameters specified by the following functions. The problem is, it does + * not expose the results of the query; it's the user's responsibility to fetch + * them themselves again. This is inefficient and real pain. Therefore, we + * prefer the driver to provide no functionalities regarding server-side + * tracing, so the user must query tracing tables themselves, than to provide + * such a weird and incomplete semantics. + */ + + /** + * Sets the maximum time to wait for tracing data to become available. + * + * Default: 15 milliseconds + * + * @param[in] cluster + * @param[in] max_wait_time_ms + */ + CASS_EXPORT void + cass_cluster_set_tracing_max_wait_time(CassCluster* cluster, + unsigned max_wait_time_ms); + + /** + * Sets the amount of time to wait between attempts to check to see if tracing is + * available. + * + * Default: 3 milliseconds + * + * @param[in] cluster + * @param[in] retry_wait_time_ms + */ + CASS_EXPORT void + cass_cluster_set_tracing_retry_wait_time(CassCluster* cluster, + unsigned retry_wait_time_ms); + + /** + * Sets the consistency level to use for checking to see if tracing data is + * available. + * + * Default: CASS_CONSISTENCY_ONE + * + * @param[in] cluster + * @param[in] consistency + */ + CASS_EXPORT void + cass_cluster_set_tracing_consistency(CassCluster* cluster, + CassConsistency consistency); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* __DELETED_H_INCLUDED__ */ diff --git a/scylla-rust-wrapper/src/api.rs b/scylla-rust-wrapper/src/api.rs index 5a21166b..1435d269 100644 --- a/scylla-rust-wrapper/src/api.rs +++ b/scylla-rust-wrapper/src/api.rs @@ -916,12 +916,10 @@ pub mod log { #[rustfmt::skip] pub use crate::logging::{ CassLogCallback, - cass_log_cleanup, cass_log_get_callback_and_data, cass_log_level_string, cass_log_set_callback, cass_log_set_level, - cass_log_set_queue_size, }; } diff --git a/scylla-rust-wrapper/src/logging.rs b/scylla-rust-wrapper/src/logging.rs index 30a51a43..06d970e9 100644 --- a/scylla-rust-wrapper/src/logging.rs +++ b/scylla-rust-wrapper/src/logging.rs @@ -3,7 +3,6 @@ use crate::argconv::{ CConst, CassBorrowedSharedPtr, FFI, FromRef, RefFFI, arr_to_cstr, ptr_to_cstr, str_to_arr, }; use crate::cass_log_types::{CassLogLevel, CassLogMessage}; -use crate::types::size_t; use std::convert::TryFrom; use std::fmt::Debug; use std::fmt::Write; @@ -216,13 +215,3 @@ pub unsafe extern "C" fn cass_log_get_callback_and_data( *data_out = logger.data; } } - -#[unsafe(no_mangle)] -pub unsafe extern "C" fn cass_log_cleanup() { - // Deprecated -} - -#[unsafe(no_mangle)] -pub unsafe extern "C" fn cass_log_set_queue_size(_queue_size: size_t) { - // Deprecated -} diff --git a/src/testing.hpp b/src/testing.hpp index 7ca0e473..09b49b21 100644 --- a/src/testing.hpp +++ b/src/testing.hpp @@ -18,6 +18,7 @@ #define DATASTAX_INTERNAL_TESTING_HPP #include "cassandra.h" +#include "deleted_functions.h" #include "string.hpp" #include "string_ref.hpp" #include "vector.hpp" diff --git a/src/testing_unimplemented.cpp b/src/testing_unimplemented.cpp index b1b417bc..bb2aa8af 100644 --- a/src/testing_unimplemented.cpp +++ b/src/testing_unimplemented.cpp @@ -1,6 +1,8 @@ #include "cassandra.h" #include +extern "C" { + CASS_EXPORT size_t cass_aggregate_meta_argument_count(const CassAggregateMeta* aggregate_meta) { throw std::runtime_error("UNIMPLEMENTED cass_aggregate_meta_argument_count\n"); } @@ -219,3 +221,5 @@ CASS_EXPORT CassError cass_user_type_set_custom_by_name(CassUserType* user_type, size_t value_size) { throw std::runtime_error("UNIMPLEMENTED cass_user_type_set_custom_by_name\n"); } + +} // extern "C" diff --git a/tests/src/integration/integration.hpp b/tests/src/integration/integration.hpp index 2129c7cd..b7b74c1f 100644 --- a/tests/src/integration/integration.hpp +++ b/tests/src/integration/integration.hpp @@ -24,6 +24,7 @@ #include #include "cassandra.h" +#include "deleted_functions.h" #include "bridge.hpp" #include "logger.hpp" diff --git a/tests/src/integration/objects/cluster.hpp b/tests/src/integration/objects/cluster.hpp index b0f009fd..ff51ce9b 100644 --- a/tests/src/integration/objects/cluster.hpp +++ b/tests/src/integration/objects/cluster.hpp @@ -17,6 +17,7 @@ #ifndef __TEST_CLUSTER_HPP__ #define __TEST_CLUSTER_HPP__ #include "cassandra.h" +#include "deleted_functions.h" #include "object_base.hpp" diff --git a/tests/src/integration/tests/test_dbaas.cpp b/tests/src/integration/tests/test_dbaas.cpp deleted file mode 100644 index 4d532798..00000000 --- a/tests/src/integration/tests/test_dbaas.cpp +++ /dev/null @@ -1,748 +0,0 @@ -/* - Copyright (c) DataStax, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "integration.hpp" - -#include "process.hpp" - -#define PROXY_CREDS_V1_INVALID_CA_FILENAME "creds-v1-invalid-ca.zip" -#define PROXY_CREDS_V1_UNREACHABLE_FILENAME "creds-v1-unreachable.zip" -#define PROXY_CREDS_V1_NO_CERT_FILENAME "creds-v1-wo-cert.zip" -#define PROXY_CREDS_V1_NO_CREDS_FILENAME "creds-v1-wo-creds.zip" -#define PROXY_CREDS_V1_FILENAME "creds-v1.zip" - -#ifdef WIN32 -#define PROXY_RUN_SCRIPT "run.ps1" -#define PROXY_CREDS_BUNDLES "certs\\bundles\\" -#else -#define PROXY_RUN_SCRIPT "run.sh" -#define PROXY_CREDS_BUNDLES "certs/bundles/" -#endif - -using test::Utils; -using utils::Process; - -/** - * Database as a service integration tests - */ -class DbaasTests : public Integration { -public: - typedef std::map ServerNames; - typedef std::pair ServerPair; - - static void SetUpTestCase() { - char* proxy_path = getenv("PROXY_PATH"); - if (proxy_path) { - proxy_path_ = proxy_path; - } else { - proxy_path_ = Utils::home_directory() + Utils::PATH_SEPARATOR + "proxy"; - } - proxy_path_ += Utils::PATH_SEPARATOR; - proxy_run_script_ = proxy_path_ + PROXY_RUN_SCRIPT; - - // Allow the proxy to start itself or use a currently running proxy - if (file_exists(proxy_run_script_)) { - if (!start_proxy()) { - FAIL() << "Unable to start SNI single endpoint proxy service. Check PROXY_PATH environment " - "variable" -#ifdef WIN32 - << " or ensure proper ExecutionPolicy is set (e.g. Set-ExecutionPolicy -Scope " - "CurrentUser Unrestricted); see " - "https:/go.microsoft.com/fwlink/?LinkID=135170" -#endif - << "."; - } - } else { - if (!is_proxy_running()) { - FAIL() - << "SNI single endpoint proxy is not available. Start container before executing test."; - } - } - - if (!file_exists(proxy_cred_bundles_path_)) { - proxy_cred_bundles_path_ = proxy_path_ + proxy_cred_bundles_path_; - } - if (!file_exists(creds_v1_invalid_ca()) || !file_exists(creds_v1_unreachable()) || - !file_exists(creds_v1_no_cert()) || !file_exists(creds_v1_no_creds()) || - !file_exists(creds_v1())) { - FAIL() << "Unable to locate SNI single endpoint credential bundles. Check PROXY_PATH " - "environment variable."; - } - } - - void SetUp() { - // Ensure CCM and session are not created for these tests - is_ccm_requested_ = false; - is_session_requested_ = false; - is_schema_metadata_ = true; // Needed for prepared statements - Integration::SetUp(); - } - - static void TearDownTestCase() { - if (!Options::keep_clusters()) { - stop_proxy(); - } - } - - static std::string creds_v1_invalid_ca() { - return proxy_cred_bundles_path_ + PROXY_CREDS_V1_INVALID_CA_FILENAME; - } - - static std::string creds_v1_unreachable() { - return proxy_cred_bundles_path_ + PROXY_CREDS_V1_UNREACHABLE_FILENAME; - } - - static std::string creds_v1_no_cert() { - return proxy_cred_bundles_path_ + PROXY_CREDS_V1_NO_CERT_FILENAME; - } - - static std::string creds_v1_no_creds() { - return proxy_cred_bundles_path_ + PROXY_CREDS_V1_NO_CREDS_FILENAME; - } - - static std::string creds_v1() { return proxy_cred_bundles_path_ + PROXY_CREDS_V1_FILENAME; } - - int get_node_id(const std::string& rpc_address) { - std::vector octects = explode(rpc_address, '.'); - std::stringstream ss(octects[octects.size() - 1]); - int node = 0; - if ((ss >> node).fail()) { - EXPECT_TRUE(false) << "Unable to parse node number from rpc_address"; - } - return node; - } - - /** - * Vector of server names sorted by node number (e.g. last octet in real IP address) - */ - ServerNames get_server_names() { - ServerNames map; - { - Cluster cluster = default_cluster(false) - .with_randomized_contact_points(false) - .with_load_balance_round_robin(); - EXPECT_EQ(CASS_OK, cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init( - cluster.get(), creds_v1().c_str())); - Session session = cluster.connect(); - for (int i = 0; i < 3; ++i) { - Row row = session.execute(SELECT_ALL_SYSTEM_LOCAL_CQL).first_row(); - int node = get_node_id(row.column_by_name("rpc_address").str()); - map.insert(ServerPair(node, row.column_by_name("host_id").str())); - } - } - return map; - } - - bool start_cluster() { - Process::Args args; - args.push_back("start"); - args.push_back("--root"); - args.push_back("--wait-for-binary-proto"); - args.push_back("--jvm_arg=-Ddse.product_type=DATASTAX_APOLLO"); - return ccm_execute(args); - } - - bool stop_cluster() { - Process::Args args; - args.push_back("stop"); - return ccm_execute(args); - } - - bool start_node(unsigned int node) { - Process::Args args; - args.push_back(node_name(node)); - args.push_back("start"); - args.push_back("--root"); - args.push_back("--wait-for-binary-proto"); - args.push_back("--jvm_arg=-Ddse.product_type=DATASTAX_APOLLO"); - return ccm_execute(args); - } - - bool stop_node(unsigned int node, bool is_kill = false) { - Process::Args args; - args.push_back(node_name(node)); - args.push_back("stop"); - if (is_kill) { - args.push_back("--not-gently"); - } - return ccm_execute(args); - } - -private: - std::string node_name(int node) { - std::stringstream node_name; - node_name << "node" << node; - return node_name.str(); - } - - bool ccm_execute(Process::Args args) { - Process::Args command; - command.push_back("docker"); - command.push_back("exec"); - command.push_back(get_proxy_id()); - command.push_back("ccm"); - command.insert(command.end(), args.begin(), args.end()); - Process::Result result = Process::execute(command); - return result.exit_status == 0; - } - -private: - static std::string get_proxy_id() { - if (proxy_id_.empty()) { - Process::Args command; - command.push_back("docker"); - command.push_back("ps"); - command.push_back("-aqf"); - command.push_back("ancestor=single_endpoint"); - Process::Result result = Process::execute(command); - proxy_id_ = Utils::trim(result.standard_output); - } - return proxy_id_; - } - - static bool is_proxy_running() { return !get_proxy_id().empty(); } - - static bool start_proxy() { - if (is_proxy_running()) return true; - - Process::Args command; -#ifdef WIN32 - command.push_back("powershell"); -#endif - command.push_back(proxy_run_script_); - Process::Result result = Process::execute(command); - return result.exit_status == 0; - } - - static bool stop_proxy() { - Process::Args command; - command.push_back("docker"); - command.push_back("kill"); - command.push_back(get_proxy_id()); - Process::Result result = Process::execute(command); - return result.exit_status == 0; - } - -private: - static std::string proxy_path_; - static std::string proxy_cred_bundles_path_; - static std::string proxy_run_script_; - static std::string proxy_id_; -}; - -std::string DbaasTests::proxy_path_; -std::string DbaasTests::proxy_cred_bundles_path_ = PROXY_CREDS_BUNDLES; -std::string DbaasTests::proxy_run_script_ = PROXY_RUN_SCRIPT; -std::string DbaasTests::proxy_id_; - -/** - * Perform connection to DBaaS SNI single endpoint docker image. - * - * This test will perform a connection to a DBaaS SNI single endpoint while ensuring proper - * automatic cloud configuration with address resolution. - * - * @jira_ticket CPP-787 - * @test_category dbaas - * @since 2.14.0 - * @expected_result Successful address resolution and connection. - */ -CASSANDRA_INTEGRATION_TEST_F(DbaasTests, ResolveAndConnect) { - CHECK_FAILURE; - - Cluster cluster = default_cluster(false); - ASSERT_EQ(CASS_OK, cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init( - cluster.get(), creds_v1().c_str())); - connect(cluster); -} - -/** - * Perform query using a simple statement against the DBaaS SNI single endpoint docker image. - * - * This test will perform a connection and execute a simple statement query against the - * system.local table to ensure query execution to a DBaaS SNI single endpoint while validating the - * results. - * - * @jira_ticket CPP-787 - * @test_category dbaas - * @test_category queries - * @since 2.14.0 - * @expected_result Simple statement is executed and nodes are validated. - */ -CASSANDRA_INTEGRATION_TEST_F(DbaasTests, QueryEachNode) { - CHECK_FAILURE; - - Cluster cluster = default_cluster(false).with_load_balance_round_robin(); - ASSERT_EQ(CASS_OK, cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init( - cluster.get(), creds_v1().c_str())); - connect(cluster); - - ServerNames server_names; - for (int i = 0; i < 3; ++i) { - Result result = session_.execute(SELECT_ALL_SYSTEM_LOCAL_CQL); - Uuid expected_host_id = Uuid(result.server_name()); - Row row = result.first_row(); - - Uuid host_id = row.column_by_name("host_id"); - int node = get_node_id(row.column_by_name("rpc_address").str()); - EXPECT_NE(0, node); - EXPECT_EQ(expected_host_id, host_id); - server_names.insert(ServerPair(node, host_id.str())); - } - - EXPECT_EQ(3u, server_names.size()); // Ensure all three nodes were queried -} - -/** - * Create function and aggregate definitions and ensure the schema metadata is reflected when - * execute against the DBaaS SNI single endpoint docker image. - * - * This test will perform a connection and execute create function/aggregate queries to ensure - * schema metadata using a DBaaS SNI single endpoint is handled properly. - * - * @jira_ticket CPP-815 - * @test_category dbaas - * @test_category queries:schema_metadata:udf - * @since 2.14.0 - * @expected_result Function/Aggregate definitions schema metadata are validated. - */ -CASSANDRA_INTEGRATION_TEST_F(DbaasTests, SchemaMetadata) { - CHECK_FAILURE; - - Cluster cluster = default_cluster(false); - ASSERT_EQ(CASS_OK, cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init( - cluster.get(), creds_v1().c_str())); - connect(cluster); - - // clang-format off - session_.execute("CREATE OR REPLACE FUNCTION avg_state(state tuple, val int) " - "CALLED ON NULL INPUT RETURNS tuple " - "LANGUAGE java AS " - "'if (val != null) {" - "state.setInt(0, state.getInt(0) + 1);" - "state.setLong(1, state.getLong(1) + val.intValue());" - "};" - "return state;'" - ";"); - session_.execute("CREATE OR REPLACE FUNCTION avg_final (state tuple) " - "CALLED ON NULL INPUT RETURNS double " - "LANGUAGE java AS " - "'double r = 0;" - "if (state.getInt(0) == 0) return null;" - "r = state.getLong(1);" - "r /= state.getInt(0);" - "return Double.valueOf(r);'" - ";"); - session_.execute("CREATE OR REPLACE AGGREGATE average(int) " - "SFUNC avg_state STYPE tuple FINALFUNC avg_final " - "INITCOND(0, 0);"); - // clang-format on - - const CassSchemaMeta* schema_meta = cass_session_get_schema_meta(session_.get()); - ASSERT_TRUE(schema_meta != NULL); - const CassKeyspaceMeta* keyspace_meta = - cass_schema_meta_keyspace_by_name(schema_meta, default_keyspace().c_str()); - ASSERT_TRUE(keyspace_meta != NULL); - - { // Function `avg_state` - const char* data = NULL; - size_t length = 0; - const CassDataType* datatype = NULL; - - const CassFunctionMeta* function_meta = - cass_keyspace_meta_function_by_name(keyspace_meta, "avg_state", "tuple,int"); - ASSERT_TRUE(function_meta != NULL); - cass_function_meta_name(function_meta, &data, &length); - EXPECT_EQ("avg_state", std::string(data, length)); - cass_function_meta_full_name(function_meta, &data, &length); - EXPECT_EQ("avg_state(tuple,int)", std::string(data, length)); - cass_function_meta_body(function_meta, &data, &length); - EXPECT_EQ("if (val != null) {state.setInt(0, state.getInt(0) + 1);state.setLong(1, " - "state.getLong(1) + val.intValue());};return state;", - std::string(data, length)); - cass_function_meta_language(function_meta, &data, &length); - EXPECT_EQ("java", std::string(data, length)); - EXPECT_TRUE(cass_function_meta_called_on_null_input(function_meta)); - ASSERT_EQ(2u, cass_function_meta_argument_count(function_meta)); - cass_function_meta_argument(function_meta, 0, &data, &length, &datatype); - EXPECT_EQ("state", std::string(data, length)); - EXPECT_EQ(CASS_VALUE_TYPE_TUPLE, cass_data_type_type(datatype)); - ASSERT_EQ(2u, cass_data_type_sub_type_count(datatype)); - EXPECT_EQ(CASS_VALUE_TYPE_INT, cass_data_type_type(cass_data_type_sub_data_type(datatype, 0))); - EXPECT_EQ(CASS_VALUE_TYPE_BIGINT, - cass_data_type_type(cass_data_type_sub_data_type(datatype, 1))); - cass_function_meta_argument(function_meta, 1, &data, &length, &datatype); - EXPECT_EQ("val", std::string(data, length)); - EXPECT_EQ(CASS_VALUE_TYPE_INT, cass_data_type_type(datatype)); - datatype = cass_function_meta_argument_type_by_name(function_meta, "state"); - EXPECT_EQ(CASS_VALUE_TYPE_TUPLE, cass_data_type_type(datatype)); - ASSERT_EQ(2u, cass_data_type_sub_type_count(datatype)); - EXPECT_EQ(CASS_VALUE_TYPE_INT, cass_data_type_type(cass_data_type_sub_data_type(datatype, 0))); - EXPECT_EQ(CASS_VALUE_TYPE_BIGINT, - cass_data_type_type(cass_data_type_sub_data_type(datatype, 1))); - datatype = cass_function_meta_argument_type_by_name(function_meta, "val"); - EXPECT_EQ(CASS_VALUE_TYPE_INT, cass_data_type_type(datatype)); - datatype = cass_function_meta_return_type(function_meta); - EXPECT_EQ(CASS_VALUE_TYPE_TUPLE, cass_data_type_type(datatype)); - ASSERT_EQ(2u, cass_data_type_sub_type_count(datatype)); - EXPECT_EQ(CASS_VALUE_TYPE_INT, cass_data_type_type(cass_data_type_sub_data_type(datatype, 0))); - EXPECT_EQ(CASS_VALUE_TYPE_BIGINT, - cass_data_type_type(cass_data_type_sub_data_type(datatype, 1))); - } - - { // Aggregate `average` - const char* data = NULL; - size_t length = 0; - const CassDataType* datatype = NULL; - - const CassAggregateMeta* aggregate_meta = - cass_keyspace_meta_aggregate_by_name(keyspace_meta, "average", "int"); - ASSERT_TRUE(aggregate_meta != NULL); - cass_aggregate_meta_name(aggregate_meta, &data, &length); - EXPECT_EQ("average", std::string(data, length)); - cass_aggregate_meta_full_name(aggregate_meta, &data, &length); - EXPECT_EQ("average(int)", std::string(data, length)); - ASSERT_EQ(1u, cass_aggregate_meta_argument_count(aggregate_meta)); - datatype = cass_aggregate_meta_argument_type(aggregate_meta, 0); - EXPECT_EQ(CASS_VALUE_TYPE_INT, cass_data_type_type(datatype)); - datatype = cass_aggregate_meta_return_type(aggregate_meta); - EXPECT_EQ(CASS_VALUE_TYPE_DOUBLE, cass_data_type_type(datatype)); - datatype = cass_aggregate_meta_state_type(aggregate_meta); - EXPECT_EQ(CASS_VALUE_TYPE_TUPLE, cass_data_type_type(datatype)); - ASSERT_EQ(2u, cass_data_type_sub_type_count(datatype)); - EXPECT_EQ(CASS_VALUE_TYPE_INT, cass_data_type_type(cass_data_type_sub_data_type(datatype, 0))); - EXPECT_EQ(CASS_VALUE_TYPE_BIGINT, - cass_data_type_type(cass_data_type_sub_data_type(datatype, 1))); - const CassFunctionMeta* function_meta = cass_aggregate_meta_state_func(aggregate_meta); - cass_function_meta_name(function_meta, &data, &length); - EXPECT_EQ("avg_state", std::string(data, length)); - function_meta = cass_aggregate_meta_final_func(aggregate_meta); - cass_function_meta_name(function_meta, &data, &length); - EXPECT_EQ("avg_final", std::string(data, length)); - const CassValue* initcond = cass_aggregate_meta_init_cond(aggregate_meta); - EXPECT_EQ(CASS_VALUE_TYPE_VARCHAR, cass_value_type(initcond)); - EXPECT_EQ(Text("(0, 0)"), Text(initcond)); - ASSERT_TRUE(true); - } - - cass_schema_meta_free(schema_meta); -} - -/** - * Ensure guardrails are enabled when performing a query against the DBaaS SNI single endpoint - * docker image. - * - * This test will perform a connection and execute a simple insert statement query against the - * server using a valid consistency level.DBaaS SNI single endpoint while validating the - * insert occured. - * - * @jira_ticket CPP-813 - * @test_category dbaas - * @test_category queries:guard_rails - * @since 2.14.0 - * @expected_result Simple statement is executed and is validated. - */ -CASSANDRA_INTEGRATION_TEST_F(DbaasTests, ConsistencyGuardrails) { - CHECK_FAILURE; - - Cluster cluster = default_cluster(false); - ASSERT_EQ(CASS_OK, cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init( - cluster.get(), creds_v1().c_str())); - connect(cluster); - - session_.execute( - format_string(CASSANDRA_KEY_VALUE_TABLE_FORMAT, default_table().c_str(), "int", "int")); - CHECK_FAILURE; - - session_.execute(Statement( - format_string(CASSANDRA_KEY_VALUE_INSERT_FORMAT, default_table().c_str(), "0", "1"))); - Result result = session_.execute( - Statement(format_string(CASSANDRA_SELECT_VALUE_FORMAT, default_table().c_str(), "0"))); - EXPECT_EQ(1u, result.row_count()); - ASSERT_EQ(1u, result.column_count()); - ASSERT_EQ(Integer(1), result.first_row().next().as()); -} - -/** - * Ensure guardrails are enabled when performing a query against the DBaaS SNI single endpoint - * docker image. - * - * This test will perform a connection and execute a simple statement query against the - * server using an invalid consistency level.DBaaS SNI single endpoint while validating the - * error. - * - * @jira_ticket CPP-813 - * @test_category dbaas - * @test_category queries:guard_rails - * @since 2.14.0 - * @expected_result Simple statement is executed and guard rail error is validated. - */ -CASSANDRA_INTEGRATION_TEST_F(DbaasTests, ConsistencyGuardrailsInvalid) { - CHECK_FAILURE; - - Cluster cluster = default_cluster(false); - ASSERT_EQ(CASS_OK, cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init( - cluster.get(), creds_v1().c_str())); - connect(cluster); - - session_.execute( - format_string(CASSANDRA_KEY_VALUE_TABLE_FORMAT, default_table().c_str(), "int", "int")); - CHECK_FAILURE - - Statement statement( - format_string(CASSANDRA_KEY_VALUE_INSERT_FORMAT, default_table().c_str(), "0", "1")); - statement.set_consistency( - CASS_CONSISTENCY_LOCAL_ONE); // Override default DBaaS configured consistency - Result result = session_.execute(statement, false); - EXPECT_TRUE(result.error_code() != CASS_OK) - << "Statement execution succeeded; guardrails may not be enabled"; - EXPECT_TRUE(contains(result.error_message(), - "Provided value LOCAL_ONE is not allowed for Write Consistency Level")); -} - -/** - * Perform query ensuring token aware is enabled by default. - * - * This test will perform a connection and execute a insert query against to ensure that token - * aware is enabled by default when automatically configured . - * - * @jira_ticket CPP-787 - * @test_category dbaas - * @test_category queries - * @since 2.14.0 - * @expected_result Simple statement is executed and validated against replicas. - */ -CASSANDRA_INTEGRATION_TEST_F(DbaasTests, DcAwareTokenAwareRoutingDefault) { - CHECK_FAILURE; - - ServerNames server_names = get_server_names(); - - // Validate replicas are used during token aware routing - std::vector > replicas; - replicas.push_back(std::pair(0, 2)); // query key, node id (last octet of rpc_address) - replicas.push_back(std::pair(1, 2)); - replicas.push_back(std::pair(2, 2)); - replicas.push_back(std::pair(3, 1)); - replicas.push_back(std::pair(4, 3)); - replicas.push_back(std::pair(5, 2)); - - Cluster cluster = default_cluster(false); - ASSERT_EQ(CASS_OK, cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init( - cluster.get(), creds_v1().c_str())); - connect(cluster); - - for (std::vector >::iterator it = replicas.begin(), end = replicas.end(); - it != end; ++it) { - Statement statement(SELECT_ALL_SYSTEM_LOCAL_CQL, 1); - statement.set_consistency(CASS_CONSISTENCY_ONE); - statement.add_key_index(0); - statement.set_keyspace("system"); - statement.bind(0, Integer(it->first)); - - Result result = session_.execute( - statement, false); // No bind variables exist so statement will return error - EXPECT_EQ(server_names[it->second], result.server_name()); - } -} - -/** - * Attempt connection to DBaaS SNI single endpoint docker image manually setting auth. - * - * This test will perform a connection to a DBaaS SNI single endpoint while ensuring proper - * automatic cloud configuration with address resolution where the authentication is not available. - * - * @jira_ticket CPP-787 - * @test_category dbaas:auth - * @since 2.14.0 - * @expected_result Successful address resolution and connection. - */ -CASSANDRA_INTEGRATION_TEST_F(DbaasTests, ResolveAndConnectWithoutCredsInBundle) { - CHECK_FAILURE; - - Cluster cluster = default_cluster(false); - ASSERT_EQ(CASS_OK, cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init( - cluster.get(), creds_v1_no_creds().c_str())); - cluster.with_credentials("cassandra", "cassandra"); - connect(cluster); -} - -/** - * Attempt connection to DBaaS SNI single endpoint docker image leaving auth unset. - * - * This test will perform a connection to a DBaaS SNI single endpoint while ensuring proper - * automatic cloud configuration with address resolution where the authentication is not set. - * - * @jira_ticket CPP-787 - * @test_category dbaas - * @since 2.14.0 - * @expected_result Failed to establish a connection. - */ -CASSANDRA_INTEGRATION_TEST_F(DbaasTests, InvalidWithoutCreds) { - CHECK_FAILURE; - - Cluster cluster = default_cluster(false); - ASSERT_EQ(CASS_OK, cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init( - cluster.get(), creds_v1_no_creds().c_str())); - try { - connect(cluster); - EXPECT_TRUE(false) << "Connection established"; - } catch (Session::Exception& se) { - EXPECT_EQ(CASS_ERROR_SERVER_BAD_CREDENTIALS, se.error_code()); - } -} - -/** - * Attempt connection to DBaaS SNI single endpoint docker image using invalid metadata server. - * - * This test will attempt a connection to a DBaaS SNI single endpoint using an invalid metadata - * server. The connection should not succeed as no resolution will be possible. - * - * @jira_ticket CPP-787 - * @test_category dbaas - * @since 2.14.0 - * @expected_result Failed to establish a connection. - */ -CASSANDRA_INTEGRATION_TEST_F(DbaasTests, InvalidMetadataServer) { - CHECK_FAILURE; - - Cluster cluster = default_cluster(false); - EXPECT_EQ(CASS_OK, cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init( - cluster.get(), creds_v1_unreachable().c_str())); - try { - connect(cluster); - EXPECT_TRUE(false) << "Connection established"; - } catch (Session::Exception& se) { - EXPECT_EQ(CASS_ERROR_LIB_NO_HOSTS_AVAILABLE, se.error_code()); - } -} - -/** - * Attempt connection to DBaaS SNI single endpoint docker image using invalid certificate. - * - * This test will attempt a connection to a DBaaS SNI single endpoint using an invalid certificate. - * The connection should not succeed as no resolution will be possible. - * - * @jira_ticket CPP-787 - * @test_category dbaas - * @since 2.14.0 - * @expected_result Failed to establish a connection. - */ -CASSANDRA_INTEGRATION_TEST_F(DbaasTests, InvalidCertificate) { - CHECK_FAILURE; - - Cluster cluster = default_cluster(false); - EXPECT_EQ(CASS_ERROR_LIB_BAD_PARAMS, - cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init( - cluster.get(), creds_v1_no_cert().c_str())); - try { - connect(cluster); - EXPECT_TRUE(false) << "Connection established"; - } catch (Session::Exception& se) { - EXPECT_EQ(CASS_ERROR_LIB_NO_HOSTS_AVAILABLE, se.error_code()); - } -} - -/** - * Attempt connection to DBaaS SNI single endpoint docker image using invalid CA. - * - * This test will attempt a connection to a DBaaS SNI single endpoint using an invalid CA. The - * connection should not succeed as no resolution will be possible. - * - * @jira_ticket CPP-787 - * @test_category dbaas - * @since 2.14.0 - * @expected_result Failed to establish a connection. - */ -CASSANDRA_INTEGRATION_TEST_F(DbaasTests, InvalidCertificateAuthority) { - CHECK_FAILURE; - - Cluster cluster = default_cluster(false); - ASSERT_EQ(CASS_OK, cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init( - cluster.get(), creds_v1_invalid_ca().c_str())); - try { - connect(cluster); - EXPECT_TRUE(false) << "Connection established"; - } catch (Session::Exception& se) { - EXPECT_EQ(CASS_ERROR_LIB_NO_HOSTS_AVAILABLE, se.error_code()); - } -} - -/** - * Perform query with nodes down against the DBaaS SNI single endpoint docker image. - * - * This test will perform a connection and execute a simple statement query against the - * system.local table to ensure query execution to a DBaaS SNI single endpoint while validating the - * results. - * - * @jira_ticket CPP-787 - * @test_category dbaas - * @test_category queries - * @since 2.14.0 - * @expected_result Simple statement is executed and validated while node(s) are down. - */ -CASSANDRA_INTEGRATION_TEST_F(DbaasTests, QueryWithNodesDown) { - CHECK_FAILURE; - - ServerNames server_names = get_server_names(); - - Cluster cluster = default_cluster(false); - ASSERT_EQ(CASS_OK, cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init( - cluster.get(), creds_v1().c_str())); - connect(cluster); - - EXPECT_TRUE(stop_node(1)); - for (int i = 0; i < 8; ++i) { - EXPECT_NE(server_names[1], session_.execute(SELECT_ALL_SYSTEM_LOCAL_CQL).server_name()); - } - - EXPECT_TRUE(stop_node(3)); - for (int i = 0; i < 8; ++i) { - EXPECT_EQ(server_names[2], session_.execute(SELECT_ALL_SYSTEM_LOCAL_CQL).server_name()); - } - - EXPECT_TRUE(start_cluster()); -} - -/** - * Ensure reconnection occurs during full outage. - * - * This test will perform a connection, full outage will occur and the the cluster will be restarted - * while executing a simple statement query against the system.local table to ensure reconnection - * after full outage. - * - * @jira_ticket CPP-787 - * @test_category dbaas - * @test_category queries - * @since 2.14.0 - * @expected_result Simple statement is executed and validated after full outage. - */ -CASSANDRA_INTEGRATION_TEST_F(DbaasTests, FullOutage) { - CHECK_FAILURE; - - ServerNames server_names = get_server_names(); - - Cluster cluster = default_cluster(false).with_constant_reconnect(10); // Quick reconnect - ASSERT_EQ(CASS_OK, cass_cluster_set_cloud_secure_connection_bundle_no_ssl_lib_init( - cluster.get(), creds_v1().c_str())); - connect(cluster); - - EXPECT_TRUE(stop_cluster()); - - Statement statement(SELECT_ALL_SYSTEM_LOCAL_CQL); - EXPECT_EQ(CASS_ERROR_LIB_NO_HOSTS_AVAILABLE, session_.execute(statement, false).error_code()); - - EXPECT_TRUE(start_cluster()); - EXPECT_EQ(CASS_OK, session_.execute(statement).error_code()); -}