diff --git a/docs/query-helpers.md b/docs/query-helpers.md index e92ccf1..29f9796 100644 --- a/docs/query-helpers.md +++ b/docs/query-helpers.md @@ -609,6 +609,7 @@ Add an ORDER BY clause. There are many different acceptable inputs here best des // quote your columns and add in the default table , order: { id: 'desc', name: 'asc' } , order: ['id desc', 'name asc'] +, order: [{ id: 'desc'}, { name: 'asc'}] , order: 'id desc' } ``` diff --git a/helpers/query/order.js b/helpers/query/order.js index 3864716..fff02e1 100644 --- a/helpers/query/order.js +++ b/helpers/query/order.js @@ -6,7 +6,19 @@ helpers.register('order', function(order, values, query){ if (typeof order === 'string') return output + order; - if (Array.isArray(order)) return output + order.join(', '); + if (Array.isArray(order)) { + if (typeof order[0] === 'string') { + return output + order.join(', '); + } else { + for (var i in order) { + for (var key in order[i]){ + output += utils.quoteObject(key, query.__defaultTable) + ' ' + order[i][key] + ', '; + } + } + return output.substring(0, output.length - 2); + } + + } for (var key in order){ output += utils.quoteObject(key, query.__defaultTable) + ' ' + order[key] + ', '; diff --git a/test/select.js b/test/select.js index 114c0e9..5ec2551 100644 --- a/test/select.js +++ b/test/select.js @@ -234,6 +234,19 @@ describe('Built-In Query Types', function(){ ); }); + it ('order by array of objects', function(){ + var query = builder.sql({ + type: 'select' + , table: 'users' + , order: [{ id: 'desc'}, { name: 'asc'}] + }); + + assert.equal( + query.toString() + , 'select "users".* from "users" order by "users"."id" desc, "users"."name" asc' + ); + }); + it ('order by object', function(){ var query = builder.sql({ type: 'select'