blob: 7074d94b4144ffe3eb0afcd8e0d02b0ff2ad6c6c [file]
/*
Copyright (c) 2014 DataStax
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 "types.hpp"
#include "statement.hpp"
#include "query_request.hpp"
#include "third_party/boost/boost/cstdint.hpp"
extern "C" {
CassStatement* cass_statement_new(CassString statement, size_t parameter_count) {
cass::Statement* query = new cass::QueryRequest(parameter_count);
query->retain();
query->set_query(statement.data, statement.length);
return CassStatement::to(query);
}
void cass_statement_free(CassStatement* statement) {
statement->release();
}
CassError cass_statement_set_consistency(CassStatement* statement,
CassConsistency consistency) {
statement->set_consistency(consistency);
return CASS_OK;
}
CassError cass_statement_set_serial_consistency(CassStatement* statement,
CassConsistency serial_consistency) {
statement->set_serial_consistency(serial_consistency);
return CASS_OK;
}
CassError cass_statement_set_paging_size(CassStatement* statement,
int page_size) {
statement->set_page_size(page_size);
return CASS_OK;
}
CassError cass_statement_set_paging_state(CassStatement* statement,
const CassResult* result) {
statement->set_paging_state(result->paging_state());
return CASS_OK;
}
CassError cass_statement_bind_null(CassStatement* statement,
cass_size_t index) {
return statement->bind_null(index);
}
CassError cass_statement_bind_int32(CassStatement* statement, size_t index,
int32_t value) {
return statement->bind_int32(index, value);
}
CassError cass_statement_bind_int64(CassStatement* statement, size_t index,
int64_t value) {
return statement->bind_int64(index, value);
}
CassError cass_statement_bind_float(CassStatement* statement, size_t index,
float value) {
return statement->bind_float(index, value);
}
CassError cass_statement_bind_double(CassStatement* statement, size_t index,
double value) {
return statement->bind_double(index, value);
}
CassError cass_statement_bind_bool(CassStatement* statement, size_t index,
cass_bool_t value) {
return statement->bind_byte(index, value == cass_true);
}
CassError cass_statement_bind_string(CassStatement* statement, size_t index,
CassString value) {
return statement->bind(index, value.data, value.length);
}
CassError cass_statement_bind_bytes(CassStatement* statement, size_t index,
CassBytes value) {
return statement->bind(index, value.data, value.size);
}
CassError cass_statement_bind_uuid(CassStatement* statement, size_t index,
const CassUuid value) {
return statement->bind(index, value);
}
CassError cass_statement_bind_inet(CassStatement* statement, size_t index,
CassInet value) {
return statement->bind(index, value.address, value.address_length);
}
CassError cass_statement_bind_decimal(CassStatement* statement,
cass_size_t index, CassDecimal value) {
return statement->bind(index, value.scale, value.varint.data,
value.varint.size);
}
CassError cass_statement_bind_collection(CassStatement* statement, size_t index,
const CassCollection* collection) {
return statement->bind(index, collection->from());
}
CassError cass_statement_bind_custom(CassStatement* statement,
cass_size_t index, cass_size_t size,
cass_byte_t** output) {
return statement->bind(index, size, output);
}
} // extern "C"
namespace cass {
int32_t Statement::encode_values(int version, BufferVec* bufs) const {
int32_t values_size = 0;
for (ValueVec::const_iterator it = values_.begin(), end = values_.end();
it != end; ++it) {
if (it->is_empty()) {
Buffer buf(sizeof(int32_t));
buf.encode_int32(0, -1); // [bytes] "null"
bufs->push_back(buf);
values_size += sizeof(int32_t);
} else if (it->is_collection()) {
values_size += it->collection()->encode(version, bufs);
} else {
bufs->push_back(*it);
values_size += it->size();
}
}
return values_size;
}
} // namespace cass