mirror of
https://github.com/apache/superset.git
synced 2024-09-19 20:19:37 -04:00
feat(core): add applied_time_extras to QueryObject (#809)
* feat(core): add applied_time_extras to QueryObject * address review comments
This commit is contained in:
parent
16d14fd1f9
commit
88c98cf1a8
@ -1,14 +1,18 @@
|
||||
/* eslint-disable camelcase */
|
||||
import { isDruidFormData, QueryFormData } from './types/QueryFormData';
|
||||
import { QueryObject } from './types/Query';
|
||||
import { AppliedTimeExtras, TimeColumnConfigKey } from './types/Time';
|
||||
|
||||
export default function extractExtras(formData: QueryFormData): Partial<QueryObject> {
|
||||
const applied_time_extras: AppliedTimeExtras = {};
|
||||
const { extras = {}, filters = [] } = formData;
|
||||
const partialQueryObject: Partial<QueryObject> = {
|
||||
filters: formData.filters || [],
|
||||
extras: formData.extras || {},
|
||||
filters,
|
||||
extras,
|
||||
applied_time_extras,
|
||||
};
|
||||
|
||||
const reservedColumnsToQueryField: Record<string, keyof QueryObject> = {
|
||||
const reservedColumnsToQueryField: Record<TimeColumnConfigKey, keyof QueryObject> = {
|
||||
__time_range: 'time_range',
|
||||
__time_col: 'granularity_sqla',
|
||||
__time_grain: 'time_grain_sqla',
|
||||
@ -18,26 +22,22 @@ export default function extractExtras(formData: QueryFormData): Partial<QueryObj
|
||||
|
||||
(formData.extra_filters || []).forEach(filter => {
|
||||
if (filter.col in reservedColumnsToQueryField) {
|
||||
const queryField = reservedColumnsToQueryField[filter.col];
|
||||
const key = filter.col as TimeColumnConfigKey;
|
||||
const queryField = reservedColumnsToQueryField[key];
|
||||
partialQueryObject[queryField] = filter.val;
|
||||
applied_time_extras[key] = filter.val as string;
|
||||
} else {
|
||||
// @ts-ignore
|
||||
partialQueryObject.filters.push(filter);
|
||||
filters.push(filter);
|
||||
}
|
||||
});
|
||||
|
||||
// map to undeprecated names and remove deprecated fields
|
||||
if (isDruidFormData(formData) && !partialQueryObject.druid_time_origin) {
|
||||
partialQueryObject.extras = {
|
||||
druid_time_origin: formData.druid_time_origin,
|
||||
};
|
||||
extras.druid_time_origin = formData.druid_time_origin;
|
||||
delete partialQueryObject.druid_time_origin;
|
||||
} else {
|
||||
// SQL
|
||||
partialQueryObject.extras = {
|
||||
...partialQueryObject.extras,
|
||||
time_grain_sqla: partialQueryObject.time_grain_sqla || formData.time_grain_sqla,
|
||||
};
|
||||
extras.time_grain_sqla = partialQueryObject.time_grain_sqla || formData.time_grain_sqla;
|
||||
partialQueryObject.granularity =
|
||||
partialQueryObject.granularity_sqla || formData.granularity || formData.granularity_sqla;
|
||||
delete partialQueryObject.granularity_sqla;
|
||||
@ -45,8 +45,7 @@ export default function extractExtras(formData: QueryFormData): Partial<QueryObj
|
||||
}
|
||||
|
||||
// map time range endpoints:
|
||||
if (formData.time_range_endpoints)
|
||||
partialQueryObject.extras.time_range_endpoints = formData.time_range_endpoints;
|
||||
if (formData.time_range_endpoints) extras.time_range_endpoints = formData.time_range_endpoints;
|
||||
|
||||
return partialQueryObject;
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
import { DatasourceType } from './Datasource';
|
||||
import { AdhocMetric } from './Metric';
|
||||
import { BinaryOperator, SetOperator, UnaryOperator } from './Operator';
|
||||
import { TimeRange } from './Time';
|
||||
import { AppliedTimeExtras, TimeRange } from './Time';
|
||||
import { QueryFormDataMetric, QueryFormResidualDataValue } from './QueryFormData';
|
||||
|
||||
export type QueryObjectFilterClause = {
|
||||
@ -46,6 +46,8 @@ export type ResidualQueryObjectData = {
|
||||
};
|
||||
|
||||
export type QueryObject = {
|
||||
/** Time filters that have been applied to the query object */
|
||||
applied_time_extras?: AppliedTimeExtras;
|
||||
/** Columns to group by */
|
||||
groupby?: string[];
|
||||
/** Metrics */
|
||||
|
@ -1,3 +1,5 @@
|
||||
import { QueryObject } from './Query';
|
||||
|
||||
export type TimeRange = {
|
||||
/** Time range of the query [from, to] */
|
||||
// eslint-disable-next-line camelcase
|
||||
@ -5,3 +7,12 @@ export type TimeRange = {
|
||||
since?: string;
|
||||
until?: string;
|
||||
};
|
||||
|
||||
export type TimeColumnConfigKey =
|
||||
| '__time_col'
|
||||
| '__time_grain'
|
||||
| '__time_range'
|
||||
| '__time_origin'
|
||||
| '__granularity';
|
||||
|
||||
export type AppliedTimeExtras = Partial<Record<TimeColumnConfigKey, keyof QueryObject>>;
|
||||
|
@ -39,6 +39,11 @@ describe('extractExtras', () => {
|
||||
],
|
||||
}),
|
||||
).toEqual({
|
||||
applied_time_extras: {
|
||||
__time_col: 'ds2',
|
||||
__time_grain: 'PT5M',
|
||||
__time_range: '2009-07-17T00:00:00 : 2020-07-17T00:00:00',
|
||||
},
|
||||
extras: {
|
||||
time_grain_sqla: 'PT5M',
|
||||
time_range_endpoints: ['inclusive', 'exclusive'],
|
||||
@ -68,6 +73,7 @@ describe('extractExtras', () => {
|
||||
],
|
||||
}),
|
||||
).toEqual({
|
||||
applied_time_extras: {},
|
||||
extras: {
|
||||
time_grain_sqla: 'PT1M',
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user