rexxars / sql-to-graphql

Generate a GraphQL API based on your SQL database structure

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Unhandled exception for mySQL database

gjtorikian opened this issue · comments

I'm not really sure how to resolve this:

sql2graphql --database project_development --output-dir=.

Unhandled rejection TypeError: Cannot read property 'originalName' of undefined
    at generateListReferenceField (/usr/local/lib/node_modules/sql-to-graphql/steps/generate-types.js:154:105)
    at /usr/local/lib/node_modules/sql-to-graphql/steps/generate-types.js:59:25
    at Array.forEach (native)
    at generateType (/usr/local/lib/node_modules/sql-to-graphql/steps/generate-types.js:58:30)
    at Object.generateTypes (/usr/local/lib/node_modules/sql-to-graphql/steps/generate-types.js:32:27)
    at /usr/local/lib/node_modules/sql-to-graphql/cli.js:144:28
    at /usr/local/lib/node_modules/sql-to-graphql/node_modules/async/lib/async.js:726:13
    at /usr/local/lib/node_modules/sql-to-graphql/node_modules/async/lib/async.js:52:16
    at done (/usr/local/lib/node_modules/sql-to-graphql/node_modules/async/lib/async.js:246:17)
    at /usr/local/lib/node_modules/sql-to-graphql/node_modules/async/lib/async.js:44:16
    at /usr/local/lib/node_modules/sql-to-graphql/node_modules/async/lib/async.js:723:17
    at /usr/local/lib/node_modules/sql-to-graphql/node_modules/async/lib/async.js:167:37
    at /usr/local/lib/node_modules/sql-to-graphql/node_modules/lodash/function/after.js:43:19
    at /usr/local/lib/node_modules/sql-to-graphql/steps/find-one-to-many-rels.js:56:13
    at /usr/local/lib/node_modules/sql-to-graphql/backends/mysql.js:89:21
    at tryCatcher (/usr/local/lib/node_modules/sql-to-graphql/node_modules/bluebird/js/main/util.js:26:23)

The database user is root and there is no password.

Effectively, one of my tables did not have a PRIMARY KEY set. Here's a diff of a hack I did to work around it:

+        var fields = find(reference.model.fields, { isPrimaryKey: true })
+        var resolver;
+
+        if (fields === undefined) {
+            console.warn('could not find primary key on :');
+            console.warn(reference.model);
+            resolver = null;
+        } else {
+            resolver = fields.originalName;
+        }

         return generateField({
             name: reference.field,
             description: reference.description || opts.defaultDescription + ' (reference)',
-            resolve: buildResolver(reference.model, find(reference.model.fields, { isPrimaryKey: true }).originalName),
+            resolve: buildResolver(reference.model, find(reference.model.fields).originalName),