You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by dp...@apache.org on 2021/08/10 16:19:43 UTC

[superset] branch master updated: feat(cross-filters): add support for temporal filters (#16139)

This is an automated email from the ASF dual-hosted git repository.

dpgaspar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new 63ace7b  feat(cross-filters): add support for temporal filters (#16139)
63ace7b is described below

commit 63ace7b2884bacf507bd7cecef57573ef7352aed
Author: Ville Brofeldt <33...@users.noreply.github.com>
AuthorDate: Tue Aug 10 19:18:46 2021 +0300

    feat(cross-filters): add support for temporal filters (#16139)
    
    * feat(cross-filters): add support for temporal filters
    
    * fix test
    
    * make filter optional
    
    * remove mocks
    
    * fix more tests
    
    * remove unnecessary optionality
    
    * fix even more tests
    
    * bump superset-ui
    
    * add isExtra to schema
    
    * address comments
    
    * fix presto test
---
 superset-frontend/package-lock.json         | 604 ++++++++++++++--------------
 superset-frontend/package.json              |  56 +--
 superset/charts/schemas.py                  |  14 +
 superset/common/query_object.py             |   5 +-
 superset/connectors/sqla/models.py          |  65 +--
 superset/db_engine_specs/base.py            |   4 +-
 superset/typing.py                          |   2 +-
 superset/utils/core.py                      |  94 +++--
 superset/viz.py                             |   6 +-
 tests/integration_tests/model_tests.py      |   9 +-
 tests/integration_tests/utils/core_tests.py |  51 ++-
 tests/integration_tests/utils_tests.py      |  60 +--
 tests/integration_tests/viz_tests.py        |  12 +-
 13 files changed, 543 insertions(+), 439 deletions(-)

diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json
index e75cf48..5413ef2 100644
--- a/superset-frontend/package-lock.json
+++ b/superset-frontend/package-lock.json
@@ -15,35 +15,35 @@
         "@emotion/babel-preset-css-prop": "^11.2.0",
         "@emotion/cache": "^11.1.3",
         "@emotion/react": "^11.1.5",
-        "@superset-ui/chart-controls": "^0.17.79",
-        "@superset-ui/core": "^0.17.75",
-        "@superset-ui/legacy-plugin-chart-calendar": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-chord": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-country-map": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-event-flow": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-force-directed": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-heatmap": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-histogram": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-horizon": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-map-box": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-paired-t-test": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-parallel-coordinates": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-partition": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-pivot-table": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-rose": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-sankey": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-sankey-loop": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-sunburst": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-treemap": "^0.17.79",
-        "@superset-ui/legacy-plugin-chart-world-map": "^0.17.79",
-        "@superset-ui/legacy-preset-chart-big-number": "^0.17.79",
+        "@superset-ui/chart-controls": "^0.17.80",
+        "@superset-ui/core": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-calendar": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-chord": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-country-map": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-event-flow": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-force-directed": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-heatmap": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-histogram": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-horizon": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-map-box": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-paired-t-test": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-parallel-coordinates": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-partition": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-pivot-table": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-rose": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-sankey": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-sankey-loop": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-sunburst": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-treemap": "^0.17.80",
+        "@superset-ui/legacy-plugin-chart-world-map": "^0.17.80",
+        "@superset-ui/legacy-preset-chart-big-number": "^0.17.80",
         "@superset-ui/legacy-preset-chart-deckgl": "^0.4.9",
-        "@superset-ui/legacy-preset-chart-nvd3": "^0.17.79",
-        "@superset-ui/plugin-chart-echarts": "^0.17.79",
-        "@superset-ui/plugin-chart-pivot-table": "^0.17.79",
-        "@superset-ui/plugin-chart-table": "^0.17.79",
-        "@superset-ui/plugin-chart-word-cloud": "^0.17.79",
-        "@superset-ui/preset-chart-xy": "^0.17.79",
+        "@superset-ui/legacy-preset-chart-nvd3": "^0.17.80",
+        "@superset-ui/plugin-chart-echarts": "^0.17.80",
+        "@superset-ui/plugin-chart-pivot-table": "^0.17.80",
+        "@superset-ui/plugin-chart-table": "^0.17.80",
+        "@superset-ui/plugin-chart-word-cloud": "^0.17.80",
+        "@superset-ui/preset-chart-xy": "^0.17.80",
         "@vx/responsive": "^0.0.195",
         "abortcontroller-polyfill": "^1.1.9",
         "antd": "^4.9.4",
@@ -11687,12 +11687,12 @@
       }
     },
     "node_modules/@superset-ui/chart-controls": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/chart-controls/-/chart-controls-0.17.79.tgz",
-      "integrity": "sha512-Mdgi6/ZYZHrDSyA88+JJZGyp2g0ZVM/2n1aNkKk9pQYr4E7W8OcvFX4HksjyWvicEsR8sQR3q3PczHUuwbm5OA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/chart-controls/-/chart-controls-0.17.80.tgz",
+      "integrity": "sha512-40H8LPvAsl2Y7UrLMA8DoK7zpNcxPeWPPyb1WIaRVXyZS7F8IeapSuDgj7SnnYGZ6O6zNnS95x2WX7hB4owKZQ==",
       "dependencies": {
         "@react-icons/all-files": "^4.1.0",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/core": "0.17.80",
         "lodash": "^4.17.15",
         "prop-types": "^15.7.2"
       },
@@ -11703,9 +11703,9 @@
       }
     },
     "node_modules/@superset-ui/core": {
-      "version": "0.17.75",
-      "resolved": "https://registry.npmjs.org/@superset-ui/core/-/core-0.17.75.tgz",
-      "integrity": "sha512-9g9YiQzsI4PFi9963DnizVghuejpHKSnbjGyyYkZa3SDSqTMLFkj4tuBd/s+Skayoo1DNoxzD2ZMMw41D81RcA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/core/-/core-0.17.80.tgz",
+      "integrity": "sha512-BrUF4ba6SyKyjRsDu4y67pywq8LJYVX7vpJ98qOR1Hu634H9a5in5PVu8N03tpfaQXpdao00YfP6T/3bTWMkmA==",
       "dependencies": {
         "@babel/runtime": "^7.1.2",
         "@emotion/styled": "^11.3.0",
@@ -11827,12 +11827,12 @@
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-calendar": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-calendar/-/legacy-plugin-chart-calendar-0.17.79.tgz",
-      "integrity": "sha512-hgKVzR0m0eS6hP2BTk7f3dY/FnWDWKsNDmSie9TbFn04XdOYnf4H6p253rf+sI0TtQ6/G2DM39nKxUehm8wJfQ==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-calendar/-/legacy-plugin-chart-calendar-0.17.80.tgz",
+      "integrity": "sha512-dFRBDDbSmPfA+EI31F5dWQdNZRlR6COPr+5NQXzXm7HGcHpBfmI4YjCzeLgwJxtOWjvl1k7yEs+dfdV3Vc6tuA==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3-array": "^2.0.3",
         "d3-selection": "^1.4.0",
         "d3-tip": "^0.9.1",
@@ -11851,24 +11851,24 @@
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-chord": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-chord/-/legacy-plugin-chart-chord-0.17.79.tgz",
-      "integrity": "sha512-okUKLettzXkqkcZ4GpeA8IchK6FMrb9CjuRYNB8U3jdXypNdwbYN1EKkuAm4H0AUvk3oBhr1k/2BTkG1y8UGeg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-chord/-/legacy-plugin-chart-chord-0.17.80.tgz",
+      "integrity": "sha512-jhOvHRbG3p1HZa5t22jFphhs3OBfoz+Tfh4YtllLCBmezP0A+a/GxLERknBJyHiXLRWl7cWiLILrD5/D4rkVWA==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "prop-types": "^15.6.2",
         "react": "^16.13.1"
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-country-map": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-country-map/-/legacy-plugin-chart-country-map-0.17.79.tgz",
-      "integrity": "sha512-xQFCQ5Baf14HU/NOCLcCjRobGz+pYrjkz3aYXuj+db6xjz1wVdZUBtLM2atD7TzHM7Yn5jHdpQa8XRUUHQc2cg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-country-map/-/legacy-plugin-chart-country-map-0.17.80.tgz",
+      "integrity": "sha512-IqAPteHUyt75TiouAWkDNcxSZrC4PT5CaP0jsjtVpbtww3bhS6R7tnB2onOhb5mqTNhkkqHxBxuFHPYwtjdGPw==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "d3-array": "^2.0.3",
         "prop-types": "^15.6.2"
@@ -11883,13 +11883,13 @@
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-event-flow": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-event-flow/-/legacy-plugin-chart-event-flow-0.17.79.tgz",
-      "integrity": "sha512-hC0sen6ojNaZ+WIOtzEjEafPK2uJDUP3yF1dx9Z2QuoYATHthz74X5KHKWit/l5qi/R4jEH5ORw4M4qAFytwDw==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-event-flow/-/legacy-plugin-chart-event-flow-0.17.80.tgz",
+      "integrity": "sha512-CODDrH4tGbHRomKlPlHtLxA8S6d1keTKxle3ADp440WR+JvuttNgT9+LdB/8eO8zMoU1g11CViFIW5duWZ+pnA==",
       "dependencies": {
         "@data-ui/event-flow": "^0.0.84",
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "prop-types": "^15.6.2"
       },
       "peerDependencies": {
@@ -11897,12 +11897,12 @@
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-force-directed": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-force-directed/-/legacy-plugin-chart-force-directed-0.17.79.tgz",
-      "integrity": "sha512-nhXyFgXuLqxURu5qFHc66NaD8T/8nBmNQEzDjJ+o7qrrMJeldgzAEjZGjoN1O014qiktA/D+nNKtyVmGeGRbIg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-force-directed/-/legacy-plugin-chart-force-directed-0.17.80.tgz",
+      "integrity": "sha512-W6MU/DY9ZAPDf5Q0cO9VyvrEic8wBiaSPMPNQ40IQv6UYmukjPoZhWhyQUex7ieCsqqKANCPbARPAK+F3/Y/uA==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "prop-types": "^15.7.2"
       },
@@ -11911,12 +11911,12 @@
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-heatmap": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-heatmap/-/legacy-plugin-chart-heatmap-0.17.79.tgz",
-      "integrity": "sha512-EkcK1d/1F91Eu3+/7RqeUuBJgYebaFATI+nrRmcZ9S80V+iEw9V/9d9dm7UetSxMA2afcK2gNrvTcZ86x5z1Sw==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-heatmap/-/legacy-plugin-chart-heatmap-0.17.80.tgz",
+      "integrity": "sha512-jn6U0fOvUo62wCyMmeCgSUYpjGTrHbhxPi4zZ3JmamkPnXsMxz8c57B7G2cNk9/WpntxJfw7urHjEvlGRZ/L9w==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "d3-svg-legend": "^1.x",
         "d3-tip": "^0.9.1",
@@ -11924,14 +11924,14 @@
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-histogram": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-histogram/-/legacy-plugin-chart-histogram-0.17.79.tgz",
-      "integrity": "sha512-v9j3s11yqv5KgLwn7UIXoDzkBvkCnGt94l8Mh3QMWWfqSt2EENWVQSQ+yc9wV4ytpbIZepY+z8BDC6TWAiZdwg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-histogram/-/legacy-plugin-chart-histogram-0.17.80.tgz",
+      "integrity": "sha512-RoUJN0w4KFSva9A6tI3wz0IPqzP6ZojpjQWu/Xs95pgZsbHPhz3beTrpv28QaOV8zAEWoTM01u+piASAbPOIVg==",
       "dependencies": {
         "@data-ui/histogram": "^0.0.84",
         "@data-ui/theme": "^0.0.84",
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "@vx/legend": "^0.0.198",
         "@vx/responsive": "^0.0.199",
         "@vx/scale": "^0.0.197",
@@ -12000,12 +12000,12 @@
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-horizon": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-horizon/-/legacy-plugin-chart-horizon-0.17.79.tgz",
-      "integrity": "sha512-rG+PBv6sPkDKQ1ycfusdgq3oUwv6cv1n4hIfoETelsSMqx2PNtwh4gWA4eWqBp2OJR59huAMuUzsvB3xdcNCJA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-horizon/-/legacy-plugin-chart-horizon-0.17.80.tgz",
+      "integrity": "sha512-db2QyGn95Y71wAOdiircDYjmSimmKCNdZ8NjwhXvtreCjDT5IYU3jX14hHQ4HVD/R0PkcZSth4Xg33T0FMBxBw==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3-array": "^2.0.3",
         "d3-scale": "^3.0.1",
         "prop-types": "^15.6.2"
@@ -12035,12 +12035,12 @@
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-map-box": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-map-box/-/legacy-plugin-chart-map-box-0.17.79.tgz",
-      "integrity": "sha512-dlO+miiN9jnb3lCY1UwMSws/tr/wO6NBMRHeAzIh+j7I7qcDDtSuNnTG3kBc1LnvP6wqMhgCKU2e63K3aG0gYA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-map-box/-/legacy-plugin-chart-map-box-0.17.80.tgz",
+      "integrity": "sha512-ajaJr3LPuibV5orFfQ2wEnsDadowapTrBYWnPz9LQb0o9DKMXrNKlwuYYKb1xm+7ZdVghFajvoYKQqH9Mm1GAw==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "immutable": "^3.8.2",
         "mapbox-gl": "^0.53.0",
         "prop-types": "^15.6.2",
@@ -12061,12 +12061,12 @@
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-paired-t-test": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-paired-t-test/-/legacy-plugin-chart-paired-t-test-0.17.79.tgz",
-      "integrity": "sha512-KWJvuXyM6viUVrARD33tupIjV2L6UGXkp64o3SnRybCuXFUbrLYrCfRlbv+t0IaSt8QgYvM2qT7pCt8iQ5RzMg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-paired-t-test/-/legacy-plugin-chart-paired-t-test-0.17.80.tgz",
+      "integrity": "sha512-bKiHHOM20AooaMMAQDoHMUJjbaN6MftCtYLSXIhoS5vd4d7F6sIkOOtIjxlR/FbmDA5Dcg97hz8M7H3idCtZtg==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "distributions": "^1.0.0",
         "prop-types": "^15.6.2",
         "reactable": "^1.1.0"
@@ -12076,12 +12076,12 @@
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-parallel-coordinates": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-parallel-coordinates/-/legacy-plugin-chart-parallel-coordinates-0.17.79.tgz",
-      "integrity": "sha512-aliDFjhVuojAXkSeisMZ2uuRK++09A9aCchM1DTiHsI44ZT5GJoUi6Te5Rm/kNRKGyHfFjrXGJmJ3wbJaqxUOA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-parallel-coordinates/-/legacy-plugin-chart-parallel-coordinates-0.17.80.tgz",
+      "integrity": "sha512-8W8NhdUbZJrhFcjtOMoEfHv2QXIom0xncJW9xi/HFLsw3j8lbsKw0hfXs+DeqTFITa8ThxqUiw0c8vCiQ94iig==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "prop-types": "^15.7.2"
       },
@@ -12090,12 +12090,12 @@
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-partition": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-partition/-/legacy-plugin-chart-partition-0.17.79.tgz",
-      "integrity": "sha512-Xh7Ozb+IweXX2SVuQeXlXnVXw2neErTLJ2rFzZz4voyZvcGH93C/rfeKT25QQwButfcfFI6SIXCAXgIwJ0VsRw==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-partition/-/legacy-plugin-chart-partition-0.17.80.tgz",
+      "integrity": "sha512-IohJ9/iXTjHZdbEYNe09ALy6AT0wBTovGFps6BUNJXPu8i/QrDDr+1gB5cLxw+lb0M4OS+huDd6bn14A2HczSQ==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "d3-hierarchy": "^1.1.8",
         "prop-types": "^15.6.2"
@@ -12105,24 +12105,24 @@
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-pivot-table": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-pivot-table/-/legacy-plugin-chart-pivot-table-0.17.79.tgz",
-      "integrity": "sha512-GsVxldm0sRbd9jjGKmgaQ8uyqwlVBr/CYiifsxVRP3VcHRYaMX+1JgYMeko7mImbOpoo4GR1lnQvbzQCWH0yFg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-pivot-table/-/legacy-plugin-chart-pivot-table-0.17.80.tgz",
+      "integrity": "sha512-NF1yMET2MQ1FeBe3pPbNYtyftI12lC5DkDg/diblQq99CU3e8LfAsLuGOWVZiq6TSzFjySs4BaVTBt7BBL0YpQ==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "datatables.net-bs": "^1.10.15",
         "prop-types": "^15.6.2"
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-rose": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-rose/-/legacy-plugin-chart-rose-0.17.79.tgz",
-      "integrity": "sha512-rDT+C+3a8gMnA+QCatETSJ3GL3IPsiZ2aHWCXWdcbZo5exNwLYD8gZfyHf8do6LLBc46tSrErE8bXs5TDV2LYg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-rose/-/legacy-plugin-chart-rose-0.17.80.tgz",
+      "integrity": "sha512-JJWre7sJkCPrOEM/tlWCAzKGoYO/3VKgNf25luo7P0aMRFAjXYH6AHXqsitQMsUzgMQQ+53+6lE/RS2U9ukHzQ==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "nvd3": "1.8.6",
         "prop-types": "^15.6.2"
@@ -12132,12 +12132,12 @@
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-sankey": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey/-/legacy-plugin-chart-sankey-0.17.79.tgz",
-      "integrity": "sha512-3AMEH15bOInmSHF87f3lgSS9vwKTMYjo67h4NhIflfXMR3EveXCA8dIIJfgS6xYSmaGEE7OL6aeeQE5+rnj4pQ==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey/-/legacy-plugin-chart-sankey-0.17.80.tgz",
+      "integrity": "sha512-AT7Gm8oUCSqabtVR8OqhOhaNDArl/MFDlV4I2uKN/PdPr8FA8aJCPi0Ud9t6GpUxPMdV6wVUfnW8XfIJdRzwGA==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "d3-sankey": "^0.4.2",
         "prop-types": "^15.6.2"
@@ -12147,47 +12147,47 @@
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-sankey-loop": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey-loop/-/legacy-plugin-chart-sankey-loop-0.17.79.tgz",
-      "integrity": "sha512-OdFBPQbE+vkN/fw9XqeM7lZ8f0xB2itXiwyOKei6MeC6G1cN45/DUlnTAY436ulRvZFhwLhel7g91TN8djSDoA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey-loop/-/legacy-plugin-chart-sankey-loop-0.17.80.tgz",
+      "integrity": "sha512-qivsrBeObFF9ZeAcxyQva4cbA5CgDg6ia9oYWrv6ARWWPqJ121n2UyNbKJd9sGMi85cKT09uVjDNx36Od/7mKA==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3-sankey-diagram": "^0.7.3",
         "d3-selection": "^1.4.0",
         "prop-types": "^15.6.2"
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-sunburst": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sunburst/-/legacy-plugin-chart-sunburst-0.17.79.tgz",
-      "integrity": "sha512-VmRsKn/XHUlDKrQ2AQ+C1TRXIJ6m6ittKKuXMqz0XxZWs3jn5RUkNv0W8GuYg814abmZl/e1e0/3lgmYX6LyZg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sunburst/-/legacy-plugin-chart-sunburst-0.17.80.tgz",
+      "integrity": "sha512-WAChRf6ECGMltGUEyhpLGWgrysktrChuCJl6BN28l2+/l+w0hIQmdNhtpO+PDLiaUGKCb19pAyr0jUuPoUB3/A==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "prop-types": "^15.6.2"
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-treemap": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-treemap/-/legacy-plugin-chart-treemap-0.17.79.tgz",
-      "integrity": "sha512-b204bAeVodLiYyzout0a4HXmltptXD/81kX8aA94IIDCAoA7QhbAvb9W9wZcQiDJQwu7MVsS+KPqyyv35Mxo8A==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-treemap/-/legacy-plugin-chart-treemap-0.17.80.tgz",
+      "integrity": "sha512-zm6kDJrSqlOdjp7mmuOCgHVXsjENptAccbon9LHuWcHWp2xByfqgykBNkKoh2v4KMulEmg6JIPI3AzGHJEh8mw==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3-hierarchy": "^1.1.8",
         "d3-selection": "^1.4.0",
         "prop-types": "^15.6.2"
       }
     },
     "node_modules/@superset-ui/legacy-plugin-chart-world-map": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-world-map/-/legacy-plugin-chart-world-map-0.17.79.tgz",
