refs #6694 perf: improve filter
gitea/salix/pipeline/head There was a failure building this commit
Details
gitea/salix/pipeline/head There was a failure building this commit
Details
This commit is contained in:
parent
5d53d69754
commit
5b2b6a15ad
|
@ -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, ';');
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue