1
0
Fork 0

fixed cursors for use in multi-database env

This commit is contained in:
Jan Steemann 2013-09-17 09:23:05 +02:00
parent d91022235e
commit aec7b1f8e8
3 changed files with 109 additions and 2 deletions

View File

@ -52,6 +52,7 @@ var arangosh = require("org/arangodb/arangosh");
function ArangoQueryCursor (database, data) {
this._database = database;
this._dbName = database._name();
this.data = data;
this._hasNext = false;
this._hasMore = false;
@ -265,7 +266,8 @@ ArangoQueryCursor.prototype.getExtra = function (name) {
////////////////////////////////////////////////////////////////////////////////
ArangoQueryCursor.prototype._baseurl = function () {
return "/_api/cursor/"+ encodeURIComponent(this.data.id);
return "/_db/" + encodeURIComponent(this._dbName) +
"/_api/cursor/" + encodeURIComponent(this.data.id);
};
////////////////////////////////////////////////////////////////////////////////

View File

@ -51,6 +51,7 @@ var arangosh = require("org/arangodb/arangosh");
function ArangoQueryCursor (database, data) {
this._database = database;
this._dbName = database._name();
this.data = data;
this._hasNext = false;
this._hasMore = false;
@ -264,7 +265,8 @@ ArangoQueryCursor.prototype.getExtra = function (name) {
////////////////////////////////////////////////////////////////////////////////
ArangoQueryCursor.prototype._baseurl = function () {
return "/_api/cursor/"+ encodeURIComponent(this.data.id);
return "/_db/" + encodeURIComponent(this._dbName) +
"/_api/cursor/" + encodeURIComponent(this.data.id);
};
////////////////////////////////////////////////////////////////////////////////

View File

@ -33,6 +33,7 @@ var jsunity = require("jsunity");
var arangodb = require("org/arangodb");
var ArangoStatement = require("org/arangodb/arango-statement").ArangoStatement;
var db = arangodb.db;
var ERRORS = arangodb.errors;
// -----------------------------------------------------------------------------
// --SECTION-- statement-related tests
@ -50,6 +51,7 @@ function StatementSuite () {
////////////////////////////////////////////////////////////////////////////////
setUp : function () {
db._useDatabase("_system");
},
////////////////////////////////////////////////////////////////////////////////
@ -57,6 +59,12 @@ function StatementSuite () {
////////////////////////////////////////////////////////////////////////////////
tearDown : function () {
try {
db._dropDatabase("UnitTestsDatabase0");
}
catch (err) {
// ignore this error
}
},
////////////////////////////////////////////////////////////////////////////////
@ -473,6 +481,101 @@ function StatementSuite () {
st.setOptions({ baz: true });
assertEqual({ baz: true }, st.getOptions());
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test incremental fetch
////////////////////////////////////////////////////////////////////////////////
testIncremental : function () {
var st = new ArangoStatement(db, { query : "for i in 1..10 return i", batchSize : 1 });
var c = st.execute();
var result = [ ];
while (c.hasNext()) {
result.push(c.next());
}
assertEqual([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], result);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test dispose
////////////////////////////////////////////////////////////////////////////////
testDispose1 : function () {
var st = new ArangoStatement(db, { query : "for i in 1..10 return i", batchSize : 1 });
var c = st.execute();
c.dispose();
try {
// cursor does not exist anymore
c.next();
}
catch (err) {
require("internal").print(err);
assertEqual(ERRORS.ERROR_ARANGO_DATABASE_NAME_INVALID.code, err.errorNum);
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test dispose
////////////////////////////////////////////////////////////////////////////////
testDispose2 : function () {
var st = new ArangoStatement(db, { query : "for i in 1..10 return i", batchSize : 1 });
var c = st.execute();
while (c.hasNext()) {
c.next();
}
// this should have auto-disposed the cursor
try {
c.dispose();
}
catch (err) {
require("internal").print(err);
assertEqual(ERRORS.ERROR_ARANGO_DATABASE_NAME_INVALID.code, err.errorNum);
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test database change
////////////////////////////////////////////////////////////////////////////////
testDatabaseChange : function () {
assertEqual("_system", db._name());
var st = new ArangoStatement(db, { query : "for i in 1..10 return i", batchSize : 1 });
var c = st.execute();
var result = [ ];
try {
db._dropDatabase("UnitTestsDatabase0");
}
catch (err) {
}
db._createDatabase("UnitTestsDatabase0");
db._useDatabase("UnitTestsDatabase0");
// now we have changed the database and should still be able to use the cursor from the
// other...
while (c.hasNext()) {
result.push(c.next());
}
assertEqual([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ], result);
db._useDatabase("_system");
db._dropDatabase("UnitTestsDatabase0");
}
};