diff --git a/src/index.js b/src/index.js index e0e7642..da03cc9 100644 --- a/src/index.js +++ b/src/index.js @@ -242,8 +242,18 @@ class DSSqlAdapter { filterQuery (resourceConfig, params, options) { let table = getTable(resourceConfig) - let query = options && options.transaction || this.query - query = query.select(`${table}.*`).from(table) + let query + + if (params instanceof Object.getPrototypeOf(this.query.client).QueryBuilder) { + query = params + params = {} + } else if (options && options.query) { + query = options.query || this.query + } else { + query = options && options.transaction || this.query + query = query.select(`${table}.*`).from(table) + } + params = params || {} params.where = params.where || {} params.orderBy = params.orderBy || params.sort diff --git a/test/filterQuery.spec.js b/test/filterQuery.spec.js new file mode 100644 index 0000000..2018313 --- /dev/null +++ b/test/filterQuery.spec.js @@ -0,0 +1,37 @@ +describe('DSSqlAdapter#filterQuery', function () { + + it('should use built-in query if no custom query provided', function* () { + var filterQuery = adapter.filterQuery(User); + assert.equal(filterQuery.toString(), 'select `user`.* from `user`') + }); + + it('should use custom query if passed as params (second parameter)', function* () { + var query = adapter.query.from('test'); + var filterQuery = adapter.filterQuery(User, query); + assert.equal(filterQuery.toString(), 'select * from `test`') + }); + + it('should use custom query if passed as options.query', function* () { + var query = adapter.query.from('test'); + var filterQuery = adapter.filterQuery(User, null, { query }); + assert.equal(filterQuery.toString(), 'select * from `test`') + }); + + it('should apply where from params to custom query', function* () { + var query = adapter.query.from('test'); + var filterQuery = adapter.filterQuery(User, { name: 'Sean' }, { query }); + assert.equal(filterQuery.toString(), 'select * from `test` where `name` = \'Sean\'') + }); + + it('should apply limit from params to custom query', function* () { + var query = adapter.query.from('test'); + var filterQuery = adapter.filterQuery(User, { limit: 2 }, { query }); + assert.equal(filterQuery.toString(), 'select * from `test` limit 2') + }); + + it('should apply order from params to custom query', function* () { + var query = adapter.query.from('test'); + var filterQuery = adapter.filterQuery(User, { orderBy: 'name' }, { query }); + assert.equal(filterQuery.toString(), 'select * from `test` order by `name` asc') + }); +}); diff --git a/test/find.spec.js b/test/find.spec.js index 30ca726..a961a06 100644 --- a/test/find.spec.js +++ b/test/find.spec.js @@ -1,4 +1,3 @@ -var Promise = require('bluebird'); describe('DSSqlAdapter#find', function () { it('should find a user in a Sql db', function* () { var user = yield adapter.create(User, {name: 'John'}); diff --git a/test/findAll.spec.js b/test/findAll.spec.js index 33f9fa7..550534f 100644 --- a/test/findAll.spec.js +++ b/test/findAll.spec.js @@ -1,4 +1,3 @@ -var Promise = require('bluebird'); describe('DSSqlAdapter#findAll', function () { it('should filter users', function* () { var users = yield adapter.findAll(User, { age: 30 });