@@ -18,57 +18,57 @@ type QueryCase struct {
18
18
19
19
func TestQueryTranslation (t * testing.T ) {
20
20
cases := []QueryCase {
21
- QueryCase {
21
+ {
22
22
Cypher : "MATCH (n:ip) RETURN n" ,
23
23
SQL : `SELECT a0.id, a0.value, a0.type FROM assets a0
24
24
WHERE a0.type = 'ip'` ,
25
25
},
26
- QueryCase {
26
+ {
27
27
Cypher : "MATCH (n:ip), (n:name) RETURN n" ,
28
28
Error : "Variable 'n' already defined with a different type" ,
29
29
},
30
- QueryCase {
30
+ {
31
31
Cypher : "MATCH (n:ip) RETURN n, n" ,
32
32
SQL : `SELECT a0.id, a0.value, a0.type, a0.id, a0.value, a0.type FROM assets a0
33
33
WHERE a0.type = 'ip'` ,
34
34
},
35
- QueryCase {
35
+ {
36
36
Cypher : "MATCH (n) WHERE n.value = 'prod' RETURN n" ,
37
37
SQL : "SELECT a0.id, a0.value, a0.type FROM assets a0\n WHERE a0.value = 'prod'" ,
38
38
},
39
- QueryCase {
39
+ {
40
40
Cypher : "MATCH (n) WHERE NOT n.value = 'prod' RETURN n" ,
41
41
SQL : "SELECT a0.id, a0.value, a0.type FROM assets a0\n WHERE NOT a0.value = 'prod'" ,
42
42
},
43
- QueryCase {
43
+ {
44
44
Cypher : "MATCH (n) WHERE NOT n.value = 'prod' AND n.value = 'preprod' RETURN n" ,
45
45
SQL : "SELECT a0.id, a0.value, a0.type FROM assets a0\n WHERE NOT a0.value = 'prod' AND a0.value = 'preprod'" ,
46
46
},
47
- QueryCase {
47
+ {
48
48
Cypher : "MATCH (n) WHERE n.value STARTS WITH 'prod' RETURN n" ,
49
49
SQL : "SELECT a0.id, a0.value, a0.type FROM assets a0\n WHERE a0.value LIKE 'prod%'" ,
50
50
},
51
- QueryCase {
51
+ {
52
52
Cypher : "MATCH (n) WHERE n.value ENDS WITH 'prod' RETURN n" ,
53
53
SQL : "SELECT a0.id, a0.value, a0.type FROM assets a0\n WHERE a0.value LIKE '%prod'" ,
54
54
},
55
- QueryCase {
55
+ {
56
56
Cypher : "MATCH (n) WHERE n.value CONTAINS 'prod' RETURN n" ,
57
57
SQL : "SELECT a0.id, a0.value, a0.type FROM assets a0\n WHERE a0.value LIKE '%prod%'" ,
58
58
},
59
- QueryCase {
59
+ {
60
60
Cypher : "MATCH (:variable)-[:has]->(n:name) RETURN n" ,
61
61
SQL : `
62
62
SELECT a1.id, a1.value, a1.type FROM assets a0, assets a1, relations r0
63
63
WHERE (((a0.type = 'variable' AND a1.type = 'name') AND r0.type = 'has') AND (r0.from_id = a0.id AND r0.to_id = a1.id))` ,
64
64
},
65
- QueryCase {
65
+ {
66
66
Cypher : "MATCH (:variable)<-[:has]-(n:name) RETURN n" ,
67
67
SQL : `
68
68
SELECT a1.id, a1.value, a1.type FROM assets a0, assets a1, relations r0
69
69
WHERE (((a0.type = 'variable' AND a1.type = 'name') AND r0.type = 'has') AND (r0.from_id = a1.id AND r0.to_id = a0.id))` ,
70
70
},
71
- QueryCase {
71
+ {
72
72
Cypher : "MATCH (v:variable)--(n:name) RETURN n" ,
73
73
SQL : `
74
74
(SELECT a1.id, a1.value, a1.type FROM assets a0, assets a1, relations r0
@@ -77,7 +77,7 @@ UNION ALL
77
77
(SELECT a1.id, a1.value, a1.type FROM assets a0, assets a1, relations r0
78
78
WHERE ((a0.type = 'variable' AND a1.type = 'name') AND (r0.from_id = a1.id AND r0.to_id = a0.id)))` ,
79
79
},
80
- QueryCase {
80
+ {
81
81
Cypher : "MATCH (v:variable)-[r]-(n:name) RETURN n" ,
82
82
SQL : `
83
83
(SELECT a1.id, a1.value, a1.type FROM assets a0, assets a1, relations r0
@@ -86,7 +86,7 @@ UNION ALL
86
86
(SELECT a1.id, a1.value, a1.type FROM assets a0, assets a1, relations r0
87
87
WHERE ((a0.type = 'variable' AND a1.type = 'name') AND (r0.from_id = a1.id AND r0.to_id = a0.id)))` ,
88
88
},
89
- QueryCase {
89
+ {
90
90
Cypher : "MATCH (v:variable)-[r]-(n:name) RETURN n LIMIT 10" ,
91
91
SQL : `
92
92
(SELECT a1.id, a1.value, a1.type FROM assets a0, assets a1, relations r0
@@ -96,7 +96,7 @@ UNION ALL
96
96
WHERE ((a0.type = 'variable' AND a1.type = 'name') AND (r0.from_id = a1.id AND r0.to_id = a0.id)))
97
97
LIMIT 10` ,
98
98
},
99
- QueryCase {
99
+ {
100
100
Cypher : "MATCH (v:variable)-[r]-(n:name) RETURN v.name, COUNT(n.name)" ,
101
101
SQL : `
102
102
SELECT a0.name, COUNT(*) FROM
@@ -107,7 +107,7 @@ UNION ALL
107
107
WHERE ((a0.type = 'variable' AND a1.type = 'name') AND (r0.from_id = a1.id AND r0.to_id = a0.id))))
108
108
GROUP BY a0.name` ,
109
109
},
110
- QueryCase {
110
+ {
111
111
Cypher : "MATCH (v:variable)-[r]-(n:name) RETURN DISTINCT n.value LIMIT 10" ,
112
112
SQL : `
113
113
(SELECT a1.value FROM assets a0, assets a1, relations r0
@@ -117,7 +117,7 @@ UNION
117
117
WHERE ((a0.type = 'variable' AND a1.type = 'name') AND (r0.from_id = a1.id AND r0.to_id = a0.id)))
118
118
LIMIT 10` ,
119
119
},
120
- QueryCase {
120
+ {
121
121
Cypher : "MATCH (v:variable)-[r]-(n:name) RETURN v.name, COUNT(DISTINCT n.name)" ,
122
122
SQL : `
123
123
SELECT a0.name, COUNT(DISTINCT a1.name) FROM
@@ -128,81 +128,81 @@ UNION ALL
128
128
WHERE ((a0.type = 'variable' AND a1.type = 'name') AND (r0.from_id = a1.id AND r0.to_id = a0.id))))
129
129
GROUP BY a0.name` ,
130
130
},
131
- QueryCase {
131
+ {
132
132
Cypher : "MATCH (v)-[r]-(n) RETURN n LIMIT 10" ,
133
133
SQL : `
134
134
SELECT a1.id, a1.value, a1.type FROM assets a0, assets a1, relations r0
135
135
WHERE (r0.from_id = a0.id AND r0.to_id = a1.id)
136
136
LIMIT 10` ,
137
137
},
138
- QueryCase {
138
+ {
139
139
Cypher : "MATCH (v:variable)<-[r]-(n:name), (v)-[r1]->(n) RETURN n" ,
140
140
SQL : `
141
141
SELECT a1.id, a1.value, a1.type FROM assets a0, assets a1, relations r0, relations r1
142
142
WHERE (((a0.type = 'variable' AND a1.type = 'name') AND (r0.from_id = a1.id AND r0.to_id = a0.id)) AND (r1.from_id = a0.id AND r1.to_id = a1.id))` ,
143
143
},
144
- QueryCase {
144
+ {
145
145
Cypher : "MATCH (:variable)<-[:has]-(n:name) RETURN n.value" ,
146
146
SQL : `
147
147
SELECT a1.value FROM assets a0, assets a1, relations r0
148
148
WHERE (((a0.type = 'variable' AND a1.type = 'name') AND r0.type = 'has') AND (r0.from_id = a1.id AND r0.to_id = a0.id))` ,
149
149
},
150
- QueryCase {
150
+ {
151
151
Cypher : "MATCH (v:variable)<-[r:has]-(n:name) RETURN v, r, n" ,
152
152
SQL : `
153
153
SELECT a0.id, a0.value, a0.type, r0.from_id, r0.to_id, r0.type, a1.id, a1.value, a1.type FROM assets a0, assets a1, relations r0
154
154
WHERE (((a0.type = 'variable' AND a1.type = 'name') AND r0.type = 'has') AND (r0.from_id = a1.id AND r0.to_id = a0.id))` ,
155
155
},
156
- QueryCase {
156
+ {
157
157
Cypher : "MATCH (v:variable)<-[r]-(n) RETURN v, r, n" ,
158
158
SQL : `
159
159
SELECT a0.id, a0.value, a0.type, r0.from_id, r0.to_id, r0.type, a1.id, a1.value, a1.type FROM assets a0, assets a1, relations r0
160
160
WHERE (a0.type = 'variable' AND (r0.from_id = a1.id AND r0.to_id = a0.id))` ,
161
161
},
162
- QueryCase {
162
+ {
163
163
Cypher : "MATCH (v:variable)<-[:has]-(:name)-[:is_in]->(:program) RETURN v" ,
164
164
SQL : `
165
165
SELECT a0.id, a0.value, a0.type FROM assets a0, assets a1, assets a2, relations r0, relations r1
166
166
WHERE ((((((a0.type = 'variable' AND a1.type = 'name') AND a2.type = 'program') AND r0.type = 'has') AND (r0.from_id = a1.id AND r0.to_id = a0.id)) AND r1.type = 'is_in') AND (r1.from_id = a1.id AND r1.to_id = a2.id))` ,
167
167
},
168
- QueryCase {
168
+ {
169
169
Cypher : `MATCH (p:port)<-[:bind]-(c:consul_service)-[:is_in]->(d:datacenter) WHERE d.value = 'pa4'
170
170
MATCH (c)-[:is_in]->(e:environment) WHERE e.value = 'preprod'
171
171
RETURN c` ,
172
172
SQL : `
173
173
SELECT a1.id, a1.value, a1.type FROM assets a0, assets a1, assets a2, assets a3, relations r0, relations r1, relations r2
174
174
WHERE ((((((((((a0.type = 'port' AND a1.type = 'consul_service') AND a2.type = 'datacenter') AND a3.type = 'environment') AND r0.type = 'bind') AND (r0.from_id = a1.id AND r0.to_id = a0.id)) AND r1.type = 'is_in') AND (r1.from_id = a1.id AND r1.to_id = a2.id)) AND r2.type = 'is_in') AND (r2.from_id = a1.id AND r2.to_id = a3.id)) AND (a2.value = 'pa4' AND a3.value = 'preprod'))` ,
175
175
},
176
- QueryCase {
176
+ {
177
177
Cypher : `MATCH (p:port)<-[:bind]-(c:consul_service)-[:is_in]->(d:datacenter) WHERE d.value = 'pa4'
178
178
MATCH (c)-[:is_in]->(e:environment) WHERE e.value <> 'preprod'
179
179
RETURN c` ,
180
180
SQL : `
181
181
SELECT a1.id, a1.value, a1.type FROM assets a0, assets a1, assets a2, assets a3, relations r0, relations r1, relations r2
182
182
WHERE ((((((((((a0.type = 'port' AND a1.type = 'consul_service') AND a2.type = 'datacenter') AND a3.type = 'environment') AND r0.type = 'bind') AND (r0.from_id = a1.id AND r0.to_id = a0.id)) AND r1.type = 'is_in') AND (r1.from_id = a1.id AND r1.to_id = a2.id)) AND r2.type = 'is_in') AND (r2.from_id = a1.id AND r2.to_id = a3.id)) AND (a2.value = 'pa4' AND a3.value <> 'preprod'))` ,
183
183
},
184
- QueryCase {
184
+ {
185
185
Cypher : "MATCH (:variable)<-[:has]-(n:name) RETURN n LIMIT 10" ,
186
186
SQL : `
187
187
SELECT a1.id, a1.value, a1.type FROM assets a0, assets a1, relations r0
188
188
WHERE (((a0.type = 'variable' AND a1.type = 'name') AND r0.type = 'has') AND (r0.from_id = a1.id AND r0.to_id = a0.id))
189
189
LIMIT 10` ,
190
190
},
191
- QueryCase {
191
+ {
192
192
Cypher : "MATCH (:variable)<-[:has]-(n:name) RETURN n SKIP 20 LIMIT 10" ,
193
193
SQL : `
194
194
SELECT a1.id, a1.value, a1.type FROM assets a0, assets a1, relations r0
195
195
WHERE (((a0.type = 'variable' AND a1.type = 'name') AND r0.type = 'has') AND (r0.from_id = a1.id AND r0.to_id = a0.id))
196
196
LIMIT 10
197
197
OFFSET 20` ,
198
198
},
199
- QueryCase {
199
+ {
200
200
Cypher : "MATCH (:variable)<-[:has]-(n:name) RETURN DISTINCT n" ,
201
201
SQL : `
202
202
SELECT DISTINCT a1.id, a1.value, a1.type FROM assets a0, assets a1, relations r0
203
203
WHERE (((a0.type = 'variable' AND a1.type = 'name') AND r0.type = 'has') AND (r0.from_id = a1.id AND r0.to_id = a0.id))` ,
204
204
},
205
- QueryCase {
205
+ {
206
206
Cypher : `MATCH (r:rack)<-[:is_in]-(cn:chef_name)-[:is_in]->(e:environment)
207
207
WHERE r.value = '01.04'
208
208
RETURN e.value, COUNT(cn.value)` ,
@@ -211,19 +211,19 @@ SELECT a2.value, COUNT(*) FROM assets a0, assets a1, assets a2, relations r0, re
211
211
WHERE (((((((a0.type = 'rack' AND a1.type = 'chef_name') AND a2.type = 'environment') AND r0.type = 'is_in') AND (r0.from_id = a1.id AND r0.to_id = a0.id)) AND r1.type = 'is_in') AND (r1.from_id = a1.id AND r1.to_id = a2.id)) AND a0.value = '01.04')
212
212
GROUP BY a2.value` ,
213
213
},
214
- QueryCase {
214
+ {
215
215
Cypher : `MATCH (r:rack)<-[:is_in]-(cn:chef_name) RETURN COUNT(cn.value)` ,
216
216
SQL : `
217
217
SELECT COUNT(*) FROM assets a0, assets a1, relations r0
218
218
WHERE (((a0.type = 'rack' AND a1.type = 'chef_name') AND r0.type = 'is_in') AND (r0.from_id = a1.id AND r0.to_id = a0.id))` ,
219
219
},
220
- QueryCase {
220
+ {
221
221
Cypher : "MATCH (v:variable)-[:has]->(n:name) WHERE v.value = '0x16' AND (n.value = 'myvar' OR n.value = 'myvar2') RETURN n" ,
222
222
SQL : `
223
223
SELECT a1.id, a1.value, a1.type FROM assets a0, assets a1, relations r0
224
224
WHERE ((((a0.type = 'variable' AND a1.type = 'name') AND r0.type = 'has') AND (r0.from_id = a0.id AND r0.to_id = a1.id)) AND (a0.value = '0x16' AND a1.value = 'myvar' OR a1.value = 'myvar2'))` ,
225
225
},
226
- QueryCase {
226
+ {
227
227
Cypher : `
228
228
MATCH (ip:ip)<-[:observed]-(:device)
229
229
WHERE (ip)<-[:scanned]-(:task)
0 commit comments