Пример #1
0
Future* Session::prepare(const char* statement, size_t length) {
  PrepareRequest* prepare = new PrepareRequest();
  prepare->set_query(statement, length);

  ResponseFuture* future = new ResponseFuture(metadata_);
  future->inc_ref(); // External reference
  future->statement.assign(statement, length);

  RequestHandler* request_handler = new RequestHandler(prepare, future, NULL);
  request_handler->inc_ref(); // IOWorker reference

  execute(request_handler);

  return future;
}
Пример #2
0
bool PrepareHandler::init(const std::string& prepared_id) {
  PrepareRequest* prepare =
      static_cast<PrepareRequest*>(new PrepareRequest());
  request_.reset(prepare);
  if (request_handler_->request()->opcode() == CQL_OPCODE_EXECUTE) {
    const ExecuteRequest* execute = static_cast<const ExecuteRequest*>(
        request_handler_->request());
    prepare->set_query(execute->prepared()->statement());
    return true;
  } else if (request_handler_->request()->opcode() == CQL_OPCODE_BATCH) {
    const BatchRequest* batch = static_cast<const BatchRequest*>(
        request_handler_->request());
    std::string prepared_statement;
    if (batch->prepared_statement(prepared_id, &prepared_statement)) {
      prepare->set_query(prepared_statement);
      return true;
    }
  }
  return false; // Invalid request type
}