From 0c9ed6a63b0664279cf24be02c5c5f99343a8701 Mon Sep 17 00:00:00 2001 From: geido Date: Mon, 21 Feb 2022 14:08:52 +0000 Subject: [PATCH 1/4] wip --- .../src/query/buildQueryObject.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts b/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts index c49bc5ce6aa50..d350c8c9d2a70 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts @@ -19,8 +19,11 @@ /* eslint-disable camelcase */ import { + AdhocColumn, AdhocFilter, + PhysicalColumn, QueryFieldAliases, + QueryFormColumn, QueryFormData, QueryObject, QueryObjectFilterClause, @@ -89,6 +92,14 @@ export default function buildQueryObject( ...extras, ...filterFormData, }); + const isAdhocColumn = (v?: AdhocColumn | PhysicalColumn) => + (v as AdhocColumn)?.sqlExpression !== undefined; + const normalizeSeriesLimitMetric = (v: QueryFormColumn | undefined) => { + if (isAdhocColumn(v) || (v && (v as PhysicalColumn).length)) { + return v; + } + return undefined; + }; let queryObject: QueryObject = { // fallback `null` to `undefined` so they won't be sent to the backend @@ -113,13 +124,18 @@ export default function buildQueryObject( : numericRowOffset, series_columns, series_limit, - series_limit_metric, + series_limit_metric: normalizeSeriesLimitMetric(series_limit_metric), timeseries_limit: limit ? Number(limit) : 0, timeseries_limit_metric: timeseries_limit_metric || undefined, order_desc: typeof order_desc === 'undefined' ? true : order_desc, url_params: url_params || undefined, custom_params, }; + + console.log( + 'queryObject.series_limit_metric', + queryObject.series_limit_metric, + ); // override extra form data used by native and cross filters queryObject = overrideExtraFormData(queryObject, overrides); From aabba33cd80f09e97be95f9d72a506a5f621af29 Mon Sep 17 00:00:00 2001 From: geido Date: Mon, 21 Feb 2022 14:44:15 +0000 Subject: [PATCH 2/4] Add tests and clean up --- .../src/query/buildQueryObject.ts | 6 +---- .../test/query/buildQueryObject.test.ts | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts b/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts index d350c8c9d2a70..b3d533ff697d5 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts @@ -95,7 +95,7 @@ export default function buildQueryObject( const isAdhocColumn = (v?: AdhocColumn | PhysicalColumn) => (v as AdhocColumn)?.sqlExpression !== undefined; const normalizeSeriesLimitMetric = (v: QueryFormColumn | undefined) => { - if (isAdhocColumn(v) || (v && (v as PhysicalColumn).length)) { + if (isAdhocColumn(v) || (v as PhysicalColumn)?.length) { return v; } return undefined; @@ -132,10 +132,6 @@ export default function buildQueryObject( custom_params, }; - console.log( - 'queryObject.series_limit_metric', - queryObject.series_limit_metric, - ); // override extra form data used by native and cross filters queryObject = overrideExtraFormData(queryObject, overrides); diff --git a/superset-frontend/packages/superset-ui-core/test/query/buildQueryObject.test.ts b/superset-frontend/packages/superset-ui-core/test/query/buildQueryObject.test.ts index 1d3e19854c24b..b2ee6f579d5c1 100644 --- a/superset-frontend/packages/superset-ui-core/test/query/buildQueryObject.test.ts +++ b/superset-frontend/packages/superset-ui-core/test/query/buildQueryObject.test.ts @@ -152,6 +152,28 @@ describe('buildQueryObject', () => { expect(query.timeseries_limit_metric).toEqual(metric); }); + it('should build series_limit_metric', () => { + const metric = 'country'; + query = buildQueryObject({ + datasource: '5__table', + granularity_sqla: 'ds', + viz_type: 'pivot_table_v2', + series_limit_metric: metric, + }); + expect(query.series_limit_metric).toEqual(metric); + }); + + it('should build series_limit_metric as undefined when empty array', () => { + const metric: any = []; + query = buildQueryObject({ + datasource: '5__table', + granularity_sqla: 'ds', + viz_type: 'pivot_table_v2', + series_limit_metric: metric, + }); + expect(query.series_limit_metric).toEqual(undefined); + }); + it('should handle null and non-numeric row_limit and row_offset', () => { const baseQuery = { datasource: '5__table', From 22b89d116150a365378e7293a11270fac1d75863 Mon Sep 17 00:00:00 2001 From: geido Date: Mon, 21 Feb 2022 15:31:27 +0000 Subject: [PATCH 3/4] Clean up --- .../superset-ui-core/src/query/buildQueryObject.ts | 11 +++++------ .../superset-ui-core/src/query/types/Column.ts | 6 +++++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts b/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts index b3d533ff697d5..a22e1e96042d7 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts @@ -19,7 +19,6 @@ /* eslint-disable camelcase */ import { - AdhocColumn, AdhocFilter, PhysicalColumn, QueryFieldAliases, @@ -27,6 +26,8 @@ import { QueryFormData, QueryObject, QueryObjectFilterClause, + isPhysicalColumn, + isAdhocColumn, } from './types'; import processFilters from './processFilters'; import extractExtras from './extractExtras'; @@ -92,11 +93,9 @@ export default function buildQueryObject( ...extras, ...filterFormData, }); - const isAdhocColumn = (v?: AdhocColumn | PhysicalColumn) => - (v as AdhocColumn)?.sqlExpression !== undefined; - const normalizeSeriesLimitMetric = (v: QueryFormColumn | undefined) => { - if (isAdhocColumn(v) || (v as PhysicalColumn)?.length) { - return v; + const normalizeSeriesLimitMetric = (column: QueryFormColumn | undefined) => { + if (isAdhocColumn(column) || isPhysicalColumn(column)) { + return column; } return undefined; }; diff --git a/superset-frontend/packages/superset-ui-core/src/query/types/Column.ts b/superset-frontend/packages/superset-ui-core/src/query/types/Column.ts index 8fcf871647e3c..78e4a301c960d 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/types/Column.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/types/Column.ts @@ -54,7 +54,11 @@ export interface Column { export default {}; export function isPhysicalColumn( - column: AdhocColumn | PhysicalColumn, + column?: AdhocColumn | PhysicalColumn, ): column is PhysicalColumn { return typeof column === 'string'; } + +export function isAdhocColumn(column?: AdhocColumn | PhysicalColumn) { + return (column as AdhocColumn)?.sqlExpression !== undefined; +} From 6e7293767fec5de7cacc40ed401647aeadc4e050 Mon Sep 17 00:00:00 2001 From: geido Date: Mon, 21 Feb 2022 17:06:35 +0000 Subject: [PATCH 4/4] Remove unused import --- .../packages/superset-ui-core/src/query/buildQueryObject.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts b/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts index a22e1e96042d7..52fa1ffed0c2e 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts @@ -20,7 +20,6 @@ /* eslint-disable camelcase */ import { AdhocFilter, - PhysicalColumn, QueryFieldAliases, QueryFormColumn, QueryFormData,