-      "integrity": "sha512-4iVqpwn4zlI9T4b9venoRLgoEy0+lZKaWbccmUkXPvYL+gpUtkB3z7KuFfp/MWWyruLRCKCd1z2Fedm4wv8ELA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-world-map/-/legacy-plugin-chart-world-map-0.17.80.tgz",
+      "integrity": "sha512-F173Yo6YUXiqH6ZrCZmtRT38b13Bf0Iq4jI3B9POu7fgZWJXmhFVGKzgjPMau5t/5BLjTnyKoTRZ28UqFOomCg==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "d3-array": "^2.4.0",
         "d3-color": "^1.4.1",
@@ -12212,13 +12212,13 @@
       "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q=="
     },
     "node_modules/@superset-ui/legacy-preset-chart-big-number": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-big-number/-/legacy-preset-chart-big-number-0.17.79.tgz",
-      "integrity": "sha512-+OjEbyYugynYGbnobP6pNI59bMXfsaqgX6z+oz7fxCtb5BWxTiciz9W7aKhAqT6XM+I8gkkHUKFj76cyjawY5g==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-big-number/-/legacy-preset-chart-big-number-0.17.80.tgz",
+      "integrity": "sha512-mwG2fvMIACPlVNnWlXS7Il48AI/TGqVXxEs6LVutyKJXxb9Yrl63hDaWzod7otAF5QW2qsMM17IvEljA8EGpiA==",
       "dependencies": {
         "@data-ui/xy-chart": "^0.0.84",
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "@types/d3-color": "^1.2.2",
         "@types/shortid": "^0.0.29",
         "d3-color": "^1.2.3",
@@ -12259,13 +12259,13 @@
       }
     },
     "node_modules/@superset-ui/legacy-preset-chart-nvd3": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-nvd3/-/legacy-preset-chart-nvd3-0.17.79.tgz",
-      "integrity": "sha512-hmBof4w5aF6wZag+wnqQCCYjnxul2KBWqRAj0gWQYohUwgqxxuR3CaEwTP62SNVvmnt8R2iCHM9RpIxfcWpjeQ==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-nvd3/-/legacy-preset-chart-nvd3-0.17.80.tgz",
+      "integrity": "sha512-pWeL/9Es3pwYgm7rENXLoH3FAuTrA5cw02aE+lhClVTJVMruPi39yT3O0cfPx2JAsKhmENR7OFu+nG8wSwd7tw==",
       "dependencies": {
         "@data-ui/xy-chart": "^0.0.84",
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "d3-tip": "^0.9.1",
         "dompurify": "^2.0.6",
@@ -12282,12 +12282,12 @@
       }
     },
     "node_modules/@superset-ui/plugin-chart-echarts": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-echarts/-/plugin-chart-echarts-0.17.79.tgz",
