1
0
Fork 0

fix toArray()

This commit is contained in:
jsteemann 2017-03-30 17:02:54 +02:00
parent 8e9aaa2b51
commit 704c746c0d
5 changed files with 25 additions and 10 deletions

View File

@ -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());

View File

@ -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();
}

View File

@ -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() {

View File

@ -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.

View File

@ -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());