aminghadersohi commented on PR #45612: URL: https://github.com/apache/superset/pull/45612#issuecomment-6379920726
@rebenitez1802 The remaining Explore date-range edit ask in https://github.com/apache/superset/pull/45612#pullrequestreview-5636277182 is covered below. Fixed in af948501a626031148cc4caee71f6e81195a58bc. `duplicateWith` drops the inherited grain when the operator changes, including the date picker's `==` → `TEMPORAL_RANGE` transition. Comparator-only and clause-only edits keep the grain. Regression test: `picking a date range on a drilled bucket filters raw dates without a grain` in `superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/AdhocFilterEditPopoverSimpleTabContent.test.tsx` invokes the real date-picker handler with `2004-01-15 : 2004-02-15` and asserts the complete converted query predicate has no `grain`. That test, the sibling operator-handler test, and three `duplicateWith` operator-change cases fail at 78ee7a2f25055ed453e32491435320634b54e1e4 (5 failed / 83 passed) and pass with this change. The sibling Custom SQL conversion is guarded in 2964b59c82b3325924e450d5deeb5335000ef0ce: a bucket predicate has no portable raw SQL representation, so its SQL tab is unavailable while the grain is present. Regression test: `a drilled bucket cannot be converted to raw Custom SQL that loses its grain` in `superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.tsx` failed before that guard (1 failed / 9 passed) and passes after it. The guard covers both SQL clause and SQL expression handlers; ordinary SQL filters keep their existing tab. Validation: broader Jest scope 1,058 passed; chart plugin scope 130 passed; final FilterControl scope 128 passed. Docker backend siblings 321 passed; the CI-equivalent semantic-layer gate 1,827 passed with 100.00% statement/branch coverage. Changed-branch-file pre-commit passed with the repository-pinned Ruff. Live UI/SQL acceptance was not run because the local health endpoint is unavailable. Siblings checked: - superset-frontend/src/explore/components/controls/FilterControl/AdhocFilter/index.ts:143 — fixed in af948501a626031148cc4caee71f6e81195a58bc - superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.tsx:278 — fixed in af948501a626031148cc4caee71f6e81195a58bc - superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.tsx:333 — fixed in af948501a626031148cc4caee71f6e81195a58bc - superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.tsx:345 — fixed in af948501a626031148cc4caee71f6e81195a58bc - superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.tsx:375 — fixed in af948501a626031148cc4caee71f6e81195a58bc - superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.tsx:357 — not affected: comparator-only changes intentionally keep the bucket grain, covered by the Explore-edits test - superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.tsx:366 — not affected: clearing the operator makes the filter invalid; selecting a replacement operator drops the grain through duplicateWith - superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.tsx:374 — fixed in 2964b59c82b3325924e450d5deeb5335000ef0ce - superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.tsx:271 — not affected: the save clone only changes layerFilterScope, not column or operator - superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/index.tsx:65 — fixed in 2964b59c82b3325924e450d5deeb5335000ef0ce - superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/index.tsx:74 — fixed in 2964b59c82b3325924e450d5deeb5335000ef0ce - superset-frontend/src/explore/components/controls/MetricControl/AdhocMetric.ts — not affected: duplicateWith belongs to a different class without filter timeGrain - superset-frontend/src/components/Chart/DrillBy/DrillByModal.tsx:255 — not affected: conversion and further drills preserve the original bucket metadata without editing its operator - superset-frontend/src/components/Chart/DrillBy/DrillByModal.tsx:278 — not affected: the alternate query filter field uses the same grain-preserving conversion - superset-frontend/src/utils/simpleFilterToAdhoc.ts:98 — not affected: preserving grain when constructing a bucket is intentional, rather than an operator edit - superset-frontend/src/explore/controlUtils/getFormDataWithDashboardContext.ts:98 — not affected: dashboard-context conversion does not change a bucket operator - superset-frontend/src/explore/controlUtils/getFormDataWithDashboardContext.ts:155 — not affected: the alternate dashboard filter conversion likewise does not edit the predicate - superset-frontend/src/components/Chart/DrillDetail/utils.ts:27 — not affected: Drill to detail and downloads forward query filter metadata without editing predicates - superset-frontend/src/components/Chart/DrillDetail/DrillDetailPane.tsx:227 — not affected: query and download at line 311 both use getDrillPayload, not adhoc operator edits - superset-frontend/src/explore/components/DataTablesPane/components/SamplesPane.tsx:97 — not affected: delegates to the same payload builder without an operator edit - superset-frontend/plugins/plugin-chart-echarts/src/utils/xAxisDrillByFilter.ts:177 — not affected: constructs the clicked bucket, where retaining its grain is required - superset-frontend/plugins/plugin-chart-echarts/src/Timeseries/EchartsTimeseries.tsx:713 — not affected: calls the bucket constructor, not an editor - superset-frontend/plugins/plugin-chart-echarts/src/MixedTimeseries/EchartsMixedTimeseries.tsx:251 — not affected: calls the same bucket constructor for the clicked query - superset-frontend/plugins/plugin-chart-echarts/src/Sunburst/utils.ts:169 — not affected: constructs a bucket like Drill to detail, not an edited date range - superset-frontend/packages/superset-ui-core/src/query/convertFilter.ts:43 — not affected: serializes the edited filter without grain; the new date-picker test asserts the complete query-filter payload - superset/common/form_data_query_context.py:258 — not affected: only emits grain when timeGrain is present in the adhoc filter - superset/utils/core.py:1553 — not affected: the alternate adhoc-to-query conversion has the same conditional grain emission - superset/common/query_context_factory.py:436 — not affected: preserving explicit bucket predicates during time-column overrides is intentional; edited ranges have no grain - superset/models/helpers.py:5432 — not affected: no filter grain means a raw-date comparison; explicit grained predicates still need bucket semantics - superset/semantic_layers/mapper.py:908 — not affected: grained equality is a bucket; TEMPORAL_RANGE follows the separate raw-date range path The previous red unit test job had no failing assertion: its failure was `FAIL Required test coverage of 100% not reached. Total coverage: 99.90%`, with uncovered mapper lines 986, 988–989: https://github.com/apache/superset/actions/runs/40034985479/job/120692804902 . The added `test_get_grain_bucket_ignores_unsupported_values_and_grains` and `test_grained_equality_with_unsupported_duration_keeps_scalar_comparison` exercise those branches and the scalar fallback. With the checkout's `.coveragerc` and pytest configuration, the same full gate reports `Required test coverage of 100% reached. Total coverage: 100.00%` (1,827 passed). Fresh GitHub CI is running; I have not claimed a green final CI result. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
