Skip to content

Commit

Permalink
Fix support for array of complex orderBys through find
Browse files Browse the repository at this point in the history
  • Loading branch information
vampirical committed Mar 7, 2024
1 parent 7a35da7 commit 591e36e
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 7 deletions.
8 changes: 6 additions & 2 deletions src/Record.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';
/* eslint-disable no-console */
const {connective: connectiveDefs, type, valueNow} = require('./constants');
const {connective: connectiveDefs, sort, type, valueNow} = require('./constants');
const {
FieldNotFoundError,
IncorrectFieldsError,
Expand Down Expand Up @@ -150,7 +150,11 @@ class Record extends Object {
instance.offset(offset);
}
if (orderBy) {
instance.orderBy(orderBy);
if (Array.isArray(orderBy) && !Object.values(sort).includes(orderBy[1])) {
instance.orderBy(...orderBy);
} else {
instance.orderBy(orderBy);
}
}
instance.options(options);
}
Expand Down
8 changes: 3 additions & 5 deletions src/RecordQuery.js
Original file line number Diff line number Diff line change
Expand Up @@ -226,11 +226,9 @@ class RecordQuery extends Object {
* @returns {RecordQuery}
*/
orderBy(...orderBys) {
const hasMultiple = Array.isArray(orderBys[0]);
if (hasMultiple) {
Array.prototype.push.apply(this.orderBys, orderBys);
} else {
this.orderBys.push(orderBys);
for (const orderBy of orderBys) {
const expanded = !Array.isArray(orderBy) ? [orderBy] : orderBy;
this.orderBys.push(expanded);
}

this.setLoaded(false);
Expand Down
15 changes: 15 additions & 0 deletions tests/RecordQuery.js
Original file line number Diff line number Diff line change
Expand Up @@ -938,6 +938,21 @@ test('order by multiple flat', async(t) => {
t.is(q.rows[1].aFlag, false);
});

test('order by multiple nested array', async(t) => {
const rows = await QueryTestRecord.find(
pool,
{aNumber: [100, 101], aFlag: SQL.valueNotNull},
{orderBy: [['aNumber', SQL.sort.desc], ['aFlag', SQL.sort.desc]]}
);

t.is(rows[0].aNumber, 101);
t.is(rows[1].aNumber, 101);
t.is(rows[2].aNumber, 100);
t.is(rows[3].aNumber, 100);
t.is(rows[0].aFlag, true);
t.is(rows[1].aFlag, false);
});

test('changing criteria marks as unloaded', async (t) => {
const q = await new SQL.RecordQuery(pool, QueryTestRecord, {output: SQL.outputType.object})
.where({aNumber: 100})
Expand Down

0 comments on commit 591e36e

Please sign in to comment.