refs #6694 perf: improve filter
gitea/salix/pipeline/head There was a failure building this commit Details

This commit is contained in:
Javier Segarra 2024-01-24 08:36:08 +01:00
parent 5d53d69754
commit 5b2b6a15ad
2 changed files with 27 additions and 15 deletions

View File

@ -35,8 +35,10 @@ module.exports = Self => {
if (typeof options == 'object') if (typeof options == 'object')
Object.assign(myOptions, options); Object.assign(myOptions, options);
filter = ctx?.filter ?? {};
const conn = Self.dataSource.connector; const conn = Self.dataSource.connector;
const where = buildFilter(ctx.where, (param, value) => { const where = buildFilter(filter?.where, (param, value) => {
switch (param) { switch (param) {
case 'search': case 'search':
return {or: [ return {or: [
@ -48,13 +50,15 @@ module.exports = Self => {
}; };
} }
}) ?? {}; }) ?? {};
delete ctx.filter.where;
filter = mergeFilters(ctx?.where ?? {}, where);
const stmts = []; const stmts = [];
let stmt; let stmt;
stmt = new ParameterizedSQL(` stmt = new ParameterizedSQL(`
SELECT SELECT
pc.townFk,
t.provinceFk,
p.countryFk,
pc.code, pc.code,
t.name as town, t.name as town,
p.name as province, p.name as province,
@ -66,7 +70,7 @@ module.exports = Self => {
JOIN country c on c.id = p.countryFk 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 itemsIndex = stmts.push(stmt) - 1;
const sql = ParameterizedSQL.join(stmts, ';'); const sql = ParameterizedSQL.join(stmts, ';');

View File

@ -7,13 +7,13 @@ describe('Postcode filter()', () => {
try { try {
const ctx = { const ctx = {
args: { filter: {
}, },
limit: 1
}; };
const results = await models.Postcode.filter(ctx, options); const results = await models.Postcode.filter(ctx, options);
expect(results.length).toBeGreaterThan(0); expect(results.length).toEqual(1);
await tx.rollback(); await tx.rollback();
} catch (e) { } catch (e) {
await tx.rollback(); await tx.rollback();
@ -27,8 +27,10 @@ describe('Postcode filter()', () => {
try { try {
const ctx = { const ctx = {
args: { filter: {
search: 46, where: {
search: 46,
}
}, },
}; };
const results = await models.Postcode.filter(ctx, options); const results = await models.Postcode.filter(ctx, options);
@ -47,8 +49,10 @@ describe('Postcode filter()', () => {
try { try {
const ctx = { const ctx = {
args: { filter: {
search: 'Alz', where: {
search: 'Alz',
}
}, },
}; };
const results = await models.Postcode.filter(ctx, options); const results = await models.Postcode.filter(ctx, options);
@ -67,8 +71,10 @@ describe('Postcode filter()', () => {
try { try {
const ctx = { const ctx = {
args: { filter: {
search: 'one', where: {
search: 'one',
}
}, },
}; };
const results = await models.Postcode.filter(ctx, options); const results = await models.Postcode.filter(ctx, options);
@ -87,8 +93,10 @@ describe('Postcode filter()', () => {
try { try {
const ctx = { const ctx = {
args: { filter: {
search: 'Ec', where: {
search: 'Ec',
}
}, },
}; };
const results = await models.Postcode.filter(ctx, options); const results = await models.Postcode.filter(ctx, options);