-      "integrity": "sha512-+lZO5hbQC47G8dDvyqeI4dBsjD2CRSQDqCGFXoecnhKZTzRw3zLX7TYckCK6ZxvLDbgW0ncjRBdcCJtvFs+MAw==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-echarts/-/plugin-chart-echarts-0.17.80.tgz",
+      "integrity": "sha512-Oz1BQI6IvtYAU1zsZvMzT8WPL7234OcLTmM/pfRRLbjDsY942tioGHAr/kOfnoeVmgtdhrZDt3ch1n+vrvK6Aw==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "@types/mathjs": "^6.0.7",
         "d3-array": "^1.2.0",
         "echarts": "^5.1.2",
@@ -12299,12 +12299,12 @@
       }
     },
     "node_modules/@superset-ui/plugin-chart-pivot-table": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-pivot-table/-/plugin-chart-pivot-table-0.17.79.tgz",
-      "integrity": "sha512-sz3FfM8Odm+r094rNCRO1DGxMNZl8j0ySnwFYQTbdZNFgqUvcQme9x7QC51IBk3OQ/TOm8oMJG5hTV1/4HrCKA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-pivot-table/-/plugin-chart-pivot-table-0.17.80.tgz",
+      "integrity": "sha512-JP+fS5++2u1Cr+FjNETllJWwAauuXJGJ2q5Gv0mMAw+kB/9i5yZKRvM6VQyL4NvYO4VqYjL5g440G0OLqGeQ6A==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "@superset-ui/react-pivottable": "^0.12.11"
       },
       "peerDependencies": {
@@ -12313,13 +12313,13 @@
       }
     },
     "node_modules/@superset-ui/plugin-chart-table": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-table/-/plugin-chart-table-0.17.79.tgz",
-      "integrity": "sha512-gPXgLJntH72ligPD0V6XNT5Cj6eWzztL154/uhUf8qxXKSBB5wETrFqtIl00S99wJQeaPRN6UGER/eiuGqGOTA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-table/-/plugin-chart-table-0.17.80.tgz",
+      "integrity": "sha512-0404twIq84jGiKbC/yfQwbYFh0RNBn8qMJnRO3oCtzvVmF3gelm8+mGKtUnxpd/OC6wiAXyorfoF3mlSW615oA==",
       "dependencies": {
         "@react-icons/all-files": "^4.1.0",
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "@types/d3-array": "^2.9.0",
         "@types/react-table": "^7.0.29",
         "d3-array": "^2.4.0",
@@ -12344,12 +12344,12 @@
       }
     },
     "node_modules/@superset-ui/plugin-chart-word-cloud": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-word-cloud/-/plugin-chart-word-cloud-0.17.79.tgz",
-      "integrity": "sha512-EpHMJ1Qd7GnykEjlC+3bOzzBauLTFwZZuFFuCHs8m0exozuFaHQS1VxmpR1h3zJsp6pjF3PRFU05fpQ5LUAbnA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-word-cloud/-/plugin-chart-word-cloud-0.17.80.tgz",
+      "integrity": "sha512-BBXJywPpF5q5y/+7S4PxJFajEufcURKgbTDbVE2uVj85v5m1XtdM5UpvjJ6O4AmksxKD3J1PfSBXtXehttf3hg==",
       "dependencies": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "@types/d3-cloud": "^1.2.1",
         "@types/d3-scale": "^2.0.2",
         "d3-cloud": "^1.2.5",
@@ -12382,14 +12382,14 @@
       }
     },
     "node_modules/@superset-ui/preset-chart-xy": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/preset-chart-xy/-/preset-chart-xy-0.17.79.tgz",
-      "integrity": "sha512-JisKp00zIVa8VKSBXG1HNDj6hcRf70kHAGuSXHrQ8BUdfhy9Xc20oUMMFKeWSi0cc5NzPkgGg9Vl/vd3fvsO8Q==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/preset-chart-xy/-/preset-chart-xy-0.17.80.tgz",
+      "integrity": "sha512-AfxeBs9w0D7Af5NAKeJ1PmMfitjodpR2AELlsx1s9VkVXoz4Y3FgY9YkUCsphietzjF7Z1kSPYXPLY+wa57oMQ==",
       "dependencies": {
         "@data-ui/theme": "^0.0.84",
         "@data-ui/xy-chart": "^0.0.84",
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "@vx/axis": "^0.0.198",
         "@vx/legend": "^0.0.198",
         "@vx/scale": "^0.0.197",
@@ -60548,20 +60548,20 @@
       }
     },
     "@superset-ui/chart-controls": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/chart-controls/-/chart-controls-0.17.79.tgz",
-      "integrity": "sha512-Mdgi6/ZYZHrDSyA88+JJZGyp2g0ZVM/2n1aNkKk9pQYr4E7W8OcvFX4HksjyWvicEsR8sQR3q3PczHUuwbm5OA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/chart-controls/-/chart-controls-0.17.80.tgz",
+      "integrity": "sha512-40H8LPvAsl2Y7UrLMA8DoK7zpNcxPeWPPyb1WIaRVXyZS7F8IeapSuDgj7SnnYGZ6O6zNnS95x2WX7hB4owKZQ==",
       "requires": {
         "@react-icons/all-files": "^4.1.0",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/core": "0.17.80",
         "lodash": "^4.17.15",
         "prop-types": "^15.7.2"
       }
     },
     "@superset-ui/core": {
-      "version": "0.17.75",
-      "resolved": "https://registry.npmjs.org/@superset-ui/core/-/core-0.17.75.tgz",
-      "integrity": "sha512-9g9YiQzsI4PFi9963DnizVghuejpHKSnbjGyyYkZa3SDSqTMLFkj4tuBd/s+Skayoo1DNoxzD2ZMMw41D81RcA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/core/-/core-0.17.80.tgz",
+      "integrity": "sha512-BrUF4ba6SyKyjRsDu4y67pywq8LJYVX7vpJ98qOR1Hu634H9a5in5PVu8N03tpfaQXpdao00YfP6T/3bTWMkmA==",
       "requires": {
         "@babel/runtime": "^7.1.2",
         "@emotion/styled": "^11.3.0",
@@ -60681,12 +60681,12 @@
       }
     },
     "@superset-ui/legacy-plugin-chart-calendar": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-calendar/-/legacy-plugin-chart-calendar-0.17.79.tgz",
-      "integrity": "sha512-hgKVzR0m0eS6hP2BTk7f3dY/FnWDWKsNDmSie9TbFn04XdOYnf4H6p253rf+sI0TtQ6/G2DM39nKxUehm8wJfQ==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-calendar/-/legacy-plugin-chart-calendar-0.17.80.tgz",
+      "integrity": "sha512-dFRBDDbSmPfA+EI31F5dWQdNZRlR6COPr+5NQXzXm7HGcHpBfmI4YjCzeLgwJxtOWjvl1k7yEs+dfdV3Vc6tuA==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3-array": "^2.0.3",
         "d3-selection": "^1.4.0",
         "d3-tip": "^0.9.1",
@@ -60704,24 +60704,24 @@
       }
     },
     "@superset-ui/legacy-plugin-chart-chord": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-chord/-/legacy-plugin-chart-chord-0.17.79.tgz",
-      "integrity": "sha512-okUKLettzXkqkcZ4GpeA8IchK6FMrb9CjuRYNB8U3jdXypNdwbYN1EKkuAm4H0AUvk3oBhr1k/2BTkG1y8UGeg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-chord/-/legacy-plugin-chart-chord-0.17.80.tgz",
+      "integrity": "sha512-jhOvHRbG3p1HZa5t22jFphhs3OBfoz+Tfh4YtllLCBmezP0A+a/GxLERknBJyHiXLRWl7cWiLILrD5/D4rkVWA==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "prop-types": "^15.6.2",
         "react": "^16.13.1"
       }
     },
     "@superset-ui/legacy-plugin-chart-country-map": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-country-map/-/legacy-plugin-chart-country-map-0.17.79.tgz",
-      "integrity": "sha512-xQFCQ5Baf14HU/NOCLcCjRobGz+pYrjkz3aYXuj+db6xjz1wVdZUBtLM2atD7TzHM7Yn5jHdpQa8XRUUHQc2cg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-country-map/-/legacy-plugin-chart-country-map-0.17.80.tgz",
+      "integrity": "sha512-IqAPteHUyt75TiouAWkDNcxSZrC4PT5CaP0jsjtVpbtww3bhS6R7tnB2onOhb5mqTNhkkqHxBxuFHPYwtjdGPw==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "d3-array": "^2.0.3",
         "prop-types": "^15.6.2"
@@ -60738,34 +60738,34 @@
       }
     },
     "@superset-ui/legacy-plugin-chart-event-flow": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-event-flow/-/legacy-plugin-chart-event-flow-0.17.79.tgz",
-      "integrity": "sha512-hC0sen6ojNaZ+WIOtzEjEafPK2uJDUP3yF1dx9Z2QuoYATHthz74X5KHKWit/l5qi/R4jEH5ORw4M4qAFytwDw==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-event-flow/-/legacy-plugin-chart-event-flow-0.17.80.tgz",
+      "integrity": "sha512-CODDrH4tGbHRomKlPlHtLxA8S6d1keTKxle3ADp440WR+JvuttNgT9+LdB/8eO8zMoU1g11CViFIW5duWZ+pnA==",
       "requires": {
         "@data-ui/event-flow": "^0.0.84",
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "prop-types": "^15.6.2"
       }
     },
     "@superset-ui/legacy-plugin-chart-force-directed": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-force-directed/-/legacy-plugin-chart-force-directed-0.17.79.tgz",
-      "integrity": "sha512-nhXyFgXuLqxURu5qFHc66NaD8T/8nBmNQEzDjJ+o7qrrMJeldgzAEjZGjoN1O014qiktA/D+nNKtyVmGeGRbIg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-force-directed/-/legacy-plugin-chart-force-directed-0.17.80.tgz",
+      "integrity": "sha512-W6MU/DY9ZAPDf5Q0cO9VyvrEic8wBiaSPMPNQ40IQv6UYmukjPoZhWhyQUex7ieCsqqKANCPbARPAK+F3/Y/uA==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "prop-types": "^15.7.2"
       }
     },
     "@superset-ui/legacy-plugin-chart-heatmap": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-heatmap/-/legacy-plugin-chart-heatmap-0.17.79.tgz",
-      "integrity": "sha512-EkcK1d/1F91Eu3+/7RqeUuBJgYebaFATI+nrRmcZ9S80V+iEw9V/9d9dm7UetSxMA2afcK2gNrvTcZ86x5z1Sw==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-heatmap/-/legacy-plugin-chart-heatmap-0.17.80.tgz",
+      "integrity": "sha512-jn6U0fOvUo62wCyMmeCgSUYpjGTrHbhxPi4zZ3JmamkPnXsMxz8c57B7G2cNk9/WpntxJfw7urHjEvlGRZ/L9w==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "d3-svg-legend": "^1.x",
         "d3-tip": "^0.9.1",
@@ -60773,14 +60773,14 @@
       }
     },
     "@superset-ui/legacy-plugin-chart-histogram": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-histogram/-/legacy-plugin-chart-histogram-0.17.79.tgz",
