diff --git a/js/server/modules/org/arangodb/cluster.js b/js/server/modules/org/arangodb/cluster.js index fd7bedde93..44acbf6781 100644 --- a/js/server/modules/org/arangodb/cluster.js +++ b/js/server/modules/org/arangodb/cluster.js @@ -30,7 +30,6 @@ var console = require("console"); var arangodb = require("org/arangodb"); -var db = arangodb.db; var ArangoCollection = arangodb.ArangoCollection; //////////////////////////////////////////////////////////////////////////////// @@ -173,6 +172,7 @@ function writeLocked (lockInfo, cb, args) { function getLocalDatabases () { var result = { }; + var db = require("internal").db; db._listDatabases().forEach(function (database) { result[database] = { name: database }; @@ -187,6 +187,7 @@ function getLocalDatabases () { function getLocalCollections () { var result = { }; + var db = require("internal").db; db._collections().forEach(function (collection) { var name = collection.name(); @@ -226,6 +227,7 @@ function createLocalDatabases (plannedDatabases) { payload); }; + var db = require("internal").db; db._useDatabase("_system"); var localDatabases = getLocalDatabases(); @@ -282,6 +284,7 @@ function dropLocalDatabases (plannedDatabases) { } }; + var db = require("internal").db; db._useDatabase("_system"); var localDatabases = getLocalDatabases(); @@ -320,6 +323,7 @@ function cleanupCurrentDatabases () { } }; + var db = require("internal").db; db._useDatabase("_system"); var all = ArangoAgency.get("Current/Databases", true); @@ -370,6 +374,7 @@ function createLocalCollections (plannedCollections) { payload); }; + var db = require("internal").db; db._useDatabase("_system"); var localDatabases = getLocalDatabases(); var database; @@ -529,6 +534,7 @@ function dropLocalCollections (plannedCollections) { } }; + var db = require("internal").db; db._useDatabase("_system"); var shardMap = getShardMap(plannedCollections); @@ -599,6 +605,7 @@ function cleanupCurrentCollections (plannedCollections) { } }; + var db = require("internal").db; db._useDatabase("_system"); var all = ArangoAgency.get("Current/Collections", true); diff --git a/js/server/modules/org/arangodb/simple-query.js b/js/server/modules/org/arangodb/simple-query.js index 20b7f5d5e4..8b39e695fc 100644 --- a/js/server/modules/org/arangodb/simple-query.js +++ b/js/server/modules/org/arangodb/simple-query.js @@ -30,7 +30,6 @@ var internal = require("internal"); var console = require("console"); -var cluster = require("org/arangodb/cluster"); var ArangoError = require("org/arangodb").ArangoError; @@ -70,7 +69,8 @@ SimpleQueryAll.prototype.execute = function () { } var documents; - + var cluster = require("org/arangodb/cluster"); + if (cluster.isCoordinator()) { var dbName = require("internal").db._name(); var shards = cluster.shardList(dbName, this._collection.name()); @@ -93,13 +93,40 @@ SimpleQueryAll.prototype.execute = function () { var _documents = [ ], total = 0; var result = cluster.wait(coord, shards); + var toSkip = this._skip, toLimit = this._limit; + result.forEach(function(part) { var body = JSON.parse(part.body); - _documents = _documents.concat(body.result); total += body.total; + + if (toSkip > 0) { + if (toSkip >= body.result.length) { + toSkip -= body.result.length; + return; + } + + body.result = body.result.slice(toSkip); + toSkip = 0; + } + + if (toLimit !== null && toLimit !== undefined) { + if (body.result.length >= toLimit) { + body.result = body.result.slice(0, toLimit); + toLimit = 0; + } + else { + toLimit -= body.result.length; + } + } + + _documents = _documents.concat(body.result); }); - documents = { documents: _documents, count: _documents.length, total: total }; + documents = { + documents: _documents, + count: _documents.length, + total: total + }; } else { documents = this._collection.ALL(this._skip, this._limit);