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) {
|
function ArangoQueryCursor (database, data) {
|
||||||
this._database = database;
|
this._database = database;
|
||||||
|
this._dbName = database._name();
|
||||||
this.data = data;
|
this.data = data;
|
||||||
this._hasNext = false;
|
this._hasNext = false;
|
||||||
this._hasMore = false;
|
this._hasMore = false;
|
||||||
|
@ -265,7 +266,8 @@ ArangoQueryCursor.prototype.getExtra = function (name) {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
ArangoQueryCursor.prototype._baseurl = function () {
|
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) {
|
function ArangoQueryCursor (database, data) {
|
||||||
this._database = database;
|
this._database = database;
|
||||||
|
this._dbName = database._name();
|
||||||
this.data = data;
|
this.data = data;
|
||||||
this._hasNext = false;
|
this._hasNext = false;
|
||||||
this._hasMore = false;
|
this._hasMore = false;
|
||||||
|
@ -264,7 +265,8 @@ ArangoQueryCursor.prototype.getExtra = function (name) {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
ArangoQueryCursor.prototype._baseurl = function () {
|
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 arangodb = require("org/arangodb");
|
||||||
var ArangoStatement = require("org/arangodb/arango-statement").ArangoStatement;
|
var ArangoStatement = require("org/arangodb/arango-statement").ArangoStatement;
|
||||||
var db = arangodb.db;
|
var db = arangodb.db;
|
||||||
|
var ERRORS = arangodb.errors;
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// --SECTION-- statement-related tests
|
// --SECTION-- statement-related tests
|
||||||
|
@ -50,6 +51,7 @@ function StatementSuite () {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
setUp : function () {
|
setUp : function () {
|
||||||
|
db._useDatabase("_system");
|
||||||
},
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -57,6 +59,12 @@ function StatementSuite () {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
tearDown : function () {
|
tearDown : function () {
|
||||||
|
try {
|
||||||
|
db._dropDatabase("UnitTestsDatabase0");
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
// ignore this error
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -473,6 +481,101 @@ function StatementSuite () {
|
||||||
|
|
||||||
st.setOptions({ baz: true });
|
st.setOptions({ baz: true });
|
||||||
assertEqual({ baz: true }, st.getOptions());
|
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