Skip to content

Commit

Permalink
Make all statement bind functions avoid intermediate CString converstion
Browse files Browse the repository at this point in the history
Signed-off-by: Neil Jensen <neilgithub@jensenet.com>
  • Loading branch information
jensenn committed Jun 11, 2020
1 parent 0b6a8d7 commit 8ca2f15
Showing 1 changed file with 66 additions and 52 deletions.
118 changes: 66 additions & 52 deletions src/cassandra/statement.rs
Expand Up @@ -16,39 +16,39 @@ use crate::cassandra::uuid::Uuid;
use crate::cassandra_sys::cass_false;
use crate::cassandra_sys::cass_statement_add_key_index;
use crate::cassandra_sys::cass_statement_bind_bool;
use crate::cassandra_sys::cass_statement_bind_bool_by_name;
use crate::cassandra_sys::cass_statement_bind_bool_by_name_n;
use crate::cassandra_sys::cass_statement_bind_bytes;
use crate::cassandra_sys::cass_statement_bind_bytes_by_name;
use crate::cassandra_sys::cass_statement_bind_bytes_by_name_n;
use crate::cassandra_sys::cass_statement_bind_collection;
use crate::cassandra_sys::cass_statement_bind_collection_by_name;
use crate::cassandra_sys::cass_statement_bind_collection_by_name_n;
use crate::cassandra_sys::cass_statement_bind_decimal;
use crate::cassandra_sys::cass_statement_bind_decimal_by_name;
use crate::cassandra_sys::cass_statement_bind_decimal_by_name_n;
use crate::cassandra_sys::cass_statement_bind_double;
use crate::cassandra_sys::cass_statement_bind_double_by_name;
use crate::cassandra_sys::cass_statement_bind_double_by_name_n;
use crate::cassandra_sys::cass_statement_bind_float;
use crate::cassandra_sys::cass_statement_bind_float_by_name;
use crate::cassandra_sys::cass_statement_bind_float_by_name_n;
use crate::cassandra_sys::cass_statement_bind_inet;
use crate::cassandra_sys::cass_statement_bind_inet_by_name;
use crate::cassandra_sys::cass_statement_bind_inet_by_name_n;
use crate::cassandra_sys::cass_statement_bind_int16;
use crate::cassandra_sys::cass_statement_bind_int16_by_name;
use crate::cassandra_sys::cass_statement_bind_int16_by_name_n;
use crate::cassandra_sys::cass_statement_bind_int32;
use crate::cassandra_sys::cass_statement_bind_int32_by_name;
use crate::cassandra_sys::cass_statement_bind_int32_by_name_n;
use crate::cassandra_sys::cass_statement_bind_int64;
use crate::cassandra_sys::cass_statement_bind_int64_by_name;
use crate::cassandra_sys::cass_statement_bind_int64_by_name_n;
use crate::cassandra_sys::cass_statement_bind_int8;
use crate::cassandra_sys::cass_statement_bind_int8_by_name;
use crate::cassandra_sys::cass_statement_bind_int8_by_name_n;
use crate::cassandra_sys::cass_statement_bind_null;
use crate::cassandra_sys::cass_statement_bind_null_by_name;
use crate::cassandra_sys::cass_statement_bind_null_by_name_n;
use crate::cassandra_sys::cass_statement_bind_string_by_name_n;
use crate::cassandra_sys::cass_statement_bind_string_n;
use crate::cassandra_sys::cass_statement_bind_tuple;
use crate::cassandra_sys::cass_statement_bind_tuple_by_name;
use crate::cassandra_sys::cass_statement_bind_tuple_by_name_n;
use crate::cassandra_sys::cass_statement_bind_uint32;
use crate::cassandra_sys::cass_statement_bind_uint32_by_name;
use crate::cassandra_sys::cass_statement_bind_uint32_by_name_n;
use crate::cassandra_sys::cass_statement_bind_user_type;
use crate::cassandra_sys::cass_statement_bind_user_type_by_name;
use crate::cassandra_sys::cass_statement_bind_user_type_by_name_n;
use crate::cassandra_sys::cass_statement_bind_uuid;
use crate::cassandra_sys::cass_statement_bind_uuid_by_name;
use crate::cassandra_sys::cass_statement_bind_uuid_by_name_n;
use crate::cassandra_sys::cass_statement_free;
use crate::cassandra_sys::cass_statement_new;
use crate::cassandra_sys::cass_statement_set_consistency;
Expand Down Expand Up @@ -439,8 +439,8 @@ impl Statement {
/// cass_prepared_bind().
pub fn bind_null_by_name(&mut self, name: &str) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_null_by_name(self.0, name_cstr.as_ptr()).to_result(self)
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_null_by_name_n(self.0, name_ptr, name.len()).to_result(self)
}
}

Expand All @@ -452,8 +452,8 @@ impl Statement {
/// Binds a "tinyint" to all the values with the specified name.
pub fn bind_int8_by_name(&mut self, name: &str, value: i8) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_int8_by_name(self.0, name_cstr.as_ptr(), value).to_result(self)
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_int8_by_name_n(self.0, name_ptr, name.len(), value).to_result(self)
}
}

Expand All @@ -465,8 +465,8 @@ impl Statement {
/// Binds a "smallint" to all the values with the specified name.
pub fn bind_int16_by_name(&mut self, name: &str, value: i16) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_int16_by_name(self.0, name_cstr.as_ptr(), value).to_result(self)
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_int16_by_name_n(self.0, name_ptr, name.len(), value).to_result(self)
}
}

