| Project | Number | Date |
|---|---|---|
| cypher-for-gremlin | 0.9.11 | 09 Aug 2018, 10:56 |
| 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.135 | Passed |
10:55:50.744 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().drop()}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}}
CREATE ({id: 0})
10:55:50.745 [Test worker] DEBUG o.a.t.g.driver.Client - CREATE ({id: 0})}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.745 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: CREATE ({id: 0}) 10:55:50.747 [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.0]) AS numbers UNWIND numbers AS arr WITH arr[0] AS expected MATCH (n) WHERE toInteger(n.id) = expected RETURN n
10:55:50.765 [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:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.766 [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 10:55:50.771 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.inject(' cypher.start').project(' GENERATED3', ' GENERATED4').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}) |
10:55:50.772 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) RETURN id(n)}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.772 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) RETURN id(n) 10:55:50.773 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().project('id(n)').by(__.id()) 10:55:50.774 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH ()-[r]->() RETURN id(r)}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.774 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH ()-[r]->() RETURN id(r) 10:55:50.776 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.E().project('id(r)').by(__.id()) 10:55:50.778 [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:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.778 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label 10:55:50.780 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().label().is(neq('vertex')).project('label').by(__.identity()).dedup() 10:55:50.782 [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:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.783 [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:34849, hostUri=ws://localhost:34849/gremlin}} -labels: 0 +labels: 0 +nodes: 0 -nodes: 0 -properties: 0 +properties: 0 -relationships: 0 +relationships: 0
10:55:50.786 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().drop()}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}}
CREATE ({id: 0})
10:55:50.787 [Test worker] DEBUG o.a.t.g.driver.Client - CREATE ({id: 0})}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.787 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: CREATE ({id: 0}) 10:55:50.788 [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
10:55:50.810 [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:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.810 [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 10:55:50.815 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.inject(' cypher.start').project(' GENERATED3', ' GENERATED4').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 |
10:55:50.819 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) RETURN id(n)}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.819 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) RETURN id(n) 10:55:50.821 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().project('id(n)').by(__.id()) 10:55:50.821 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH ()-[r]->() RETURN id(r)}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.821 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH ()-[r]->() RETURN id(r) 10:55:50.823 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.E().project('id(r)').by(__.id()) 10:55:50.826 [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:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.826 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label 10:55:50.827 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().label().is(neq('vertex')).project('label').by(__.identity()).dedup() 10:55:50.830 [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:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.830 [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:34849, hostUri=ws://localhost:34849/gremlin}} -labels: 0 +labels: 0 +nodes: 0 -nodes: 0 -properties: 0 +properties: 0 -relationships: 0 +relationships: 0
10:55:50.834 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().drop()}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}}
CREATE ({id: 0})
10:55:50.835 [Test worker] DEBUG o.a.t.g.driver.Client - CREATE ({id: 0})}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.835 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: CREATE ({id: 0}) 10:55:50.836 [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
10:55:50.853 [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:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.853 [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 10:55:50.858 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.inject(' cypher.start').project(' GENERATED3', ' GENERATED4').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 |
10:55:50.872 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) RETURN id(n)}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.872 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) RETURN id(n) 10:55:50.874 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().project('id(n)').by(__.id()) 10:55:50.874 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH ()-[r]->() RETURN id(r)}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.875 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH ()-[r]->() RETURN id(r) 10:55:50.877 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.E().project('id(r)').by(__.id()) 10:55:50.879 [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:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.879 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label 10:55:50.881 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().label().is(neq('vertex')).project('label').by(__.identity()).dedup() 10:55:50.883 [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:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.884 [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:34849, hostUri=ws://localhost:34849/gremlin}} -labels: 0 +labels: 0 +nodes: 0 -nodes: 0 -properties: 0 +properties: 0 -relationships: 0 +relationships: 0
10:55:50.887 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().drop()}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}}
CREATE ()
10:55:50.888 [Test worker] DEBUG o.a.t.g.driver.Client - CREATE ()}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.888 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: CREATE () 10:55:50.889 [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)
10:55:50.908 [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:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.908 [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) 10:55:50.911 [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 |
10:55:50.912 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) RETURN id(n)}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.912 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) RETURN id(n) 10:55:50.914 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().project('id(n)').by(__.id()) 10:55:50.914 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH ()-[r]->() RETURN id(r)}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.914 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH ()-[r]->() RETURN id(r) 10:55:50.916 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.E().project('id(r)').by(__.id()) 10:55:50.918 [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:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.918 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label 10:55:50.920 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().label().is(neq('vertex')).project('label').by(__.identity()).dedup() 10:55:50.922 [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:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.926 [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:34849, hostUri=ws://localhost:34849/gremlin}} -labels: 0 +labels: 0 +nodes: 0 -nodes: 0 -properties: 0 +properties: 0 -relationships: 0 +relationships: 0
10:55:50.930 [Test worker] DEBUG o.a.t.g.driver.Client - g.V().drop()}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}}
CREATE ()-[:T]->()
10:55:50.930 [Test worker] DEBUG o.a.t.g.driver.Client - CREATE ()-[:T]->()}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.930 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: CREATE ()-[:T]->() 10:55:50.932 [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)
10:55:50.950 [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:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.950 [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) 10:55:50.953 [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 |
10:55:50.954 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH (n) RETURN id(n)}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.954 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) RETURN id(n) 10:55:50.956 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().project('id(n)').by(__.id()) 10:55:50.956 [Test worker] DEBUG o.a.t.g.driver.Client - MATCH ()-[r]->() RETURN id(r)}} to - Connection{host=Host{address=localhost/127.0.0.1:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.956 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH ()-[r]->() RETURN id(r) 10:55:50.958 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.E().project('id(r)').by(__.id()) 10:55:50.959 [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:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.959 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Cypher: MATCH (n) UNWIND labels(n) AS label RETURN DISTINCT label 10:55:50.961 [gremlin-server-worker-1] INFO o.o.g.s.o.c.CypherOpProcessor - Gremlin: g.V().label().is(neq('vertex')).project('label').by(__.identity()).dedup() 10:55:50.963 [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:34849, hostUri=ws://localhost:34849/gremlin}} 10:55:50.966 [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:34849, hostUri=ws://localhost:34849/gremlin}} -labels: 0 +labels: 0 +nodes: 0 -nodes: 0 -properties: 0 +properties: 0 -relationships: 0 +relationships: 0