From 9955156265fca962fe79822e7443b701d70daa5a Mon Sep 17 00:00:00 2001 From: Ville Brofeldt <33317356+villebro@users.noreply.github.com> Date: Fri, 5 Jun 2020 21:57:47 +0300 Subject: [PATCH] feat(query): add new fields to QueryContext and QueryObject (#583) * feat: add new fields to QueryContext and QueryObject * linting * remove change to package.json --- .../test/models/ChartPlugin.test.tsx | 2 ++ .../superset-ui-query/src/buildQueryContext.ts | 2 ++ .../superset-ui-query/src/buildQueryObject.ts | 3 +++ .../packages/superset-ui-query/src/types/Query.ts | 6 ++++++ .../superset-ui-query/src/types/QueryFormData.ts | 2 ++ .../test/buildQueryContext.test.ts | 5 ++++- .../test/buildQueryObject.test.ts | 15 ++++++++++----- .../superset-ui-query/test/processGroupby.test.ts | 2 +- 8 files changed, 30 insertions(+), 7 deletions(-) diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart/test/models/ChartPlugin.test.tsx b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart/test/models/ChartPlugin.test.tsx index 6a5c20d5d01f..328b8a687411 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart/test/models/ChartPlugin.test.tsx +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-chart/test/models/ChartPlugin.test.tsx @@ -25,6 +25,8 @@ describe('ChartPlugin', () => { datasource: { id: 1, type: DatasourceType.Table }, queries: [{ granularity: 'day' }], force: false, + result_format: 'json', + result_type: 'full', }); const controlPanel = { abc: 1 }; diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/buildQueryContext.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/buildQueryContext.ts index a623aba2c75e..436e7eb974b2 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/buildQueryContext.ts +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/buildQueryContext.ts @@ -13,5 +13,7 @@ export default function buildQueryContext( datasource: new DatasourceKey(formData.datasource).toObject(), force: formData.force || false, queries: buildQuery(buildQueryObject(formData)), + result_format: formData.result_format || 'json', + result_type: formData.result_type || 'full', }; } diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/buildQueryObject.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/buildQueryObject.ts index 1a71c39d2d7c..60f898c52f2d 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/buildQueryObject.ts +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/buildQueryObject.ts @@ -27,6 +27,7 @@ export default function buildQueryObject(formData: T): until, order_desc, row_limit, + row_offset, limit, timeseries_limit_metric, queryFields, @@ -34,6 +35,7 @@ export default function buildQueryObject(formData: T): } = formData; const numericRowLimit = Number(row_limit); + const numericRowOffset = Number(row_offset); const { metrics, groupby, columns } = extractQueryFields(residualFormData, queryFields); const groupbySet = new Set([...columns, ...groupby]); @@ -46,6 +48,7 @@ export default function buildQueryObject(formData: T): order_desc: typeof order_desc === 'undefined' ? true : order_desc, orderby: [], row_limit: row_limit == null || Number.isNaN(numericRowLimit) ? undefined : numericRowLimit, + row_offset: row_offset == null || Number.isNaN(numericRowOffset) ? undefined : numericRowOffset, since, time_range, timeseries_limit: limit ? Number(limit) : 0, diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/types/Query.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/types/Query.ts index fde0291573f8..7aaa9a299ed6 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/types/Query.ts +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/types/Query.ts @@ -67,6 +67,8 @@ export type QueryObject = { /** Maximum numbers of rows to return */ row_limit?: number; + /** Number of rows to skip */ + row_offset?: number; /** Maximum number of series */ timeseries_limit?: number; /** The metric used to sort the returned result. */ @@ -88,6 +90,10 @@ export interface QueryContext { }; /** Force refresh of all queries */ force: boolean; + /** Type of result to return for queries */ + result_type: string; + /** Response format */ + result_format: string; queries: QueryObject[]; } diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/types/QueryFormData.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/types/QueryFormData.ts index 388a1127ea4c..d8286dd37fdd 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/types/QueryFormData.ts +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/src/types/QueryFormData.ts @@ -47,6 +47,8 @@ export type BaseFormData = { timeseries_limit_metric?: QueryFormResidualDataValue; /** Force refresh */ force?: boolean; + result_format?: string; + result_type?: string; queryFields?: QueryFields; } & TimeRange & QueryFormResidualData; diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/test/buildQueryContext.test.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/test/buildQueryContext.test.ts index 9258d83c9d08..de00f5c9f7c0 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/test/buildQueryContext.test.ts +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/test/buildQueryContext.test.ts @@ -1,7 +1,7 @@ import { buildQueryContext } from '../src'; describe('buildQueryContext', () => { - it('should build datasource for table sources and default force to false', () => { + it('should build datasource for table sources and apply defaults', () => { const queryContext = buildQueryContext({ datasource: '5__table', granularity_sqla: 'ds', @@ -10,6 +10,9 @@ describe('buildQueryContext', () => { expect(queryContext.datasource.id).toBe(5); expect(queryContext.datasource.type).toBe('table'); expect(queryContext.force).toBe(false); + expect(queryContext.force).toBe(false); + expect(queryContext.result_format).toBe('json'); + expect(queryContext.result_type).toBe('full'); }); it('should build datasource for druid sources and set force to true', () => { diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/test/buildQueryObject.test.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/test/buildQueryObject.test.ts index 42aed0b3a444..4a4ae9bb0f61 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/test/buildQueryObject.test.ts +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/test/buildQueryObject.test.ts @@ -88,7 +88,7 @@ describe('buildQueryObject', () => { expect(query.timeseries_limit_metric).toEqual({ label: metric }); }); - it('should handle null and non-numeric row_limit', () => { + it('should handle null and non-numeric row_limit and row_offset', () => { const baseQuery = { datasource: '5__table', granularity_sqla: 'ds', @@ -99,20 +99,25 @@ describe('buildQueryObject', () => { // undefined query = buildQueryObject({ ...baseQuery }); expect(query.row_limit).toBeUndefined(); + expect(query.row_offset).toBeUndefined(); // null value - query = buildQueryObject({ ...baseQuery, row_limit: null }); + query = buildQueryObject({ ...baseQuery, row_limit: null, row_offset: null }); expect(query.row_limit).toBeUndefined(); + expect(query.row_offset).toBeUndefined(); - query = buildQueryObject({ ...baseQuery, row_limit: 1000 }); + query = buildQueryObject({ ...baseQuery, row_limit: 1000, row_offset: 50 }); expect(query.row_limit).toStrictEqual(1000); + expect(query.row_offset).toStrictEqual(50); // valid string - query = buildQueryObject({ ...baseQuery, row_limit: '200' }); + query = buildQueryObject({ ...baseQuery, row_limit: '200', row_offset: '100' }); expect(query.row_limit).toStrictEqual(200); + expect(query.row_offset).toStrictEqual(100); // invalid string - query = buildQueryObject({ ...baseQuery, row_limit: 'two hundred' }); + query = buildQueryObject({ ...baseQuery, row_limit: 'two hundred', row_offset: 'twenty' }); expect(query.row_limit).toBeUndefined(); + expect(query.row_offset).toBeUndefined(); }); }); diff --git a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/test/processGroupby.test.ts b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/test/processGroupby.test.ts index e2adef546d8d..cf99b840a9c7 100644 --- a/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/test/processGroupby.test.ts +++ b/superset-frontend/temporary_superset_ui/superset-ui/packages/superset-ui-query/test/processGroupby.test.ts @@ -6,7 +6,7 @@ describe('processGroupby', () => { }); it('should exclude non-string values', () => { - // @ts-ignore, change to @ts-expect-error when updated to TypeScript>=3.9 + // @ts-expect-error expect(processGroupby(['bar', 1, undefined, null, 'foo'])).toEqual(['bar', 'foo']); }); });