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; }
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 }