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
3 changes: 3 additions & 0 deletions include/cql/cql_execute.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ class CQL_EXPORT cql_execute_t :
void
push_back(const bool val);

void
push_back_null();

void
pop_back();

Expand Down
5 changes: 4 additions & 1 deletion include/cql/internal/cql_message_execute_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ class cql_message_execute_impl_t :
void
push_back(const bool val);

void
push_back_null();

void
pop_back();

Expand Down Expand Up @@ -130,7 +133,7 @@ class cql_message_execute_impl_t :
set_stream(const cql_stream_t& stream);

private:
typedef std::list<param_t> params_container_t;
typedef std::list< boost::shared_ptr<param_t> > params_container_t;

cql::cql_message_buffer_t _buffer;
std::vector<cql::cql_byte_t> _query_id;
Expand Down
5 changes: 5 additions & 0 deletions src/cql/cql_execute.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,11 @@ cql::cql_execute_t::push_back(const bool val) {
_impl->push_back(val);
}

void
cql::cql_execute_t::push_back_null() {
_impl->push_back_null();
}

void
cql::cql_execute_t::pop_back() {
_impl->pop_back();
Expand Down
57 changes: 37 additions & 20 deletions src/cql/internal/cql_message_execute_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,53 +84,61 @@ cql::cql_message_execute_impl_t::consistency(const cql::cql_consistency_enum con

void
cql::cql_message_execute_impl_t::push_back(const param_t& val) {
_params.push_back(param_t(val.begin(), val.end()));
boost::shared_ptr<param_t> p(new param_t(val.begin(), val.end()));
_params.push_back(p);
}

void
cql::cql_message_execute_impl_t::push_back(const std::string& val) {
_params.push_back(param_t(val.begin(), val.end()));
boost::shared_ptr<param_t> p(new param_t(val.begin(), val.end()));
_params.push_back(p);
}

void
cql::cql_message_execute_impl_t::push_back(const cql::cql_short_t val) {
cql::cql_message_execute_impl_t::param_t p;
cql::encode_short(p, val);
boost::shared_ptr<param_t> p(new param_t);
cql::encode_short(*p, val);
_params.push_back(p);
}

void
cql::cql_message_execute_impl_t::push_back(const cql::cql_int_t val) {
cql::cql_message_execute_impl_t::param_t p;
cql::encode_int(p, val);
boost::shared_ptr<param_t> p(new param_t);
cql::encode_int(*p, val);
_params.push_back(p);
}

void
cql::cql_message_execute_impl_t::push_back(const cql::cql_bigint_t val) {
cql::cql_message_execute_impl_t::param_t p;
cql::encode_bigint(p, val);
boost::shared_ptr<param_t> p(new param_t);
cql::encode_bigint(*p, val);
_params.push_back(p);
}

void
cql::cql_message_execute_impl_t::push_back(const float val) {
cql::cql_message_execute_impl_t::param_t p;
cql::encode_float(p, val);
boost::shared_ptr<param_t> p(new param_t);
cql::encode_float(*p, val);
_params.push_back(p);
}

void
cql::cql_message_execute_impl_t::push_back(const double val) {
cql::cql_message_execute_impl_t::param_t p;
cql::encode_double(p, val);
boost::shared_ptr<param_t> p(new param_t);
cql::encode_double(*p, val);
_params.push_back(p);
}

void
cql::cql_message_execute_impl_t::push_back(const bool val) {
cql::cql_message_execute_impl_t::param_t p;
cql::encode_bool(p, val);
boost::shared_ptr<param_t> p(new param_t);
cql::encode_bool(*p, val);
_params.push_back(p);
}

void
cql::cql_message_execute_impl_t::push_back_null() {
boost::shared_ptr<param_t> p;
_params.push_back(p);
}

Expand Down Expand Up @@ -186,8 +194,8 @@ cql::cql_message_execute_impl_t::consume(cql::cql_error_t*) {
cql::decode_short(stream, count);

for (int i = 0; i < count; ++i) {
cql::cql_message_execute_impl_t::param_t p;
cql::decode_bytes(stream, p);
boost::shared_ptr<param_t> p(new param_t);
cql::decode_bytes(stream, *p);
_params.push_back(p);
}

Expand Down Expand Up @@ -235,8 +243,12 @@ cql::cql_message_execute_impl_t::consume(cql::cql_error_t*) {
bool
cql::cql_message_execute_impl_t::prepare(cql::cql_error_t*) {
size_t size = (3 * sizeof(cql_short_t)) + _query_id.size();
BOOST_FOREACH(const param_t& p, _params) {
size += p.size() + sizeof(cql_int_t);
BOOST_FOREACH(const boost::shared_ptr<param_t> p, _params) {
if (p != NULL) {
size += p->size() + sizeof(cql_int_t);
} else {
size += sizeof(cql_int_t);
}
}
_buffer->resize(size);

Expand All @@ -246,8 +258,13 @@ cql::cql_message_execute_impl_t::prepare(cql::cql_error_t*) {
cql::encode_short_bytes(stream, _query_id);
cql::encode_short(stream, _params.size());

BOOST_FOREACH(const param_t& p, _params) {
cql::encode_bytes(stream, p);
BOOST_FOREACH(const boost::shared_ptr<param_t> p, _params) {
if (p != NULL) {
cql::encode_bytes(stream, *p);
} else {
cql::cql_int_t v = htonl(-1);
stream.write(reinterpret_cast<char*>(&v), sizeof(v));
}
}

cql::cql_short_t consistency = 0;
Expand Down