From 5b2b6a15ad704a67f357b7dcc8577bc2151e7cd5 Mon Sep 17 00:00:00 2001 From: Javier Segarra Date: Wed, 24 Jan 2024 08:36:08 +0100 Subject: [PATCH] refs #6694 perf: improve filter --- back/methods/postcode/filter.js | 12 ++++++--- back/methods/postcode/specs/filter.spec.js | 30 ++++++++++++++-------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/back/methods/postcode/filter.js b/back/methods/postcode/filter.js index 8dbe2965f..2ea70e15a 100644 --- a/back/methods/postcode/filter.js +++ b/back/methods/postcode/filter.js @@ -35,8 +35,10 @@ module.exports = Self => { if (typeof options == 'object') Object.assign(myOptions, options); + filter = ctx?.filter ?? {}; + const conn = Self.dataSource.connector; - const where = buildFilter(ctx.where, (param, value) => { + const where = buildFilter(filter?.where, (param, value) => { switch (param) { case 'search': return {or: [ @@ -48,13 +50,15 @@ module.exports = Self => { }; } }) ?? {}; - - filter = mergeFilters(ctx?.where ?? {}, where); + delete ctx.filter.where; const stmts = []; let stmt; stmt = new ParameterizedSQL(` SELECT + pc.townFk, + t.provinceFk, + p.countryFk, pc.code, t.name as town, p.name as province, @@ -66,7 +70,7 @@ module.exports = Self => { JOIN country c on c.id = p.countryFk `); - stmt.merge(conn.makeSuffix({where: filter, limit: ctx?.limit ?? 30})); + stmt.merge(conn.makeSuffix({where, ...ctx})); const itemsIndex = stmts.push(stmt) - 1; const sql = ParameterizedSQL.join(stmts, ';'); diff --git a/back/methods/postcode/specs/filter.spec.js b/back/methods/postcode/specs/filter.spec.js index c393b629a..60ac24809 100644 --- a/back/methods/postcode/specs/filter.spec.js +++ b/back/methods/postcode/specs/filter.spec.js @@ -7,13 +7,13 @@ describe('Postcode filter()', () => { try { const ctx = { - args: { - + filter: { }, + limit: 1 }; const results = await models.Postcode.filter(ctx, options); - expect(results.length).toBeGreaterThan(0); + expect(results.length).toEqual(1); await tx.rollback(); } catch (e) { await tx.rollback(); @@ -27,8 +27,10 @@ describe('Postcode filter()', () => { try { const ctx = { - args: { - search: 46, + filter: { + where: { + search: 46, + } }, }; const results = await models.Postcode.filter(ctx, options); @@ -47,8 +49,10 @@ describe('Postcode filter()', () => { try { const ctx = { - args: { - search: 'Alz', + filter: { + where: { + search: 'Alz', + } }, }; const results = await models.Postcode.filter(ctx, options); @@ -67,8 +71,10 @@ describe('Postcode filter()', () => { try { const ctx = { - args: { - search: 'one', + filter: { + where: { + search: 'one', + } }, }; const results = await models.Postcode.filter(ctx, options); @@ -87,8 +93,10 @@ describe('Postcode filter()', () => { try { const ctx = { - args: { - search: 'Ec', + filter: { + where: { + search: 'Ec', + } }, }; const results = await models.Postcode.filter(ctx, options);