@@ -1556,3 +1556,49 @@ test("Test reserved keywords as relationship types and labels", async () => {
15561556 expect ( results . length ) . toBe ( 1 ) ;
15571557 expect ( results [ 0 ] ) . toEqual ( { name1 : "Node 1" , name2 : "Node 2" } ) ;
15581558} ) ;
1559+
1560+ test ( "Test match with node reference passed through WITH" , async ( ) => {
1561+ await new Runner ( `
1562+ CREATE VIRTUAL (:User) AS {
1563+ UNWIND [
1564+ {id: 1, name: 'Alice', mail: 'alice@test.com', jobTitle: 'CEO'},
1565+ {id: 2, name: 'Bob', mail: 'bob@test.com', jobTitle: 'VP'},
1566+ {id: 3, name: 'Carol', mail: 'carol@test.com', jobTitle: 'VP'},
1567+ {id: 4, name: 'Dave', mail: 'dave@test.com', jobTitle: 'Engineer'}
1568+ ] AS record
1569+ RETURN record.id AS id, record.name AS name, record.mail AS mail, record.jobTitle AS jobTitle
1570+ }
1571+ ` ) . run ( ) ;
1572+ await new Runner ( `
1573+ CREATE VIRTUAL (:User)-[:MANAGES]-(:User) AS {
1574+ UNWIND [
1575+ {left_id: 1, right_id: 2},
1576+ {left_id: 1, right_id: 3},
1577+ {left_id: 2, right_id: 4}
1578+ ] AS record
1579+ RETURN record.left_id AS left_id, record.right_id AS right_id
1580+ }
1581+ ` ) . run ( ) ;
1582+ // Equivalent to:
1583+ // MATCH (ceo:User)-[:MANAGES]->(dr1:User)
1584+ // WHERE ceo.jobTitle = 'CEO'
1585+ // WITH ceo, dr1
1586+ // MATCH (ceo)-[:MANAGES]->(dr2:User)
1587+ // WHERE dr1.mail <> dr2.mail
1588+ // RETURN ceo, dr1, dr2
1589+ const match = new Runner ( `
1590+ MATCH (ceo:User)-[:MANAGES]->(dr1:User)
1591+ WHERE ceo.jobTitle = 'CEO'
1592+ WITH ceo, dr1
1593+ MATCH (ceo)-[:MANAGES]->(dr2:User)
1594+ WHERE dr1.mail <> dr2.mail
1595+ RETURN ceo.name AS ceo, dr1.name AS dr1, dr2.name AS dr2
1596+ ` ) ;
1597+ await match . run ( ) ;
1598+ const results = match . results ;
1599+ // CEO (Alice) manages Bob and Carol. All distinct pairs:
1600+ // (Alice, Bob, Carol) and (Alice, Carol, Bob)
1601+ expect ( results . length ) . toBe ( 2 ) ;
1602+ expect ( results [ 0 ] ) . toEqual ( { ceo : "Alice" , dr1 : "Bob" , dr2 : "Carol" } ) ;
1603+ expect ( results [ 1 ] ) . toEqual ( { ceo : "Alice" , dr1 : "Carol" , dr2 : "Bob" } ) ;
1604+ } ) ;
0 commit comments