From 4322d1cd398e5f69e9ad0b43cf78804aeec41cd9 Mon Sep 17 00:00:00 2001 From: Ville Brofeldt <33317356+villebro@users.noreply.github.com> Date: Wed, 6 May 2020 19:32:29 +0300 Subject: [PATCH] feat(query): Add force to QueryContext (#445) * Add force to QueryContext * fix tests * fix test --- .../test/models/ChartPlugin.test.tsx | 4 +++- .../superset-ui-query/src/buildQueryContext.ts | 1 + .../packages/superset-ui-query/src/types/Query.ts | 15 ++++++++++----- .../superset-ui-query/src/types/QueryFormData.ts | 2 ++ .../test/buildQueryContext.test.ts | 7 +++++-- 5 files changed, 21 insertions(+), 8 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 caa60d7b4ba0..6a5c20d5d01f 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 @@ -24,6 +24,7 @@ describe('ChartPlugin', () => { const buildQuery = () => ({ datasource: { id: 1, type: DatasourceType.Table }, queries: [{ granularity: 'day' }], + force: false, }); const controlPanel = { abc: 1 }; @@ -55,7 +56,7 @@ describe('ChartPlugin', () => { expect(plugin.loadBuildQuery).toBeUndefined(); }); it('uses loadBuildQuery field if specified', () => { - expect.assertions(1); + expect.assertions(2); const plugin = new ChartPlugin({ metadata, Chart: FakeChart, @@ -64,6 +65,7 @@ describe('ChartPlugin', () => { const fn = plugin.loadBuildQuery!() as BuildQueryFunction; expect(fn(FORM_DATA).queries[0]).toEqual({ granularity: 'day' }); + expect(fn(FORM_DATA).force).toEqual(false); }); it('uses buildQuery field if specified', () => { expect.assertions(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 de7b5813f4b5..a623aba2c75e 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 @@ -11,6 +11,7 @@ export default function buildQueryContext( ): QueryContext { return { datasource: new DatasourceKey(formData.datasource).toObject(), + force: formData.force || false, queries: buildQuery(buildQueryObject(formData)), }; } 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 2b3f38b3298c..dddabccd1073 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 @@ -28,13 +28,16 @@ export type QueryObjectMetric = { export type QueryObjectExtras = Partial<{ /** HAVING condition for Druid */ - having_druid: string; - druid_time_origin: string; + having_druid?: string; + druid_time_origin?: string; /** HAVING condition for SQLAlchemy */ - having: string; - time_grain_sqla: string; + having?: string; + relative_start?: string; + relative_end?: string; + time_grain_sqla?: string; + time_range_endpoints?: string[]; /** WHERE condition */ - where: string; + where?: string; }>; export type QueryObject = { @@ -77,5 +80,7 @@ export interface QueryContext { id: number; type: DatasourceType; }; + /** Force refresh of all queries */ + force: boolean; 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 512e70bdfd97..88de3dc5097c 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 @@ -45,6 +45,8 @@ export type BaseFormData = { row_limit?: string | number | null; /** The metric used to order timeseries for limiting */ timeseries_limit_metric?: QueryFormDataMetric; + /** Force refresh */ + force?: boolean; } & TimeRange & QueryFormDataMetrics; 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 3e1ad6107ac0..9258d83c9d08 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', () => { + it('should build datasource for table sources and default force to false', () => { const queryContext = buildQueryContext({ datasource: '5__table', granularity_sqla: 'ds', @@ -9,15 +9,18 @@ describe('buildQueryContext', () => { }); expect(queryContext.datasource.id).toBe(5); expect(queryContext.datasource.type).toBe('table'); + expect(queryContext.force).toBe(false); }); - it('should build datasource for druid sources', () => { + it('should build datasource for druid sources and set force to true', () => { const queryContext = buildQueryContext({ datasource: '5__druid', granularity: 'ds', viz_type: 'table', + force: true, }); expect(queryContext.datasource.id).toBe(5); expect(queryContext.datasource.type).toBe('druid'); + expect(queryContext.force).toBe(true); }); });