mirror of https://gitee.com/bigwinds/arangodb
fixed cursors for use in multi-database env
This commit is contained in:
parent
d91022235e
commit
aec7b1f8e8
|
@ -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);
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue