diff --git a/README.md b/README.md index 83fa8e3..a10c2c1 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,8 @@ const options = { }, page: 2, limit: 30, - order: 'name ASC' + order: 'name ASC', + useOrStatement: false } Animal.query(options) diff --git a/__tests__/BaseModel.test.js b/__tests__/BaseModel.test.js index c9d0991..9338355 100644 --- a/__tests__/BaseModel.test.js +++ b/__tests__/BaseModel.test.js @@ -226,5 +226,14 @@ describe('actions', () => { expect(res).toEqual([]) }) }) + + it('find with or statement' , () => { + const options = { columns: '*', where: { nome_cont: '%Daniel%' } , useOrStatement: true } + return Tmp.query(options).then(res => { + expect(Tmp.repository.query).toHaveBeenCalledTimes(1) + expect(Tmp.repository.query).toBeCalledWith(options) + expect(res).toEqual([]) + }) + }) }) }) diff --git a/src/BaseModel.js b/src/BaseModel.js index 4da182f..1757d9a 100644 --- a/src/BaseModel.js +++ b/src/BaseModel.js @@ -89,7 +89,7 @@ export default class BaseModel { } /** - * @param {columns: '*', page: 1, limit: 30, where: {}, order: 'id DESC'} options + * @param {columns: '*', page: 1, limit: 30, where: {}, order: 'id DESC', useOrStatement: false } options */ static query(options) { return this.repository.query(options) diff --git a/src/query_builder/read.js b/src/query_builder/read.js index 847509b..3733be4 100644 --- a/src/query_builder/read.js +++ b/src/query_builder/read.js @@ -3,7 +3,8 @@ const defaultOptions = { page: null, limit: 30, where: {}, - order: 'id DESC' + order: 'id DESC', + useOrStatement: false } // Creates the "SELECT" sql statement for find one record @@ -18,12 +19,12 @@ export function find(tableName) { * }) */ export function query(tableName, options = {}) { - const { columns, page, limit, where, order } = { + const { columns, page, limit, where, order, useOrStatement } = { ...defaultOptions, ...options } - const whereStatement = queryWhere(where) + const whereStatement = queryWhere(where, useOrStatement) let sqlParts = [ 'SELECT', columns, @@ -69,9 +70,12 @@ export function propertyOperation(statement) { } // Build where query -export function queryWhere(options) { +export function queryWhere(options, useOrStatement) { + let statement = findStatement(useOrStatement) const list = Object.keys(options).map(p => `${propertyOperation(p)} ?`) - return list.length > 0 ? `WHERE ${list.join(' AND ')}` : '' + return list.length > 0 ? `WHERE ${list.join(statement)}` : '' } +const findStatement = (useOrStatement) => useOrStatement ? ' OR ' : ' AND '; + export default { find, query }