mirror of https://gitee.com/bigwinds/arangodb
fix toArray()
This commit is contained in:
parent
8e9aaa2b51
commit
704c746c0d
|
@ -757,6 +757,7 @@ int RocksDBCollection::insertDocument(arangodb::transaction::Methods* trx,
|
|||
bool& waitForSync) {
|
||||
// Coordinator doesn't know index internals
|
||||
TRI_ASSERT(!ServerState::instance()->isCoordinator());
|
||||
TRI_ASSERT(trx->state()->isRunning());
|
||||
|
||||
RocksDBKey key(RocksDBKey::Document(_objectId, revisionId));
|
||||
RocksDBValue value(RocksDBValue::Document(doc));
|
||||
|
@ -817,6 +818,7 @@ int RocksDBCollection::removeDocument(arangodb::transaction::Methods* trx,
|
|||
bool& waitForSync) {
|
||||
// Coordinator doesn't know index internals
|
||||
TRI_ASSERT(!ServerState::instance()->isCoordinator());
|
||||
TRI_ASSERT(trx->state()->isRunning());
|
||||
|
||||
auto key = RocksDBKey::Document(_objectId, revisionId);
|
||||
|
||||
|
@ -882,6 +884,7 @@ int RocksDBCollection::updateDocument(transaction::Methods* trx,
|
|||
VPackSlice const& newDoc,
|
||||
bool& waitForSync) {
|
||||
// Coordinator doesn't know index internals
|
||||
TRI_ASSERT(trx->state()->isRunning());
|
||||
TRI_ASSERT(!ServerState::instance()->isCoordinator());
|
||||
|
||||
rocksdb::Transaction* rtrx = rocksTransaction(trx);
|
||||
|
@ -920,6 +923,8 @@ Result RocksDBCollection::lookupDocumentToken(transaction::Methods* trx,
|
|||
arangodb::Result RocksDBCollection::lookupRevisionVPack(
|
||||
TRI_voc_rid_t revisionId, transaction::Methods* trx,
|
||||
arangodb::ManagedDocumentResult& mdr) {
|
||||
TRI_ASSERT(trx->state()->isRunning());
|
||||
|
||||
auto key = RocksDBKey::Document(_objectId, revisionId);
|
||||
std::string value;
|
||||
TRI_ASSERT(value.data());
|
||||
|
|
|
@ -88,6 +88,7 @@ class RocksDBTransactionState final : public TransactionState {
|
|||
int addOperation(TRI_voc_rid_t, RocksDBDocumentOperation&, RocksDBWalMarker const* marker, bool&);
|
||||
|
||||
rocksdb::Transaction* rocksTransaction() {
|
||||
TRI_ASSERT(_rocksTransaction != nullptr);
|
||||
return _rocksTransaction.get();
|
||||
}
|
||||
|
||||
|
|
|
@ -68,6 +68,7 @@ class TransactionState {
|
|||
TRI_vocbase_t* vocbase() const { return _vocbase; }
|
||||
TRI_voc_tid_t id() const { return _id; }
|
||||
transaction::Status status() const { return _status; }
|
||||
bool isRunning() const { return _status == transaction::Status::RUNNING; }
|
||||
|
||||
int increaseNesting() { return ++_nestingLevel; }
|
||||
int decreaseNesting() {
|
||||
|
|
|
@ -104,6 +104,15 @@ struct OperationCursor {
|
|||
bool getMore(
|
||||
std::function<void(DocumentIdentifierToken const& token)> const& callback,
|
||||
uint64_t batchSize);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief convenience function to retrieve all results
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void getAll(
|
||||
std::function<void(DocumentIdentifierToken const& token)> const& callback) {
|
||||
while (getMore(callback, 1000)) {}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Skip the next toSkip many elements.
|
||||
|
|
|
@ -234,16 +234,11 @@ static void JS_AllQuery(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
|||
}
|
||||
|
||||
OperationResult countResult = trx.count(collectionName, true);
|
||||
res = trx.finish(countResult.code);
|
||||
|
||||
if (countResult.failed()) {
|
||||
TRI_V8_THROW_EXCEPTION(countResult.code);
|
||||
}
|
||||
|
||||
if (res != TRI_ERROR_NO_ERROR) {
|
||||
TRI_V8_THROW_EXCEPTION(res);
|
||||
}
|
||||
|
||||
VPackSlice count = countResult.slice();
|
||||
TRI_ASSERT(count.isNumber());
|
||||
|
||||
|
@ -259,15 +254,19 @@ static void JS_AllQuery(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
|||
ManagedDocumentResult mmdr;
|
||||
VPackBuilder resultBuilder;
|
||||
resultBuilder.openArray();
|
||||
auto cb = [&resultBuilder, &mmdr, &trx, &collection](DocumentIdentifierToken const& tkn) {
|
||||
|
||||
opCursor->getAll([&resultBuilder, &mmdr, &trx, &collection](DocumentIdentifierToken const& tkn) {
|
||||
if (collection->readDocument(&trx, tkn, mmdr)) {
|
||||
resultBuilder.add(VPackSlice(mmdr.vpack()));
|
||||
}
|
||||
};
|
||||
while (opCursor->getMore(cb, 1000)) {
|
||||
// Noop all done in cb
|
||||
}
|
||||
});
|
||||
|
||||
resultBuilder.close();
|
||||
|
||||
res = trx.finish(countResult.code);
|
||||
if (res != TRI_ERROR_NO_ERROR) {
|
||||
TRI_V8_THROW_EXCEPTION(res);
|
||||
}
|
||||
|
||||
VPackSlice docs = resultBuilder.slice();
|
||||
TRI_ASSERT(docs.isArray());
|
||||
|
|
Loading…
Reference in New Issue