Skip to content

Commit

Permalink
fix(plugin-chart-echarts): Apply temporary filters to Query B in expl…
Browse files Browse the repository at this point in the history
…ore (#18998)

* fix(explore): Extra filters not applied to query b in mixed timeseries

* Add return type

* Apply review comment

* Fix non-dnd filters
  • Loading branch information
kgabryje authored Mar 4, 2022
1 parent 5a5ff99 commit 9f834e8
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ export const dndEntity: typeof dndGroupByControl = {
export const dnd_adhoc_filters: SharedControlConfig<'DndFilterSelect'> = {
type: 'DndFilterSelect',
label: t('Filters'),
default: null,
default: [],
description: '',
mapStateToProps: ({ datasource, form_data }) => ({
columns: datasource?.columns.filter(c => c.filterable) || [],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ const x_axis_time_format: SharedControlConfig<'SelectControl'> = {
const adhoc_filters: SharedControlConfig<'AdhocFilterControl'> = {
type: 'AdhocFilterControl',
label: t('Filters'),
default: null,
default: [],
description: '',
mapStateToProps: ({ datasource, form_data }) => ({
columns: datasource?.columns.filter(c => c.filterable) || [],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
"""change_adhoc_filter_b_from_none_to_empty_array
Revision ID: 7293b0ca7944
Revises: b8d3a24d9131
Create Date: 2022-03-02 16:41:36.350540
"""

# revision identifiers, used by Alembic.
revision = "7293b0ca7944"
down_revision = "ab9a9d86e695"


import json

from alembic import op
from sqlalchemy import Column, Integer, String, Text
from sqlalchemy.ext.declarative import declarative_base

from superset import db

Base = declarative_base()


class Slice(Base):
__tablename__ = "slices"

id = Column(Integer, primary_key=True)
params = Column(Text)
viz_type = Column(String(250))


def upgrade():
bind = op.get_bind()
session = db.Session(bind=bind)

for slc in session.query(Slice).filter(Slice.viz_type == "mixed_timeseries").all():
try:
params = json.loads(slc.params)

adhoc_filters_b = params.get("adhoc_filters_b", None)
if not adhoc_filters_b:
params["adhoc_filters_b"] = []
slc.params = json.dumps(params, sort_keys=True)
except Exception:
pass

session.commit()
session.close()


def downgrade():
bind = op.get_bind()
session = db.Session(bind=bind)

for slc in session.query(Slice).filter(Slice.viz_type == "mixed_timeseries").all():
try:
params = json.loads(slc.params)

adhoc_filters_b = params.get("adhoc_filters_b", [])
if not adhoc_filters_b:
del params["adhoc_filters_b"]
slc.params = json.dumps(params, sort_keys=True)
except Exception:
pass

session.commit()
session.close()
12 changes: 7 additions & 5 deletions superset/utils/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -1081,11 +1081,13 @@ def merge_extra_form_data(form_data: Dict[str, Any]) -> None:
{"isExtra": True, **fltr} for fltr in append_adhoc_filters # type: ignore
)
if append_filters:
adhoc_filters.extend(
simple_filter_to_adhoc({"isExtra": True, **fltr}) # type: ignore
for fltr in append_filters
if fltr
)
for key, value in form_data.items():
if re.match("adhoc_filter.*", key):
value.extend(
simple_filter_to_adhoc({"isExtra": True, **fltr}) # type: ignore
for fltr in append_filters
if fltr
)


def merge_extra_filters(form_data: Dict[str, Any]) -> None:
Expand Down

0 comments on commit 9f834e8

Please sign in to comment.