This is an automated email from the ASF dual-hosted git repository. beto pushed a commit to branch fix_generic_axis in repository https://gitbox.apache.org/repos/asf/superset.git
commit 06b066f741a8bd87d2ce8845120cde85c168fc7e Author: Beto Dealmeida <[email protected]> AuthorDate: Tue Apr 18 17:12:20 2023 -0700 fix: pivot v2 charts created before GENERIC_CHART_AXES is enabled --- .../src/query/buildQueryContext.ts | 33 ++++++ .../test/query/buildQueryContext.test.ts | 118 +++++++++++++++++++++ 2 files changed, 151 insertions(+) diff --git a/superset-frontend/packages/superset-ui-core/src/query/buildQueryContext.ts b/superset-frontend/packages/superset-ui-core/src/query/buildQueryContext.ts index c1dc5bd89d..d74d5db807 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/buildQueryContext.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/buildQueryContext.ts @@ -17,6 +17,7 @@ * under the License. */ +import { hasGenericChartAxes } from '@superset-ui/core'; import buildQueryObject from './buildQueryObject'; import DatasourceKey from './DatasourceKey'; import { QueryFieldAliases, QueryFormData } from './types/QueryFormData'; @@ -59,6 +60,38 @@ export default function buildQueryContext( if (isXAxisSet(formData)) { queries = queries.map(query => normalizeTimeColumn(formData, query)); } + + /* Some charts saved before GENERIC_CHART_AXES is enabled will have the wrong + * time granularity set. This fixes the generated payload to conform with the new + * schema used when GENERIC_CHART_AXES is enabled. + */ + if (hasGenericChartAxes && formData.granularity_sqla) { + const filterSubject = formData.granularity_sqla; + const filterComparator = formData?.time_range || 'No Filter'; + + queries.forEach(query => { + if (query.columns) { + const index = query.columns.indexOf(filterSubject); + if (index > -1) { + // eslint-disable-next-line no-param-reassign + query.columns[index] = { + columnType: 'BASE_AXIS', + expressionType: 'SQL', + label: filterSubject, + sqlExpression: filterSubject, + timeGrain: formData.time_grain_sqla, + }; + } + } + // eslint-disable-next-line no-param-reassign + query.filters = query.filters || []; + query.filters.push({ + col: filterSubject, + op: 'TEMPORAL_RANGE', + val: filterComparator, + }); + }); + } // --- query mutator end --- return { datasource: new DatasourceKey(formData.datasource).toObject(), diff --git a/superset-frontend/packages/superset-ui-core/test/query/buildQueryContext.test.ts b/superset-frontend/packages/superset-ui-core/test/query/buildQueryContext.test.ts index 9d47361e8f..defccc16ee 100644 --- a/superset-frontend/packages/superset-ui-core/test/query/buildQueryContext.test.ts +++ b/superset-frontend/packages/superset-ui-core/test/query/buildQueryContext.test.ts @@ -164,4 +164,122 @@ describe('buildQueryContext', () => { expect(spyNormalizeTimeColumn).not.toBeCalled(); spyNormalizeTimeColumn.mockRestore(); }); + it('should fix pivot v2 charts saved before GENERIC_CHART_AXES was enabled', () => { + const queryContext = buildQueryContext({ + datasource: '22__table', + viz_type: 'pivot_table_v2', + slice_id: 138, + url_params: { + native_filters_key: + 'oGUUQKLlluSODgWflOlhSKi2dMljuOTbyGVxVlZ8s5xp_nTJpd3rdWram_xNDotb', + }, + groupbyColumns: ['order_date'], + groupbyRows: [], + time_grain_sqla: 'P1M', + temporal_columns_lookup: {}, + metrics: ['count'], + metricsLayout: 'COLUMNS', + adhoc_filters: [], + row_limit: 10000, + order_desc: true, + aggregateFunction: 'Sum', + valueFormat: 'SMART_NUMBER', + date_format: 'smart_date', + rowOrder: 'key_a_to_z', + colOrder: 'key_a_to_z', + dashboards: [13], + extra_form_data: {}, + granularity_sqla: 'order_date', + time_range: 'No filter', + label_colors: {}, + shared_label_colors: {}, + extra_filters: [], + dashboardId: 13, + force: undefined, + result_format: 'json', + result_type: 'full', + }); + expect(queryContext).toEqual({ + datasource: { + id: 22, + type: 'table', + }, + force: false, + queries: [ + { + time_range: 'No filter', + granularity: 'order_date', + filters: [ + { + col: 'order_date', + op: 'TEMPORAL_RANGE', + val: 'No filter', + }, + ], + extras: { + having: '', + where: '', + }, + applied_time_extras: {}, + columns: [ + { + columnType: 'BASE_AXIS', + expressionType: 'SQL', + label: 'order_date', + sqlExpression: 'order_date', + timeGrain: 'P1M', + }, + ], + metrics: ['count'], + orderby: [['count', false]], + annotation_layers: [], + row_limit: 10000, + series_limit: 0, + order_desc: true, + url_params: { + native_filters_key: + 'oGUUQKLlluSODgWflOlhSKi2dMljuOTbyGVxVlZ8s5xp_nTJpd3rdWram_xNDotb', + }, + custom_params: {}, + custom_form_data: {}, + }, + ], + form_data: { + datasource: '22__table', + viz_type: 'pivot_table_v2', + slice_id: 138, + url_params: { + native_filters_key: + 'oGUUQKLlluSODgWflOlhSKi2dMljuOTbyGVxVlZ8s5xp_nTJpd3rdWram_xNDotb', + }, + groupbyColumns: ['order_date'], + groupbyRows: [], + time_grain_sqla: 'P1M', + temporal_columns_lookup: {}, + metrics: ['count'], + metricsLayout: 'COLUMNS', + adhoc_filters: [], + row_limit: 10000, + order_desc: true, + aggregateFunction: 'Sum', + valueFormat: 'SMART_NUMBER', + date_format: 'smart_date', + rowOrder: 'key_a_to_z', + colOrder: 'key_a_to_z', + dashboards: [13], + extra_form_data: {}, + granularity_sqla: 'order_date', + time_range: 'No filter', + label_colors: {}, + shared_label_colors: {}, + extra_filters: [], + dashboardId: 13, + force: null, + result_format: 'json', + result_type: 'full', + }, + result_format: 'json', + result_type: 'full', + }); + }); });
