Skip to content

eq list with val() does not return all matches #5770

@danielmai

Description

@danielmai

What version of Dgraph are you using?

v20.03.3

Have you tried reproducing the issue with the latest release?

Yes

What is the hardware spec (RAM, OS)?

Ubuntu Linux, Docker

Steps to reproduce the issue (command/config used to run Dgraph).

  1. Run Dgraph cluster

  2. Set the following schema with a string predicate:

    curl 'localhost:8080/alter' \
         -d 'name: string .'
    
  3. Run the following mutation

    curl 'localhost:8080/mutate?commitNow=true' \
         -H "Content-Type: application/json" \
         -d '{"set":[{"uid":"_:root","connects":[{"name": "A"},{"name":"B"}]}]}'
    
  4. Run the following query

    curl 'localhost:8080/query' \
         -H "Content-Type: application/graphql+-" \
         -d '
    {
      var(func: has(name)) {
        n as name
      }
    
      names(func: uid(n)) {
        name
      }
      nameA(func: eq(val(n), "A")) {
        name
      }
      nameB(func: eq(val(n), "B")) {
        name
      }
    
      q(func: eq(val(n), ["A", "B"])) {
        name
      }
    }'
    

Expected behaviour and actual result.

The actual query result is:

{
  "data": {
    "q": [
      {
        "name": "A"
      }
    ]
  }
}

The expected query result is that eq(val(n), ["A", "B"]) in the filter returns back both nodes A and B in the response:

{
  "data": {
    "q": [
      {
        "name": "A"
      },
      {
        "name": "B"
      }
    ]
  }
}

When running a query to get the individual blocks out, I see the queries for individual matches to return back the data as expected:

Query

curl 'localhost:8080/query' \
        -H "Content-Type: application/graphql+-" \
        -d '
   {
     var(func: has(name)) {
       n as name
     }

     names(func: uid(n)) {
       name
     }
     nameA(func: eq(val(n), "A")) {
       name
     }
     nameB(func: eq(val(n), "B")) {
       name
     }

     q(func: eq(val(n), ["A", "B"])) {
       name
     }
   }'

Response

{
  "data": {
    "names": [
      {
        "name": "A"
      },
      {
        "name": "B"
      }
    ],
    "nameA": [
      {
        "name": "A"
      }
    ],
    "nameB": [
      {
        "name": "B"
      }
    ],
    "q": [
      {
        "name": "A"
      }
    ]
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/querylangIssues related to the query language specification and implementation.kind/bugSomething is broken.status/acceptedWe accept to investigate/work on it.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions