2023-02-08 11:04:11 +00:00
|
|
|
//
|
|
|
|
// Cursor.cpp
|
|
|
|
//
|
|
|
|
// Library: MongoDB
|
|
|
|
// Package: MongoDB
|
|
|
|
// Module: Cursor
|
|
|
|
//
|
|
|
|
// Copyright (c) 2012, Applied Informatics Software Engineering GmbH.
|
|
|
|
// and Contributors.
|
|
|
|
//
|
|
|
|
// SPDX-License-Identifier: BSL-1.0
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
#include "Poco/MongoDB/Cursor.h"
|
|
|
|
#include "Poco/MongoDB/GetMoreRequest.h"
|
|
|
|
#include "Poco/MongoDB/KillCursorsRequest.h"
|
|
|
|
|
|
|
|
|
|
|
|
namespace Poco {
|
|
|
|
namespace MongoDB {
|
|
|
|
|
|
|
|
|
|
|
|
Cursor::Cursor(const std::string& db, const std::string& collection, QueryRequest::Flags flags):
|
|
|
|
_query(db + '.' + collection, flags)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Cursor::Cursor(const std::string& fullCollectionName, QueryRequest::Flags flags):
|
|
|
|
_query(fullCollectionName, flags)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2023-05-22 02:02:09 +00:00
|
|
|
Cursor::Cursor(const Document& aggregationResponse) :
|
|
|
|
_query(aggregationResponse.get<Poco::MongoDB::Document::Ptr>("cursor")->get<std::string>("ns")),
|
|
|
|
_response(aggregationResponse.get<Poco::MongoDB::Document::Ptr>("cursor")->get<Int64>("id"))
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2023-02-08 11:04:11 +00:00
|
|
|
Cursor::~Cursor()
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
poco_assert_dbg(!_response.cursorID());
|
|
|
|
}
|
|
|
|
catch (...)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ResponseMessage& Cursor::next(Connection& connection)
|
|
|
|
{
|
|
|
|
if (_response.cursorID() == 0)
|
|
|
|
{
|
|
|
|
connection.sendRequest(_query, _response);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
Poco::MongoDB::GetMoreRequest getMore(_query.fullCollectionName(), _response.cursorID());
|
|
|
|
getMore.setNumberToReturn(_query.getNumberToReturn());
|
|
|
|
_response.clear();
|
|
|
|
connection.sendRequest(getMore, _response);
|
|
|
|
}
|
|
|
|
return _response;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Cursor::kill(Connection& connection)
|
|
|
|
{
|
|
|
|
if (_response.cursorID() != 0)
|
|
|
|
{
|
|
|
|
KillCursorsRequest killRequest;
|
|
|
|
killRequest.cursors().push_back(_response.cursorID());
|
|
|
|
connection.sendRequest(killRequest);
|
|
|
|
}
|
|
|
|
_response.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
} } // Namespace Poco::MongoDB
|