parse-community / parse-server

Parse Server for Node.js / Express
https://parseplatform.org
Apache License 2.0
20.9k stars 4.78k forks source link

Relation is resolved as column in graphQL and Postgres #6419

Open Wouter125 opened 4 years ago

Wouter125 commented 4 years ago

Issue Description

I set up a Postgres instance with Parse and GraphQL. If I run a GraphQL query against my db that contains a relation, the relation is being resolved as a column instead of a relation causing a crash.

Steps to reproduce

  1. Setup a parse server + parse dashboard
  2. Enable GraphQL
  3. Connect to a Postgres instance
  4. Open the GraphQL playground inside the dashboard
  5. Execute the following query;
query Roles {
  roles(first: 1) {
    edges {
      node {
        users {
          edges {
            node {
              username
            }
          }
        }
      }
    }
  }
}

Expected Results

I would expect to get an empty set of data since we have a clean Database.

Actual Outcome

Instead users is being resolved as a column and not a relation causing the following error;

"message": "error: column \"users\" does not exist",

Environment Setup

Logs/Trace

With Verbose on this is all I get;

Parse error: error: column "users" does not exist {"code":1,"stack":"Error: error: column \"users\" does not exist\n    at /home/wouter/app/node_modules/parse-server/lib/Controllers/DatabaseController.js:1179:21\n    at runMicrotasks (<anonymous>)\n    at processTicksAndRejections (internal/process/task_queues.js:97:5)\n    at async Object.findObjects (/home/wouter/app/node_modules/parse-server/lib/GraphQL/helpers/objectsQueries.js:149:24)\n    at async resolve (/home/wouter/app/node_modules/parse-server/lib/GraphQL/loaders/parseClassQueries.js:139:18)"}

Aditional

It does work if I create the user column myself through PGAdmin. Then it correctly resolves the relation instead of the column. So it's either inside the schema or the resolver.

stale[bot] commented 3 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

cjbland commented 3 years ago

Is the workaround in the description the recommended solution? I have run into this as well. Here's the GraphQL query we are trying to execute:

roles(where: { users: { have: { id: { equalTo: $userId } } } }) {
  edges {
    node {
      name
      users {
        edges {
          node {
            username
          }
        }
      }
    }
  }
}

And it results in this message from the server:

{
  "errors": [
    {
      "message": "error: column \"users\" does not exist",
      "locations": [{ "line": 19, "column": 3 }],
      "path": ["roles"],
      "extensions": { "code": 1 }
    }
  ],
  "data": null
}

EDIT: Similar operating environment as the original post, using PostgreSQL running in AWS RDS and parse-server v4.5.0

davimacedo commented 3 years ago

@cjbland would you be willed to help fixing this bug?

cjbland commented 3 years ago

Sure, I'll take a stab at it.