-
Notifications
You must be signed in to change notification settings - Fork 269
Expand file tree
/
Copy pathJsonBuilder.js
More file actions
74 lines (67 loc) · 2.52 KB
/
Copy pathJsonBuilder.js
File metadata and controls
74 lines (67 loc) · 2.52 KB
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
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
function stringWrap(valstr, flavor) {
return JSON.stringify(valstr);
}
function JsonStringify(flavor, record) {
let ageJsonStr = '{';
let isFirst = true;
for (const [key, value] of Object.entries(record)) {
if (!isFirst) {
ageJsonStr = ageJsonStr + ',';
}
let valueWrapped = stringWrap(value, flavor);
ageJsonStr = ageJsonStr + `${key}:${valueWrapped}`;
isFirst = false;
}
ageJsonStr = ageJsonStr + '}';
return ageJsonStr;
}
async function createVertex(client, graphPathStr, label, record, flavor) {
const createQ = `CREATE (n:${label} ${JsonStringify(flavor, record)})`;
if (flavor === 'AGE') {
return AGECreateVertex(client, graphPathStr, createQ);
} else {
throw new Error(`Unknown flavor ${flavor}`)
}
}
async function AGECreateVertex(client, graphPathStr, createQ) {
await client.query(
`select *
from cypher('${graphPathStr}', $$ ${createQ} $$) as (a agtype)`);
}
async function createEdge(client, label, record, graphPathStr, edgeStartLabel, edgeEndLabel, startNodeName, endNodeName, flavor) {
const createQ = `CREATE (:${edgeStartLabel} {name: ${stringWrap(startNodeName, flavor)}})-[n:${label} ${JsonStringify(flavor, record)}]->(:${edgeEndLabel} {name: ${stringWrap(endNodeName, flavor)}})`;
if (flavor === 'AGE') {
return AGECreateEdge(client, graphPathStr, createQ);
} else {
throw new Error(`Unknown flavor ${flavor}`)
}
}
async function AGECreateEdge(client, graphPathStr, createQ) {
await client.query(
`select *
from cypher('${graphPathStr}', $$ ${createQ} $$) as (a agtype)`);
}
module.exports = {
stringWrap,
JsonStringify,
createVertex,
createEdge
};