-      "integrity": "sha512-v9j3s11yqv5KgLwn7UIXoDzkBvkCnGt94l8Mh3QMWWfqSt2EENWVQSQ+yc9wV4ytpbIZepY+z8BDC6TWAiZdwg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-histogram/-/legacy-plugin-chart-histogram-0.17.80.tgz",
+      "integrity": "sha512-RoUJN0w4KFSva9A6tI3wz0IPqzP6ZojpjQWu/Xs95pgZsbHPhz3beTrpv28QaOV8zAEWoTM01u+piASAbPOIVg==",
       "requires": {
         "@data-ui/histogram": "^0.0.84",
         "@data-ui/theme": "^0.0.84",
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "@vx/legend": "^0.0.198",
         "@vx/responsive": "^0.0.199",
         "@vx/scale": "^0.0.197",
@@ -60848,12 +60848,12 @@
       }
     },
     "@superset-ui/legacy-plugin-chart-horizon": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-horizon/-/legacy-plugin-chart-horizon-0.17.79.tgz",
-      "integrity": "sha512-rG+PBv6sPkDKQ1ycfusdgq3oUwv6cv1n4hIfoETelsSMqx2PNtwh4gWA4eWqBp2OJR59huAMuUzsvB3xdcNCJA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-horizon/-/legacy-plugin-chart-horizon-0.17.80.tgz",
+      "integrity": "sha512-db2QyGn95Y71wAOdiircDYjmSimmKCNdZ8NjwhXvtreCjDT5IYU3jX14hHQ4HVD/R0PkcZSth4Xg33T0FMBxBw==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3-array": "^2.0.3",
         "d3-scale": "^3.0.1",
         "prop-types": "^15.6.2"
@@ -60882,12 +60882,12 @@
       }
     },
     "@superset-ui/legacy-plugin-chart-map-box": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-map-box/-/legacy-plugin-chart-map-box-0.17.79.tgz",
-      "integrity": "sha512-dlO+miiN9jnb3lCY1UwMSws/tr/wO6NBMRHeAzIh+j7I7qcDDtSuNnTG3kBc1LnvP6wqMhgCKU2e63K3aG0gYA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-map-box/-/legacy-plugin-chart-map-box-0.17.80.tgz",
+      "integrity": "sha512-ajaJr3LPuibV5orFfQ2wEnsDadowapTrBYWnPz9LQb0o9DKMXrNKlwuYYKb1xm+7ZdVghFajvoYKQqH9Mm1GAw==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "immutable": "^3.8.2",
         "mapbox-gl": "^0.53.0",
         "prop-types": "^15.6.2",
@@ -60904,118 +60904,118 @@
       }
     },
     "@superset-ui/legacy-plugin-chart-paired-t-test": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-paired-t-test/-/legacy-plugin-chart-paired-t-test-0.17.79.tgz",
-      "integrity": "sha512-KWJvuXyM6viUVrARD33tupIjV2L6UGXkp64o3SnRybCuXFUbrLYrCfRlbv+t0IaSt8QgYvM2qT7pCt8iQ5RzMg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-paired-t-test/-/legacy-plugin-chart-paired-t-test-0.17.80.tgz",
+      "integrity": "sha512-bKiHHOM20AooaMMAQDoHMUJjbaN6MftCtYLSXIhoS5vd4d7F6sIkOOtIjxlR/FbmDA5Dcg97hz8M7H3idCtZtg==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "distributions": "^1.0.0",
         "prop-types": "^15.6.2",
         "reactable": "^1.1.0"
       }
     },
     "@superset-ui/legacy-plugin-chart-parallel-coordinates": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-parallel-coordinates/-/legacy-plugin-chart-parallel-coordinates-0.17.79.tgz",
-      "integrity": "sha512-aliDFjhVuojAXkSeisMZ2uuRK++09A9aCchM1DTiHsI44ZT5GJoUi6Te5Rm/kNRKGyHfFjrXGJmJ3wbJaqxUOA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-parallel-coordinates/-/legacy-plugin-chart-parallel-coordinates-0.17.80.tgz",
+      "integrity": "sha512-8W8NhdUbZJrhFcjtOMoEfHv2QXIom0xncJW9xi/HFLsw3j8lbsKw0hfXs+DeqTFITa8ThxqUiw0c8vCiQ94iig==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "prop-types": "^15.7.2"
       }
     },
     "@superset-ui/legacy-plugin-chart-partition": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-partition/-/legacy-plugin-chart-partition-0.17.79.tgz",
-      "integrity": "sha512-Xh7Ozb+IweXX2SVuQeXlXnVXw2neErTLJ2rFzZz4voyZvcGH93C/rfeKT25QQwButfcfFI6SIXCAXgIwJ0VsRw==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-partition/-/legacy-plugin-chart-partition-0.17.80.tgz",
+      "integrity": "sha512-IohJ9/iXTjHZdbEYNe09ALy6AT0wBTovGFps6BUNJXPu8i/QrDDr+1gB5cLxw+lb0M4OS+huDd6bn14A2HczSQ==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "d3-hierarchy": "^1.1.8",
         "prop-types": "^15.6.2"
       }
     },
     "@superset-ui/legacy-plugin-chart-pivot-table": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-pivot-table/-/legacy-plugin-chart-pivot-table-0.17.79.tgz",
-      "integrity": "sha512-GsVxldm0sRbd9jjGKmgaQ8uyqwlVBr/CYiifsxVRP3VcHRYaMX+1JgYMeko7mImbOpoo4GR1lnQvbzQCWH0yFg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-pivot-table/-/legacy-plugin-chart-pivot-table-0.17.80.tgz",
+      "integrity": "sha512-NF1yMET2MQ1FeBe3pPbNYtyftI12lC5DkDg/diblQq99CU3e8LfAsLuGOWVZiq6TSzFjySs4BaVTBt7BBL0YpQ==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "datatables.net-bs": "^1.10.15",
         "prop-types": "^15.6.2"
       }
     },
     "@superset-ui/legacy-plugin-chart-rose": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-rose/-/legacy-plugin-chart-rose-0.17.79.tgz",
-      "integrity": "sha512-rDT+C+3a8gMnA+QCatETSJ3GL3IPsiZ2aHWCXWdcbZo5exNwLYD8gZfyHf8do6LLBc46tSrErE8bXs5TDV2LYg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-rose/-/legacy-plugin-chart-rose-0.17.80.tgz",
+      "integrity": "sha512-JJWre7sJkCPrOEM/tlWCAzKGoYO/3VKgNf25luo7P0aMRFAjXYH6AHXqsitQMsUzgMQQ+53+6lE/RS2U9ukHzQ==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "nvd3": "1.8.6",
         "prop-types": "^15.6.2"
       }
     },
     "@superset-ui/legacy-plugin-chart-sankey": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey/-/legacy-plugin-chart-sankey-0.17.79.tgz",
-      "integrity": "sha512-3AMEH15bOInmSHF87f3lgSS9vwKTMYjo67h4NhIflfXMR3EveXCA8dIIJfgS6xYSmaGEE7OL6aeeQE5+rnj4pQ==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey/-/legacy-plugin-chart-sankey-0.17.80.tgz",
+      "integrity": "sha512-AT7Gm8oUCSqabtVR8OqhOhaNDArl/MFDlV4I2uKN/PdPr8FA8aJCPi0Ud9t6GpUxPMdV6wVUfnW8XfIJdRzwGA==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "d3-sankey": "^0.4.2",
         "prop-types": "^15.6.2"
       }
     },
     "@superset-ui/legacy-plugin-chart-sankey-loop": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey-loop/-/legacy-plugin-chart-sankey-loop-0.17.79.tgz",
-      "integrity": "sha512-OdFBPQbE+vkN/fw9XqeM7lZ8f0xB2itXiwyOKei6MeC6G1cN45/DUlnTAY436ulRvZFhwLhel7g91TN8djSDoA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sankey-loop/-/legacy-plugin-chart-sankey-loop-0.17.80.tgz",
+      "integrity": "sha512-qivsrBeObFF9ZeAcxyQva4cbA5CgDg6ia9oYWrv6ARWWPqJ121n2UyNbKJd9sGMi85cKT09uVjDNx36Od/7mKA==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3-sankey-diagram": "^0.7.3",
         "d3-selection": "^1.4.0",
         "prop-types": "^15.6.2"
       }
     },
     "@superset-ui/legacy-plugin-chart-sunburst": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sunburst/-/legacy-plugin-chart-sunburst-0.17.79.tgz",
-      "integrity": "sha512-VmRsKn/XHUlDKrQ2AQ+C1TRXIJ6m6ittKKuXMqz0XxZWs3jn5RUkNv0W8GuYg814abmZl/e1e0/3lgmYX6LyZg==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-sunburst/-/legacy-plugin-chart-sunburst-0.17.80.tgz",
+      "integrity": "sha512-WAChRf6ECGMltGUEyhpLGWgrysktrChuCJl6BN28l2+/l+w0hIQmdNhtpO+PDLiaUGKCb19pAyr0jUuPoUB3/A==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "prop-types": "^15.6.2"
       }
     },
     "@superset-ui/legacy-plugin-chart-treemap": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-treemap/-/legacy-plugin-chart-treemap-0.17.79.tgz",
-      "integrity": "sha512-b204bAeVodLiYyzout0a4HXmltptXD/81kX8aA94IIDCAoA7QhbAvb9W9wZcQiDJQwu7MVsS+KPqyyv35Mxo8A==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-treemap/-/legacy-plugin-chart-treemap-0.17.80.tgz",
+      "integrity": "sha512-zm6kDJrSqlOdjp7mmuOCgHVXsjENptAccbon9LHuWcHWp2xByfqgykBNkKoh2v4KMulEmg6JIPI3AzGHJEh8mw==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3-hierarchy": "^1.1.8",
         "d3-selection": "^1.4.0",
         "prop-types": "^15.6.2"
       }
     },
     "@superset-ui/legacy-plugin-chart-world-map": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-world-map/-/legacy-plugin-chart-world-map-0.17.79.tgz",
-      "integrity": "sha512-4iVqpwn4zlI9T4b9venoRLgoEy0+lZKaWbccmUkXPvYL+gpUtkB3z7KuFfp/MWWyruLRCKCd1z2Fedm4wv8ELA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-plugin-chart-world-map/-/legacy-plugin-chart-world-map-0.17.80.tgz",
+      "integrity": "sha512-F173Yo6YUXiqH6ZrCZmtRT38b13Bf0Iq4jI3B9POu7fgZWJXmhFVGKzgjPMau5t/5BLjTnyKoTRZ28UqFOomCg==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "d3-array": "^2.4.0",
         "d3-color": "^1.4.1",
@@ -61039,13 +61039,13 @@
       }
     },
     "@superset-ui/legacy-preset-chart-big-number": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-big-number/-/legacy-preset-chart-big-number-0.17.79.tgz",
-      "integrity": "sha512-+OjEbyYugynYGbnobP6pNI59bMXfsaqgX6z+oz7fxCtb5BWxTiciz9W7aKhAqT6XM+I8gkkHUKFj76cyjawY5g==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-big-number/-/legacy-preset-chart-big-number-0.17.80.tgz",
+      "integrity": "sha512-mwG2fvMIACPlVNnWlXS7Il48AI/TGqVXxEs6LVutyKJXxb9Yrl63hDaWzod7otAF5QW2qsMM17IvEljA8EGpiA==",
       "requires": {
         "@data-ui/xy-chart": "^0.0.84",
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "@types/d3-color": "^1.2.2",
         "@types/shortid": "^0.0.29",
         "d3-color": "^1.2.3",
@@ -61078,13 +61078,13 @@
       }
     },
     "@superset-ui/legacy-preset-chart-nvd3": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-nvd3/-/legacy-preset-chart-nvd3-0.17.79.tgz",
