graph-node icon indicating copy to clipboard operation
graph-node copied to clipboard

[Feature] Disable a graphql filter if the variable is not set

Open wanliqun opened this issue 1 year ago • 1 comments

Description

Hi, I was running a graph-node of the latest stable version (v0.33.0), and an example-subgraph. After that, I was trying to request entities with GraphQL query like:

curl 'http://127.0.0.1:9000/subgraphs/name/example' \
  -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8' \
  -H 'Connection: keep-alive' \
  -H 'Origin: http://127.0.0.1:9000' \
  -H 'Referer: http://127.0.0.1:9000/subgraphs/name/example/graphql' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: same-origin' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36' \
  -H 'accept: application/json, multipart/mixed' \
  -H 'content-type: application/json' \
  -H 'sec-ch-ua: "Google Chrome";v="117", "Not;A=Brand";v="8", "Chromium";v="117"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"query":"query MyQuery($id: ID) {\n  gravatars(first: 10, where: {id: $id}) {\n    id\n  }\n}","variables":{},"operationName":"MyQuery","extensions":{"headers":null}}' \
  --compressed

For more clarity, we define a filter variable id but leave it alone without setting any value.

query MyQuery($id: ID) {
  gravatars(first: 10, where: {id: $id}) {
    id
  }
}

In this case, the graph-node returns me nothing, looking like it takes the variable id as null, and queries the Postgres with the filter condition to check if id is equal to null.

Interestingly, while I was trying to simulate a similar action in our thegraph endpoint api.thegraph.com, even I didn't set any variables for id or symbol, the server would still response all entries regarding these filter variables as disabled.

curl 'https://api.thegraph.com/subgraphs/name/graphprotocol/compound-v2' \
  -H 'authority: api.thegraph.com' \
  -H 'accept: */*' \
  -H 'accept-language: zh-CN,zh;q=0.9,en;q=0.8' \
  -H 'content-type: application/json' \
  -H 'origin: https://api.thegraph.com' \
  -H 'referer: https://api.thegraph.com/subgraphs/name/graphprotocol/compound-v2' \
  -H 'sec-ch-ua: "Google Chrome";v="117", "Not;A=Brand";v="8", "Chromium";v="117"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  -H 'sec-fetch-dest: empty' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-site: same-origin' \
  -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36' \
  --data-raw '{"operationName":"markets","variables":{},"query":"query markets($id: ID, $symbol: String) {\n  markets(first: 7, where: {id: $id, symbol: $symbol}) {\n    id\n    symbol\n  }\n}\n"}' \
  --compressed

So, what is the main cause for this difference of GraphQL filter behavior between graph-node binary and our public api endpoint? Is it possible for graph-node to conform with the same behavior (disable a graphql filter if the variable is not set)?

This issue may also be relevant to #4112

Are you aware of any blockers that must be resolved before implementing this feature? If so, which? Link to any relevant GitHub issues.

No response

Some information to help us out

  • [ ] Tick this box if you plan on implementing this feature yourself.
  • [X] I have searched the issue tracker to make sure this issue is not a duplicate.

wanliqun avatar Nov 02 '23 07:11 wanliqun

Looks like this issue has been open for 6 months with no activity. Is it still relevant? If not, please remember to close it.

github-actions[bot] avatar May 01 '24 00:05 github-actions[bot]