Skip to content

Commit 981bb3f

Browse files
committed
feat: handle path
1 parent acf82fd commit 981bb3f

File tree

2 files changed

+50
-31
lines changed

2 files changed

+50
-31
lines changed

lib/src/ng_result_handler.dart

Lines changed: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -64,22 +64,32 @@ _handle(dynamic v, ValueMetaData meta, int? timezoneOffset) {
6464
}
6565

6666
_handleStep(ng.Step v, ValueMetaData meta, int? timezoneOffset) {
67+
meta.type = GdbTypes.step;
6768
var step = <dynamic>[];
6869
ValueMetaData nodeMeta = ValueMetaData()..type = GdbTypes.node;
6970
var node =
7071
v.dst != null ? _handleNode(v.dst!, nodeMeta, timezoneOffset) : null;
7172

72-
var nodeIdx = meta.addSubmeta(nodeMeta);
73-
if (step.length <= nodeIdx) {
74-
step.length = nodeIdx + 1;
75-
step[nodeIdx] = node;
73+
for (var subsub in nodeMeta.submetas) {
74+
var subsubIdx = meta.addSubmeta(subsub);
75+
if (step.length <= subsubIdx) {
76+
step.length = subsubIdx + 1;
77+
step[subsubIdx] = node?[nodeMeta.submetas.indexOf(subsub)];
78+
}
7679
}
7780

7881
ValueMetaData propMeta = ValueMetaData()..type = GdbTypes.prop;
7982
var props = <dynamic>[];
8083
_handleProps(v.props, propMeta, props, timezoneOffset);
81-
step.add(props);
82-
return node;
84+
85+
for (var subsub in propMeta.submetas) {
86+
var subsubIdx = meta.addSubmeta(subsub);
87+
if (step.length <= subsubIdx) {
88+
step.length = subsubIdx + 1;
89+
step[subsubIdx] = props[propMeta.submetas.indexOf(subsub)];
90+
}
91+
}
92+
return step;
8393
}
8494

8595
dynamic _handleValue(ng.Value v, ValueMetaData meta, int? timezoneOffset) {
@@ -213,13 +223,14 @@ _handleCollection(
213223
int? timezoneOffset, {
214224
List<dynamic>? list,
215225
Set<dynamic>? set,
226+
String? Function(dynamic)? nameGetter,
216227
}) {
217228
if (values == null) {
218229
return;
219230
}
220231
for (var v in values) {
221232
ValueMetaData valueMeta = ValueMetaData()
222-
..name = ''
233+
..name = nameGetter?.call(v)
223234
..type = GdbTypes.unknown;
224235
var value = _handle(v, valueMeta, timezoneOffset);
225236
var valueIdx = meta.addSubmeta(valueMeta);
@@ -238,32 +249,39 @@ List<dynamic> _handleMap(ng.NMap v, ValueMetaData meta, int? timezoneOffset) {
238249
return kvs;
239250
}
240251

241-
_handlePath(ng.Path v, ValueMetaData meta, int? timezoneOffset) {
242-
v.src;
243-
v.steps;
252+
_handlePath(ng.Path path, ValueMetaData meta, int? timezoneOffset) {
253+
path.src;
254+
path.steps;
244255
meta.type = GdbTypes.path;
245-
var path = <dynamic>[];
256+
var pathData = <dynamic>[];
246257

247258
ValueMetaData startNode = ValueMetaData()..name = MetaKey.startNode;
248-
if (v.src != null) {
249-
var value = _handleNode(v.src!, startNode, timezoneOffset);
250-
_extendListBasic(meta, startNode, path, value);
259+
if (path.src != null) {
260+
var value = _handleNode(path.src!, startNode, timezoneOffset);
261+
_extendListBasic(meta, startNode, pathData, value);
251262
}
252263

253-
if (v.steps != null) {
264+
if (path.steps != null) {
254265
ValueMetaData stepMeta = ValueMetaData()
255266
..name = MetaKey.steps
256267
..type = GdbTypes.list;
257268
var steps = <dynamic>[];
258-
_handleCollection(stepMeta, v.steps, timezoneOffset, list: steps);
259-
var stepsIdx = meta.addSubmeta(stepMeta);
260-
if (path.length <= stepsIdx) {
261-
path.length = stepsIdx + 1;
262-
path[stepsIdx] = steps;
269+
_handleCollection(
270+
stepMeta,
271+
path.steps,
272+
timezoneOffset,
273+
list: steps,
274+
nameGetter: (v) => (v.name as Int8List?)?.utf8String(),
275+
);
276+
277+
var stepIdx = meta.addSubmeta(stepMeta);
278+
if (pathData.length <= stepIdx) {
279+
pathData.length = stepIdx + 1;
280+
pathData[stepIdx] = steps;
263281
}
264282
}
265283

266-
return path;
284+
return pathData;
267285
}
268286

269287
List<dynamic> _handleRelationship(

test/ng_result_handler_test.dart

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -234,14 +234,15 @@ void main() {
234234
'id': 1,
235235
'tags': [
236236
{
237-
'name': 'testTagName',
238-
'props': {'testPropName': 11, 'testPropName2': '12'}
237+
'name': 'startNodeTagName',
238+
'props': {'startProp1': 11, 'startProp2': '12'}
239239
}
240240
]
241241
},
242242
'steps': [
243243
{
244244
fnKey: step,
245+
"name": "testStepName",
245246
'endNode': {
246247
fnKey: vertex,
247248
'id': 3,
@@ -271,20 +272,19 @@ void main() {
271272
expectAll([0], GdbTypes.path, 'p', null, result);
272273
expectAll([0, 0], GdbTypes.node, MetaKey.startNode, null, result);
273274
expectAll([0, 0, 0], GdbTypes.int, MetaKey.nodeId, 1, result);
274-
expectAll([0, 0, 1], GdbTypes.tag, 'testTagName', null, result);
275-
expectAll([0, 0, 1, 0], GdbTypes.int, 'testPropName', 11, result);
276-
expectAll([0, 0, 1, 1], GdbTypes.string, 'testPropName2', '12', result);
275+
expectAll([0, 0, 1], GdbTypes.tag, 'startNodeTagName', null, result);
276+
expectAll([0, 0, 1, 0], GdbTypes.int, 'startProp1', 11, result);
277+
expectAll([0, 0, 1, 1], GdbTypes.string, 'startProp2', '12', result);
277278

278279
expectAll([0, 1], GdbTypes.list, null, null, result);
279-
expectAll([0, 1, 0], GdbTypes.node, 'endNode', null, result);
280+
expectAll([0, 1, 0], GdbTypes.step, 'testStepName', null, result);
280281
expectAll([0, 1, 0, 0], GdbTypes.int, MetaKey.nodeId, 3, result);
281282
expectAll([0, 1, 0, 1], GdbTypes.tag, 'testTagName', null, result);
282283
expectAll([0, 1, 0, 1, 0], GdbTypes.int, 'testPropName', 31, result);
283284

284-
expectAll([0, 1, 1], GdbTypes.prop, 'testPropName', [21], result);
285-
expectAll([0, 1, 1, 0], GdbTypes.int, 'testPropName', 21, result);
286-
expectAll([0, 1, 1, 1], GdbTypes.string, 'testPropName2', '22', result);
287-
expectAll([0, 1, 1, 2], GdbTypes.int, 'testPropName3', 23, result);
285+
expectAll([0, 1, 0, 2], GdbTypes.int, 'testPropName', 21, result);
286+
expectAll([0, 1, 0, 3], GdbTypes.string, 'testPropName2', '22', result);
287+
expectAll([0, 1, 0, 4], GdbTypes.int, 'testPropName3', 23, result);
288288
});
289289

290290
test('Test null', () {
@@ -348,6 +348,7 @@ Value path(dynamic v) {
348348
Step step(dynamic v) {
349349
var step = Step()
350350
..dst = vertex(v['endNode']).vVal
351+
..name = (v['name'] as String).bytes
351352
..props = Map.fromEntries(
352353
((v['props']).entries as Iterable<MapEntry<String, dynamic>>).map(
353354
(e) {

0 commit comments

Comments
 (0)