-      "integrity": "sha512-hmBof4w5aF6wZag+wnqQCCYjnxul2KBWqRAj0gWQYohUwgqxxuR3CaEwTP62SNVvmnt8R2iCHM9RpIxfcWpjeQ==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/legacy-preset-chart-nvd3/-/legacy-preset-chart-nvd3-0.17.80.tgz",
+      "integrity": "sha512-pWeL/9Es3pwYgm7rENXLoH3FAuTrA5cw02aE+lhClVTJVMruPi39yT3O0cfPx2JAsKhmENR7OFu+nG8wSwd7tw==",
       "requires": {
         "@data-ui/xy-chart": "^0.0.84",
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "d3": "^3.5.17",
         "d3-tip": "^0.9.1",
         "dompurify": "^2.0.6",
@@ -61098,12 +61098,12 @@
       }
     },
     "@superset-ui/plugin-chart-echarts": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-echarts/-/plugin-chart-echarts-0.17.79.tgz",
-      "integrity": "sha512-+lZO5hbQC47G8dDvyqeI4dBsjD2CRSQDqCGFXoecnhKZTzRw3zLX7TYckCK6ZxvLDbgW0ncjRBdcCJtvFs+MAw==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-echarts/-/plugin-chart-echarts-0.17.80.tgz",
+      "integrity": "sha512-Oz1BQI6IvtYAU1zsZvMzT8WPL7234OcLTmM/pfRRLbjDsY942tioGHAr/kOfnoeVmgtdhrZDt3ch1n+vrvK6Aw==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "@types/mathjs": "^6.0.7",
         "d3-array": "^1.2.0",
         "echarts": "^5.1.2",
@@ -61112,23 +61112,23 @@
       }
     },
     "@superset-ui/plugin-chart-pivot-table": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-pivot-table/-/plugin-chart-pivot-table-0.17.79.tgz",
-      "integrity": "sha512-sz3FfM8Odm+r094rNCRO1DGxMNZl8j0ySnwFYQTbdZNFgqUvcQme9x7QC51IBk3OQ/TOm8oMJG5hTV1/4HrCKA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-pivot-table/-/plugin-chart-pivot-table-0.17.80.tgz",
+      "integrity": "sha512-JP+fS5++2u1Cr+FjNETllJWwAauuXJGJ2q5Gv0mMAw+kB/9i5yZKRvM6VQyL4NvYO4VqYjL5g440G0OLqGeQ6A==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "@superset-ui/react-pivottable": "^0.12.11"
       }
     },
     "@superset-ui/plugin-chart-table": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-table/-/plugin-chart-table-0.17.79.tgz",
-      "integrity": "sha512-gPXgLJntH72ligPD0V6XNT5Cj6eWzztL154/uhUf8qxXKSBB5wETrFqtIl00S99wJQeaPRN6UGER/eiuGqGOTA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-table/-/plugin-chart-table-0.17.80.tgz",
+      "integrity": "sha512-0404twIq84jGiKbC/yfQwbYFh0RNBn8qMJnRO3oCtzvVmF3gelm8+mGKtUnxpd/OC6wiAXyorfoF3mlSW615oA==",
       "requires": {
         "@react-icons/all-files": "^4.1.0",
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "@types/d3-array": "^2.9.0",
         "@types/react-table": "^7.0.29",
         "d3-array": "^2.4.0",
@@ -61150,12 +61150,12 @@
       }
     },
     "@superset-ui/plugin-chart-word-cloud": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-word-cloud/-/plugin-chart-word-cloud-0.17.79.tgz",
-      "integrity": "sha512-EpHMJ1Qd7GnykEjlC+3bOzzBauLTFwZZuFFuCHs8m0exozuFaHQS1VxmpR1h3zJsp6pjF3PRFU05fpQ5LUAbnA==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/plugin-chart-word-cloud/-/plugin-chart-word-cloud-0.17.80.tgz",
+      "integrity": "sha512-BBXJywPpF5q5y/+7S4PxJFajEufcURKgbTDbVE2uVj85v5m1XtdM5UpvjJ6O4AmksxKD3J1PfSBXtXehttf3hg==",
       "requires": {
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "@types/d3-cloud": "^1.2.1",
         "@types/d3-scale": "^2.0.2",
         "d3-cloud": "^1.2.5",
@@ -61186,14 +61186,14 @@
       }
     },
     "@superset-ui/preset-chart-xy": {
-      "version": "0.17.79",
-      "resolved": "https://registry.npmjs.org/@superset-ui/preset-chart-xy/-/preset-chart-xy-0.17.79.tgz",
-      "integrity": "sha512-JisKp00zIVa8VKSBXG1HNDj6hcRf70kHAGuSXHrQ8BUdfhy9Xc20oUMMFKeWSi0cc5NzPkgGg9Vl/vd3fvsO8Q==",
+      "version": "0.17.80",
+      "resolved": "https://registry.npmjs.org/@superset-ui/preset-chart-xy/-/preset-chart-xy-0.17.80.tgz",
+      "integrity": "sha512-AfxeBs9w0D7Af5NAKeJ1PmMfitjodpR2AELlsx1s9VkVXoz4Y3FgY9YkUCsphietzjF7Z1kSPYXPLY+wa57oMQ==",
       "requires": {
         "@data-ui/theme": "^0.0.84",
         "@data-ui/xy-chart": "^0.0.84",
-        "@superset-ui/chart-controls": "0.17.79",
-        "@superset-ui/core": "0.17.75",
+        "@superset-ui/chart-controls": "0.17.80",
+        "@superset-ui/core": "0.17.80",
         "@vx/axis": "^0.0.198",
         "@vx/legend": "^0.0.198",
         "@vx/scale": "^0.0.197",
diff --git a/superset-frontend/package.json b/superset-frontend/package.json
index b025107..8c85b91 100644
--- a/superset-frontend/package.json
+++ b/superset-frontend/package.json
@@ -67,35 +67,35 @@
     "@emotion/babel-preset-css-prop": "^11.2.0",
     "@emotion/cache": "^11.1.3",
     "@emotion/react": "^11.1.5",
-    "@superset-ui/chart-controls": "^0.17.79",
-    "@superset-ui/core": "^0.17.75",
-    "@superset-ui/legacy-plugin-chart-calendar": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-chord": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-country-map": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-event-flow": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-force-directed": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-heatmap": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-histogram": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-horizon": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-map-box": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-paired-t-test": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-parallel-coordinates": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-partition": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-pivot-table": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-rose": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-sankey": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-sankey-loop": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-sunburst": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-treemap": "^0.17.79",
-    "@superset-ui/legacy-plugin-chart-world-map": "^0.17.79",
-    "@superset-ui/legacy-preset-chart-big-number": "^0.17.79",
+    "@superset-ui/chart-controls": "^0.17.80",
+    "@superset-ui/core": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-calendar": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-chord": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-country-map": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-event-flow": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-force-directed": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-heatmap": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-histogram": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-horizon": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-map-box": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-paired-t-test": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-parallel-coordinates": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-partition": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-pivot-table": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-rose": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-sankey": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-sankey-loop": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-sunburst": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-treemap": "^0.17.80",
+    "@superset-ui/legacy-plugin-chart-world-map": "^0.17.80",
+    "@superset-ui/legacy-preset-chart-big-number": "^0.17.80",
     "@superset-ui/legacy-preset-chart-deckgl": "^0.4.9",
-    "@superset-ui/legacy-preset-chart-nvd3": "^0.17.79",
-    "@superset-ui/plugin-chart-echarts": "^0.17.79",
-    "@superset-ui/plugin-chart-pivot-table": "^0.17.79",
-    "@superset-ui/plugin-chart-table": "^0.17.79",
-    "@superset-ui/plugin-chart-word-cloud": "^0.17.79",
-    "@superset-ui/preset-chart-xy": "^0.17.79",
+    "@superset-ui/legacy-preset-chart-nvd3": "^0.17.80",
+    "@superset-ui/plugin-chart-echarts": "^0.17.80",
+    "@superset-ui/plugin-chart-pivot-table": "^0.17.80",
+    "@superset-ui/plugin-chart-table": "^0.17.80",
+    "@superset-ui/plugin-chart-word-cloud": "^0.17.80",
+    "@superset-ui/preset-chart-xy": "^0.17.80",
     "@vx/responsive": "^0.0.195",
     "abortcontroller-polyfill": "^1.1.9",
     "antd": "^4.9.4",
diff --git a/superset/charts/schemas.py b/superset/charts/schemas.py
index 726cf25..9968a07 100644
--- a/superset/charts/schemas.py
+++ b/superset/charts/schemas.py
@@ -293,6 +293,13 @@ class ChartDataAdhocMetricSchema(Schema):
         "will be generated.",
         example="metric_aec60732-fac0-4b17-b736-93f1a5c93e30",
     )
+    timeGrain = fields.String(
+        description="Optional time grain for temporal filters", example="PT1M",
+    )
+    isExtra = fields.Boolean(
+        description="Indicates if the filter has been added by a filter component as "
+        "opposed to being a part of the original query."
+    )
 
 
 class ChartDataAggregateConfigField(fields.Dict):
@@ -771,6 +778,13 @@ class ChartDataFilterSchema(Schema):
         "integer, decimal or list, depending on the operator.",
         example=["China", "France", "Japan"],
     )
+    grain = fields.String(
+        description="Optional time grain for temporal filters", example="PT1M",
+    )
+    isExtra = fields.Boolean(
+        description="Indicates if the filter has been added by a filter component as "
+        "opposed to being a part of the original query."
+    )
 
 
 class ChartDataExtrasSchema(Schema):
diff --git a/superset/common/query_object.py b/superset/common/query_object.py
index 8ab4c62..01ceaec 100644
--- a/superset/common/query_object.py
+++ b/superset/common/query_object.py
@@ -36,6 +36,7 @@ from superset.utils.core import (
     get_metric_names,
     is_adhoc_metric,
     json_int_dttm_ser,
+    QueryObjectFilterClause,
 )
 from superset.utils.date_parser import get_since_until, parse_human_timedelta
 from superset.utils.hashing import md5_sha_from_dict
@@ -85,7 +86,7 @@ class QueryObject:
     metrics: Optional[List[Metric]]
     row_limit: int
     row_offset: int
-    filter: List[Dict[str, Any]]
+    filter: List[QueryObjectFilterClause]
     timeseries_limit: int
     timeseries_limit_metric: Optional[Metric]
     order_desc: bool
@@ -108,7 +109,7 @@ class QueryObject:
         granularity: Optional[str] = None,
         metrics: Optional[List[Metric]] = None,
         groupby: Optional[List[str]] = None,
-        filters: Optional[List[Dict[str, Any]]] = None,
+        filters: Optional[List[QueryObjectFilterClause]] = None,
         time_range: Optional[str] = None,
         time_shift: Optional[str] = None,
         is_timeseries: Optional[bool] = None,
diff --git a/superset/connectors/sqla/models.py b/superset/connectors/sqla/models.py
index 1a55607..cd93e46 100644
--- a/superset/connectors/sqla/models.py
+++ b/superset/connectors/sqla/models.py
@@ -86,7 +86,11 @@ from superset.models.helpers import AuditMixinNullable, QueryResult
 from superset.sql_parse import ParsedQuery
 from superset.typing import AdhocMetric, Metric, OrderBy, QueryObjectDict
 from superset.utils import core as utils
-from superset.utils.core import GenericDataType, remove_duplicates
+from superset.utils.core import (
+    GenericDataType,
+    QueryObjectFilterClause,
+    remove_duplicates,
+)
 
 config = app.config
 metadata = Model.metadata  # pylint: disable=no-member
@@ -303,13 +307,15 @@ class TableColumn(Model, BaseColumn):
 
         pdf = self.python_date_format
         is_epoch = pdf in ("epoch_s", "epoch_ms")
