From 01d9ed259f8729c1a93ac9334f22488fc44b15c7 Mon Sep 17 00:00:00 2001 From: Lucas Brogni Date: Sat, 29 Aug 2020 09:49:27 -0300 Subject: [PATCH 1/3] feat: Allow users to make queries with or statement --- src/BaseModel.js | 2 +- src/query_builder/read.js | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) 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 } From 7459505c575a180bc7d5c50619f1454cde72ec6b Mon Sep 17 00:00:00 2001 From: Lucas Brogni Date: Sat, 29 Aug 2020 09:49:46 -0300 Subject: [PATCH 2/3] test: add test scenario to or statement queries --- __tests__/BaseModel.test.js | 9 +++++++++ 1 file changed, 9 insertions(+) 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([]) + }) + }) }) }) From f4d4ad816fccafd16b8bb4c696e4ee31710486f8 Mon Sep 17 00:00:00 2001 From: Lucas Brogni Date: Sat, 29 Aug 2020 09:53:44 -0300 Subject: [PATCH 3/3] docs: update readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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)