1
0
Fork 0

Fixed graph tests

This commit is contained in:
Michael Hackstein 2014-05-28 21:48:22 +02:00
parent 8a7a1800f0
commit 5228984679
4 changed files with 118 additions and 34 deletions

View File

@ -252,13 +252,11 @@ function post_graph_graph (req, res) {
}
var name = json._key;
var vertices = json.edgeDefinitions[0].from[0];
var edges = json.edgeDefinitions[0].collection;
var vertices = json.vertices;
var edges = json.edges;
var waitForSync = false;
if (req.parameters.waitForSync &&
(req.parameters.waitForSync === "true" ||
req.parameters.waitForSync === true)) {
if (req.parameters.waitForSync) {
waitForSync = true;
}
var g = new graph.Graph(name, vertices, edges, waitForSync);
@ -483,9 +481,7 @@ function delete_graph_graph (req, res) {
}
var waitForSync = g._gdb.properties().waitForSync;
if (req.parameters.waitForSync &&
(req.parameters.waitForSync === "true" ||
req.parameters.waitForSync === true)) {
if (req.parameters.waitForSync) {
waitForSync = true;
}
@ -576,9 +572,7 @@ function post_graph_vertex (req, res, g) {
}
var waitForSync = g._vertices.properties().waitForSync;
if (req.parameters.waitForSync &&
(req.parameters.waitForSync === "true" ||
req.parameters.waitForSync === true)) {
if (req.parameters.waitForSync) {
waitForSync = true;
}
@ -779,9 +773,7 @@ function delete_graph_vertex (req, res, g) {
}
var waitForSync = g._vertices.properties().waitForSync;
if (req.parameters.waitForSync &&
(req.parameters.waitForSync === "true" ||
req.parameters.waitForSync === true)) {
if (req.parameters.waitForSync) {
waitForSync = true;
}
@ -823,9 +815,7 @@ function update_graph_vertex (req, res, g, isPatch) {
}
var waitForSync = g._vertices.properties().waitForSync;
if (req.parameters.waitForSync &&
(req.parameters.waitForSync === "true" ||
req.parameters.waitForSync === true)) {
if (req.parameters.waitForSync) {
waitForSync = true;
}
@ -1477,9 +1467,7 @@ function post_graph_edge (req, res, g) {
}
var waitForSync = g._edges.properties().waitForSync;
if (req.parameters.waitForSync &&
(req.parameters.waitForSync === "true" ||
req.parameters.waitForSync === true)) {
if (req.parameters.waitForSync) {
waitForSync = true;
}
@ -1686,9 +1674,7 @@ function delete_graph_edge (req, res, g) {
}
var waitForSync = g._edges.properties().waitForSync;
if (req.parameters.waitForSync &&
(req.parameters.waitForSync === "true" ||
req.parameters.waitForSync === true)) {
if (req.parameters.waitForSync) {
waitForSync = true;
}
@ -1730,9 +1716,7 @@ function update_graph_edge (req, res, g, isPatch) {
}
var waitForSync = g._edges.properties().waitForSync;
if (req.parameters.waitForSync &&
(req.parameters.waitForSync === "true" ||
req.parameters.waitForSync === true)) {
if (req.parameters.waitForSync) {
waitForSync = true;
}

View File

@ -212,11 +212,10 @@ Graph.prototype.initialize = function (name, vertices, edges) {
edges = edges.name();
}
var newEdgeDefinition = [{"collection": edges, "from" :[vertices], "to": [vertices]}];
results = GraphAPI.postGraph({
_key: name,
edgeDefinitions: newEdgeDefinition
vertices: vertices,
edges: edges
});
}

View File

@ -222,9 +222,15 @@ AQLStatement.prototype.allowsRestrict = function() {
};
// -----------------------------------------------------------------------------
// --SECTION-- AQL Generator
// --SECTION-- AQL Generator for fluent interface
// -----------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/// @brief Starting point of the fluent interface.
///
/// Only for internal use.
////////////////////////////////////////////////////////////////////////////////
var AQLGenerator = function(graph) {
this.stack = [];
this.bindVars = {
@ -235,6 +241,12 @@ var AQLGenerator = function(graph) {
this.lastVar = "";
};
////////////////////////////////////////////////////////////////////////////////
/// @brief Dispose and reset the current cursor of the query
///
/// Only for internal use.
////////////////////////////////////////////////////////////////////////////////
AQLGenerator.prototype._clearCursor = function() {
if (this.cursor) {
this.cursor.dispose();
@ -242,12 +254,28 @@ AQLGenerator.prototype._clearCursor = function() {
}
};
////////////////////////////////////////////////////////////////////////////////
/// @brief Execute the query and keep the cursor
///
/// Only for internal use.
////////////////////////////////////////////////////////////////////////////////
AQLGenerator.prototype._createCursor = function() {
if (!this.cursor) {
this.cursor = this.execute();
}
};
////////////////////////////////////////////////////////////////////////////////
/// @brief General edge query, takes direction as parameter
///
/// This will create the general AQL statement to load edges
/// connected to the vertices selected in the step before.
/// Will also bind the options into bindVars.
///
/// Only for internal use, user gets different functions for directions
////////////////////////////////////////////////////////////////////////////////
AQLGenerator.prototype._edges = function(edgeExample, options) {
this._clearCursor();
this.options = options || {};
@ -273,6 +301,79 @@ AQLGenerator.prototype._edges = function(edgeExample, options) {
return this;
};
////////////////////////////////////////////////////////////////////////////////
/// @fn JSF_general_graph_fluent_aql_edges
/// @brief select all connected edges
///
/// @FUN{graph-query.edges(@FA{examples})}
///
/// Creates an AQL statement to select all edges for each of the vertices selected
/// in the step before.
/// This will include `inbound` as well as `outbound` edges.
/// The resulting set of edges can be filtered by defining one or more @FA{examples}.
///
/// @EXAMPLES
///
/// To request unfiltered edges:
///
/// @EXAMPLE_ARANGOSH_OUTPUT{generalGraphFluentAQLEdgesUnfiltered}
/// var graph = require("org/arangodb/general-graph");
/// var edgeDefinition = [];
/// edgeDefinition.push(graph._undirectedRelationDefinition("friend", "user"));
/// var g = graph._create("social", edgeDefinition);
/// var a = g.user.save({name: "Alice"});
/// var b = g.user.save({name: "Bob"});
/// var c = g.user.save({name: "Charly"});
/// var d = g.user.save({name: "Diana"});
/// var e1 = g.friend.save(a._id, b._id, {type: "married"});
/// var e2 = g.friend.save(a._id, c._id, {type: "friend"});
/// var e3 = g.friend.save(c._id, d._id, {type: "married"});
/// var e4 = g.friend.save(b,_id, d._id, {type: "friend"});
/// var query = g._vertices([{name: "Alice"}, {name: "Bob"}]);
/// query.edges().toArray();
/// @END_EXAMPLE_ARANGOSH_OUTPUT
///
/// To request filtered edges by a single example:
///
/// @EXAMPLE_ARANGOSH_OUTPUT{generalGraphFluentAQLEdgesFilteredSingle}
/// var graph = require("org/arangodb/general-graph");
/// var edgeDefinition = [];
/// edgeDefinition.push(graph._undirectedRelationDefinition("friend", "user"));
/// var g = graph._create("social", edgeDefinition);
/// var a = g.user.save({name: "Alice"});
/// var b = g.user.save({name: "Bob"});
/// var c = g.user.save({name: "Charly"});
/// var d = g.user.save({name: "Diana"});
/// var e1 = g.friend.save(a._id, b._id, {type: "married"});
/// var e2 = g.friend.save(a._id, c._id, {type: "friend"});
/// var e3 = g.friend.save(c._id, d._id, {type: "married"});
/// var e4 = g.friend.save(b,_id, d._id, {type: "friend"});
/// var query = g._vertices([{name: "Alice"}, {name: "Bob"}]);
/// query.edges({type: "married"}).toArray();
/// @END_EXAMPLE_ARANGOSH_OUTPUT
///
/// To request filtered edges by multiple examples:
///
/// @EXAMPLE_ARANGOSH_OUTPUT{generalGraphFluentAQLEdgesFilteredMultiple}
/// var graph = require("org/arangodb/general-graph");
/// var edgeDefinition = [];
/// edgeDefinition.push(graph._undirectedRelationDefinition("friend", "user"));
/// var g = graph._create("social", edgeDefinition);
/// var a = g.user.save({name: "Alice"});
/// var b = g.user.save({name: "Bob"});
/// var c = g.user.save({name: "Charly"});
/// var d = g.user.save({name: "Diana"});
/// var e1 = g.friend.save(a._id, b._id, {type: "married"});
/// var e2 = g.friend.save(a._id, c._id, {type: "friend"});
/// var e3 = g.friend.save(c._id, d._id, {type: "married"});
/// var e4 = g.friend.save(b,_id, d._id, {type: "friend"});
/// var query = g._vertices([{name: "Alice"}, {name: "Bob"}]);
/// query.edges([{type: "married"}, {type: "friend"}]).toArray();
/// @END_EXAMPLE_ARANGOSH_OUTPUT
/// To define a relation between several vertex collections:
///
////////////////////////////////////////////////////////////////////////////////
AQLGenerator.prototype.edges = function(example) {
return this._edges(example, {direction: "any"});
};

View File

@ -318,7 +318,6 @@ Vertex.prototype.setProperty = function (name, value) {
////////////////////////////////////////////////////////////////////////////////
Graph.prototype.initialize = function (name, vertices, edges, waitForSync) {
this._name = name;
var gdb = db._collection("_graphs");
var graphProperties;
@ -415,8 +414,7 @@ Graph.prototype.initialize = function (name, vertices, edges, waitForSync) {
if (graphProperties === null) {
// check if edge is used in a graph
//hole alle graphen nud schau nach O.o
// check if edge is used in a graph
gdb.toArray().forEach(
function(singleGraph) {
var sGEDs = singleGraph.edgeDefinitions;
@ -455,7 +453,9 @@ Graph.prototype.initialize = function (name, vertices, edges, waitForSync) {
}
}
else {
if (graphProperties.vertices !== vertices || graphProperties.edges !== edges) {
if (graphProperties.edgeDefinitions[0].from[0] !== vertices
|| graphProperties.edgeDefinitions[0].to[0] !== vertices
|| graphProperties.edgeDefinitions[0].collection !== edges) {
throw "graph with that name already exists!";
}
}