| Project | Number | Date |
|---|---|---|
| cypher-for-gremlin | 0.9.12 | 13 Sep 2018, 16:07 |
| Steps | Scenarios | Features | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Feature | Passed | Failed | Skipped | Pending | Undefined | Total | Passed | Failed | Total | Duration | Status |
| EqualsAcceptance | 25 | 0 | 0 | 0 | 0 | 25 | 5 | 0 | 5 | 0.175 | Passed |
16:07:32.981 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().drop()}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}}
CREATE ({id: 0})
16:07:32.983 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: CREATE ({id: 0}) 16:07:32.985 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.addV().property(single, 'id', 0).barrier().limit(0) 16:07:32.986 [Test worker] DEBUG o.a.t.g.driver.Client - CREATE ({id: 0})}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}}
WITH collect([0, 0.0]) AS numbers UNWIND numbers AS arr WITH arr[0] AS expected MATCH (n) WHERE toInteger(n.id) = expected RETURN n
16:07:33.016 [Test worker] DEBUG o.a.t.g.driver.Client - WITH collect([0, 0.0]) AS numbers UNWIND numbers AS arr WITH arr[0] AS expected MATCH (n) WHERE toInteger(n.id) = expected RETURN n}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.016 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: WITH collect([0, 0.0]) AS numbers UNWIND numbers AS arr WITH arr[0] AS expected MATCH (n) WHERE toInteger(n.id) = expected RETURN n 16:07:33.022 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.inject(' cypher.start').project(' GENERATED1', ' GENERATED2').by(__.constant(0)).by(__.constant(0.0)).select(values).is(neq(' cypher.null')).map(__.choose(__.range(local, 0, 1), __.range(local, 0, 1), __.constant(' cypher.null'))).as('expected').V().as('n').where(__.select('n').choose(neq(' cypher.null'), __.choose(__.values('id'), __.values('id'), __.constant(' cypher.null')), __.constant(' cypher.null')).map(cypherToInteger()).is(neq(' cypher.null')).where(eq('expected'))).select('n').project('n').by(__.choose(neq(' cypher.null'), __.valueMap(true), __.constant(' cypher.null')))
| n |
| ({id: 0}) |
16:07:33.023 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) RETURN id(n)}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.024 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) RETURN id(n) 16:07:33.028 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().project('id(n)').by(__.id()) 16:07:33.028 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH ()-[r]->() RETURN id(r)}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.028 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH ()-[r]->() RETURN id(r) 16:07:33.032 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.E().project('id(r)').by(__.id()) 16:07:33.036 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.036 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label 16:07:33.039 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().label().is(neq('vertex')).project('label').by(__.identity()).dedup() 16:07:33.041 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().as('V').properties().project('nodeId', 'key', 'value').by(__.select('V').id()).by(__.key()).by(__.value())}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.041 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().outE().as('E').properties().project('relId', 'key', 'value').by(__.select('E').id()).by(__.key()).by(__.value())}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} -labels: 0 +labels: 0 +nodes: 0 -nodes: 0 -properties: 0 +properties: 0 -relationships: 0 +relationships: 0
16:07:33.047 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().drop()}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}}
CREATE ({id: 0})
16:07:33.048 [Test worker] DEBUG o.a.t.g.driver.Client - CREATE ({id: 0})}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.048 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: CREATE ({id: 0}) 16:07:33.049 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.addV().property(single, 'id', 0).barrier().limit(0)
WITH collect([0.5, 0]) AS numbers UNWIND numbers AS arr WITH arr[0] AS expected MATCH (n) WHERE toInteger(n.id) = expected RETURN n
16:07:33.068 [Test worker] DEBUG o.a.t.g.driver.Client - WITH collect([0.5, 0]) AS numbers UNWIND numbers AS arr WITH arr[0] AS expected MATCH (n) WHERE toInteger(n.id) = expected RETURN n}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.068 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: WITH collect([0.5, 0]) AS numbers UNWIND numbers AS arr WITH arr[0] AS expected MATCH (n) WHERE toInteger(n.id) = expected RETURN n 16:07:33.072 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.inject(' cypher.start').project(' GENERATED1', ' GENERATED2').by(__.constant(0.5)).by(__.constant(0)).select(values).is(neq(' cypher.null')).map(__.choose(__.range(local, 0, 1), __.range(local, 0, 1), __.constant(' cypher.null'))).as('expected').V().as('n').where(__.select('n').choose(neq(' cypher.null'), __.choose(__.values('id'), __.values('id'), __.constant(' cypher.null')), __.constant(' cypher.null')).map(cypherToInteger()).is(neq(' cypher.null')).where(eq('expected'))).select('n').project('n').by(__.choose(neq(' cypher.null'), __.valueMap(true), __.constant(' cypher.null')))
| n |
16:07:33.080 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) RETURN id(n)}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.080 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) RETURN id(n) 16:07:33.083 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().project('id(n)').by(__.id()) 16:07:33.084 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH ()-[r]->() RETURN id(r)}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.084 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH ()-[r]->() RETURN id(r) 16:07:33.087 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.E().project('id(r)').by(__.id()) 16:07:33.089 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.089 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label 16:07:33.091 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().label().is(neq('vertex')).project('label').by(__.identity()).dedup() 16:07:33.095 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().as('V').properties().project('nodeId', 'key', 'value').by(__.select('V').id()).by(__.key()).by(__.value())}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.096 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().outE().as('E').properties().project('relId', 'key', 'value').by(__.select('E').id()).by(__.key()).by(__.value())}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} -labels: 0 +labels: 0 +nodes: 0 -nodes: 0 -properties: 0 +properties: 0 -relationships: 0 +relationships: 0
16:07:33.103 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().drop()}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}}
CREATE ({id: 0})
16:07:33.104 [Test worker] DEBUG o.a.t.g.driver.Client - CREATE ({id: 0})}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.104 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: CREATE ({id: 0}) 16:07:33.105 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.addV().property(single, 'id', 0).barrier().limit(0)
WITH collect(['0', 0]) AS things UNWIND things AS arr WITH arr[0] AS expected MATCH (n) WHERE toInteger(n.id) = expected RETURN n
16:07:33.128 [Test worker] DEBUG o.a.t.g.driver.Client - WITH collect(['0', 0]) AS things UNWIND things AS arr WITH arr[0] AS expected MATCH (n) WHERE toInteger(n.id) = expected RETURN n}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.128 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: WITH collect(['0', 0]) AS things UNWIND things AS arr WITH arr[0] AS expected MATCH (n) WHERE toInteger(n.id) = expected RETURN n 16:07:33.135 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.inject(' cypher.start').project(' GENERATED1', ' GENERATED2').by(__.constant('0')).by(__.constant(0)).select(values).is(neq(' cypher.null')).map(__.choose(__.range(local, 0, 1), __.range(local, 0, 1), __.constant(' cypher.null'))).as('expected').V().as('n').where(__.select('n').choose(neq(' cypher.null'), __.choose(__.values('id'), __.values('id'), __.constant(' cypher.null')), __.constant(' cypher.null')).map(cypherToInteger()).is(neq(' cypher.null')).where(eq('expected'))).select('n').project('n').by(__.choose(neq(' cypher.null'), __.valueMap(true), __.constant(' cypher.null')))
| n |
16:07:33.140 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) RETURN id(n)}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.141 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) RETURN id(n) 16:07:33.145 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().project('id(n)').by(__.id()) 16:07:33.145 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH ()-[r]->() RETURN id(r)}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.145 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH ()-[r]->() RETURN id(r) 16:07:33.149 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.E().project('id(r)').by(__.id()) 16:07:33.154 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.154 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label 16:07:33.156 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().label().is(neq('vertex')).project('label').by(__.identity()).dedup() 16:07:33.159 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().as('V').properties().project('nodeId', 'key', 'value').by(__.select('V').id()).by(__.key()).by(__.value())}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.160 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().outE().as('E').properties().project('relId', 'key', 'value').by(__.select('E').id()).by(__.key()).by(__.value())}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} -labels: 0 +labels: 0 +nodes: 0 -nodes: 0 -properties: 0 +properties: 0 -relationships: 0 +relationships: 0
16:07:33.169 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().drop()}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}}
CREATE ()
16:07:33.171 [Test worker] DEBUG o.a.t.g.driver.Client - CREATE ()}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.171 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: CREATE () 16:07:33.172 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.addV().barrier().limit(0)
MATCH (a) WITH a MATCH (b) WHERE a = b RETURN count(b)
16:07:33.201 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (a) WITH a MATCH (b) WHERE a = b RETURN count(b)}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.202 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (a) WITH a MATCH (b) WHERE a = b RETURN count(b) 16:07:33.205 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().as('a').V().as('b').where(__.select('a').where(eq('b'))).select('b').is(neq(' cypher.null')).count().project('count(b)').by(__.identity())
| count(b) |
| 1 |
16:07:33.205 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) RETURN id(n)}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.205 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) RETURN id(n) 16:07:33.207 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().project('id(n)').by(__.id()) 16:07:33.207 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH ()-[r]->() RETURN id(r)}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.207 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH ()-[r]->() RETURN id(r) 16:07:33.211 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.E().project('id(r)').by(__.id()) 16:07:33.215 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.216 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label 16:07:33.219 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().label().is(neq('vertex')).project('label').by(__.identity()).dedup() 16:07:33.221 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().as('V').properties().project('nodeId', 'key', 'value').by(__.select('V').id()).by(__.key()).by(__.value())}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.225 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().outE().as('E').properties().project('relId', 'key', 'value').by(__.select('E').id()).by(__.key()).by(__.value())}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} -labels: 0 +labels: 0 +nodes: 0 -nodes: 0 -properties: 0 +properties: 0 -relationships: 0 +relationships: 0
16:07:33.232 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().drop()}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}}
CREATE ()-[:T]->()
16:07:33.234 [Test worker] DEBUG o.a.t.g.driver.Client - CREATE ()-[:T]->()}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.234 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: CREATE ()-[:T]->() 16:07:33.236 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.addV().as(' UNNAMED8').addV().as(' UNNAMED17').addE('T').from(' UNNAMED8').to(' UNNAMED17').barrier().limit(0)
MATCH ()-[a]->() WITH a MATCH ()-[b]->() WHERE a = b RETURN count(b)
16:07:33.260 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH ()-[a]->() WITH a MATCH ()-[b]->() WHERE a = b RETURN count(b)}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.261 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH ()-[a]->() WITH a MATCH ()-[b]->() WHERE a = b RETURN count(b) 16:07:33.264 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.E().as('a').V().outE().as('b').inV().where(__.select('a').where(eq('b'))).select('b').is(neq(' cypher.null')).count().project('count(b)').by(__.identity())
| count(b) |
| 1 |
16:07:33.265 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) RETURN id(n)}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.265 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) RETURN id(n) 16:07:33.267 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().project('id(n)').by(__.id()) 16:07:33.267 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH ()-[r]->() RETURN id(r)}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.267 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH ()-[r]->() RETURN id(r) 16:07:33.269 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.E().project('id(r)').by(__.id()) 16:07:33.269 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.269 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label 16:07:33.271 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().label().is(neq('vertex')).project('label').by(__.identity()).dedup() 16:07:33.273 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().as('V').properties().project('nodeId', 'key', 'value').by(__.select('V').id()).by(__.key()).by(__.value())}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} 16:07:33.277 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().outE().as('E').properties().project('relId', 'key', 'value').by(__.select('E').id()).by(__.key()).by(__.value())}} to - Connection{host=Host{address=localhost/127.0.0.1:36913, hostUri=ws://localhost:36913/gremlin}} -labels: 0 +labels: 0 +nodes: 0 -nodes: 0 -properties: 0 +properties: 0 -relationships: 0 +relationships: 0