From 3de89d61c27f2dd44f82547fc1a5da637967b554 Mon Sep 17 00:00:00 2001 From: Ben Griffiths Date: Mon, 21 Jan 2019 11:31:25 +0000 Subject: [PATCH 1/2] Don't treat orderBy arrays as filter params --- src/translate.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/translate.js b/src/translate.js index 18222a1d..5f289630 100644 --- a/src/translate.js +++ b/src/translate.js @@ -88,8 +88,9 @@ export const relationFieldOnNodeType = ({ tailParams, temporalClauses }) => { - const arrayFilterParams = _.pickBy(filterParams, param => - Array.isArray(param.value) + const arrayFilterParams = _.pickBy( + filterParams, + (param, keyName) => Array.isArray(param.value) && !('orderBy' === keyName) ); const allParams = innerFilterParams(filterParams, temporalArgs); From 8749db8dcc4c85c0e6ceb23e4f2faf94df63ca61 Mon Sep 17 00:00:00 2001 From: Ben Griffiths Date: Mon, 21 Jan 2019 11:36:34 +0000 Subject: [PATCH 2/2] Support arrays of orderBy args --- src/utils.js | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/utils.js b/src/utils.js index cb4a98a0..15540f34 100644 --- a/src/utils.js +++ b/src/utils.js @@ -301,24 +301,31 @@ export function computeSkipLimit(selection, variableValues) { return `[${offset}..${parseInt(offset) + parseInt(first)}]`; } +function orderByStatement(resolveInfo, orderByVar) { + const splitIndex = orderByVar.lastIndexOf('_'); + const order = orderByVar.substring(splitIndex + 1); + const orderBy = orderByVar.substring(0, splitIndex); + const { variableName } = typeIdentifiers(resolveInfo.returnType); + return ` ${variableName}.${orderBy} ${order === 'asc' ? 'ASC' : 'DESC'} `; +} + export const computeOrderBy = (resolveInfo, selection) => { - const orderByVar = argumentValue( + const orderByArgs = argumentValue( resolveInfo.operation.selectionSet.selections[0], 'orderBy', resolveInfo.variableValues ); - if (orderByVar == undefined) { + if (orderByArgs == undefined) { return ''; - } else { - const splitIndex = orderByVar.lastIndexOf('_'); - const order = orderByVar.substring(splitIndex + 1); - const orderBy = orderByVar.substring(0, splitIndex); - const { variableName } = typeIdentifiers(resolveInfo.returnType); - return ` ORDER BY ${variableName}.${orderBy} ${ - order === 'asc' ? 'ASC' : 'DESC' - } `; } + + const orderByArray = Array.isArray(orderByArgs) ? orderByArgs : [orderByArgs]; + const orderByStatments = orderByArray.map(orderByVar => + orderByStatement(resolveInfo, orderByVar) + ); + + return ' ORDER BY' + orderByStatments.join(','); }; export const possiblySetFirstId = ({ args, statements, params }) => {