codeant-ai-for-open-source[bot] commented on code in PR #42088:
URL: https://github.com/apache/superset/pull/42088#discussion_r3590358071
##########
superset/migrations/shared/migrate_viz/processors.py:
##########
@@ -642,3 +644,225 @@ def process(base_query_object: dict[str, Any]) ->
list[dict[str, Any]]:
return [result]
return build_query_context(self.data, process)
+
+
+def _get_table_chart_time_offsets(form_data: dict[str, Any]) -> list[Any]:
+ """
+ Resolve time_compare into the list of shifts buildQuery.ts sends as
+ time_offsets. table charts use a single-select time_compare control
+ whose choices include the special 'custom'/'inherit' shifts, which
+ resolve to start_date_offset/'inherit' rather than being used verbatim.
+ """
+ time_compare_shifts = ensure_is_array(form_data.get("time_compare"))
+ non_custom_or_inherit_shifts = [
+ shift for shift in time_compare_shifts if shift not in ("custom",
"inherit")
+ ]
+ custom_or_inherit_shifts = [
+ shift for shift in time_compare_shifts if shift in ("custom",
"inherit")
+ ]
+
+ time_offsets: list[Any] = list(non_custom_or_inherit_shifts)
+ if "custom" in custom_or_inherit_shifts:
+ time_offsets.append(form_data.get("start_date_offset"))
+ if "inherit" in custom_or_inherit_shifts:
+ time_offsets.append("inherit")
+ return time_offsets
Review Comment:
**Suggestion:** Time-offset derivation ignores the
`extra_form_data.time_compare` override path used by table buildQuery, so
migrated query contexts can execute with a different shift than runtime
behavior. Apply the same override precedence so dashboard-level time-compare
overrides replace chart-level offsets. [api mismatch]
<details>
<summary><b>Severity Level:</b> Major ⚠️</summary>
```mdx
❌ Migrated table charts ignore dashboard override time comparison shifts.
⚠️ Stored query_context diverges from frontend time_compare behavior.
```
</details>
<details>
<summary><b>Steps of Reproduction ✅ </b></summary>
```mdx
1. Observe the runtime table buildQuery logic in
`superset-frontend/plugins/plugin-chart-table/src/buildQuery.ts:96-132`,
where
`timeOffsets` is first derived from `formData.time_compare` and then
overridden when
`extra_form_data.time_compare` is present: `if
(extra_form_data?.time_compare &&
!timeOffsets.includes(extra_form_data.time_compare)) { timeOffsets =
[extra_form_data.time_compare]; }`, and similarly in AG Grid’s buildQuery at
`superset-frontend/plugins/plugin-chart-ag-grid-table/src/buildQuery.ts:100-134`
which
unconditionally sets `timeOffsets = [extra_form_data.time_compare]` when the
override
exists.
2. Configure a saved table slice whose JSON `params` include an
`extra_form_data` object
with a `time_compare` override (dashboard-level time comparison), distinct
from the
chart-level `time_compare` setting; this is a realistic configuration
produced by
dashboard filters and persisted in Slice.params, and extra_form_data
precedence for other
fields (like time_grain_sqla) is already mirrored in Python for pivot tables
at
`superset/migrations/shared/migrate_viz/processors.py:117-120`.
3. Run `superset migrate_viz upgrade --viz_type table` as defined in
`superset/cli/viz_migrations.py:33-40,69-81`, which instantiates
`MigrateTableChart` for
each matching Slice and calls `MigrateViz.upgrade_slice`
(`superset/migrations/shared/migrate_viz/base.py:150-183`) to rebuild
query_context via
`MigrateTableChart._build_query()`.
4. Inside `_build_query`, the helper `_get_table_chart_time_offsets`
(`superset/migrations/shared/migrate_viz/processors.py:649-669`) derives
`time_offsets`
purely from `form_data.get("time_compare")`, `start_date_offset`, and the
special
"inherit" value, and never inspects `form_data.get("extra_form_data",
{}).get("time_compare")`; the migrated query_context therefore hard-codes
the chart-level
time shifts, while at runtime the frontend buildQuery uses the
extra_form_data override,
resulting in stored queries that can execute with different effective time
comparison
shifts than the UI expects when dashboard overrides are in play.
```
</details>
[](https://app.codeant.ai/fix-in-ide?tool=cursor&prompt_id=5835efe923ae4fb19fe8edc9d8d76c63&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
[](https://app.codeant.ai/fix-in-ide?tool=vscode-claude&prompt_id=5835efe923ae4fb19fe8edc9d8d76c63&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
*(Use Cmd/Ctrl + Click for best experience)*
<details>
<summary><b>Prompt for AI Agent 🤖 </b></summary>
```mdx
This is a comment left during a code review.
**Path:** superset/migrations/shared/migrate_viz/processors.py
**Line:** 656:669
**Comment:**
*Api Mismatch: Time-offset derivation ignores the
`extra_form_data.time_compare` override path used by table buildQuery, so
migrated query contexts can execute with a different shift than runtime
behavior. Apply the same override precedence so dashboard-level time-compare
overrides replace chart-level offsets.
Validate the correctness of the flagged issue. If correct, How can I resolve
this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask
user if the user wants to fix the rest of the comments as well. if said yes,
then fetch all the comments validate the correctness and implement a minimal fix
```
</details>
<a
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F42088&comment_hash=5aae68e3c9b7cfef69a2b5485ed2175002849f83b197f77fc5a854a7e31a40e2&reaction=like'>👍</a>
| <a
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F42088&comment_hash=5aae68e3c9b7cfef69a2b5485ed2175002849f83b197f77fc5a854a7e31a40e2&reaction=dislike'>👎</a>
##########
superset/migrations/shared/migrate_viz/processors.py:
##########
@@ -642,3 +644,225 @@ def process(base_query_object: dict[str, Any]) ->
list[dict[str, Any]]:
return [result]
return build_query_context(self.data, process)
+
+
+def _get_table_chart_time_offsets(form_data: dict[str, Any]) -> list[Any]:
+ """
+ Resolve time_compare into the list of shifts buildQuery.ts sends as
+ time_offsets. table charts use a single-select time_compare control
+ whose choices include the special 'custom'/'inherit' shifts, which
+ resolve to start_date_offset/'inherit' rather than being used verbatim.
+ """
+ time_compare_shifts = ensure_is_array(form_data.get("time_compare"))
+ non_custom_or_inherit_shifts = [
+ shift for shift in time_compare_shifts if shift not in ("custom",
"inherit")
+ ]
+ custom_or_inherit_shifts = [
+ shift for shift in time_compare_shifts if shift in ("custom",
"inherit")
+ ]
+
+ time_offsets: list[Any] = list(non_custom_or_inherit_shifts)
+ if "custom" in custom_or_inherit_shifts:
+ time_offsets.append(form_data.get("start_date_offset"))
+ if "inherit" in custom_or_inherit_shifts:
+ time_offsets.append("inherit")
+ return time_offsets
+
+
+def _reorder_table_chart_temporal_column(
+ columns: list[Any],
+ time_grain_sqla: Any,
+ temporal_columns_lookup: dict[str, Any],
+) -> list[Any]:
+ """
+ Move the first physical column with a temporal_columns_lookup entry to
+ the front of the columns list as a BASE_AXIS adhoc column, mirroring
+ buildQuery.ts's temporal-column handling in aggregate mode.
+ """
+ temporal_column = None
+ filtered_columns = []
+ for col in columns:
+ should_be_temporal = (
+ is_physical_column(col)
+ and time_grain_sqla
+ and temporal_columns_lookup.get(col)
+ )
+ if should_be_temporal and temporal_column is None:
+ temporal_column = {
+ "timeGrain": time_grain_sqla,
+ "columnType": "BASE_AXIS",
+ "sqlExpression": col,
+ "label": col,
+ "expressionType": "SQL",
+ }
+ else:
+ filtered_columns.append(col)
+ return [temporal_column] + filtered_columns if temporal_column else
filtered_columns
+
+
+class MigrateTableChart(MigrateViz):
+ source_viz_type = "table"
+ target_viz_type = "ag-grid-table"
+ remove_keys = {"allow_rearrange_columns", "allow_render_html"}
+ rename_keys: dict[str, str] = {} # no renames needed; names match 1:1
+
+ def _pre_action(self) -> None:
+ # page_length: 0 ("All") has no dropdown choice in v2, but the control
+ # is freeForm and 0 still works at runtime — map to v2's largest
+ # PAGE_SIZE_OPTIONS entry (200) so the migrated chart keeps showing as
+ # many rows per page as v2 supports, rather than an arbitrary smaller
+ # value
+ if self.data.get("page_length") in (0, "0"):
+ self.data["page_length"] = 200
+
+ # Table charts are explicitly excluded from Matrixify
+ # (MATRIXIFY_INCOMPATIBLE_CHARTS), so drop any matrixify_* keys
+ # rather than migrating them.
+ for key in [k for k in self.data if k.startswith("matrixify_")]:
+ self.data.pop(key)
+
+ def _build_aggregate_mode_query(
+ self, base_query_object: dict[str, Any], time_offsets: list[Any]
+ ) -> tuple[list[Any], list[Any], Any, list[Any]]:
+ """
+ Returns (metrics, columns, orderby, post_processing) for aggregate
+ mode, mirroring buildQuery.ts's QueryMode.Aggregate branch: sort-by
+ metric/default ordering, percent-metric contribution, time
+ comparison, and moving the temporal column to the front.
+ """
+ metrics = base_query_object.get("metrics") or []
+ orderby = base_query_object.get("orderby") or []
+ columns = list(base_query_object.get("columns") or [])
+ post_processing: list[Any] = []
+
+ sort_by_metric_options = ensure_is_array(
+ self.data.get("timeseries_limit_metric")
+ )
+ sort_by_metric = sort_by_metric_options[0] if sort_by_metric_options
else None
+ if sort_by_metric:
+ orderby = [[sort_by_metric, not self.data.get("order_desc",
False)]]
+ elif metrics:
+ orderby = [[metrics[0], False]]
+
+ if percent_metrics :=
ensure_is_array(self.data.get("percent_metrics")):
+ percent_metric_labels = remove_duplicates(
+ [get_metric_label(m) for m in percent_metrics],
get_metric_label
+ )
+ metrics = remove_duplicates(metrics + percent_metrics,
get_metric_label)
+ post_processing.append(
+ {
+ "operation": "contribution",
+ "options": {
+ "columns": percent_metric_labels,
+ "rename_columns": [f"%{m}" for m in
percent_metric_labels],
+ },
+ }
+ )
Review Comment:
**Suggestion:** The percent-metric contribution setup does not include
time-comparison-expanded metric labels, so when time comparison is enabled only
the base percent metric is renamed/computed and offset percent columns are
missing. Mirror the frontend logic by expanding percent metric labels with each
time offset before building `columns` and `rename_columns` for the contribution
operator. [api mismatch]
<details>
<summary><b>Severity Level:</b> Major ⚠️</summary>
```mdx
❌ Migrated table charts miscompute percent metrics with time comparison.
⚠️ Dashboard percent trend views show inconsistent shifted percent columns.
```
</details>
<details>
<summary><b>Steps of Reproduction ✅ </b></summary>
```mdx
1. Configure a saved table chart slice with percent metrics and time
comparison enabled in
its form data, e.g. "percent_metrics": ["sum__sales"], "time_compare": ["1
year ago"], and
a standard comparison_type, following the runtime behavior defined in
`superset-frontend/plugins/plugin-chart-ag-grid-table/src/buildQuery.ts:139-176`
where
percentMetricsLabelsWithTimeComparison is expanded via
`addComparisonPercentMetrics(percentMetrics.map(getMetricLabel),
timeOffsets)`.
2. Run the CLI migration `superset migrate_viz upgrade --viz_type table`,
which is wired
in `superset/cli/viz_migrations.py:69-81` to call
`MigrateTableChart.upgrade(db.session)`,
and then `MigrateViz.upgrade_slice` in
`superset/migrations/shared/migrate_viz/base.py:150-183` to rebuild each
Slice’s
query_context using `MigrateTableChart._build_query()`.
3. During `MigrateTableChart._build_query` (processors.py:69-119, 840-919),
aggregate mode
delegates to `_build_aggregate_mode_query`; inside that method at
`superset/migrations/shared/migrate_viz/processors.py:747-760` the Python
code computes
`percent_metric_labels = remove_duplicates([get_metric_label(m) for m in
percent_metrics],
get_metric_label)` and builds a contribution post-processing rule with
`columns` and
`rename_columns` based only on these base labels, without expanding them
with time_offsets
for comparison metrics like "sum__sales__1 year ago".
4. After migration, the stored query_context for the slice contains a
`post_processing`
array where the "contribution" rule’s `options.columns` only list base
percent metric
labels, while the frontend AG Grid buildQuery
(plugins/plugin-chart-ag-grid-table/src/buildQuery.ts:150-173) expects
expanded labels
including time-comparison suffixes; executing the migrated chart produces
percent columns
only for the base metric and omits or mislabels percent columns for shifted
metrics,
causing the v2 table to diverge from the expected runtime behavior.
```
</details>
[](https://app.codeant.ai/fix-in-ide?tool=cursor&prompt_id=29fff66282084a19ad82a0e686e0a634&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
[](https://app.codeant.ai/fix-in-ide?tool=vscode-claude&prompt_id=29fff66282084a19ad82a0e686e0a634&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
*(Use Cmd/Ctrl + Click for best experience)*
<details>
<summary><b>Prompt for AI Agent 🤖 </b></summary>
```mdx
This is a comment left during a code review.
**Path:** superset/migrations/shared/migrate_viz/processors.py
**Line:** 747:760
**Comment:**
*Api Mismatch: The percent-metric contribution setup does not include
time-comparison-expanded metric labels, so when time comparison is enabled only
the base percent metric is renamed/computed and offset percent columns are
missing. Mirror the frontend logic by expanding percent metric labels with each
time offset before building `columns` and `rename_columns` for the contribution
operator.
Validate the correctness of the flagged issue. If correct, How can I resolve
this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask
user if the user wants to fix the rest of the comments as well. if said yes,
then fetch all the comments validate the correctness and implement a minimal fix
```
</details>
<a
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F42088&comment_hash=ed92df1e74eaa0ac5f5fdc5f89dc38585292230762764cd6f48ab3e2664077d7&reaction=like'>👍</a>
| <a
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F42088&comment_hash=ed92df1e74eaa0ac5f5fdc5f89dc38585292230762764cd6f48ab3e2664077d7&reaction=dislike'>👎</a>
##########
superset/migrations/shared/migrate_viz/processors.py:
##########
@@ -642,3 +644,225 @@ def process(base_query_object: dict[str, Any]) ->
list[dict[str, Any]]:
return [result]
return build_query_context(self.data, process)
+
+
+def _get_table_chart_time_offsets(form_data: dict[str, Any]) -> list[Any]:
+ """
+ Resolve time_compare into the list of shifts buildQuery.ts sends as
+ time_offsets. table charts use a single-select time_compare control
+ whose choices include the special 'custom'/'inherit' shifts, which
+ resolve to start_date_offset/'inherit' rather than being used verbatim.
+ """
+ time_compare_shifts = ensure_is_array(form_data.get("time_compare"))
+ non_custom_or_inherit_shifts = [
+ shift for shift in time_compare_shifts if shift not in ("custom",
"inherit")
+ ]
+ custom_or_inherit_shifts = [
+ shift for shift in time_compare_shifts if shift in ("custom",
"inherit")
+ ]
+
+ time_offsets: list[Any] = list(non_custom_or_inherit_shifts)
+ if "custom" in custom_or_inherit_shifts:
+ time_offsets.append(form_data.get("start_date_offset"))
+ if "inherit" in custom_or_inherit_shifts:
+ time_offsets.append("inherit")
+ return time_offsets
+
+
+def _reorder_table_chart_temporal_column(
+ columns: list[Any],
+ time_grain_sqla: Any,
+ temporal_columns_lookup: dict[str, Any],
+) -> list[Any]:
+ """
+ Move the first physical column with a temporal_columns_lookup entry to
+ the front of the columns list as a BASE_AXIS adhoc column, mirroring
+ buildQuery.ts's temporal-column handling in aggregate mode.
+ """
+ temporal_column = None
+ filtered_columns = []
+ for col in columns:
+ should_be_temporal = (
+ is_physical_column(col)
+ and time_grain_sqla
+ and temporal_columns_lookup.get(col)
+ )
+ if should_be_temporal and temporal_column is None:
+ temporal_column = {
+ "timeGrain": time_grain_sqla,
+ "columnType": "BASE_AXIS",
+ "sqlExpression": col,
+ "label": col,
+ "expressionType": "SQL",
+ }
+ else:
+ filtered_columns.append(col)
+ return [temporal_column] + filtered_columns if temporal_column else
filtered_columns
+
+
+class MigrateTableChart(MigrateViz):
+ source_viz_type = "table"
+ target_viz_type = "ag-grid-table"
+ remove_keys = {"allow_rearrange_columns", "allow_render_html"}
+ rename_keys: dict[str, str] = {} # no renames needed; names match 1:1
+
+ def _pre_action(self) -> None:
+ # page_length: 0 ("All") has no dropdown choice in v2, but the control
+ # is freeForm and 0 still works at runtime — map to v2's largest
+ # PAGE_SIZE_OPTIONS entry (200) so the migrated chart keeps showing as
+ # many rows per page as v2 supports, rather than an arbitrary smaller
+ # value
+ if self.data.get("page_length") in (0, "0"):
+ self.data["page_length"] = 200
+
+ # Table charts are explicitly excluded from Matrixify
+ # (MATRIXIFY_INCOMPATIBLE_CHARTS), so drop any matrixify_* keys
+ # rather than migrating them.
+ for key in [k for k in self.data if k.startswith("matrixify_")]:
+ self.data.pop(key)
+
+ def _build_aggregate_mode_query(
+ self, base_query_object: dict[str, Any], time_offsets: list[Any]
+ ) -> tuple[list[Any], list[Any], Any, list[Any]]:
+ """
+ Returns (metrics, columns, orderby, post_processing) for aggregate
+ mode, mirroring buildQuery.ts's QueryMode.Aggregate branch: sort-by
+ metric/default ordering, percent-metric contribution, time
+ comparison, and moving the temporal column to the front.
+ """
+ metrics = base_query_object.get("metrics") or []
+ orderby = base_query_object.get("orderby") or []
+ columns = list(base_query_object.get("columns") or [])
+ post_processing: list[Any] = []
+
+ sort_by_metric_options = ensure_is_array(
+ self.data.get("timeseries_limit_metric")
+ )
+ sort_by_metric = sort_by_metric_options[0] if sort_by_metric_options
else None
+ if sort_by_metric:
+ orderby = [[sort_by_metric, not self.data.get("order_desc",
False)]]
+ elif metrics:
+ orderby = [[metrics[0], False]]
+
+ if percent_metrics :=
ensure_is_array(self.data.get("percent_metrics")):
+ percent_metric_labels = remove_duplicates(
+ [get_metric_label(m) for m in percent_metrics],
get_metric_label
+ )
+ metrics = remove_duplicates(metrics + percent_metrics,
get_metric_label)
+ post_processing.append(
+ {
+ "operation": "contribution",
+ "options": {
+ "columns": percent_metric_labels,
+ "rename_columns": [f"%{m}" for m in
percent_metric_labels],
+ },
+ }
+ )
+
+ if time_offsets:
+ time_compare = time_compare_operator(self.data, base_query_object)
+ if time_compare:
+ post_processing.append(time_compare)
+
+ columns = _reorder_table_chart_temporal_column(
+ columns,
+ self.data.get("time_grain_sqla"),
+ self.data.get("temporal_columns_lookup") or {},
+ )
Review Comment:
**Suggestion:** The temporal-column rewrite uses only `time_grain_sqla` from
top-level form data and misses the `extra_form_data.time_grain_sqla` override
used by frontend buildQuery, so charts relying on overridden grain will not
promote the temporal dimension correctly. Resolve the effective time grain with
the same precedence as frontend before calling the reorder helper. [api
mismatch]
<details>
<summary><b>Severity Level:</b> Major ⚠️</summary>
```mdx
❌ Migrated table charts drop temporal-axis promotion under override grain.
⚠️ Column ordering mismatches UI expectations for temporal columns.
```
</details>
<details>
<summary><b>Steps of Reproduction ✅ </b></summary>
```mdx
1. Examine the frontend table buildQuery implementations: in
`superset-frontend/plugins/plugin-chart-table/src/buildQuery.ts:68-70` and
`superset-frontend/plugins/plugin-chart-ag-grid-table/src/buildQuery.ts:72-74`,
both
compute the effective time grain via `const time_grain_sqla =
extra_form_data?.time_grain_sqla || formData.time_grain_sqla;`, giving
dashboard-level
overrides (`extra_form_data.time_grain_sqla`) precedence over the chart-level
`time_grain_sqla` when deciding temporal-axis behavior.
2. Note that the pivot table migration processor in Python already mirrors
this override
precedence: `superset/migrations/shared/migrate_viz/processors.py:117-120`
reads
`extra_form_data = self.data.get("extra_form_data", {})` and then
`time_grain_sqla =
extra_form_data.get("time_grain_sqla") or self.data.get("time_grain_sqla")`,
ensuring
temporal column promotion respects overrides when migrating pivot_table
slices.
3. For migrated table charts, inspect
`MigrateTableChart._build_aggregate_mode_query` in
`superset/migrations/shared/migrate_viz/processors.py:85-120`; after
building metrics and
post-processing, it calls `_reorder_table_chart_temporal_column(columns,
self.data.get("time_grain_sqla"), self.data.get("temporal_columns_lookup")
or {})` at
lines 767-771, passing only the top-level `time_grain_sqla` value and
ignoring any
`extra_form_data.time_grain_sqla` that might be present in the saved form
data.
4. Create or identify a slice whose saved params carry
`extra_form_data.time_grain_sqla`
(e.g., from a dashboard filter applying a specific grain) but no top-level
`time_grain_sqla`, then run `superset migrate_viz upgrade --viz_type table`
per
`superset/cli/viz_migrations.py:69-81`; `MigrateTableChart.upgrade_slice`
(`base.py:150-183`) will invoke `_build_query`, but because
`_reorder_table_chart_temporal_column` sees `time_grain_sqla` as None it
will not promote
the temporal physical column to a BASE_AXIS adhoc column, leading to a
migrated
query_context whose temporal column ordering and axis handling no longer
match the
frontend buildQuery semantics under override grain.
```
</details>
[](https://app.codeant.ai/fix-in-ide?tool=cursor&prompt_id=223cac1a82204bfabaf91d374d067155&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
[](https://app.codeant.ai/fix-in-ide?tool=vscode-claude&prompt_id=223cac1a82204bfabaf91d374d067155&service=github&base_url=https%3A%2F%2Fgithub.com&org=apache&repo=apache%2Fsuperset)
*(Use Cmd/Ctrl + Click for best experience)*
<details>
<summary><b>Prompt for AI Agent 🤖 </b></summary>
```mdx
This is a comment left during a code review.
**Path:** superset/migrations/shared/migrate_viz/processors.py
**Line:** 767:771
**Comment:**
*Api Mismatch: The temporal-column rewrite uses only `time_grain_sqla`
from top-level form data and misses the `extra_form_data.time_grain_sqla`
override used by frontend buildQuery, so charts relying on overridden grain
will not promote the temporal dimension correctly. Resolve the effective time
grain with the same precedence as frontend before calling the reorder helper.
Validate the correctness of the flagged issue. If correct, How can I resolve
this? If you propose a fix, implement it and please make it concise.
Once fix is implemented, also check other comments on the same PR, and ask
user if the user wants to fix the rest of the comments as well. if said yes,
then fetch all the comments validate the correctness and implement a minimal fix
```
</details>
<a
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F42088&comment_hash=36ba90fa44ed52e31e5dfe83fdb2ad51d91823a7deb35f1f522b953098744fc5&reaction=like'>👍</a>
| <a
href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F42088&comment_hash=36ba90fa44ed52e31e5dfe83fdb2ad51d91823a7deb35f1f522b953098744fc5&reaction=dislike'>👎</a>
--
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]