fix(bi): orderBy bug under MySQL ()

* fix(bi): orderBy bug under MySQL

* fix: compatible with pgsql
This commit is contained in:
YANG QIA 2023-07-19 21:25:49 +08:00 committed by GitHub
parent 1f91ebc65e
commit 4e979bc7b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 53 additions and 51 deletions
packages/plugins/data-visualization/src/server
__tests__
actions

View File

@ -41,8 +41,8 @@ describe('api', () => {
const repo = db.getRepository('chart_test'); const repo = db.getRepository('chart_test');
await repo.create({ await repo.create({
values: [ values: [
{ price: 1, count: 1, title: 'title1' }, { price: 1, count: 1, title: 'title1', createdAt: '2023-02-02' },
{ price: 2, count: 2, title: 'title2' }, { price: 2, count: 2, title: 'title2', createdAt: '2023-01-01' },
], ],
}); });
}); });
@ -51,55 +51,52 @@ describe('api', () => {
await db.close(); await db.close();
}); });
test('query', () => { test('query', async () => {
expect.assertions(1); const result = await queryData({ db } as any, {
return expect( collection: 'chart_test',
queryData({ db } as any, { measures: [
collection: 'chart_test', {
measures: [ field: ['price'],
{ alias: 'Price',
field: ['price'], },
alias: 'Price', {
}, field: ['count'],
{ alias: 'Count',
field: ['count'], },
alias: 'Count', ],
}, dimensions: [
], {
dimensions: [ field: ['title'],
{ alias: 'Title',
field: ['title'], },
alias: 'Title', ],
}, });
], expect(result).toBeDefined();
}),
).resolves.toBeDefined();
}); });
test('query with sort', () => { test('query with sort', async () => {
expect.assertions(1); const result = await queryData({ db } as any, {
return expect( collection: 'chart_test',
queryData({ db } as any, { measures: [
collection: 'chart_test', {
measures: [ field: ['price'],
{ aggregation: 'sum',
field: ['price'], alias: 'Price',
aggregation: 'sum', },
alias: 'Price', ],
}, dimensions: [
], {
dimensions: [ field: ['title'],
{ alias: 'Title',
field: ['title'], },
alias: 'Title', {
}, field: ['createdAt'],
{ format: 'YYYY-MM',
field: ['createdAt'], },
format: 'YYYY', ],
}, orders: [{ field: 'createdAt', order: 'asc' }],
], });
orders: [{ field: 'createdAt', order: 'asc' }], expect(result).toBeDefined();
}), expect(result).toMatchObject([{ createdAt: '2023-01' }, { createdAt: '2023-02' }]);
).resolves.toBeDefined();
}); });
}); });

View File

@ -161,7 +161,12 @@ export const parseBuilder = (ctx: Context, builder: QueryParams) => {
}); });
orders.forEach((item: OrderProps) => { orders.forEach((item: OrderProps) => {
const name = hasAgg ? sequelize.literal(`"${item.alias}"`) : sequelize.col(item.field as string); const dialect = sequelize.getDialect();
let alias = `"${item.alias}"`;
if (dialect === 'mysql') {
alias = `\`${item.alias}\``;
}
const name = hasAgg ? sequelize.literal(alias) : sequelize.col(item.field as string);
order.push([name, item.order || 'ASC']); order.push([name, item.order || 'ASC']);
}); });