Nested / cyclic filtering not working

ppp225 commented :

schema

type Car {
	carName: string
	carStat: [Stat]
	carContract: [Contract]
}
carName: string @index(hash) .
carStat: [uid] @reverse .
carContract: [uid] @reverse .

type Stat {
	statName: string
}
statName: string @index(hash) .

type Contract {
	contractID: string
	contractDealer: Dealer
	contractGroup: Group
}
contractID: string .
contractDealer: uid @reverse .
contractGroup: uid @reverse .

type Dealer {
	dealerName: string
}
dealerName: string @index(hash) .

type Group {
	groupName: string
	groupStat: Stat
}
groupName: string .
groupStat: uid @reverse .

mutation

{
set {
<_:Ferrari> <carName> "Ferrari" .
<_:Porsche> <carName> "Porsche" .
<_:Speed> <statName> "Speed" .
<_:Handling> <statName> "Handling" .

<_:Ferrari> <carStat> <_:Speed>(statValue=1.0) .
<_:Ferrari> <carStat> <_:Handling>(statValue=0.6) .
<_:Porsche> <carStat> <_:Speed>(statValue=0.7) .
<_:Porsche> <carStat> <_:Handling>(statValue=0.9) .

<_:Dealer1> <dealerName> "Dealer1" .
<_:Dealer2> <dealerName> "Dealer2" .
<_:contract1> <contractID> "111" .
<_:contract2> <contractID> "222" .
<_:contract3> <contractID> "333" .
<_:contract4> <contractID> "444" .

<_:Ferrari> <carContract> <_:contract1> .
<_:Porsche> <carContract> <_:contract2> .
<_:Ferrari> <carContract> <_:contract3> .
<_:Ferrari> <carContract> <_:contract4> .

<_:contract1> <contractDealer> <_:Dealer2> .
<_:contract2> <contractDealer> <_:Dealer2> .
<_:contract3> <contractDealer> <_:Dealer1> .
<_:contract4> <contractDealer> <_:Dealer2> .

<_:group1> <groupName> "SpeedGroup" .
<_:contract1> <contractGroup> <_:group1> .
<_:contract2> <contractGroup> <_:group1> .
<_:contract3> <contractGroup> <_:group1> .
<_:contract4> <contractGroup> <_:group2> .
<_:group1> <groupStat> <_:Speed> .
<_:group2> <groupStat> <_:Handling> .

<_:Ferrari> <dgraph.type> "Car" .
<_:Porsche> <dgraph.type> "Car" .
<_:Speed> <dgraph.type> "Stat" .
<_:Handling> <dgraph.type> "Stat" .
<_:Dealer1> <dgraph.type> "Dealer" .
<_:Dealer2> <dgraph.type> "Dealer" .
<_:contract1> <dgraph.type> "Contract" .
<_:contract2> <dgraph.type> "Contract" .
<_:contract3> <dgraph.type> "Contract" .
<_:group1> <dgraph.type> "Group" .
}
}

query

query {
  withFilter(func: Type(Car), first: 1) {
    carName
    S as carStat @filter(eq(statName, "Speed")) {
      uid
      statName
    }
    count(carStat @filter(eq(statName, "Speed"))) # one Stat node statName=Speed
    carContract {
      contractID
      contractGroup {
        groupName
        groupStat @filter(uid(S)) { # empty, but shouldn't be
          uid
          statName
        }
      }
    }
  }
  withoutFilter(func: Type(Car), first: 1) {
    carContract {
      contractGroup {
        groupStat {
          uid
          statName  # this is the one, it should be visible with filter
        }
      }
    }
  }
}

result

  "data": {
    "withFilter": [
      {
        "carName": "Porsche",
        "carStat": [
          {
            "uid": "0x16",
            "statName": "Speed" # one Stat node statName=Speed
          }
        ],
        "count(carStat)": 1,
        "carContract": [
          {
            "contractID": "222",
            "contractGroup": {
              "groupName": "SpeedGroup" # here is missing
            }
          }
        ]
      }
    ],
    "withoutFilter": [
      {
        "carContract": [
          {
            "contractGroup": {
              "groupStat": {
                "uid": "0x16",
                "statName": "Speed" # this is the one, it should be visible with filter
              }
            }
          }
        ]
      }
    ]
  }