From 0ce0c6e1ebfa3300f3affa5e9d8e9d0ca39d7fc8 Mon Sep 17 00:00:00 2001 From: AAfghahi <48933336+AAfghahi@users.noreply.github.com> Date: Fri, 8 Jul 2022 11:57:03 -0400 Subject: [PATCH] chore: removing Druid from front- and back- end (#20338) * first pass at removing native Druid nosql * removing having_druid * addressing comments, linting * fixed all tests * addressing comments * redirected to ui-core TimeGranularity type * query form metric linting * fixed broken chart type * implementing feedback --- .../src/constants.ts | 1 - .../src/sections/sections.tsx | 1 - .../src/shared-controls/index.tsx | 16 --- .../src/query/buildQueryObject.ts | 8 +- .../superset-ui-core/src/query/constants.ts | 2 +- .../src/query/extractExtras.ts | 32 +++--- .../src/query/extractTimegrain.ts | 2 +- .../src/query/getMetricLabel.ts | 2 +- .../src/query/processFilters.ts | 1 - .../src/query/types/Dashboard.ts | 1 - .../src/query/types/PostProcessing.ts | 2 +- .../superset-ui-core/src/query/types/Query.ts | 2 - .../src/query/types/QueryFormData.ts | 22 +---- .../superset-ui-core/src/query/types/Time.ts | 1 - .../test/chart/fixtures/formData.ts | 3 +- .../test/query/extractExtras.test.ts | 3 +- .../test/query/processFilters.test.ts | 30 +----- .../test/MixedTimeseries/buildQuery.test.ts | 3 - .../Datasource/DatasourceEditor.jsx | 17 ---- .../util/filterboxMigrationHelper.ts | 97 ------------------- .../util/getFilterConfigsFromFormdata.js | 8 -- .../components/ControlPanelsContainer.tsx | 4 +- .../DndFilterSelect.tsx | 20 +--- .../AdhocFilterControl/index.jsx | 20 +--- .../AdhocFilterEditPopover/index.jsx | 16 +-- ...FilterEditPopoverSimpleTabContent.test.tsx | 8 -- .../index.tsx | 36 ++----- .../AdhocMetricEditPopover.test.tsx | 12 --- .../AdhocMetricEditPopover/index.jsx | 29 +----- superset-frontend/src/explore/constants.ts | 3 - .../src/explore/controlPanels/sections.tsx | 7 -- .../controlUtils/getSectionsToRender.ts | 2 +- .../controlUtils/standardizedFormData.test.ts | 7 +- .../controlUtils/standardizedFormData.ts | 2 +- superset-frontend/src/explore/controls.jsx | 17 +--- superset-frontend/src/explore/store.js | 1 - .../visualizations/FilterBox/FilterBox.jsx | 13 +-- superset/charts/schemas.py | 10 +- superset/common/query_object.py | 2 - superset/constants.py | 1 - superset/utils/core.py | 24 ----- .../dashboard_filter_scopes_converter.py | 4 - superset/viz.py | 2 - .../charts/data/api_tests.py | 9 +- .../integration_tests/query_context_tests.py | 1 - tests/integration_tests/utils_tests.py | 3 - tests/integration_tests/viz_tests.py | 12 --- 47 files changed, 65 insertions(+), 454 deletions(-) diff --git a/superset-frontend/packages/superset-ui-chart-controls/src/constants.ts b/superset-frontend/packages/superset-ui-chart-controls/src/constants.ts index 265874f5e666..f410c4479a35 100644 --- a/superset-frontend/packages/superset-ui-chart-controls/src/constants.ts +++ b/superset-frontend/packages/superset-ui-chart-controls/src/constants.ts @@ -31,7 +31,6 @@ export const TIME_FILTER_LABELS = { time_range: t('Time Range'), granularity_sqla: t('Time Column'), time_grain_sqla: t('Time Grain'), - druid_time_origin: t('Origin'), granularity: t('Time Granularity'), }; diff --git a/superset-frontend/packages/superset-ui-chart-controls/src/sections/sections.tsx b/superset-frontend/packages/superset-ui-chart-controls/src/sections/sections.tsx index 17c9e5042385..fee5f990b6bc 100644 --- a/superset-frontend/packages/superset-ui-chart-controls/src/sections/sections.tsx +++ b/superset-frontend/packages/superset-ui-chart-controls/src/sections/sections.tsx @@ -32,7 +32,6 @@ export const legacyTimeseriesTime: ControlPanelSectionConfig = { ...baseTimeSection, controlSetRows: [ ['granularity'], - ['druid_time_origin'], ['granularity_sqla'], ['time_grain_sqla'], ['time_range'], diff --git a/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/index.tsx b/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/index.tsx index 91cef516695f..b67b4a5d2a72 100644 --- a/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/index.tsx +++ b/superset-frontend/packages/superset-ui-chart-controls/src/shared-controls/index.tsx @@ -241,21 +241,6 @@ const columnsControl: typeof groupByControl = { description: t('One or many columns to pivot as columns'), }; -const druid_time_origin: SharedControlConfig<'SelectControl'> = { - type: 'SelectControl', - freeForm: true, - label: TIME_FILTER_LABELS.druid_time_origin, - choices: [ - ['', 'default'], - ['now', 'now'], - ], - default: null, - description: t( - 'Defines the origin where time buckets start, ' + - 'accepts natural dates as in `now`, `sunday` or `1970-01-01`', - ), -}; - const granularity: SharedControlConfig<'SelectControl'> = { type: 'SelectControl', freeForm: true, @@ -569,7 +554,6 @@ const sharedControls = { secondary_metric: enableExploreDnd ? dnd_secondary_metric : secondary_metric, groupby: enableExploreDnd ? dndGroupByControl : groupByControl, columns: enableExploreDnd ? dndColumnsControl : columnsControl, - druid_time_origin, granularity, granularity_sqla: enableExploreDnd ? dnd_granularity_sqla : granularity_sqla, time_grain_sqla, 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 52fa1ffed0c2..d9f3b2aae37a 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/buildQueryObject.ts @@ -20,14 +20,16 @@ /* eslint-disable camelcase */ import { AdhocFilter, - QueryFieldAliases, - QueryFormColumn, - QueryFormData, QueryObject, QueryObjectFilterClause, isPhysicalColumn, isAdhocColumn, } from './types'; +import { + QueryFieldAliases, + QueryFormColumn, + QueryFormData, +} from './types/QueryFormData'; import processFilters from './processFilters'; import extractExtras from './extractExtras'; import extractQueryFields from './extractQueryFields'; diff --git a/superset-frontend/packages/superset-ui-core/src/query/constants.ts b/superset-frontend/packages/superset-ui-core/src/query/constants.ts index 4a3fe5ff5474..9b9398b31a3e 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/constants.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/constants.ts @@ -27,7 +27,7 @@ import { export const DTTM_ALIAS = '__timestamp'; export const EXTRA_FORM_DATA_OVERRIDE_EXTRA_KEYS: (keyof ExtraFormDataOverrideExtras)[] = - ['druid_time_origin', 'relative_start', 'relative_end', 'time_grain_sqla']; + ['relative_start', 'relative_end', 'time_grain_sqla']; export const EXTRA_FORM_DATA_APPEND_KEYS: (keyof ExtraFormDataAppend)[] = [ 'adhoc_filters', diff --git a/superset-frontend/packages/superset-ui-core/src/query/extractExtras.ts b/superset-frontend/packages/superset-ui-core/src/query/extractExtras.ts index aea2881b25dc..39a4b4b2d803 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/extractExtras.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/extractExtras.ts @@ -18,10 +18,9 @@ */ /* eslint-disable camelcase */ +import { TimeGranularity, QueryFormData } from '@superset-ui/core'; import { AppliedTimeExtras, - isDruidFormData, - QueryFormData, QueryObjectExtras, QueryObjectFilterClause, TimeColumnConfigKey, @@ -30,8 +29,7 @@ import { type ExtraFilterQueryField = { time_range?: string; granularity_sqla?: string; - time_grain_sqla?: string; - druid_time_origin?: string; + time_grain_sqla?: TimeGranularity; granularity?: string; }; @@ -58,7 +56,6 @@ export default function extractExtras(formData: QueryFormData): ExtractedExtra { __time_range: 'time_range', __time_col: 'granularity_sqla', __time_grain: 'time_grain_sqla', - __time_origin: 'druid_time_origin', __granularity: 'granularity', }; @@ -66,28 +63,21 @@ export default function extractExtras(formData: QueryFormData): ExtractedExtra { if (filter.col in reservedColumnsToQueryField) { const key = filter.col as TimeColumnConfigKey; const queryField = reservedColumnsToQueryField[key]; - extract[queryField] = filter.val as string; + extract[queryField] = filter.val as TimeGranularity; applied_time_extras[key] = filter.val as string; } else { filters.push(filter); } }); - // map to undeprecated names and remove deprecated fields - if (isDruidFormData(formData) && !extract.druid_time_origin) { - extras.druid_time_origin = formData.druid_time_origin; - delete extract.druid_time_origin; - } else { - // SQL - extras.time_grain_sqla = - extract.time_grain_sqla || formData.time_grain_sqla; - extract.granularity = - extract.granularity_sqla || - formData.granularity || - formData.granularity_sqla; - delete extract.granularity_sqla; - delete extract.time_grain_sqla; - } + // SQL + extras.time_grain_sqla = extract.time_grain_sqla || formData.time_grain_sqla; + extract.granularity = + extract.granularity_sqla || + formData.granularity || + formData.granularity_sqla; + delete extract.granularity_sqla; + delete extract.time_grain_sqla; return extract; } diff --git a/superset-frontend/packages/superset-ui-core/src/query/extractTimegrain.ts b/superset-frontend/packages/superset-ui-core/src/query/extractTimegrain.ts index e98ec5db4ec1..b5b3f9617bd8 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/extractTimegrain.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/extractTimegrain.ts @@ -18,7 +18,7 @@ */ /* eslint-disable no-underscore-dangle */ -import { QueryFormData } from './types'; +import { QueryFormData } from '@superset-ui/core'; import { TimeGranularity } from '../time-format'; export default function extractTimegrain( diff --git a/superset-frontend/packages/superset-ui-core/src/query/getMetricLabel.ts b/superset-frontend/packages/superset-ui-core/src/query/getMetricLabel.ts index 3f6f31af7b9f..7ac7930c6a56 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/getMetricLabel.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/getMetricLabel.ts @@ -17,7 +17,7 @@ * under the License. */ -import { isAdhocMetricSimple, isSavedMetric, QueryFormMetric } from './types'; +import { QueryFormMetric, isSavedMetric, isAdhocMetricSimple } from './types'; export default function getMetricLabel(metric: QueryFormMetric): string { if (isSavedMetric(metric)) { diff --git a/superset-frontend/packages/superset-ui-core/src/query/processFilters.ts b/superset-frontend/packages/superset-ui-core/src/query/processFilters.ts index 239f1c49afbe..ba7131b0e12b 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/processFilters.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/processFilters.ts @@ -69,7 +69,6 @@ export default function processFilters( // some filter-related fields need to go in `extras` extras.having = freeformHaving.map(sanitizeClause).join(' AND '); - extras.having_druid = simpleHaving; extras.where = freeformWhere.map(sanitizeClause).join(' AND '); return { diff --git a/superset-frontend/packages/superset-ui-core/src/query/types/Dashboard.ts b/superset-frontend/packages/superset-ui-core/src/query/types/Dashboard.ts index 4089512de497..10bee2dfcd5e 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/types/Dashboard.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/types/Dashboard.ts @@ -82,7 +82,6 @@ export type Filter = { adhoc_filters?: AdhocFilter[]; granularity_sqla?: string; granularity?: string; - druid_time_origin?: string; time_grain_sqla?: string; time_range?: string; requiredFirst?: boolean; diff --git a/superset-frontend/packages/superset-ui-core/src/query/types/PostProcessing.ts b/superset-frontend/packages/superset-ui-core/src/query/types/PostProcessing.ts index 375affa7e5d5..7b63ea056a7f 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/types/PostProcessing.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/types/PostProcessing.ts @@ -122,7 +122,7 @@ export type PostProcessingPivot = _PostProcessingPivot | DefaultPostProcessing; interface _PostProcessingProphet { operation: 'prophet'; options: { - time_grain: TimeGranularity; + time_grain: TimeGranularity | undefined; periods: number; confidence_interval: number; yearly_seasonality?: boolean | number; diff --git a/superset-frontend/packages/superset-ui-core/src/query/types/Query.ts b/superset-frontend/packages/superset-ui-core/src/query/types/Query.ts index cb90fe6f6c39..7ec5abab9e4d 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/types/Query.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/types/Query.ts @@ -52,8 +52,6 @@ export type QueryObjectFilterClause = { export type QueryObjectExtras = Partial<{ /** HAVING condition for Druid */ - having_druid?: string; - druid_time_origin?: string; /** HAVING condition for SQLAlchemy */ having?: string; relative_start?: string; diff --git a/superset-frontend/packages/superset-ui-core/src/query/types/QueryFormData.ts b/superset-frontend/packages/superset-ui-core/src/query/types/QueryFormData.ts index 27555f849d58..63fff8c32d11 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/types/QueryFormData.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/types/QueryFormData.ts @@ -122,14 +122,14 @@ export type ExtraFormDataAppend = { * filter clauses can't be overridden */ export type ExtraFormDataOverrideExtras = Pick< QueryObjectExtras, - 'druid_time_origin' | 'relative_start' | 'relative_end' | 'time_grain_sqla' + 'relative_start' | 'relative_end' | 'time_grain_sqla' >; /** These parameters override those already present in the form data/query object */ export type ExtraFormDataOverrideRegular = Partial< Pick > & - Partial> & + Partial> & Partial> & Partial>; @@ -194,30 +194,16 @@ export interface SqlaFormData extends BaseFormData { /** * Name of the Time Column. Time column is optional. */ + granularity?: string; granularity_sqla?: string; time_grain_sqla?: TimeGranularity; having?: string; } -/** - * Form data for Druid datasources. - */ -export interface DruidFormData extends BaseFormData { - granularity?: string; - having_druid?: string; - druid_time_origin?: string; -} - -export type QueryFormData = DruidFormData | SqlaFormData; +export type QueryFormData = SqlaFormData; //--------------------------------------------------- // Type guards //--------------------------------------------------- -export function isDruidFormData( - formData: QueryFormData, -): formData is DruidFormData { - return 'granularity' in formData; -} - export default {}; diff --git a/superset-frontend/packages/superset-ui-core/src/query/types/Time.ts b/superset-frontend/packages/superset-ui-core/src/query/types/Time.ts index 820c3f1a3c81..56156166feb7 100644 --- a/superset-frontend/packages/superset-ui-core/src/query/types/Time.ts +++ b/superset-frontend/packages/superset-ui-core/src/query/types/Time.ts @@ -30,7 +30,6 @@ export type TimeColumnConfigKey = | '__time_col' | '__time_grain' | '__time_range' - | '__time_origin' | '__granularity'; export type AppliedTimeExtras = Partial< diff --git a/superset-frontend/packages/superset-ui-core/test/chart/fixtures/formData.ts b/superset-frontend/packages/superset-ui-core/test/chart/fixtures/formData.ts index 25d27f5e2d0c..9d926f46131b 100644 --- a/superset-frontend/packages/superset-ui-core/test/chart/fixtures/formData.ts +++ b/superset-frontend/packages/superset-ui-core/test/chart/fixtures/formData.ts @@ -19,13 +19,14 @@ /* eslint sort-keys: 'off' */ /** The form data defined here is based on default visualizations packaged with Apache Superset */ +import { TimeGranularity } from '@superset-ui/core'; export const bigNumberFormData = { datasource: '3__table', viz_type: 'big_number', slice_id: 54, granularity_sqla: 'ds', - time_grain_sqla: 'P1D', + time_grain_sqla: TimeGranularity.DAY, time_range: '100 years ago : now', metric: 'sum__num', adhoc_filters: [], diff --git a/superset-frontend/packages/superset-ui-core/test/query/extractExtras.test.ts b/superset-frontend/packages/superset-ui-core/test/query/extractExtras.test.ts index ca6ab730d1af..35174f72bd35 100644 --- a/superset-frontend/packages/superset-ui-core/test/query/extractExtras.test.ts +++ b/superset-frontend/packages/superset-ui-core/test/query/extractExtras.test.ts @@ -16,13 +16,14 @@ * specific language governing permissions and limitations * under the License. */ +import { TimeGranularity } from '@superset-ui/core'; import extractExtras from '../../src/query/extractExtras'; describe('extractExtras', () => { const baseQueryFormData = { datasource: '1__table', granularity_sqla: 'ds', - time_grain_sqla: 'PT1M', + time_grain_sqla: TimeGranularity.MINUTE, viz_type: 'my_viz', }; diff --git a/superset-frontend/packages/superset-ui-core/test/query/processFilters.test.ts b/superset-frontend/packages/superset-ui-core/test/query/processFilters.test.ts index 151c0363f16f..81c8fca2cb93 100644 --- a/superset-frontend/packages/superset-ui-core/test/query/processFilters.test.ts +++ b/superset-frontend/packages/superset-ui-core/test/query/processFilters.test.ts @@ -28,7 +28,7 @@ describe('processFilters', () => { }), ).toEqual( expect.objectContaining({ - extras: { having: '', having_druid: [], where: '' }, + extras: { having: '', where: '' }, filters: [], }), ); @@ -59,7 +59,6 @@ describe('processFilters', () => { ).toEqual({ extras: { having: '', - having_druid: [], where: '', }, filters: [ @@ -89,7 +88,6 @@ describe('processFilters', () => { filters: [], extras: { having: '', - having_druid: [], where: '(1 = 1)', }, }); @@ -115,20 +113,6 @@ describe('processFilters', () => { operator: '==', comparator: 'almond', }, - { - expressionType: 'SIMPLE', - clause: 'HAVING', - subject: 'sweetness', - operator: '>', - comparator: '0', - }, - { - expressionType: 'SIMPLE', - clause: 'HAVING', - subject: 'sweetness', - operator: '<=', - comparator: '50', - }, { expressionType: 'SQL', clause: 'WHERE', @@ -154,18 +138,6 @@ describe('processFilters', () => { ).toEqual({ extras: { having: '(ice = 25 OR ice = 50) AND (waitTime <= 180 -- comment\n)', - having_druid: [ - { - col: 'sweetness', - op: '>', - val: '0', - }, - { - col: 'sweetness', - op: '<=', - val: '50', - }, - ], where: "(tea = 'jasmine') AND (cup = 'large' -- comment\n)", }, filters: [ diff --git a/superset-frontend/plugins/plugin-chart-echarts/test/MixedTimeseries/buildQuery.test.ts b/superset-frontend/plugins/plugin-chart-echarts/test/MixedTimeseries/buildQuery.test.ts index 8236ca23cc08..d8eec19ea6d3 100644 --- a/superset-frontend/plugins/plugin-chart-echarts/test/MixedTimeseries/buildQuery.test.ts +++ b/superset-frontend/plugins/plugin-chart-echarts/test/MixedTimeseries/buildQuery.test.ts @@ -97,7 +97,6 @@ test('should compile query object A', () => { filters: [], extras: { having: '', - having_druid: [], time_grain_sqla: 'P1W', where: "(foo in ('a', 'b'))", }, @@ -158,7 +157,6 @@ test('should compile query object B', () => { filters: [], extras: { having: '', - having_druid: [], time_grain_sqla: 'P1W', where: "(name in ('c', 'd'))", }, @@ -282,7 +280,6 @@ test('should compile query objects with x-axis', () => { filters: [], extras: { having: '', - having_druid: [], time_grain_sqla: 'P1W', where: "(foo in ('a', 'b'))", }, diff --git a/superset-frontend/src/components/Datasource/DatasourceEditor.jsx b/superset-frontend/src/components/Datasource/DatasourceEditor.jsx index 7985165f7338..a64abaf0dc80 100644 --- a/superset-frontend/src/components/Datasource/DatasourceEditor.jsx +++ b/superset-frontend/src/components/Datasource/DatasourceEditor.jsx @@ -589,9 +589,6 @@ class DatasourceEditor extends React.PureComponent { }), }, errors: [], - isDruid: - props.datasource.type === 'druid' || - props.datasource.datasource_type === 'druid', isSqla: props.datasource.datasource_type === 'table' || props.datasource.type === 'table', @@ -1089,20 +1086,6 @@ class DatasourceEditor extends React.PureComponent { /> )} - {this.state.isDruid && ( - - {t('The JSON metric or post aggregation definition.')} - - } - control={ - - } - /> - )} )} {this.state.datasourceType === DATASOURCE_TYPES.physical.key && ( diff --git a/superset-frontend/src/dashboard/util/filterboxMigrationHelper.ts b/superset-frontend/src/dashboard/util/filterboxMigrationHelper.ts index 018d67f29f17..51ef73a03abb 100644 --- a/superset-frontend/src/dashboard/util/filterboxMigrationHelper.ts +++ b/superset-frontend/src/dashboard/util/filterboxMigrationHelper.ts @@ -51,9 +51,6 @@ interface SliceData { granularity_sqla?: string; time_grain_sqla?: string; time_range?: string; - druid_time_origin?: string; - show_druid_time_granularity?: boolean; - show_druid_time_origin?: boolean; show_sqla_time_column?: boolean; show_sqla_time_granularity?: boolean; viz_type: string; @@ -205,12 +202,8 @@ export default function getNativeFilterConfig( adhoc_filters = [], datasource = '', date_filter = false, - druid_time_origin, filter_configs = [], - granularity, granularity_sqla, - show_druid_time_granularity = false, - show_druid_time_origin = false, show_sqla_time_column = false, show_sqla_time_granularity = false, time_grain_sqla, @@ -343,96 +336,6 @@ export default function getNativeFilterConfig( } filterConfig.push(timeColumnFilter); } - - if (show_druid_time_granularity) { - const { scope, immune }: FilterScopeType = - scopesByChartId[TIME_FILTER_MAP.granularity] || - DASHBOARD_FILTER_SCOPE_GLOBAL; - const druidGranularityFilter: Filter = { - id: `NATIVE_FILTER-${shortid.generate()}`, - description: 'time grain filter', - controlValues: {}, - name: TIME_FILTER_LABELS.granularity, - filterType: FILTER_COMPONENT_FILTER_TYPES.FILTER_TIMEGRAIN, - targets: [ - { - datasetId: parseInt(datasource.split('__')[0], 10), - }, - ], - cascadeParentIds: [], - defaultDataMask: {}, - type: NativeFilterType.NATIVE_FILTER, - scope: { - rootPath: scope, - excluded: immune, - }, - }; - filterBoxToFilterComponentMap[key][TIME_FILTER_MAP.granularity] = - druidGranularityFilter.id; - const dashboardDefaultValues = getDashboardDefaultValues( - key, - TIME_FILTER_MAP.granularity, - ); - if (!isEmpty(dashboardDefaultValues)) { - druidGranularityFilter.defaultDataMask = { - extraFormData: { - granularity_sqla: (dashboardDefaultValues || - granularity) as string, - }, - filterState: { - value: setValuesInArray(dashboardDefaultValues, granularity), - }, - }; - } - filterConfig.push(druidGranularityFilter); - } - - if (show_druid_time_origin) { - const { scope, immune }: FilterScopeType = - scopesByChartId[TIME_FILTER_MAP.druid_time_origin] || - DASHBOARD_FILTER_SCOPE_GLOBAL; - const druidOriginFilter: Filter = { - id: `NATIVE_FILTER-${shortid.generate()}`, - description: 'time column filter', - controlValues: {}, - name: TIME_FILTER_LABELS.druid_time_origin, - filterType: FILTER_COMPONENT_FILTER_TYPES.FILTER_TIMECOLUMN, - targets: [ - { - datasetId: parseInt(datasource.split('__')[0], 10), - }, - ], - cascadeParentIds: [], - defaultDataMask: {}, - type: NativeFilterType.NATIVE_FILTER, - scope: { - rootPath: scope, - excluded: immune, - }, - }; - filterBoxToFilterComponentMap[key][ - TIME_FILTER_MAP.druid_time_origin - ] = druidOriginFilter.id; - const dashboardDefaultValues = getDashboardDefaultValues( - key, - TIME_FILTER_MAP.druid_time_origin, - ); - if (!isEmpty(dashboardDefaultValues)) { - druidOriginFilter.defaultDataMask = { - extraFormData: { - granularity_sqla: (dashboardDefaultValues || - druid_time_origin) as string, - }, - filterState: { - value: setValuesInArray( - dashboardDefaultValues, - druid_time_origin, - ), - }, - }; - } - filterConfig.push(druidOriginFilter); - } } filter_configs.forEach(config => { diff --git a/superset-frontend/src/dashboard/util/getFilterConfigsFromFormdata.js b/superset-frontend/src/dashboard/util/getFilterConfigsFromFormdata.js index 807076cfabcd..46f4512a0a9d 100644 --- a/superset-frontend/src/dashboard/util/getFilterConfigsFromFormdata.js +++ b/superset-frontend/src/dashboard/util/getFilterConfigsFromFormdata.js @@ -28,7 +28,6 @@ export default function getFilterConfigsFromFormdata(form_data = {}) { date_filter, filter_configs = [], show_druid_time_granularity, - show_druid_time_origin, show_sqla_time_column, show_sqla_time_granularity, } = form_data; @@ -101,13 +100,6 @@ export default function getFilterConfigsFromFormdata(form_data = {}) { }; } - if (show_druid_time_origin) { - updatedColumns = { - ...updatedColumns, - [TIME_FILTER_MAP.druid_time_origin]: form_data.druid_time_origin, - }; - } - configs = { ...configs, columns: updatedColumns, diff --git a/superset-frontend/src/explore/components/ControlPanelsContainer.tsx b/superset-frontend/src/explore/components/ControlPanelsContainer.tsx index 4160fbbd891c..144ea3cc7b37 100644 --- a/superset-frontend/src/explore/components/ControlPanelsContainer.tsx +++ b/superset-frontend/src/explore/components/ControlPanelsContainer.tsx @@ -174,9 +174,7 @@ const isTimeSection = (section: ControlPanelSectionConfig): boolean => sections.legacyTimeseriesTime.label === section.label); const hasTimeColumn = (datasource: Dataset): boolean => - datasource?.columns?.some(c => c.is_dttm) || - datasource.type === DatasourceType.Druid; - + datasource?.columns?.some(c => c.is_dttm); const sectionsToExpand = ( sections: ControlPanelSectionConfig[], datasource: Dataset, diff --git a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndFilterSelect.tsx b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndFilterSelect.tsx index 4a08c214de8e..b0eb601643f6 100644 --- a/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndFilterSelect.tsx +++ b/superset-frontend/src/explore/components/controls/DndColumnSelectControl/DndFilterSelect.tsx @@ -222,14 +222,8 @@ export const DndFilterSelect = (props: DndFilterSelectProps) => { // via datasource saved metric if (filterOptions.saved_metric_name) { return new AdhocFilter({ - expressionType: - datasource.type === 'druid' - ? EXPRESSION_TYPES.SIMPLE - : EXPRESSION_TYPES.SQL, - subject: - datasource.type === 'druid' - ? filterOptions.saved_metric_name - : getMetricExpression(filterOptions.saved_metric_name), + expressionType: EXPRESSION_TYPES.SQL, + subject: getMetricExpression(filterOptions.saved_metric_name), operator: OPERATOR_ENUM_TO_OPERATOR_TYPE[Operators.GREATER_THAN].operation, operatorId: Operators.GREATER_THAN, @@ -240,14 +234,8 @@ export const DndFilterSelect = (props: DndFilterSelectProps) => { // has a custom label, meaning it's custom column if (filterOptions.label) { return new AdhocFilter({ - expressionType: - datasource.type === 'druid' - ? EXPRESSION_TYPES.SIMPLE - : EXPRESSION_TYPES.SQL, - subject: - datasource.type === 'druid' - ? filterOptions.label - : new AdhocMetric(option).translateToSql(), + expressionType: EXPRESSION_TYPES.SQL, + subject: new AdhocMetric(option).translateToSql(), operator: OPERATOR_ENUM_TO_OPERATOR_TYPE[Operators.GREATER_THAN].operation, operatorId: Operators.GREATER_THAN, diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/index.jsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/index.jsx index 876eca1e75b4..813600a4c16d 100644 --- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/index.jsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/index.jsx @@ -241,14 +241,8 @@ class AdhocFilterControl extends React.Component { // via datasource saved metric if (option.saved_metric_name) { return new AdhocFilter({ - expressionType: - this.props.datasource.type === 'druid' - ? EXPRESSION_TYPES.SIMPLE - : EXPRESSION_TYPES.SQL, - subject: - this.props.datasource.type === 'druid' - ? option.saved_metric_name - : this.getMetricExpression(option.saved_metric_name), + expressionType: EXPRESSION_TYPES.SQL, + subject: this.getMetricExpression(option.saved_metric_name), operator: OPERATOR_ENUM_TO_OPERATOR_TYPE[Operators.GREATER_THAN].operation, comparator: 0, @@ -258,14 +252,8 @@ class AdhocFilterControl extends React.Component { // has a custom label, meaning it's custom column if (option.label) { return new AdhocFilter({ - expressionType: - this.props.datasource.type === 'druid' - ? EXPRESSION_TYPES.SIMPLE - : EXPRESSION_TYPES.SQL, - subject: - this.props.datasource.type === 'druid' - ? option.label - : new AdhocMetric(option).translateToSql(), + expressionType: EXPRESSION_TYPES.SQL, + subject: new AdhocMetric(option).translateToSql(), operator: OPERATOR_ENUM_TO_OPERATOR_TYPE[Operators.GREATER_THAN].operation, comparator: 0, diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.jsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.jsx index 8ae706fc54de..c39a497f7321 100644 --- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.jsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.jsx @@ -19,7 +19,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import Button from 'src/components/Button'; -import { Tooltip } from 'src/components/Tooltip'; import { styled, t } from '@superset-ui/core'; import ErrorBoundary from 'src/components/ErrorBoundary'; @@ -227,20 +226,7 @@ export default class AdhocFilterEditPopover extends React.Component { - {t('Custom SQL')} - - ) : ( - t('Custom SQL') - ) - } - disabled={datasource?.type === 'druid'} + tab={t('Custom SQL')} > { it('will filter operators for table datasources', () => { const { props } = setup({ datasource: { type: 'table' } }); const { isOperatorRelevant } = useSimpleTabFilterProps(props); - expect(isOperatorRelevant(Operators.REGEX, 'value')).toBe(false); expect(isOperatorRelevant(Operators.LIKE, 'value')).toBe(true); }); - it('will filter operators for druid datasources', () => { - const { props } = setup({ datasource: { type: 'druid' } }); - const { isOperatorRelevant } = useSimpleTabFilterProps(props); - expect(isOperatorRelevant(Operators.REGEX, 'value')).toBe(true); - expect(isOperatorRelevant(Operators.LIKE, 'value')).toBe(false); - }); - it('will show LATEST PARTITION operator', () => { const { props } = setup({ datasource: { diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.tsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.tsx index c24282f09efc..910f7986fdf1 100644 --- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.tsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.tsx @@ -23,8 +23,6 @@ import { t, SupersetClient, SupersetTheme, styled } from '@superset-ui/core'; import { Operators, OPERATORS_OPTIONS, - TABLE_ONLY_OPERATORS, - DRUID_ONLY_OPERATORS, HAVING_OPERATORS, MULTI_OPERATORS, CUSTOM_OPERATORS, @@ -140,13 +138,9 @@ export const useSimpleTabFilterProps = (props: Props) => { operator === Operators.IS_NULL || operator === Operators.IS_NOT_NULL ); } - return !( - (props.datasource.type === 'druid' && - TABLE_ONLY_OPERATORS.indexOf(operator) >= 0) || - (props.datasource.type === 'table' && - DRUID_ONLY_OPERATORS.indexOf(operator) >= 0) || - (props.adhocFilter.clause === CLAUSES.HAVING && - HAVING_OPERATORS.indexOf(operator) === -1) + return ( + props.adhocFilter.clause !== CLAUSES.HAVING || + HAVING_OPERATORS.indexOf(operator) !== -1 ); }; const onSubjectChange = (id: string) => { @@ -316,23 +310,13 @@ const AdhocFilterEditPopoverSimpleTabContent: React.FC = props => { placeholder: '', }; - if (props.datasource.type === 'druid') { - subjectSelectProps.placeholder = t( - '%s column(s) and metric(s)', - columns.length, - ); - } else { - // we cannot support simple ad-hoc filters for metrics because we don't know what type - // the value should be cast to (without knowing the output type of the aggregate, which - // becomes a rather complicated problem) - subjectSelectProps.placeholder = - props.adhocFilter.clause === CLAUSES.WHERE - ? t('%s column(s)', columns.length) - : t('To filter on a metric, use Custom SQL tab.'); - columns = props.options.filter( - option => 'column_name' in option && option.column_name, - ); - } + subjectSelectProps.placeholder = + props.adhocFilter.clause === CLAUSES.WHERE + ? t('%s column(s)', columns.length) + : t('To filter on a metric, use Custom SQL tab.'); + columns = props.options.filter( + option => 'column_name' in option && option.column_name, + ); const operatorSelectProps = { placeholder: t( diff --git a/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.tsx b/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.tsx index d665befcca6a..b364fa67a2c9 100644 --- a/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.tsx +++ b/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/AdhocMetricEditPopover.test.tsx @@ -80,18 +80,6 @@ test('Should render correct elements for SQL', () => { expect(screen.getByRole('tabpanel', { name: 'Saved' })).toBeVisible(); }); -test('Should render correct elements for native Druid', () => { - const props = { ...createProps(), datasource: { type: 'druid' } }; - render(); - expect(screen.getByRole('tab', { name: 'Custom SQL' })).toHaveAttribute( - 'aria-disabled', - 'true', - ); - expect(screen.getByRole('tab', { name: 'Simple' })).toBeEnabled(); - expect(screen.getByRole('tab', { name: 'Saved' })).toBeEnabled(); - expect(screen.getByRole('tabpanel', { name: 'Saved' })).toBeVisible(); -}); - test('Should render correct elements for allow ad-hoc metrics', () => { const props = { ...createProps(), diff --git a/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/index.jsx b/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/index.jsx index decad4c12d5d..85abc2f83477 100644 --- a/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/index.jsx +++ b/superset-frontend/src/explore/components/controls/MetricControl/AdhocMetricEditPopover/index.jsx @@ -323,15 +323,6 @@ export default class AdhocMetricEditPopover extends React.PureComponent { autoFocus: true, }; - if ( - this.props.datasource?.type === 'druid' && - aggregateSelectProps.options - ) { - aggregateSelectProps.options = aggregateSelectProps.options.filter( - aggregate => aggregate !== 'AVG', - ); - } - const stateIsValid = adhocMetric.isValid() || savedMetric?.metric_name; const hasUnsavedChanges = !adhocMetric.equals(propsAdhocMetric) || @@ -431,18 +422,11 @@ export default class AdhocMetricEditPopover extends React.PureComponent { {t('Custom SQL')} @@ -451,10 +435,7 @@ export default class AdhocMetricEditPopover extends React.PureComponent { ) } data-test="adhoc-metric-edit-tab#custom" - disabled={ - extra.disallow_adhoc_metrics || - this.props.datasource?.type === 'druid' - } + disabled={extra.disallow_adhoc_metrics} > { const publicControlsFormData = { // time section granularity_sqla: 'time_column', - time_grain_sqla: 'P1D', + time_grain_sqla: TimeGranularity.DAY, time_range: '2000 : today', // filters adhoc_filters: [], @@ -115,6 +116,7 @@ describe('should collect control values and create SFD', () => { datasource: '100__table', viz_type: 'source_viz', }; + const sourceMockStore = { form_data: sourceMockFormData, controls: Object.fromEntries( @@ -128,6 +130,7 @@ describe('should collect control values and create SFD', () => { columns: [], }, }; + beforeAll(() => { getChartControlPanelRegistry().registerValue('source_viz', { controlPanelSections: [ @@ -272,7 +275,7 @@ describe('should transform form_data between table and bigNumberTotal', () => { datasource: '30__table', viz_type: 'table', granularity_sqla: 'ds', - time_grain_sqla: 'P1D', + time_grain_sqla: TimeGranularity.DAY, time_range: 'No filter', query_mode: 'aggregate', groupby: ['name', 'gender', adhocColumn], diff --git a/superset-frontend/src/explore/controlUtils/standardizedFormData.ts b/superset-frontend/src/explore/controlUtils/standardizedFormData.ts index 399f79416b18..b3af0a2f2135 100644 --- a/superset-frontend/src/explore/controlUtils/standardizedFormData.ts +++ b/superset-frontend/src/explore/controlUtils/standardizedFormData.ts @@ -145,7 +145,6 @@ export class StandardizedFormData { if (this.has(vizType)) { return this.get(vizType); } - return this.memorizedFormData.slice(-1)[0][1]; } @@ -205,6 +204,7 @@ export class StandardizedFormData { ...getFormDataFromControls(targetControlsState), standardizedFormData: this.serialize(), }; + let rv = { formData: targetFormData, controlsState: targetControlsState, diff --git a/superset-frontend/src/explore/controls.jsx b/superset-frontend/src/explore/controls.jsx index 21134d48f317..e608c5fcb194 100644 --- a/superset-frontend/src/explore/controls.jsx +++ b/superset-frontend/src/explore/controls.jsx @@ -246,21 +246,6 @@ export const controls = { description: t('One or many controls to pivot as columns'), }, - druid_time_origin: { - type: 'SelectControl', - freeForm: true, - label: TIME_FILTER_LABELS.druid_time_origin, - choices: [ - ['', 'default'], - ['now', 'now'], - ], - default: null, - description: t( - 'Defines the origin where time buckets start, ' + - 'accepts natural dates as in `now`, `sunday` or `1970-01-01`', - ), - }, - granularity: { type: 'SelectControl', freeForm: true, @@ -286,7 +271,7 @@ export const controls = { ], description: t( 'The time granularity for the visualization. Note that you ' + - 'can type and use simple natural language as in `10 seconds`, ' + + 'can type and use simple natural language as in `10 seconds`,' + '`1 day` or `56 weeks`', ), }, diff --git a/superset-frontend/src/explore/store.js b/superset-frontend/src/explore/store.js index 8bd047708708..50f83bd0fe8d 100644 --- a/superset-frontend/src/explore/store.js +++ b/superset-frontend/src/explore/store.js @@ -45,7 +45,6 @@ export function getControlsState(state, inputFormData) { formData.viz_type || state.common?.conf.DEFAULT_VIZ_TYPE || 'table'; handleDeprecatedControls(formData); - const controlsState = getAllControlsState( vizType, state.datasource.type, diff --git a/superset-frontend/src/visualizations/FilterBox/FilterBox.jsx b/superset-frontend/src/visualizations/FilterBox/FilterBox.jsx index d734cf943dc6..20ad5085abb8 100644 --- a/superset-frontend/src/visualizations/FilterBox/FilterBox.jsx +++ b/superset-frontend/src/visualizations/FilterBox/FilterBox.jsx @@ -81,8 +81,6 @@ const propTypes = { showDateFilter: PropTypes.bool, showSqlaTimeGrain: PropTypes.bool, showSqlaTimeColumn: PropTypes.bool, - showDruidTimeGrain: PropTypes.bool, - showDruidTimeOrigin: PropTypes.bool, }; const defaultProps = { origSelectedValues: {}, @@ -92,8 +90,6 @@ const defaultProps = { showDateFilter: false, showSqlaTimeGrain: false, showSqlaTimeColumn: false, - showDruidTimeGrain: false, - showDruidTimeOrigin: false, instantFiltering: false, }; @@ -319,19 +315,12 @@ class FilterBox extends React.PureComponent { } renderDatasourceFilters() { - const { - showSqlaTimeGrain, - showSqlaTimeColumn, - showDruidTimeGrain, - showDruidTimeOrigin, - } = this.props; + const { showSqlaTimeGrain, showSqlaTimeColumn } = this.props; const datasourceFilters = []; const sqlaFilters = []; const druidFilters = []; if (showSqlaTimeGrain) sqlaFilters.push('time_grain_sqla'); if (showSqlaTimeColumn) sqlaFilters.push('granularity_sqla'); - if (showDruidTimeGrain) druidFilters.push('granularity'); - if (showDruidTimeOrigin) druidFilters.push('druid_time_origin'); if (sqlaFilters.length) { datasourceFilters.push( None: "__time_range": "time_range", "__time_col": "granularity_sqla", "__time_grain": "time_grain_sqla", - "__time_origin": "druid_time_origin", "__granularity": "granularity", } # Grab list of existing filters 'keyed' on the column and operator @@ -1763,28 +1761,6 @@ def get_time_filter_status( } ) - if ExtraFiltersTimeColumnType.TIME_ORIGIN in applied_time_extras: - if datasource.type == "druid": - applied.append({"column": ExtraFiltersTimeColumnType.TIME_ORIGIN}) - else: - rejected.append( - { - "reason": ExtraFiltersReasonType.NOT_DRUID_DATASOURCE, - "column": ExtraFiltersTimeColumnType.TIME_ORIGIN, - } - ) - - if ExtraFiltersTimeColumnType.GRANULARITY in applied_time_extras: - if datasource.type == "druid": - applied.append({"column": ExtraFiltersTimeColumnType.GRANULARITY}) - else: - rejected.append( - { - "reason": ExtraFiltersReasonType.NOT_DRUID_DATASOURCE, - "column": ExtraFiltersTimeColumnType.GRANULARITY, - } - ) - return applied, rejected diff --git a/superset/utils/dashboard_filter_scopes_converter.py b/superset/utils/dashboard_filter_scopes_converter.py index db897fa64c5a..3aeb32360a77 100644 --- a/superset/utils/dashboard_filter_scopes_converter.py +++ b/superset/utils/dashboard_filter_scopes_converter.py @@ -63,10 +63,6 @@ def add_filter_scope( add_filter_scope(filter_fields, "__time_col", filter_id) if slice_params.get("show_sqla_time_granularity"): add_filter_scope(filter_fields, "__time_grain", filter_id) - if slice_params.get("show_druid_time_granularity"): - add_filter_scope(filter_fields, "__granularity", filter_id) - if slice_params.get("show_druid_time_origin"): - add_filter_scope(filter_fields, "druid_time_origin", filter_id) for config in configs: add_filter_scope(filter_fields, config.get("column"), filter_id) diff --git a/superset/viz.py b/superset/viz.py index e83e0127775c..8da90987568f 100644 --- a/superset/viz.py +++ b/superset/viz.py @@ -397,9 +397,7 @@ def query_obj(self) -> QueryObjectDict: # pylint: disable=too-many-locals # extras are used to query elements specific to a datasource type # for instance the extra where clause that applies only to Tables extras = { - "druid_time_origin": self.form_data.get("druid_time_origin", ""), "having": self.form_data.get("having", ""), - "having_druid": self.form_data.get("having_filters", []), "time_grain_sqla": self.form_data.get("time_grain_sqla"), "where": self.form_data.get("where", ""), } diff --git a/tests/integration_tests/charts/data/api_tests.py b/tests/integration_tests/charts/data/api_tests.py index 73425fb58f68..67b9826d26f3 100644 --- a/tests/integration_tests/charts/data/api_tests.py +++ b/tests/integration_tests/charts/data/api_tests.py @@ -181,7 +181,7 @@ def test_with_row_limit_bigger_then_sql_max_row__rowcount_as_sql_max_row(self): "superset.utils.core.current_app.config", {**app.config, "SQL_MAX_ROW": 5}, ) - def test_as_samples_with_row_limit_bigger_then_sql_max_row__rowcount_as_sql_max_row( + def test_as_samples_with_row_limit_bigger_then_sql_max_row_rowcount_as_sql_max_row( self, ): expected_row_count = app.config["SQL_MAX_ROW"] @@ -335,12 +335,6 @@ def test_chart_data_applied_time_extras(self): {"column": "__time_range"}, ], ) - self.assertEqual( - data["result"][0]["rejected_filters"], - [ - {"column": "__time_origin", "reason": "not_druid_datasource"}, - ], - ) expected_row_count = self.get_expected_row_count("client_id_2") self.assertEqual(data["result"][0]["rowcount"], expected_row_count) @@ -798,7 +792,6 @@ def test_chart_data_get(self): "filters": [], "extras": { "having": "", - "having_druid": [], "where": "", }, "applied_time_extras": {}, diff --git a/tests/integration_tests/query_context_tests.py b/tests/integration_tests/query_context_tests.py index 6d5fec88f444..5b811cfd1508 100644 --- a/tests/integration_tests/query_context_tests.py +++ b/tests/integration_tests/query_context_tests.py @@ -283,7 +283,6 @@ def test_convert_deprecated_fields(self): self.assertEqual(query_object.columns, columns) self.assertEqual(query_object.series_limit, 99) self.assertEqual(query_object.series_limit_metric, "sum__num") - self.assertIn("having_druid", query_object.extras) @pytest.mark.usefixtures("load_birth_names_dashboard_with_slices") def test_csv_response_format(self): diff --git a/tests/integration_tests/utils_tests.py b/tests/integration_tests/utils_tests.py index 9b2a288964a7..da1567cab4c1 100644 --- a/tests/integration_tests/utils_tests.py +++ b/tests/integration_tests/utils_tests.py @@ -228,7 +228,6 @@ def test_merge_extra_filters(self): {"col": "__time_col", "op": "in", "val": "birth_year"}, {"col": "__time_grain", "op": "in", "val": "years"}, {"col": "A", "op": "like", "val": "hello"}, - {"col": "__time_origin", "op": "in", "val": "now"}, {"col": "__granularity", "op": "in", "val": "90 seconds"}, ] } @@ -248,12 +247,10 @@ def test_merge_extra_filters(self): "granularity_sqla": "birth_year", "time_grain_sqla": "years", "granularity": "90 seconds", - "druid_time_origin": "now", "applied_time_extras": { "__time_range": "1 year ago :", "__time_col": "birth_year", "__time_grain": "years", - "__time_origin": "now", "__granularity": "90 seconds", }, } diff --git a/tests/integration_tests/viz_tests.py b/tests/integration_tests/viz_tests.py index 6eb3f8c61148..6a8bda3df954 100644 --- a/tests/integration_tests/viz_tests.py +++ b/tests/integration_tests/viz_tests.py @@ -288,13 +288,6 @@ def test_parse_adhoc_filters(self): "operator": ">", "comparator": "100", }, - { - "expressionType": "SIMPLE", - "clause": "HAVING", - "subject": "SUM(value1)", - "operator": "<", - "comparator": "10", - }, { "expressionType": "SQL", "clause": "HAVING", @@ -313,10 +306,6 @@ def test_parse_adhoc_filters(self): self.assertEqual( [{"col": "value2", "val": "100", "op": ">"}], query_obj["filter"] ) - self.assertEqual( - [{"op": "<", "val": "10", "col": "SUM(value1)"}], - query_obj["extras"]["having_druid"], - ) self.assertEqual("(value3 in ('North America'))", query_obj["extras"]["where"]) self.assertEqual("(SUM(value1) > 5)", query_obj["extras"]["having"]) @@ -352,7 +341,6 @@ def test_adhoc_filters_overwrite_legacy_filters(self): self.assertEqual( [{"col": "value2", "val": "100", "op": ">"}], query_obj["filter"] ) - self.assertEqual([], query_obj["extras"]["having_druid"]) self.assertEqual("(value3 in ('North America'))", query_obj["extras"]["where"]) self.assertEqual("", query_obj["extras"]["having"])