-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCypherMergeQuery.js
80 lines (60 loc) · 1.57 KB
/
CypherMergeQuery.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
var CypherMergeQuery = function(){
var nodes = [];
var relationShips = [];
var refCount = 0;
var paramCount = 0;
var allParams = {};
function createNode(node,params){
var nodeRef = "n"+refCount++;
nodes.push({node: node,ref: nodeRef,params: params,type:"CREATE"});
return nodeRef;
}
function addNode(node,params){
var nodeRef = "n"+refCount++;
nodes.push({node: node,ref: nodeRef,params: params,type:"MERGE"});
return nodeRef;
}
function getReference(){
return "r"+refCount++;
}
function addRelation(fromRef,type,toRef){
relationShips.push({from: fromRef,type: type,to: toRef});
}
function getQuery(){
var nodeQ = _getNodeQuery();
var relationQ = _getRelationQuery();
var query = nodeQ+" "+relationQ;
return {
query: query,
params: allParams
};
}
function _getNodeQuery(){
var nodeQ = nodes.map(function(node){
var params = _genParams(node.params);
return node.type+" ("+node.ref+":"+node.node+" {"+params+"})";
});
return nodeQ.join(" ");
}
function _getRelationQuery(){
var relationQ = relationShips.map(function(relation){
return "MERGE ("+relation.from+") -[:"+relation.type+"]-> ("+relation.to+") ";
});
return relationQ.join(" ");
}
function _genParams(params){
var paramNames = Object.keys(params);
var queries = paramNames.map(function(param){
var pid = "p"+paramCount++;
allParams[pid] = params[param];
return param+": {"+pid+"}";
});
return queries.join(",");
}
return {
getQuery: getQuery,
addNode: addNode,
addRelation: addRelation
};
};
module.exports = CypherMergeQuery;