1
0
Fork 0

Fixed a bug with AQL EDGES() function. It did not include the correct

end of the edge when using inbound or outbound in combination with
includeVertices. Reported at
https://groups.google.com/forum/#!topic/arangodb/6yIpzLHprrk
This commit is contained in:
Michael Hackstein 2015-09-22 11:46:11 +02:00
parent 06dbf2c4f9
commit aa1242b67c
2 changed files with 121 additions and 5 deletions

View File

@ -7222,7 +7222,7 @@ function AQL_EDGES (edgeCollection,
if (options && options.includeVertices) { if (options && options.includeVertices) {
for (let i = 0; i < result.length; ++i) { for (let i = 0; i < result.length; ++i) {
try { try {
result[i] = { edge: CLONE(result[i]), vertex: DOCUMENT_HANDLE(result[i]._from) }; result[i] = { edge: CLONE(result[i]), vertex: DOCUMENT_HANDLE(result[i]._to) };
} }
catch (err) { catch (err) {
} }
@ -7234,7 +7234,7 @@ function AQL_EDGES (edgeCollection,
if (options && options.includeVertices) { if (options && options.includeVertices) {
for (let i = 0; i < result.length; ++i) { for (let i = 0; i < result.length; ++i) {
try { try {
result[i] = { edge: CLONE(result[i]), vertex: DOCUMENT_HANDLE(result[i]._to) }; result[i] = { edge: CLONE(result[i]), vertex: DOCUMENT_HANDLE(result[i]._from) };
} }
catch (err) { catch (err) {
} }

View File

@ -27,7 +27,6 @@
/// @author Jan Steemann /// @author Jan Steemann
/// @author Copyright 2012, triAGENS GmbH, Cologne, Germany /// @author Copyright 2012, triAGENS GmbH, Cologne, Germany
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
var jsunity = require("jsunity"); var jsunity = require("jsunity");
var db = require("org/arangodb").db; var db = require("org/arangodb").db;
var internal = require("internal"); var internal = require("internal");
@ -173,7 +172,125 @@ function ahuacatlQueryEdgesTestSuite () {
assertEqual(actual, [ ]); assertEqual(actual, [ ]);
assertQueryError(errors.ERROR_ARANGO_COLLECTION_NOT_FOUND.code, "FOR e IN EDGES(UnitTestsAhuacatlEdge, 'thefox/thefox', 'outbound') SORT e.what RETURN e.what"); assertQueryError(errors.ERROR_ARANGO_COLLECTION_NOT_FOUND.code, "FOR e IN EDGES(UnitTestsAhuacatlEdge, 'thefox/thefox', 'outbound') SORT e.what RETURN e.what");
} },
////////////////////////////////////////////////////////////////////////////////
/// @brief checks EDGES() with includeVertices
////////////////////////////////////////////////////////////////////////////////
testEdgesAnyInclVertices : function () {
"use strict";
let actual;
const query = "FOR e IN EDGES(@@col, @start, @dir, null, {includeVertices: true}) SORT e.edge.what RETURN e.vertex._key";
let bindVars = {
"@col": "UnitTestsAhuacatlEdge",
"dir": "any"
};
bindVars.start = "UnitTestsAhuacatlVertex/v1";
actual = getQueryResults(query, bindVars);
assertEqual(actual, ["v2", "v3"]);
bindVars.start = "UnitTestsAhuacatlVertex/v2";
actual = getQueryResults(query, bindVars);
assertEqual(actual, ["v1", "v3", "v4"]);
bindVars.start = "UnitTestsAhuacatlVertex/v3";
actual = getQueryResults(query, bindVars);
assertEqual(actual, ["v1", "v2", "v4", "v6", "v7", "v6", "v7"]);
bindVars.start = "UnitTestsAhuacatlVertex/v8";
actual = getQueryResults(query, bindVars);
assertEqual(actual, [ ]);
bindVars.start = "UnitTestsAhuacatlVertex/thefox";
actual = getQueryResults(query, bindVars);
assertEqual(actual, [ ]);
bindVars.start = "thefox/thefox";
assertQueryError(errors.ERROR_ARANGO_COLLECTION_NOT_FOUND.code, query, bindVars);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief checks EDGES() with includeVertices
////////////////////////////////////////////////////////////////////////////////
testEdgesInInclVertices : function () {
"use strict";
let actual;
const query = "FOR e IN EDGES(@@col, @start, @dir, null, {includeVertices: true}) SORT e.edge.what RETURN e.vertex._key";
let bindVars = {
"@col": "UnitTestsAhuacatlEdge",
"dir": "inbound"
};
bindVars.start = "UnitTestsAhuacatlVertex/v1";
actual = getQueryResults(query, bindVars);
assertEqual(actual, []);
bindVars.start = "UnitTestsAhuacatlVertex/v2";
actual = getQueryResults(query, bindVars);
assertEqual(actual, ["v1", "v4"]);
bindVars.start = "UnitTestsAhuacatlVertex/v3";
actual = getQueryResults(query, bindVars);
assertEqual(actual, ["v1", "v2", "v6", "v7"]);
bindVars.start = "UnitTestsAhuacatlVertex/v8";
actual = getQueryResults(query, bindVars);
assertEqual(actual, [ ]);
bindVars.start = "UnitTestsAhuacatlVertex/thefox";
actual = getQueryResults(query, bindVars);
assertEqual(actual, [ ]);
bindVars.start = "thefox/thefox";
assertQueryError(errors.ERROR_ARANGO_COLLECTION_NOT_FOUND.code, query, bindVars);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief checks EDGES() with includeVertices
////////////////////////////////////////////////////////////////////////////////
testEdgesOutInclVertices : function () {
"use strict";
let actual;
const query = "FOR e IN EDGES(@@col, @start, @dir, null, {includeVertices: true}) SORT e.edge.what RETURN e.vertex._key";
let bindVars = {
"@col": "UnitTestsAhuacatlEdge",
"dir": "outbound"
};
bindVars.start = "UnitTestsAhuacatlVertex/v1";
actual = getQueryResults(query, bindVars);
assertEqual(actual, ["v2", "v3"]);
bindVars.start = "UnitTestsAhuacatlVertex/v2";
actual = getQueryResults(query, bindVars);
assertEqual(actual, ["v3"]);
bindVars.start = "UnitTestsAhuacatlVertex/v3";
actual = getQueryResults(query, bindVars);
assertEqual(actual, ["v4", "v6", "v7"]);
bindVars.start = "UnitTestsAhuacatlVertex/v8";
actual = getQueryResults(query, bindVars);
assertEqual(actual, [ ]);
bindVars.start = "UnitTestsAhuacatlVertex/v5";
actual = getQueryResults(query, bindVars);
assertEqual(actual, [ ]);
bindVars.start = "UnitTestsAhuacatlVertex/thefox";
actual = getQueryResults(query, bindVars);
assertEqual(actual, [ ]);
bindVars.start = "thefox/thefox";
assertQueryError(errors.ERROR_ARANGO_COLLECTION_NOT_FOUND.code, query, bindVars);
},
}; };
} }
@ -1941,7 +2058,6 @@ if (internal.debugCanUseFailAt() && ! cluster.isCluster()) {
jsunity.run(ahuacatlQueryNeighborsErrorsSuite); jsunity.run(ahuacatlQueryNeighborsErrorsSuite);
jsunity.run(ahuacatlQueryShortestpathErrorsSuite); jsunity.run(ahuacatlQueryShortestpathErrorsSuite);
} }
return jsunity.done(); return jsunity.done();
// Local Variables: // Local Variables: