Browse Source

fix: GraphQL error with MySQL and FULL OUTER JOIN (#2104)

* fix: GraphQL error with MySQL and FULL OUTER JOIN #2071
Regev Brody 5 years ago
parent
commit
33a9d5774c
1 changed files with 24 additions and 7 deletions
  1. 24 7
      server/graph/resolvers/page.js

+ 24 - 7
server/graph/resolvers/page.js

@@ -246,14 +246,31 @@ module.exports = {
      * FETCH PAGE LINKS
      */
     async links (obj, args, context, info) {
-      let results = []
+      let results;
 
-      results = await WIKI.models.knex('pages')
-        .column({ id: 'pages.id' }, { path: 'pages.path' }, 'title', { link: 'pageLinks.path' }, { locale: 'pageLinks.localeCode' })
-        .fullOuterJoin('pageLinks', 'pages.id', 'pageLinks.pageId')
-        .where({
-          'pages.localeCode': args.locale
-        })
+      if (WIKI.config.db.type === 'mysql' || WIKI.config.db.type === 'mariadb' || WIKI.config.db.type === 'sqlite') {
+        results = await WIKI.models.knex('pages')
+          .column({ id: 'pages.id' }, { path: 'pages.path' }, 'title', { link: 'pageLinks.path' }, { locale: 'pageLinks.localeCode' })
+          .leftJoin('pageLinks', 'pages.id', 'pageLinks.pageId')
+          .where({
+            'pages.localeCode': args.locale
+          })
+          .unionAll(
+            WIKI.models.knex('pageLinks')
+              .column({ id: 'pages.id' }, { path: 'pages.path' }, 'title', { link: 'pageLinks.path' }, { locale: 'pageLinks.localeCode' })
+              .leftJoin('pages', 'pageLinks.pageId', 'pages.id')
+              .where({
+                'pages.localeCode': args.locale
+              })
+          )
+      } else {
+        results = await WIKI.models.knex('pages')
+          .column({ id: 'pages.id' }, { path: 'pages.path' }, 'title', { link: 'pageLinks.path' }, { locale: 'pageLinks.localeCode' })
+          .fullOuterJoin('pageLinks', 'pages.id', 'pageLinks.pageId')
+          .where({
+            'pages.localeCode': args.locale
+          })
+      }
 
       return _.reduce(results, (result, val) => {
         // -> Check if user has access to source and linked page