Ryan
Ryan

Reputation: 2203

How to filter GraphQL results by a descendent without edges?

I just started looking at GraphQL and I am wondering if there is a way to filter results that don't have any nodes. Here is a relatively simple example query:

query { 
  organization(login:"GitHub") { 
    repositories(first: 20) {
      edges {
        node {
          name
          pullRequests(first: 5, states: OPEN){
            edges {
              node {
                title
                author{
                  login
                }
                updatedAt
              }
            }
          }
        }
      }
    }
  }
}

and here is a subset of the results that query returns:

{
  "data": {
    "organization": {
      "repositories": {
        "edges": [
          {
            "node": {
              "name": "gitignore",
              "pullRequests": {
                "edges": [
                  {
                    "node": {
                      "title": "Create new CodeComposerStudio.gitignore",
                      "author": {
                        "login": "wolf99"
                      },
                      "updatedAt": "2017-07-26T20:31:53Z"
                    }
                  },
                  {
                    "node": {
                      "title": "Create PVS.gitignore",
                      "author": {
                        "login": "cesaramh"
                      },
                      "updatedAt": "2017-05-01T19:42:07Z"
                    }
                  },
                  {
                    "node": {
                      "title": "gitignore for Magic Software Enterprises product xpa ",
                      "author": {
                        "login": "tommes"
                      },
                      "updatedAt": "2017-05-01T19:41:53Z"
                    }
                  },
                  {
                    "node": {
                      "title": "Create PSoC.gitignore",
                      "author": {
                        "login": "dbrwn"
                      },
                      "updatedAt": "2017-05-01T19:41:39Z"
                    }
                  },
                  {
                    "node": {
                      "title": "add ThinkPHP gitignore file",
                      "author": {
                        "login": "swumao"
                      },
                      "updatedAt": "2017-05-01T19:40:53Z"
                    }
                  }
                ]
              }
            }
          },
          {
            "node": {
              "name": "dmca",
              "pullRequests": {
                "edges": []
              }
            }
          }
        ]
      }
    }
  }
}

So I'd like to know if there is a way to modify my query so that it would not return the node named dmca since there are no edges on pullRequests.

Upvotes: 0

Views: 2447

Answers (2)

Daniel Jakobsen Hallel
Daniel Jakobsen Hallel

Reputation: 584

If you are using githubs graphql api than it seems that there is no way to filter those edges, But if you're implementing the graphql server then it's possible to know what the edges nodes are and thus filter it in the edge resolver

Upvotes: 1

Marco Daniel
Marco Daniel

Reputation: 5765

According to GitHub repositories documentation does not allow that kind of filtering.

first: Int
Returns the first n elements from the list.

after: String
Returns the elements in the list that come after the specified cursor.

last: Int
Returns the last n elements from the list.

before: String
Returns the elements in the list that come before the specified cursor.

privacy: RepositoryPrivacy
If non-null, filters repositories according to privacy

orderBy: RepositoryOrder
Ordering options for repositories returned from the connection

affiliations: [RepositoryAffiliation]
Affiliation options for repositories returned from the connection

isLocked: Boolean
If non-null, filters repositories according to whether they have been locked

isFork: Boolean
If non-null, filters repositories according to whether they are forks of another repository

So I don't think that can be done.

Upvotes: 0

Related Questions