From 4e979bc7b7361df3742a3cc77e599f413d5240dc Mon Sep 17 00:00:00 2001 From: YANG QIA <2013xile@gmail.com> Date: Wed, 19 Jul 2023 21:25:49 +0800 Subject: [PATCH] fix(bi): orderBy bug under MySQL (#2283) * fix(bi): orderBy bug under MySQL * fix: compatible with pgsql --- .../src/server/__tests__/api.test.ts | 97 +++++++++---------- .../src/server/actions/query.ts | 7 +- 2 files changed, 53 insertions(+), 51 deletions(-) diff --git a/packages/plugins/data-visualization/src/server/__tests__/api.test.ts b/packages/plugins/data-visualization/src/server/__tests__/api.test.ts index d7526c4ae..7b6e27d5e 100644 --- a/packages/plugins/data-visualization/src/server/__tests__/api.test.ts +++ b/packages/plugins/data-visualization/src/server/__tests__/api.test.ts @@ -41,8 +41,8 @@ describe('api', () => { const repo = db.getRepository('chart_test'); await repo.create({ values: [ - { price: 1, count: 1, title: 'title1' }, - { price: 2, count: 2, title: 'title2' }, + { price: 1, count: 1, title: 'title1', createdAt: '2023-02-02' }, + { price: 2, count: 2, title: 'title2', createdAt: '2023-01-01' }, ], }); }); @@ -51,55 +51,52 @@ describe('api', () => { await db.close(); }); - test('query', () => { - expect.assertions(1); - return expect( - queryData({ db } as any, { - collection: 'chart_test', - measures: [ - { - field: ['price'], - alias: 'Price', - }, - { - field: ['count'], - alias: 'Count', - }, - ], - dimensions: [ - { - field: ['title'], - alias: 'Title', - }, - ], - }), - ).resolves.toBeDefined(); + test('query', async () => { + const result = await queryData({ db } as any, { + collection: 'chart_test', + measures: [ + { + field: ['price'], + alias: 'Price', + }, + { + field: ['count'], + alias: 'Count', + }, + ], + dimensions: [ + { + field: ['title'], + alias: 'Title', + }, + ], + }); + expect(result).toBeDefined(); }); - test('query with sort', () => { - expect.assertions(1); - return expect( - queryData({ db } as any, { - collection: 'chart_test', - measures: [ - { - field: ['price'], - aggregation: 'sum', - alias: 'Price', - }, - ], - dimensions: [ - { - field: ['title'], - alias: 'Title', - }, - { - field: ['createdAt'], - format: 'YYYY', - }, - ], - orders: [{ field: 'createdAt', order: 'asc' }], - }), - ).resolves.toBeDefined(); + test('query with sort', async () => { + const result = await queryData({ db } as any, { + collection: 'chart_test', + measures: [ + { + field: ['price'], + aggregation: 'sum', + alias: 'Price', + }, + ], + dimensions: [ + { + field: ['title'], + alias: 'Title', + }, + { + field: ['createdAt'], + format: 'YYYY-MM', + }, + ], + orders: [{ field: 'createdAt', order: 'asc' }], + }); + expect(result).toBeDefined(); + expect(result).toMatchObject([{ createdAt: '2023-01' }, { createdAt: '2023-02' }]); }); }); diff --git a/packages/plugins/data-visualization/src/server/actions/query.ts b/packages/plugins/data-visualization/src/server/actions/query.ts index 5ffd07b35..2ba510469 100644 --- a/packages/plugins/data-visualization/src/server/actions/query.ts +++ b/packages/plugins/data-visualization/src/server/actions/query.ts @@ -161,7 +161,12 @@ export const parseBuilder = (ctx: Context, builder: QueryParams) => { }); 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']); });