+        column_spec = self.db_engine_spec.get_column_spec(self.type)
+        type_ = column_spec.sqla_type if column_spec else DateTime
         if not self.expression and not time_grain and not is_epoch:
-            sqla_col = column(self.column_name, type_=DateTime)
+            sqla_col = column(self.column_name, type_=type_)
             return self.table.make_sqla_column_compatible(sqla_col, label)
         if self.expression:
-            col = literal_column(self.expression)
+            col = literal_column(self.expression, type_=type_)
         else:
-            col = column(self.column_name)
+            col = column(self.column_name, type_=type_)
         time_expr = self.db_engine_spec.get_timestamp_expr(
             col, pdf, time_grain, self.type
         )
@@ -935,7 +941,7 @@ class SqlaTable(  # pylint: disable=too-many-public-methods,too-many-instance-at
         columns: Optional[List[str]] = None,
         groupby: Optional[List[str]] = None,
         filter: Optional[  # pylint: disable=redefined-builtin
-            List[Dict[str, Any]]
+            List[QueryObjectFilterClause]
         ] = None,
         is_timeseries: bool = True,
         timeseries_limit: int = 15,
@@ -1056,6 +1062,8 @@ class SqlaTable(  # pylint: disable=too-many-public-methods,too-many-instance-at
         # filter out the pseudo column  __timestamp from columns
         columns = columns or []
         columns = [col for col in columns if col != utils.DTTM_ALIAS]
+        time_grain = extras.get("time_grain_sqla")
+        dttm_col = columns_by_name.get(granularity) if granularity else None
 
         if need_groupby:
             # dedup columns while preserving order
@@ -1063,7 +1071,6 @@ class SqlaTable(  # pylint: disable=too-many-public-methods,too-many-instance-at
             for selected in columns:
                 # if groupby field/expr equals granularity field/expr
                 if selected == granularity:
-                    time_grain = extras.get("time_grain_sqla")
                     sqla_col = columns_by_name[selected]
                     outer = sqla_col.get_timestamp_expression(time_grain, selected)
                 # if groupby field equals a selected column
@@ -1087,15 +1094,13 @@ class SqlaTable(  # pylint: disable=too-many-public-methods,too-many-instance-at
         groupby_exprs_with_timestamp = OrderedDict(groupby_exprs_sans_timestamp.items())
 
         if granularity:
-            if granularity not in columns_by_name:
+            if granularity not in columns_by_name or not dttm_col:
                 raise QueryObjectValidationError(
                     _(
                         'Time column "%(col)s" does not exist in dataset',
                         col=granularity,
                     )
                 )
-            dttm_col = columns_by_name[granularity]
-            time_grain = extras.get("time_grain_sqla")
             time_filters = []
 
             if is_timeseries:
@@ -1150,7 +1155,12 @@ class SqlaTable(  # pylint: disable=too-many-public-methods,too-many-instance-at
             col = flt["col"]
             val = flt.get("val")
             op = flt["op"].upper()
-            col_obj = columns_by_name.get(col)
+            col_obj = (
+                dttm_col
+                if col == utils.DTTM_ALIAS and is_timeseries and dttm_col
+                else columns_by_name.get(col)
+            )
+            filter_grain = flt.get("grain")
 
             if is_feature_enabled("ENABLE_TEMPLATE_REMOVE_FILTERS"):
                 if col in removed_filters:
@@ -1158,6 +1168,10 @@ class SqlaTable(  # pylint: disable=too-many-public-methods,too-many-instance-at
                     continue
 
             if col_obj:
+                if filter_grain:
+                    sqla_col = col_obj.get_timestamp_expression(filter_grain)
+                else:
+                    sqla_col = col_obj.get_sqla_col()
                 col_spec = db_engine_spec.get_column_spec(col_obj.type)
                 is_list_target = op in (
                     utils.FilterOperator.IN.value,
@@ -1180,24 +1194,24 @@ class SqlaTable(  # pylint: disable=too-many-public-methods,too-many-instance-at
                         )
                     if None in eq:
                         eq = [x for x in eq if x is not None]
-                        is_null_cond = col_obj.get_sqla_col().is_(None)
+                        is_null_cond = sqla_col.is_(None)
                         if eq:
-                            cond = or_(is_null_cond, col_obj.get_sqla_col().in_(eq))
+                            cond = or_(is_null_cond, sqla_col.in_(eq))
                         else:
                             cond = is_null_cond
                     else:
-                        cond = col_obj.get_sqla_col().in_(eq)
+                        cond = sqla_col.in_(eq)
                     if op == utils.FilterOperator.NOT_IN.value:
                         cond = ~cond
                     where_clause_and.append(cond)
                 elif op == utils.FilterOperator.IS_NULL.value:
-                    where_clause_and.append(col_obj.get_sqla_col().is_(None))
+                    where_clause_and.append(sqla_col.is_(None))
                 elif op == utils.FilterOperator.IS_NOT_NULL.value:
-                    where_clause_and.append(col_obj.get_sqla_col().isnot(None))
+                    where_clause_and.append(sqla_col.isnot(None))
                 elif op == utils.FilterOperator.IS_TRUE.value:
-                    where_clause_and.append(col_obj.get_sqla_col().is_(True))
+                    where_clause_and.append(sqla_col.is_(True))
                 elif op == utils.FilterOperator.IS_FALSE.value:
-                    where_clause_and.append(col_obj.get_sqla_col().is_(False))
+                    where_clause_and.append(sqla_col.is_(False))
                 else:
                     if eq is None:
                         raise QueryObjectValidationError(
@@ -1207,21 +1221,21 @@ class SqlaTable(  # pylint: disable=too-many-public-methods,too-many-instance-at
                             )
                         )
                     if op == utils.FilterOperator.EQUALS.value:
-                        where_clause_and.append(col_obj.get_sqla_col() == eq)
+                        where_clause_and.append(sqla_col == eq)
                     elif op == utils.FilterOperator.NOT_EQUALS.value:
-                        where_clause_and.append(col_obj.get_sqla_col() != eq)
+                        where_clause_and.append(sqla_col != eq)
                     elif op == utils.FilterOperator.GREATER_THAN.value:
-                        where_clause_and.append(col_obj.get_sqla_col() > eq)
+                        where_clause_and.append(sqla_col > eq)
                     elif op == utils.FilterOperator.LESS_THAN.value:
-                        where_clause_and.append(col_obj.get_sqla_col() < eq)
+                        where_clause_and.append(sqla_col < eq)
                     elif op == utils.FilterOperator.GREATER_THAN_OR_EQUALS.value:
-                        where_clause_and.append(col_obj.get_sqla_col() >= eq)
+                        where_clause_and.append(sqla_col >= eq)
                     elif op == utils.FilterOperator.LESS_THAN_OR_EQUALS.value:
-                        where_clause_and.append(col_obj.get_sqla_col() <= eq)
+                        where_clause_and.append(sqla_col <= eq)
                     elif op == utils.FilterOperator.LIKE.value:
-                        where_clause_and.append(col_obj.get_sqla_col().like(eq))
+                        where_clause_and.append(sqla_col.like(eq))
                     elif op == utils.FilterOperator.ILIKE.value:
-                        where_clause_and.append(col_obj.get_sqla_col().ilike(eq))
+                        where_clause_and.append(sqla_col.ilike(eq))
                     else:
                         raise QueryObjectValidationError(
                             _("Invalid filter operation type: %(op)s", op=op)
@@ -1281,6 +1295,7 @@ class SqlaTable(  # pylint: disable=too-many-public-methods,too-many-instance-at
             and timeseries_limit
             and not time_groupby_inline
             and groupby_exprs_sans_timestamp
+            and dttm_col
         ):
             if db_engine_spec.allows_joins:
                 # some sql dialects require for order by expressions
diff --git a/superset/db_engine_specs/base.py b/superset/db_engine_specs/base.py
index 1ce082c..261bede 100644
--- a/superset/db_engine_specs/base.py
+++ b/superset/db_engine_specs/base.py
@@ -44,7 +44,7 @@ from flask import current_app, g
 from flask_babel import gettext as __, lazy_gettext as _
 from marshmallow import fields, Schema
 from marshmallow.validate import Range
-from sqlalchemy import column, DateTime, select, types
+from sqlalchemy import column, select, types
 from sqlalchemy.engine.base import Engine
 from sqlalchemy.engine.interfaces import Compiled, Dialect
 from sqlalchemy.engine.reflection import Inspector
@@ -381,7 +381,7 @@ class BaseEngineSpec:  # pylint: disable=too-many-public-methods
         elif pdf == "epoch_ms":
             time_expr = time_expr.replace("{col}", cls.epoch_ms_to_dttm())
 
-        return TimestampExpression(time_expr, col, type_=DateTime)
+        return TimestampExpression(time_expr, col, type_=col.type)
 
     @classmethod
     def get_time_grains(cls) -> Tuple[TimeGrain, ...]:
diff --git a/superset/typing.py b/superset/typing.py
index ed8ed0e..009c9d9 100644
--- a/superset/typing.py
+++ b/superset/typing.py
@@ -42,7 +42,7 @@ DbapiDescriptionRow = Tuple[
 ]
 DbapiDescription = Union[List[DbapiDescriptionRow], Tuple[DbapiDescriptionRow, ...]]
 DbapiResult = Sequence[Union[List[Any], Tuple[Any, ...]]]
-FilterValue = Union[datetime, float, int, str]
+FilterValue = Union[bool, datetime, float, int, str]
 FilterValues = Union[FilterValue, List[FilterValue], Tuple[FilterValue]]
 FormData = Dict[str, Any]
 Granularity = Union[str, Dict[str, Union[str, float]]]
diff --git a/superset/utils/core.py b/superset/utils/core.py
index 803bafc..427ebfa 100644
--- a/superset/utils/core.py
+++ b/superset/utils/core.py
@@ -96,7 +96,7 @@ from superset.exceptions import (
     SupersetException,
     SupersetTimeoutException,
 )
-from superset.typing import AdhocMetric, FlaskResponse, FormData, Metric
+from superset.typing import AdhocMetric, FilterValues, FlaskResponse, FormData, Metric
 from superset.utils.dates import datetime_to_epoch, EPOCH
 from superset.utils.hashing import md5_sha_from_dict, md5_sha_from_str
 
@@ -189,6 +189,25 @@ class DatasourceDict(TypedDict):
     id: int
 
 
+class AdhocFilterClause(TypedDict, total=False):
+    clause: str
+    expressionType: str
+    filterOptionName: Optional[str]
+    comparator: Optional[FilterValues]
+    operator: str
+    subject: str
+    isExtra: Optional[bool]
+    sqlExpression: Optional[str]
+
+
+class QueryObjectFilterClause(TypedDict, total=False):
+    col: str
+    op: str  # pylint: disable=invalid-name
+    val: Optional[FilterValues]
+    grain: Optional[str]
+    isExtra: Optional[bool]
+
+
 class ExtraFiltersTimeColumnType(str, Enum):
     GRANULARITY = "__granularity"
     TIME_COL = "__time_col"
@@ -1017,28 +1036,32 @@ def zlib_decompress(blob: bytes, decode: Optional[bool] = True) -> Union[bytes,
     return decompressed.decode("utf-8") if decode else decompressed
 
 
-def to_adhoc(
-    filt: Dict[str, Any], expression_type: str = "SIMPLE", clause: str = "where"
-) -> Dict[str, Any]:
-    result = {
+def simple_filter_to_adhoc(
+    filter_clause: QueryObjectFilterClause, clause: str = "where",
+) -> AdhocFilterClause:
+    result: AdhocFilterClause = {
         "clause": clause.upper(),
-        "expressionType": expression_type,
-        "isExtra": bool(filt.get("isExtra")),
+        "expressionType": "SIMPLE",
+        "comparator": filter_clause.get("val"),
+        "operator": filter_clause["op"],
+        "subject": filter_clause["col"],
     }
+    if filter_clause.get("isExtra"):
+        result["isExtra"] = True
+    result["filterOptionName"] = md5_sha_from_dict(cast(Dict[Any, Any], result))
 
-    if expression_type == "SIMPLE":
-        result.update(
-            {
-                "comparator": filt.get("val"),
-                "operator": filt.get("op"),
-                "subject": filt.get("col"),
-            }
-        )
-    elif expression_type == "SQL":
-        result.update({"sqlExpression": filt.get(clause)})
+    return result
 
-    deterministic_name = md5_sha_from_dict(result)
-    result["filterOptionName"] = deterministic_name
+
+def form_data_to_adhoc(form_data: Dict[str, Any], clause: str) -> AdhocFilterClause:
+    if clause not in ("where", "having"):
+        raise ValueError(__("Unsupported clause type: %(clause)s", clause=clause))
+    result: AdhocFilterClause = {
+        "clause": clause.upper(),
+        "expressionType": "SQL",
+        "sqlExpression": form_data.get(clause),
+    }
+    result["filterOptionName"] = md5_sha_from_dict(cast(Dict[Any, Any], result))
 
     return result
 
@@ -1050,7 +1073,7 @@ def merge_extra_form_data(form_data: Dict[str, Any]) -> None:
     """
     filter_keys = ["filters", "adhoc_filters"]
     extra_form_data = form_data.pop("extra_form_data", {})
-    append_filters = extra_form_data.get("filters", None)
+    append_filters: List[QueryObjectFilterClause] = extra_form_data.get("filters", None)
 
     # merge append extras
     for key in [key for key in EXTRA_FORM_DATA_APPEND_KEYS if key not in filter_keys]:
@@ -1075,13 +1098,21 @@ def merge_extra_form_data(form_data: Dict[str, Any]) -> None:
     if extras:
         form_data["extras"] = extras
 
-    adhoc_filters = form_data.get("adhoc_filters", [])
+    adhoc_filters: List[AdhocFilterClause] = form_data.get("adhoc_filters", [])
     form_data["adhoc_filters"] = adhoc_filters
-    append_adhoc_filters = extra_form_data.get("adhoc_filters", [])
-    adhoc_filters.extend({"isExtra": True, **fltr} for fltr in append_adhoc_filters)
+    append_adhoc_filters: List[AdhocFilterClause] = extra_form_data.get(
+        "adhoc_filters", []
+    )
+    adhoc_filters.extend(
+        {"isExtra": True, **fltr} for fltr in append_adhoc_filters  # type: ignore
+    )
     if append_filters:
         adhoc_filters.extend(
-            to_adhoc({"isExtra": True, **fltr}) for fltr in append_filters if fltr
+            simple_filter_to_adhoc(
+                {"isExtra": True, **fltr}  # type: ignore
+            )
+            for fltr in append_filters
+            if fltr
         )
 
 
@@ -1148,16 +1179,16 @@ def merge_extra_filters(  # pylint: disable=too-many-branches
                             # Add filters for unequal lists
                             # order doesn't matter
                             if set(existing_filters[filter_key]) != set(filtr["val"]):
-                                adhoc_filters.append(to_adhoc(filtr))
+                                adhoc_filters.append(simple_filter_to_adhoc(filtr))
                         else:
-                            adhoc_filters.append(to_adhoc(filtr))
+                            adhoc_filters.append(simple_filter_to_adhoc(filtr))
                     else:
                         # Do not add filter if same value already exists
                         if filtr["val"] != existing_filters[filter_key]:
-                            adhoc_filters.append(to_adhoc(filtr))
+                            adhoc_filters.append(simple_filter_to_adhoc(filtr))
                 else:
                     # Filter not found, add it
-                    adhoc_filters.append(to_adhoc(filtr))
+                    adhoc_filters.append(simple_filter_to_adhoc(filtr))
         # Remove extra filters from the form data since no longer needed
         del form_data["extra_filters"]
 
@@ -1268,15 +1299,16 @@ def convert_legacy_filters_into_adhoc(  # pylint: disable=invalid-name
     mapping = {"having": "having_filters", "where": "filters"}
 
     if not form_data.get("adhoc_filters"):
-        form_data["adhoc_filters"] = []
+        adhoc_filters: List[AdhocFilterClause] = []
+        form_data["adhoc_filters"] = adhoc_filters
 
         for clause, filters in mapping.items():
             if clause in form_data and form_data[clause] != "":
-                form_data["adhoc_filters"].append(to_adhoc(form_data, "SQL", clause))
+                adhoc_filters.append(form_data_to_adhoc(form_data, clause))
 
             if filters in form_data:
                 for filt in filter(lambda x: x is not None, form_data[filters]):
-                    form_data["adhoc_filters"].append(to_adhoc(filt, "SIMPLE", clause))
+                    adhoc_filters.append(simple_filter_to_adhoc(filt, clause))
 
     for key in ("filters", "having", "having_filters", "where"):
         if key in form_data:
diff --git a/superset/viz.py b/superset/viz.py
index 3dc799e..cd19807 100644
--- a/superset/viz.py
+++ b/superset/viz.py
@@ -74,7 +74,7 @@ from superset.utils.core import (
     JS_MAX_INTEGER,
     merge_extra_filters,
     QueryMode,
-    to_adhoc,
+    simple_filter_to_adhoc,
 )
 from superset.utils.date_parser import get_since_until, parse_past_timedelta
 from superset.utils.dates import datetime_to_epoch
@@ -2475,7 +2475,9 @@ class BaseDeckGLViz(BaseViz):
             spatial_columns.add(line_column)
 
         for column in sorted(spatial_columns):
-            filter_ = to_adhoc({"col": column, "op": "IS NOT NULL", "val": ""})
+            filter_ = simple_filter_to_adhoc(
+                {"col": column, "op": "IS NOT NULL", "val": ""}
+            )
             fd["adhoc_filters"].append(filter_)
 
     def query_obj(self) -> QueryObjectDict:
diff --git a/tests/integration_tests/model_tests.py b/tests/integration_tests/model_tests.py
index ee9b3cd..deb7846 100644
--- a/tests/integration_tests/model_tests.py
+++ b/tests/integration_tests/model_tests.py
@@ -22,7 +22,6 @@ from tests.integration_tests.fixtures.birth_names_dashboard import (
     load_birth_names_dashboard_with_slices,
 )
 
-import pandas
 import pytest
 from sqlalchemy.engine.url import make_url
 
@@ -339,12 +338,19 @@ class TestDatabaseModel(SupersetTestCase):
 class TestSqlaTableModel(SupersetTestCase):
     @pytest.mark.usefixtures("load_birth_names_dashboard_with_slices")
     def test_get_timestamp_expression(self):
+        col_type = (
+            "VARCHAR"
+            if get_example_database().backend == "presto"
+            else "TemporalWrapperType"
+        )
         tbl = self.get_table(name="birth_names")
         ds_col = tbl.get_column("ds")
         sqla_literal = ds_col.get_timestamp_expression(None)
         self.assertEqual(str(sqla_literal.compile()), "ds")
+        assert type(sqla_literal.type).__name__ == col_type
 
         sqla_literal = ds_col.get_timestamp_expression("P1D")
+        assert type(sqla_literal.type).__name__ == col_type
         compiled = "{}".format(sqla_literal.compile())
         if tbl.database.backend == "mysql":
             self.assertEqual(compiled, "DATE(ds)")
@@ -352,6 +358,7 @@ class TestSqlaTableModel(SupersetTestCase):
         prev_ds_expr = ds_col.expression
         ds_col.expression = "DATE_ADD(ds, 1)"
         sqla_literal = ds_col.get_timestamp_expression("P1D")
+        assert type(sqla_literal.type).__name__ == col_type
         compiled = "{}".format(sqla_literal.compile())
         if tbl.database.backend == "mysql":
             self.assertEqual(compiled, "DATE(DATE_ADD(ds, 1))")
diff --git a/tests/integration_tests/utils/core_tests.py b/tests/integration_tests/utils/core_tests.py
index 8699dd7..3ba3903 100644
--- a/tests/integration_tests/utils/core_tests.py
+++ b/tests/integration_tests/utils/core_tests.py
@@ -17,10 +17,10 @@
 # pylint: disable=no-self-use
 import pytest
 
-from superset.utils.core import to_adhoc
+from superset.utils.core import form_data_to_adhoc, simple_filter_to_adhoc
 
 
-def test_to_adhoc_generates_deterministic_values():
+def test_simple_filter_to_adhoc_generates_deterministic_values():
     input_1 = {
         "op": "IS NOT NULL",
         "col": "LATITUDE",
@@ -30,25 +30,56 @@ def test_to_adhoc_generates_deterministic_values():
     input_2 = {**input_1, "col": "LONGITUDE"}
 
     # The result is the same when given the same input
-    assert to_adhoc(input_1) == to_adhoc(input_1)
-    assert to_adhoc(input_1) == {
+    assert simple_filter_to_adhoc(input_1) == simple_filter_to_adhoc(input_1)
+    assert simple_filter_to_adhoc(input_1) == {
         "clause": "WHERE",
         "expressionType": "SIMPLE",
-        "isExtra": False,
         "comparator": "",
         "operator": "IS NOT NULL",
         "subject": "LATITUDE",
-        "filterOptionName": "d0908f77d950131db7a69fdc820cb739",
+        "filterOptionName": "6ac89d498115da22396f80a765cffc70",
     }
 
     # The result is different when given different input
-    assert to_adhoc(input_1) != to_adhoc(input_2)
-    assert to_adhoc(input_2) == {
+    assert simple_filter_to_adhoc(input_1) != simple_filter_to_adhoc(input_2)
+    assert simple_filter_to_adhoc(input_2) == {
         "clause": "WHERE",
         "expressionType": "SIMPLE",
-        "isExtra": False,
         "comparator": "",
         "operator": "IS NOT NULL",
         "subject": "LONGITUDE",
-        "filterOptionName": "c5f283f727d4dfc6258b351d4a8663bc",
+        "filterOptionName": "9c984bd3714883ca859948354ce26ab9",
     }
+
+
+def test_form_data_to_adhoc_generates_deterministic_values():
+    form_data = {"where": "1 = 1", "having": "count(*) > 1"}
+
+    # The result is the same when given the same input
+    assert form_data_to_adhoc(form_data, "where") == form_data_to_adhoc(
+        form_data, "where"
+    )
+    assert form_data_to_adhoc(form_data, "where") == {
+        "clause": "WHERE",
+        "expressionType": "SQL",
+        "sqlExpression": "1 = 1",
+        "filterOptionName": "99fe79985afbddea4492626dc6a87b74",
+    }
+
+    # The result is different when given different input
+    assert form_data_to_adhoc(form_data, "having") == form_data_to_adhoc(
+        form_data, "having"
+    )
+    assert form_data_to_adhoc(form_data, "having") == {
+        "clause": "HAVING",
+        "expressionType": "SQL",
+        "sqlExpression": "count(*) > 1",
+        "filterOptionName": "1da11f6b709c3190daeabb84f77fc8c2",
+    }
+
+
+def test_form_data_to_adhoc_incorrect_clause_type():
+    form_data = {"where": "1 = 1", "having": "count(*) > 1"}
+
+    with pytest.raises(ValueError):
+        form_data_to_adhoc(form_data, "foobar")
diff --git a/tests/integration_tests/utils_tests.py b/tests/integration_tests/utils_tests.py
index 2d66832..07a4445 100644
--- a/tests/integration_tests/utils_tests.py
+++ b/tests/integration_tests/utils_tests.py
@@ -85,19 +85,6 @@ from tests.integration_tests.fixtures.world_bank_dashboard import (
 from .fixtures.certificates import ssl_certificate
 
 
-def mock_to_adhoc(filt, expressionType="SIMPLE", clause="where"):
-    result = {"clause": clause.upper(), "expressionType": expressionType}
-
-    if expressionType == "SIMPLE":
-        result.update(
-            {"comparator": filt["val"], "operator": filt["op"], "subject": filt["col"]}
-        )
-    elif expressionType == "SQL":
-        result.update({"sqlExpression": filt[clause]})
-
-    return result
-
-
 class TestUtils(SupersetTestCase):
     def test_json_int_dttm_ser(self):
         dttm = datetime(2020, 1, 1)
@@ -137,7 +124,6 @@ class TestUtils(SupersetTestCase):
         got_str = zlib_decompress(blob)
         self.assertEqual(json_str, got_str)
 
-    @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
     def test_merge_extra_filters(self):
         # does nothing if no extra filters
         form_data = {"A": 1, "B": 2, "c": "test"}
@@ -168,6 +154,8 @@ class TestUtils(SupersetTestCase):
                     "clause": "WHERE",
                     "comparator": "someval",
                     "expressionType": "SIMPLE",
+                    "filterOptionName": "90cfb3c34852eb3bc741b0cc20053b46",
+                    "isExtra": True,
                     "operator": "in",
                     "subject": "a",
                 },
@@ -175,6 +163,8 @@ class TestUtils(SupersetTestCase):
                     "clause": "WHERE",
                     "comparator": ["c1", "c2"],
                     "expressionType": "SIMPLE",
+                    "filterOptionName": "6c178d069965f1c02640661280415d96",
+                    "isExtra": True,
                     "operator": "==",
                     "subject": "B",
                 },
@@ -212,6 +202,8 @@ class TestUtils(SupersetTestCase):
                     "clause": "WHERE",
                     "comparator": "someval",
                     "expressionType": "SIMPLE",
+                    "filterOptionName": "90cfb3c34852eb3bc741b0cc20053b46",
+                    "isExtra": True,
                     "operator": "in",
                     "subject": "a",
                 },
@@ -219,6 +211,8 @@ class TestUtils(SupersetTestCase):
                     "clause": "WHERE",
                     "comparator": ["c1", "c2"],
                     "expressionType": "SIMPLE",
+                    "filterOptionName": "6c178d069965f1c02640661280415d96",
+                    "isExtra": True,
                     "operator": "==",
                     "subject": "B",
                 },
@@ -244,6 +238,8 @@ class TestUtils(SupersetTestCase):
                     "clause": "WHERE",
                     "comparator": "hello",
                     "expressionType": "SIMPLE",
+                    "filterOptionName": "e3cbdd92a2ae23ca92c6d7fca42e36a6",
+                    "isExtra": True,
                     "operator": "like",
                     "subject": "A",
                 }
@@ -264,7 +260,6 @@ class TestUtils(SupersetTestCase):
         merge_extra_filters(form_data)
         self.assertEqual(form_data, expected)
 
-    @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
     def test_merge_extra_filters_ignores_empty_filters(self):
         form_data = {
             "extra_filters": [
@@ -276,7 +271,6 @@ class TestUtils(SupersetTestCase):
         merge_extra_filters(form_data)
         self.assertEqual(form_data, expected)
 
-    @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
     def test_merge_extra_filters_ignores_nones(self):
         form_data = {
             "adhoc_filters": [
@@ -305,7 +299,6 @@ class TestUtils(SupersetTestCase):
         merge_extra_filters(form_data)
         self.assertEqual(form_data, expected)
 
-    @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
     def test_merge_extra_filters_ignores_equal_filters(self):
         form_data = {
             "extra_filters": [
@@ -366,7 +359,6 @@ class TestUtils(SupersetTestCase):
         merge_extra_filters(form_data)
         self.assertEqual(form_data, expected)
 
-    @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
     def test_merge_extra_filters_merges_different_val_types(self):
         form_data = {
             "extra_filters": [
@@ -410,6 +402,8 @@ class TestUtils(SupersetTestCase):
                     "clause": "WHERE",
                     "comparator": ["g1", "g2"],
                     "expressionType": "SIMPLE",
+                    "filterOptionName": "c11969c994b40a83a4ae7d48ff1ea28e",
+                    "isExtra": True,
                     "operator": "in",
                     "subject": "a",
                 },
@@ -460,6 +454,8 @@ class TestUtils(SupersetTestCase):
                     "clause": "WHERE",
                     "comparator": "someval",
                     "expressionType": "SIMPLE",
+                    "filterOptionName": "90cfb3c34852eb3bc741b0cc20053b46",
+                    "isExtra": True,
                     "operator": "in",
                     "subject": "a",
                 },
@@ -469,7 +465,6 @@ class TestUtils(SupersetTestCase):
         merge_extra_filters(form_data)
         self.assertEqual(form_data, expected)
 
-    @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
     def test_merge_extra_filters_adds_unequal_lists(self):
         form_data = {
             "extra_filters": [
@@ -513,6 +508,8 @@ class TestUtils(SupersetTestCase):
                     "clause": "WHERE",
                     "comparator": ["g1", "g2", "g3"],
                     "expressionType": "SIMPLE",
+                    "filterOptionName": "21cbb68af7b17e62b3b2f75e2190bfd7",
+                    "isExtra": True,
                     "operator": "in",
                     "subject": "a",
                 },
@@ -520,6 +517,8 @@ class TestUtils(SupersetTestCase):
                     "clause": "WHERE",
                     "comparator": ["c1", "c2", "c3"],
                     "expressionType": "SIMPLE",
+                    "filterOptionName": "0a8dcb928f1f4bba97643c6e68d672f1",
+                    "isExtra": True,
                     "operator": "==",
                     "subject": "B",
                 },
@@ -580,18 +579,21 @@ class TestUtils(SupersetTestCase):
         with self.assertRaises(SupersetException):
             validate_json(invalid)
 
-    @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
     def test_convert_legacy_filters_into_adhoc_where(self):
         form_data = {"where": "a = 1"}
         expected = {
             "adhoc_filters": [
-                {"clause": "WHERE", "expressionType": "SQL", "sqlExpression": "a = 1"}
+                {
+                    "clause": "WHERE",
+                    "expressionType": "SQL",
+                    "filterOptionName": "46fb6d7891e23596e42ae38da94a57e0",
+                    "sqlExpression": "a = 1",
+                }
             ]
         }
         convert_legacy_filters_into_adhoc(form_data)
         self.assertEqual(form_data, expected)
 
-    @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
     def test_convert_legacy_filters_into_adhoc_filters(self):
         form_data = {"filters": [{"col": "a", "op": "in", "val": "someval"}]}
         expected = {
@@ -600,6 +602,7 @@ class TestUtils(SupersetTestCase):
                     "clause": "WHERE",
                     "comparator": "someval",
                     "expressionType": "SIMPLE",
+                    "filterOptionName": "135c7ee246666b840a3d7a9c3a30cf38",
                     "operator": "in",
                     "subject": "a",
                 }
@@ -608,7 +611,6 @@ class TestUtils(SupersetTestCase):
         convert_legacy_filters_into_adhoc(form_data)
         self.assertEqual(form_data, expected)
 
-    @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
     def test_convert_legacy_filters_into_adhoc_having(self):
         form_data = {"having": "COUNT(1) = 1"}
         expected = {
@@ -616,6 +618,7 @@ class TestUtils(SupersetTestCase):
                 {
                     "clause": "HAVING",
                     "expressionType": "SQL",
+                    "filterOptionName": "683f1c26466ab912f75a00842e0f2f7b",
                     "sqlExpression": "COUNT(1) = 1",
                 }
             ]
@@ -623,7 +626,6 @@ class TestUtils(SupersetTestCase):
         convert_legacy_filters_into_adhoc(form_data)
         self.assertEqual(form_data, expected)
 
-    @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
     def test_convert_legacy_filters_into_adhoc_having_filters(self):
         form_data = {"having_filters": [{"col": "COUNT(1)", "op": "==", "val": 1}]}
         expected = {
@@ -632,6 +634,7 @@ class TestUtils(SupersetTestCase):
                     "clause": "HAVING",
                     "comparator": 1,
                     "expressionType": "SIMPLE",
+                    "filterOptionName": "967d0fb409f6d9c7a6c03a46cf933c9c",
                     "operator": "==",
                     "subject": "COUNT(1)",
                 }
@@ -640,18 +643,21 @@ class TestUtils(SupersetTestCase):
         convert_legacy_filters_into_adhoc(form_data)
         self.assertEqual(form_data, expected)
 
-    @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
     def test_convert_legacy_filters_into_adhoc_present_and_empty(self):
         form_data = {"adhoc_filters": [], "where": "a = 1"}
         expected = {
             "adhoc_filters": [
-                {"clause": "WHERE", "expressionType": "SQL", "sqlExpression": "a = 1"}
+                {
+                    "clause": "WHERE",
+                    "expressionType": "SQL",
+                    "filterOptionName": "46fb6d7891e23596e42ae38da94a57e0",
+                    "sqlExpression": "a = 1",
+                }
             ]
         }
         convert_legacy_filters_into_adhoc(form_data)
         self.assertEqual(form_data, expected)
 
-    @patch("superset.utils.core.to_adhoc", mock_to_adhoc)
     def test_convert_legacy_filters_into_adhoc_present_and_nonempty(self):
         form_data = {
             "adhoc_filters": [
diff --git a/tests/integration_tests/viz_tests.py b/tests/integration_tests/viz_tests.py
index c3370ab..aa40367 100644
--- a/tests/integration_tests/viz_tests.py
+++ b/tests/integration_tests/viz_tests.py
@@ -1196,42 +1196,38 @@ class TestBaseDeckGLViz(SupersetTestCase):
                 {
                     "clause": "WHERE",
                     "expressionType": "SIMPLE",
-                    "filterOptionName": "bfa3a42a6f3de3c781b7d4f8e8d6613d",
+                    "filterOptionName": "c7f171cf3204bcbf456acfeac5cd9afd",
                     "comparator": "",
                     "operator": "IS NOT NULL",
                     "subject": "lat",
-                    "isExtra": False,
                 },
                 {
                     "clause": "WHERE",
                     "expressionType": "SIMPLE",
-                    "filterOptionName": "2d35d87b57c6f1a5ae139f1a6b0cbd0a",
+                    "filterOptionName": "52634073fbb8ae0a3aa59ad48abac55e",
                     "comparator": "",
                     "operator": "IS NOT NULL",
                     "subject": "lon",
-                    "isExtra": False,
                 },
             ],
             "delimited_key": [
                 {
                     "clause": "WHERE",
                     "expressionType": "SIMPLE",
-                    "filterOptionName": "89cc0fafe39a4eabc5df2cd52e4d6514",
+                    "filterOptionName": "cae5c925c140593743da08499e6fb207",
                     "comparator": "",
                     "operator": "IS NOT NULL",
                     "subject": "lonlat",
-                    "isExtra": False,
                 }
             ],
             "geohash_key": [
                 {
                     "clause": "WHERE",
                     "expressionType": "SIMPLE",
-                    "filterOptionName": "fa734d9a7bab254a53b41540d46cdb6c",
+                    "filterOptionName": "d84f55222d8e414e888fa5f990b341d2",
                     "comparator": "",
                     "operator": "IS NOT NULL",
                     "subject": "geo",
-                    "isExtra": False,
                 }
             ],
         }