Expand All @@ -478,8 +478,8 @@ impl Statement {
/// Binds an "int" to all the values with the specified name.
pub fn bind_int32_by_name(&mut self, name: &str, value: i32) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_int32_by_name(self.0, name_cstr.as_ptr(), value).to_result(self)
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_int32_by_name_n(self.0, name_ptr, name.len(), value).to_result(self)
}
}

Expand All @@ -494,8 +494,9 @@ impl Statement {
/// cass_prepared_bind().
pub fn bind_uint32_by_name(&mut self, name: &str, value: u32) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_uint32_by_name(self.0, name_cstr.as_ptr(), value).to_result(self)
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_uint32_by_name_n(self.0, name_ptr, name.len(), value)
.to_result(self)
}
}

Expand All @@ -509,8 +510,8 @@ impl Statement {
/// with the specified name.
pub fn bind_int64_by_name(&mut self, name: &str, value: i64) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_int64_by_name(self.0, name_cstr.as_ptr(), value).to_result(self)
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_int64_by_name_n(self.0, name_ptr, name.len(), value).to_result(self)
}
}

Expand All @@ -525,8 +526,8 @@ impl Statement {
/// cass_prepared_bind().
pub fn bind_float_by_name(&mut self, name: &str, value: f32) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_float_by_name(self.0, name_cstr.as_ptr(), value).to_result(self)
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_float_by_name_n(self.0, name_ptr, name.len(), value).to_result(self)
}
}

Expand All @@ -541,8 +542,9 @@ impl Statement {
/// cass_prepared_bind().
pub fn bind_double_by_name(&mut self, name: &str, value: f64) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_double_by_name(self.0, name_cstr.as_ptr(), value).to_result(self)
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_double_by_name_n(self.0, name_ptr, name.len(), value)
.to_result(self)
}
}

Expand All @@ -560,10 +562,11 @@ impl Statement {
/// cass_prepared_bind().
pub fn bind_bool_by_name(&mut self, name: &str, value: bool) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_bool_by_name(
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_bool_by_name_n(
self.0,
name_cstr.as_ptr(),
name_ptr,
name.len(),
if value { cass_true } else { cass_false },
)
.to_result(self)
Expand Down Expand Up @@ -613,10 +616,11 @@ impl Statement {
/// cass_prepared_bind().
pub fn bind_bytes_by_name(&mut self, name: &str, mut value: Vec<u8>) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_bytes_by_name(
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_bytes_by_name_n(
self.0,
name_cstr.as_ptr(),
name_ptr,
name.len(),
value.as_mut_ptr(),
value.len(),
)
Expand All @@ -636,8 +640,8 @@ impl Statement {
/// cass_prepared_bind().
pub fn bind_uuid_by_name(&mut self, name: &str, value: Uuid) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_uuid_by_name(self.0, name_cstr.as_ptr(), value.inner())
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_uuid_by_name_n(self.0, name_ptr, name.len(), value.inner())
.to_result(self)
}
}
Expand All @@ -650,8 +654,8 @@ impl Statement {
/// Binds an "inet" to all the values with the specified name.
pub fn bind_inet_by_name(&mut self, name: &str, value: Inet) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_inet_by_name(self.0, name_cstr.as_ptr(), value.inner())
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_inet_by_name_n(self.0, name_ptr, name.len(), value.inner())
.to_result(self)
}
}
Expand Down Expand Up @@ -704,8 +708,8 @@ impl Statement {
/// cass_prepared_bind().
pub fn bind_map_by_name(&mut self, name: &str, map: Map) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_collection_by_name(self.0, name_cstr.as_ptr(), map.inner())
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_collection_by_name_n(self.0, name_ptr, name.len(), map.inner())
.to_result(self)
}
}
Expand All @@ -721,8 +725,13 @@ impl Statement {
/// cass_prepared_bind().
pub fn bind_set_by_name(&mut self, name: &str, collection: Set) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_collection_by_name(self.0, name_cstr.as_ptr(), collection.inner())
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_collection_by_name_n(
self.0,
name_ptr,
name.len(),
collection.inner(),
)
.to_result(self)
}
}
Expand All @@ -739,8 +748,13 @@ impl Statement {
/// cass_prepared_bind().
pub fn bind_list_by_name(&mut self, name: &str, collection: List) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_collection_by_name(self.0, name_cstr.as_ptr(), collection.inner())
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_collection_by_name_n(
self.0,
name_ptr,
name.len(),
collection.inner(),
)
.to_result(self)
}
}
Expand All @@ -756,8 +770,8 @@ impl Statement {
/// cass_prepared_bind().
pub fn bind_tuple_by_name(&mut self, name: &str, value: Tuple) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_tuple_by_name(self.0, name_cstr.as_ptr(), value.inner())
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_tuple_by_name_n(self.0, name_ptr, name.len(), value.inner())
.to_result(self)
}
}
Expand All @@ -772,8 +786,8 @@ impl Statement {
/// specified name.
pub fn bind_user_type_by_name(&mut self, name: &str, value: &UserType) -> Result<&mut Self> {
unsafe {
let name_cstr = CString::new(name)?;
cass_statement_bind_user_type_by_name(self.0, name_cstr.as_ptr(), value.inner())
let name_ptr = name.as_ptr() as *const c_char;
cass_statement_bind_user_type_by_name_n(self.0, name_ptr, name.len(), value.inner())
.to_result(self)
}
}
Expand Down

0 comments on commit 8ca2f15

Please sign in to comment.