Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
303 changes: 278 additions & 25 deletions include/cassandra.h

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/abstract_data.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ class AbstractData {
SET_TYPE(cass_bool_t)
SET_TYPE(CassString)
SET_TYPE(CassBytes)
SET_TYPE(CassCustom)
SET_TYPE(CassUuid)
SET_TYPE(CassInet)
SET_TYPE(CassDecimal)
Expand Down
23 changes: 19 additions & 4 deletions src/collection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,15 +82,30 @@ CASS_COLLECTION_APPEND(decimal,

CassError cass_collection_append_string(CassCollection* collection,
const char* value) {
collection->append(cass::CassString(value, strlen(value)));
return CASS_OK;
return collection->append(cass::CassString(value, strlen(value)));
}

CassError cass_collection_append_string_n(CassCollection* collection,
const char* value,
size_t value_length) {
collection->append(cass::CassString(value, value_length));
return CASS_OK;
return collection->append(cass::CassString(value, value_length));
}

CassError cass_collection_append_custom(CassCollection* collection,
const char* class_name,
const cass_byte_t* value,
size_t value_size) {
return collection->append(cass::CassCustom(cass::StringRef(class_name),
value, value_size));
}

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) {
return collection->append(cass::CassCustom(cass::StringRef(class_name, class_name_length),
value, value_size));
}

} // extern "C"
Expand Down
1 change: 1 addition & 0 deletions src/collection.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ class Collection : public RefCounted<Collection> {
APPEND_TYPE(cass_bool_t)
APPEND_TYPE(CassString)
APPEND_TYPE(CassBytes)
APPEND_TYPE(CassCustom)
APPEND_TYPE(CassUuid)
APPEND_TYPE(CassInet)
APPEND_TYPE(CassDecimal)
Expand Down
6 changes: 3 additions & 3 deletions src/data_type.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,15 +205,15 @@ CassError cass_data_type_set_keyspace_n(CassDataType* data_type,
return CASS_OK;
}

CassError cass_data_type_class_name(CassDataType* data_type,
CassError cass_data_type_class_name(const CassDataType* data_type,
const char** class_name,
size_t* class_name_length) {
if (!data_type->is_custom()) {
return CASS_ERROR_LIB_INVALID_VALUE_TYPE;
}

cass::CustomType* custom_type
= static_cast<cass::CustomType*>(data_type->from());
const cass::CustomType* custom_type
= static_cast<const cass::CustomType*>(data_type->from());

*class_name = custom_type->class_name().data();
*class_name_length = custom_type->class_name().size();
Expand Down
11 changes: 11 additions & 0 deletions src/data_type.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,8 @@ class DataType : public RefCounted<DataType> {

class CustomType : public DataType {
public:
typedef SharedRefPtr<const CustomType> ConstPtr;

CustomType()
: DataType(CASS_VALUE_TYPE_CUSTOM) { }

Expand Down Expand Up @@ -533,6 +535,15 @@ struct IsValidDataType<CassBytes> {
}
};

template<>
struct IsValidDataType<CassCustom> {
bool operator()(const CassCustom& custom, const DataType::ConstPtr& data_type) const {
if (!data_type->is_custom()) return false;
CustomType::ConstPtr custom_type(data_type);
return custom.class_name == custom_type->class_name();
}
};

template<>
struct IsValidDataType<CassUuid> {
bool operator()(CassUuid, const DataType::ConstPtr& data_type) const {
Expand Down
13 changes: 13 additions & 0 deletions src/encode.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,13 @@ inline Buffer encode_with_length(CassBytes value) {
return buf;
}

inline Buffer encode_with_length(CassCustom value) {
Buffer buf(sizeof(int32_t) + value.size);
size_t pos = buf.encode_int32(0, value.size);
buf.copy(pos, reinterpret_cast<const char*>(value.data), value.size);
return buf;
}

inline Buffer encode_with_length(CassUuid value) {
Buffer buf(sizeof(int32_t) + sizeof(CassUuid));
size_t pos = buf.encode_int32(0, sizeof(CassUuid));
Expand Down Expand Up @@ -186,6 +193,12 @@ inline Buffer encode(CassBytes value) {
return buf;
}

inline Buffer encode(CassCustom value) {
Buffer buf(value.size);
buf.copy(0, reinterpret_cast<const char*>(value.data), value.size);
return buf;
}

inline Buffer encode(CassUuid value) {
Buffer buf(sizeof(CassUuid));
buf.encode_uuid(0, value);
Expand Down
43 changes: 43 additions & 0 deletions src/statement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,49 @@ CassError cass_statement_bind_string_by_name_n(CassStatement* statement,
cass::CassString(value, strlen(value)));
}

CassError cass_statement_bind_custom(CassStatement* statement,
size_t index,
const char* class_name,
const cass_byte_t* value,
size_t value_size) {
return statement->set(index,
cass::CassCustom(cass::StringRef(class_name),
value, value_size));
}

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) {
return statement->set(index,
cass::CassCustom(cass::StringRef(class_name, class_name_length),
value, value_size));
}

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) {
return statement->set(cass::StringRef(name),
cass::CassCustom(cass::StringRef(class_name),
value, value_size));
}

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) {
return statement->set(cass::StringRef(name, name_length),
cass::CassCustom(cass::StringRef(class_name, class_name_length),
value, value_size));
}

} // extern "C"

namespace cass {
Expand Down
27 changes: 23 additions & 4 deletions src/tuple.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,16 +78,35 @@ CASS_TUPLE_SET(decimal,
CassError cass_tuple_set_string(CassTuple* tuple,
size_t index,
const char* value) {
tuple->set(index, cass::CassString(value, strlen(value)));
return CASS_OK;
return tuple->set(index, cass::CassString(value, strlen(value)));
}

CassError cass_tuple_set_string_n(CassTuple* tuple,
size_t index,
const char* value,
size_t value_length) {
tuple->set(index, cass::CassString(value, value_length));
return CASS_OK;
return tuple->set(index, cass::CassString(value, value_length));
}

CassError cass_tuple_set_custom(CassTuple* tuple,
size_t index,
const char* class_name,
const cass_byte_t* value,
size_t value_size) {
return tuple->set(index,
cass::CassCustom(cass::StringRef(class_name),
value, value_size));
}

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) {
return tuple->set(index,
cass::CassCustom(cass::StringRef(class_name, class_name_length),
value, value_size));
}

} // extern "C"
Expand Down
1 change: 1 addition & 0 deletions src/tuple.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ class Tuple {
SET_TYPE(cass_bool_t)
SET_TYPE(CassString)
SET_TYPE(CassBytes)
SET_TYPE(CassCustom)
SET_TYPE(CassUuid)
SET_TYPE(CassInet)
SET_TYPE(CassDecimal)
Expand Down
11 changes: 11 additions & 0 deletions src/types.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#define __CASS_TYPES_HPP_INCLUDED__

#include "cassandra.h"
#include "string_ref.hpp"

namespace cass {

Expand All @@ -32,6 +33,16 @@ struct CassBytes {
size_t size;
};

struct CassCustom {
CassCustom(StringRef class_name,
const cass_byte_t* data, size_t size)
: class_name(class_name)
, data(data), size(size) { }
StringRef class_name;
const cass_byte_t* data;
size_t size;
};

struct CassString {
CassString(const char* data, size_t length)
: data(data), length(length) { }
Expand Down
43 changes: 43 additions & 0 deletions src/user_type_value.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,4 +109,47 @@ CassError cass_user_type_set_string_by_name_n(CassUserType* user_type,
cass::CassString(value, value_length));
}

CassError cass_user_type_set_custom(CassUserType* user_type,
size_t index,
const char* class_name,
const cass_byte_t* value,
size_t value_size) {
return user_type->set(index,
cass::CassCustom(cass::StringRef(class_name),
value, value_size));
}

CassError cass_user_type_set_custom_n(CassUserType* user_type,
size_t index,
const char* class_name,
size_t class_name_length,
const cass_byte_t* value,
size_t value_size) {
return user_type->set(index,
cass::CassCustom(cass::StringRef(class_name, class_name_length),
value, value_size));
}

CassError cass_user_type_set_custom_by_name(CassUserType* user_type,
const char* name,
const char* class_name,
const cass_byte_t* value,
size_t value_size) {
return user_type->set(cass::StringRef(name),
cass::CassCustom(cass::StringRef(class_name),
value, value_size));
}

CassError cass_user_type_set_custom_by_name_n(CassUserType* user_type,
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) {
return user_type->set(cass::StringRef(name, name_length),
cass::CassCustom(cass::StringRef(class_name, class_name_length),
value, value_size));
}

} // extern "C"