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