Skip to content

Commit

Permalink
feat(core): add applied_time_extras to QueryObject (#809)
Browse files Browse the repository at this point in the history
* feat(core): add applied_time_extras to QueryObject

* address review comments
  • Loading branch information
villebro authored and zhaoyongjie committed Nov 26, 2021
1 parent 16d14fd commit 88c98cf
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 16 deletions.
Original file line number Diff line number Diff line change
@@ -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',
Expand All @@ -18,35 +22,30 @@ 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;
delete partialQueryObject.time_grain_sqla;
}

// 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;
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {
Expand Down Expand Up @@ -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 */
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,18 @@
import { QueryObject } from './Query';

export type TimeRange = {
/** Time range of the query [from, to] */
// eslint-disable-next-line camelcase
time_range?: string;
since?: string;
until?: string;
};

export type TimeColumnConfigKey =
| '__time_col'
| '__time_grain'
| '__time_range'
| '__time_origin'
| '__granularity';

export type AppliedTimeExtras = Partial<Record<TimeColumnConfigKey, keyof QueryObject>>;
Original file line number Diff line number Diff line change
Expand Up @@ -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'],
Expand Down Expand Up @@ -68,6 +73,7 @@ describe('extractExtras', () => {
],
}),
).toEqual({
applied_time_extras: {},
extras: {
time_grain_sqla: 'PT1M',
},
Expand Down

0 comments on commit 88c98cf

Please sign in to comment.