You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by be...@apache.org on 2024/03/14 21:07:49 UTC

(superset) branch remove-sqlparse-kusto updated (c7ad3d5fa8 -> 40f3607af8)

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

beto pushed a change to branch remove-sqlparse-kusto
in repository https://gitbox.apache.org/repos/asf/superset.git


 discard c7ad3d5fa8 feat: support for KQL in SQLQuery
 discard 8237798a30 Update tests
 discard a6cc81994c chore: get rid of sqlparse
     add 2bb0b46b55 fix: helm chart comment on SECRET_KEY (#26674)
     add 11a60c92ea build(deps-dev): bump css-minimizer-webpack-plugin from 3.4.1 to 6.0.0 in /superset-frontend (#26656)
     add 01fdfbee09 fix(logging): Filter out undefined columns (#26314)
     add 8f8e7c2aa6 fix: add user to latest-release-tag workflow (#26752)
     add 424b4c2378 chore: Add Embed Modal extension override and tests (#26759)
     add 845bcc9bea fix: docker should always run, even in forks (#26801)
     add 11f0dd91db chore(RESOURCES): fix markdown for table formatting (#26789)
     add ed934a93e1 feat: Stop editor scrolling to top (#26754)
     add 8657fa753b build(deps): update jquery requirement from ^3.4.1 to ^3.7.1 in /superset-frontend/packages/superset-ui-demo (#26621)
     add 23460b21f6 chore: Splits the CHANGELOG into multiple files (#26800)
     add 5e633d2bb0 fix: Row limit hardcoded (#26807)
     add 3dcfbcc3a5 chore: Technical Debt Metrics (#26442)
     add f084572dc7 chore(dependencies): bumping fonttools (#26793)
     add 4f56f5ee84 fix(tags): Filter system tags from the tags list (#26701)
     add 092129201e chore: Reformat changelogs (#26815)
     add c657745f02 chore: add google-auth for new example dashboard (#26816)
     add 1f6c270f15 fix(time-series table): Can't compare from the beginning of the time range (#26814)
     add 6bc85a0d2c chore(dependencies): bumping jinja2 (#26794)
     add e9c2fdf8ac chore(ci): change code owners for .github (#26813)
     add a6290702d2 build(deps): bump prism-react-renderer from 1.2.1 to 2.3.1 in /docs (#26726)
     add dfc614bdc3 chore: fix GitHub 'Unchanged files with check annotations' reports in PR (#26702)
     add 64ba5797df fix(deck.gl Multiple Layer Chart): Add Contour and Heatmap Layer as options (#25923)
     add 8ca541c850 chore: Slovenian translation update (#23873)
     add 9ece4049f1 build(deps-dev): bump webpack from 5.89.0 to 5.90.0 in /docs (#26839)
     add eea71eb6bc build(deps-dev): bump @docusaurus/module-type-aliases from 3.1.0 to 3.1.1 in /docs (#26834)
     add f73760a5d1 build(deps): bump @types/react-table from 7.0.29 to 7.7.19 in /superset-frontend (#26832)
     add 29582e8d86 chore(deps): bump typescript to 4.8.4 (#24272)
     add b0c8f620d6 build(deps): bump use-immer from 0.8.1 to 0.9.0 in /superset-frontend (#26827)
     add 6c029ce2e8 chore: Add permission to view and drill on Dashboard context (#26798)
     add 881268a8da chore(dependencies): bumps match-sorter (#26819)
     add fade4806ce fix: prevent guest user from modifying metrics (#26749)
     add 78dc6ce6c9 feat: add chart id and dataset id to global logs (#26443)
     add be7c9490a1 chore(lint/a11y): fixing and locking down jsx-a11y/anchor-is-valid (#26820)
     add 71a950fc80 fix(chart table in dashboard): improve screen reading of table (#26453)
     add c3aacc6f42 build(deps-dev): bump @types/node from 20.11.5 to 20.11.10 in /superset-websocket (#26825)
     add 8db5d13749 chore(CI): get docs building on ALL branches. (#26854)
     add 84c48d11d8 fix: Bar charts horizontal margin adjustment error (#26817)
     add 806e4c4b3f chore(dependabot): lowering bump cadence from weekly to monthly (#26855)
     add 1029b7dadc build(deps): bump react-redux from 7.2.8 to 7.2.9 in /superset-frontend (#26865)
     add 911c6e53c2 build(deps): bump mousetrap and @types/mousetrap in /superset-frontend (#26866)
     add 0695173a81 build(deps): bump @testing-library/react-hooks from 5.0.3 to 5.1.3 in /superset-frontend (#26867)
     add 5d8b7bb6a5 build(deps-dev): bump @types/uuid from 9.0.7 to 9.0.8 in /superset-websocket (#26826)
     add 29bc68bd3e feat(i18n): add ukranian translations (#25323)
     add 785e832e8d chore(actions): generate FOSSA report on master, and ALWAYS check for… (#26857)
     add 5392a8c50f chore(actions): run docs actions on Node 16 to conform with the project (#26868)
     add 87558ed065 chore(dependencies): bump less from 3.12.2 to 4.2.0 in /superset-frontend (#26841)
     add be144aad87 build(deps): bump yargs and @types/yargs in /superset-frontend (#26870)
     add fae4f6b0fe chore(license): adding a missing license blurb to a translation file (#26874)
     add 0d1653fbea build(deps): bump @types/enzyme from 3.10.10 to 3.10.18 in /superset-frontend (#26859)
     add 47c337ec62 chore(dependabot): auto-update lockfiles for monorepo package bumps (#26872)
     add f31b823343 build(deps): bump rehype-sanitize from 5.0.1 to 6.0.0 in /superset-frontend (#26860)
     add 7e3d01d0f4 chore(dependabot): ignore css-minimizer-webpack-plugin (#26879)
     add f4473afccd feat: configuring an extensible PR auto-labeler (#26880)
     add 1f5ae74ad9 feat(ci): add a check to make sure there's no hold label on the PR (#26877)
     add 4562d38576 fix(svg): reformatting svgs to allow license without breaking images (#26901)
     add b0d90c6fc8 chore(ci): make action/labeler work on fork PRs (#26900)
     add 630b3ad047 build(deps-dev): bump webpack-bundle-analyzer from 4.9.0 to 4.10.1 in /superset-frontend (#26897)
     add fe61493a3c fix(dependencies): adding auth for dependabot lockfile action (#26888)
     add f7ba2dd3ca chore(docs): remove misplaced k8s installation instructions (#26902)
     add 0a335c67e2 build(deps): bump dom-to-image-more from 2.16.0 to 3.2.0 in /superset-frontend (#26869)
     add 81a54b1bf9 build(deps): bump @types/rison from 0.0.6 to 0.0.9 in /superset-frontend/packages/superset-ui-core (#26831)
     add 63ded0fc58 build(deps): bump @types/rison from 0.0.6 to 0.0.9 in /superset-frontend (#26899)
     add 55846992d2 chore(explore): migrate enzyme to RTL (#26272)
     add 73d118c0e2 feat(maps): Consolidating all country maps (and TS) into the Jupyter notebook workflow. (#26300)
     add 484901f483 fix(pinot): typo in the name for epoch_ms_to_dttm (#26906)
     add 2ef03ca19b fix(dependabot): lockfile updater won't fail when there's nothing to … (#26904)
     add 878a4b62e7 build(deps): bump @visx/axis from 3.5.0 to 3.8.0 in /superset-frontend (#26861)
     add a53c5377ea build(deps): bump d3-selection from 1.4.2 to 3.0.0 in /superset-frontend (#26840)
     add 729a0bc6a5 build(deps): bump @vx/scale from 0.0.197 to 0.0.199 in /superset-frontend (#26894)
     add f0be77bfdf build(deps): bump @ant-design/icons from 5.0.1 to 5.2.6 in /superset-frontend (#26727)
     add 39973cd38e build(deps-dev): update @babel/types requirement from ^7.13.12 to ^7.23.9 in /superset-frontend/plugins/plugin-chart-pivot-table (#26881)
     add 4b77129cc9 fix(docker): improve docker tags to be cleared and avoid conflicts (#26787)
     add 5172e252a1 fix: remove ephemeral docker build from required workflow (#26917)
     add 807c57c531 fix(ci): ephemeral env build (#26852)
     add 1fd927015f fix(ci): ephemeral env build and up dependency (#26919)
     add d8f7e2ce5e fix(ci): lint issue on update-monorepo-lockfiles.yml (#26920)
     add 8a2f7d378a refactor: Removes the deprecated GENERIC_CHART_AXES feature flag (#26372)
     add 31eed009cd chore(ci): notify PMCs of changes on required workflows (#26918)
     add 4b85af2586 fix(ci): remove deprecated set-output on github workflows (#26921)
     add 62993c2fba fix(sqllab): autosync fail on migrated queryEditor (#26922)
     add 3011ce18a5 feat(ci): unleash dependabot on our github actions (#26912)
     add 4539a5d2eb build(deps): bump actions/dependency-review-action from 2 to 4 (#26931)
     add 77d397f5ac build(deps): bump actions/upload-artifact from 3 to 4 (#26930)
     add 1db0d3d364 build(deps): bump azure/setup-helm from 1 to 3 (#26929)
     add 40014d0e6d build(deps): bump chromaui/action from 1 to 10 (#26928)
     add 5b510fc978 build(deps-dev): bump @types/node from 20.11.10 to 20.11.14 in /superset-websocket (#26924)
     add 551ae59096 build(deps): bump shortid from 2.2.14 to 2.2.16 in /superset-frontend (#26940)
     add bdb43abe9e build(deps-dev): bump @babel/core from 7.22.8 to 7.23.9 in /superset-frontend (#26939)
     add d714a7dfeb build(deps): bump emotion-rgba from 0.0.9 to 0.0.12 in /superset-frontend (#26941)
     add 0bc5983d63 build(deps): bump interweave from 13.0.0 to 13.1.0 in /superset-frontend (#26935)
     add bd9afcda99 chore(ci): run pre-commit across the repo (#26942)
     add a09e5557bc feat: Period over Period Big Number comparison chart (#26908)
     add 959a5a5ad6 feat(components): Add static class name with button style (#26639)
     add 19f8405bc0 chore: make TS enums strictly PascalCase (#26875)
     add f2bf9f72e4 fix: handle CRLF endings causing sqlglot failure (#26911)
     add eb257a44f6 chore(dependencies): Push lockfile for monorepo updates on rebuild/rebase (#26943)
     add 0124a5c055 build(deps): bump moment from 2.29.4 to 2.30.1 in /superset-frontend (#26938)
     add 36ce9e26f0 fix: dashboard import validation (#26887)
     add b7ddfff0a1 build(deps): bump github/codeql-action from 2 to 3 (#26956)
     add 3f7a1f68ff build(deps): bump aws-actions/amazon-ecr-login from 1 to 2 (#26955)
     add 5ed8f6784f build(deps): bump aws-actions/configure-aws-credentials from 1 to 4 (#26954)
     add 83acac3e43 fix(actions): specify branch on monorepo lockfile pusher (#26949)
     add 032af5a069 build(deps): bump actions/setup-node from 2 to 4 (#26927)
     add 26e330e119 feat(ci): kill duplicate CI jobs on PRs (#26945)
     add 4c245850c4 build(deps): bump actions/github-script from 3 to 7 (#26953)
     add 4c5176eea8 fix: Allow exporting saved queries without schema information (#26889)
     add 56069b05f9 fix(cache): remove unused webserver config & handle trailing slashes (#22849)
     add fb38552a14 build(deps-dev): bump mock-socket from 9.0.3 to 9.3.1 in /superset-frontend (#26958)
     add e4eae9a70c fix(plugin-chart-table): Revert "fix(chart table in dashboard): improve screen reading of table (#26453)" (#26963)
     add c6d809a2a4 fix(ci): support action/script v5 breaking change (#26968)
     add b33662f6ff build(deps): bump actions/setup-java from 1 to 4 (#26952)
     add e6d2fb6fdf fix(plugin-chart-table): Prevent misalignment of totals and headers when scrollbar is visible (#26964)
     add b26f82e311 fix(ci): support action/script v5 breaking change v2 (#26969)
     add 90b6ba0a4d chore(actions): getting fancier with labels (#26950)
     add a8a9472c39 build(deps): bump actions/setup-python from 4 to 5 (#26970)
     add 760affeb13 build(deps): bump actions/cache from 1 to 4 (#26972)
     add 5930bbb5d3 build(deps): bump actions/checkout from 2 to 4 (#26971)
     add 813783382c build(deps-dev): bump @types/node from 20.11.14 to 20.11.16 in /superset-websocket (#26974)
     add a8cf443300 build(deps-dev): bump webpack from 5.90.0 to 5.90.1 in /docs (#26977)
     add fdff6d84f3 chore(dependencies): bump encodable to 0.7.8 (#26903)
     add 6b0d8ed265 feat: docker image tags documentation + tweaks (#26923)
     add db79c37707 fix(plugin): Period Over Period KPI Plugin Feature flag value (#26985)
     add 80fd75dfe1 fix(ci): typo in my bash script (#26987)
     add e874e04890 build(deps): bump @vx/legend from 0.0.198 to 0.0.199 in /superset-frontend/plugins/legacy-plugin-chart-histogram (#26526)
     add d8a9847503 fix: column values with NaN (#26946)
     add 92b52a7fa0 docs(presto): add Presto SSL connection details (#26986)
     add 32ce002296 build(deps): bump react-intersection-observer from 9.4.1 to 9.6.0 in /superset-frontend (#26996)
     add 068bb719c8 docs: add notes to RELEASING about how to deploy docker images (#26998)
     add 26025274a1 fix(maps): Move Overseas department and regions closer to France mainland (#26995)
     add 7a270a5922 fix(helm): Fix inconsistency for the chart appVersion and default image tag (#27005)
     add 607301ad56 fix(plugins): Fix dashboard filter in Period Over Period KPI plugin (#27013)
     add f79e08ec79 fix(cypress): resolving random dri3 error on cypress runner (#27001)
     add edecf52ab9 chore(github): adding code owners for translation and country map wor… (#27000)
     add 2cd7135a51 build(deps): bump @types/seedrandom from 2.4.30 to 3.0.8 in /superset-frontend (#26979)
     add e792460baf docs: add a note about database drivers in Docker builds (#27020)
     add 53daa1b13f chore(plugins): Description, Category and Tags for BigNumber with Period Time Comparison plugin (#27021)
     add 5b34395689 fix: chart import validation (#26993)
     add 5d46d3a5d3 fix(actions): make tech debt uploader not block CI and skip w/o creds (#26966)
     add 14f88e3f89 chore(sqllab): migrate to typescript (#26171)
     add 42b7bd5c03 fix(maps): france_regions.geojson generated with the notebook, from natural earth data (#27014)
     add 9670572d99 build(deps-dev): bump copy-webpack-plugin from 9.1.0 to 12.0.2 in /superset-frontend (#26893)
     add d5ef052044 build(deps): bump react-js-cron from 1.2.0 to 2.1.2 in /superset-frontend (#26981)
     add 43e1dc49c9 fix: bump FAB to 4.3.11 (#27039)
     add d8e26cfff1 chore: Remove database ID dependency for SSH Tunnel creation (#26989)
     add e437356013 fix(tags): Improve support for tags with colons (#26965)
     add 01e2f8ace3 fix(security manager): Users should not have access to all draft dashboards (#27015)
     add 918057e6c7 fix(ci): fix action script v7 breaking changes v2 (#27040)
     add f8c75ca50b chore(dashboard): migrate enzyme to RTL (#26260)
     add c77fc7dbaf fix(ci): fix action script v7 breaking changes v3 (#27042)
     add 686ce33ea5 fix: safer error message in alerts (#27019)
     add e986a1746f fix(webpack-dev-server): parse env args (#19744)
     add daaf657d47 build(deps-dev): bump @types/jest from 26.0.24 to 29.5.12 in /superset-frontend/plugins/plugin-chart-handlebars (#26973)
     add 66b4670300 fix(actions): correcting malformed labeler configs (#27048)
     add c222464d05 chore(docs): bump version number in docs example (#27038)
     add fd06ff3745 fix(explore): allow free-form d3 format on custom column formatting (#27023)
     add 3700326c35 fix(ephemeral): fix ephemeral builds in PR (#27056)
     add 81301ee54e fix(ephemeral): fix tagging command for ECR (#27057)
     add cf84f36a6c chore: prevent prophet from logging non-errors as errors (#27053)
     add 6f402991e5 fix(plugins): missing currency on small number format in table chart (#27041)
     add ee69ac97c8 fix(ephemeral): point to the full tag name (#27058)
     add 5951f6ceb6 fix(ephemeral): last try fixing this GH action (#27060)
     add 13915bbb54 feat(docker): allow for docker release builds to be multi-platform (#27055)
     add 595c6ce3e6 chore: Add granular permissions for actions in Dashboard (#27029)
     add f59498fcb9 fix(helm): Include option to use Redis with SSL (#26663)
     add 005cee023b fix: Exclude header controls from dashboard PDF export (#27068)
     add 3f91bdb40d fix: Filters sidebar stretching dashboard height (#27069)
     add c010f99020 docs(installation): document multi-platform support in Docker builds (#27072)
     add faaf14bcc4 fix: Drill by with GLOBAL_ASYNC_QUERIES (#27066)
     add 435cd2705e feat(plugins): Update custom controls for BigNumber with Time Comparison chart (#27054)
     add 6c5e8fa175 chore(docs): adding meta db to Feature Flags page (#27071)
     add 16e49cb2f7 fix(ci): new PR comments cancel ongoing ephemeral builds (#27085)
     add 0950bb7b7d fix(drill): no rows returned (#27073)
     add 8bee6edc47 fix(ci): Docker master builds fail while checking version (#27087)
     add e8e208dd14 feat(plugins): Adding colors to BigNumber with Time Comparison chart (#27052)
     add 884ea03480 fix(deps): un-bumping dom-to-pdf ro resolve missing file warnings (#27091)
     add 5e201bcd85 fix(helm): typo on ssl_cert_reqs variable (#27094)
     add 4796484190 fix(big_number): white-space: nowrap to prevent wrapping (#27096)
     add 91ac575eab chore(translations): updating pot -> po -> json files (babel 2.9.1) (#26773)
     add 827864b939 chore: Migrate AlteredSliceTag to typescript (#27030)
     add 847ed3f5b0 refactor: Ensure Flask framework leverages the Flask-SQLAlchemy session (Phase II) (#26909)
     add e4a723d840 fix: try to fix cypress with magic (#27098)
     add a912fafb6d chore(plugins): Update dropdown control for BigNumber with Time Comparison range (#27090)
     add 13f1642c73 feat(plugins): Tooltips on BigNumber with Time Comparison chart (#27092)
     add af577d64b1 fix: Timeseries Y-axis format with contribution mode (#27106)
     add 152cd70b5f fix: upgrade cryptography to major 42 (#27113)
     add 7b59c94827 fix(sqllab): flaky json explore modal due to over-rendering (#26791)
     add b60938be4d chore: bump firebolt-sqlalchemy to support service account auth (#27118)
     add 9514300da5 fix(docker): *-dev tags target right stage from Dockerfile (#27116)
     add 3224ac1818 chore(internet_port): added new ports and removed unnecessary string class (#27078)
     add e43097329f fix: bump grpcio, urllib3 and paramiko (#27124)
     add 753ef69529 feat(storybook): Co-habitating/Upgrading Storybooks to v7 (dependency madness ensues) (#26907)
     add c96e38c07c fix: removes old deprecated sqllab endpoints (#27117)
     add 8235d59e56 fix: gevent upgrade to 23.9.1 (#27112)
     add 3d645fd8e9 refactor: Updates some database columns to MediumText (#27119)
     add 506ea756ad fix: RLS modal overflow (#27128)
     add 60fe58196a fix(pivot-table-v2): Added forgotten translation pivot table v2 (#22840)
     add 04be96b0dc docs(miscellaneous): Export Datasoruces: export datasources exports to ZIP (#27120)
     add d2910b0b87 chore: lower cryptography min version to 41.0.2 (#27129)
     add eabee9dedd chore(hail mary): Update package-lock.json via npm-audit-fix (#26693)
     add 7c7deb960d fix: ID param for DELETE ssh_tunnel endpoint (#27130)
     add acb2d1d6b4 fix: Plain error message when visiting a dashboard via permalink without permissions (#27132)
     add 1ff4f79d5b docs: add Geotab to users list (#27134)
     add cf33a6213d fix: Duplicated toast messages (#27135)
     add dab44c0b6f fix(plugins): Apply dashboard filters to comparison query in BigNumber with Time Comparison chart (#27138)
     add 8749d9f386 chore(tests): Remove unnecessary explicit Flask-SQLAlchemy session expunges (#27136)
     add 1776405903 refactor: Migrate ErrorBoundary to typescript (#27143)
     add 601e62a2ee feat(Alerts and Reports): Modal redesign (#26202)
     add 8dc6cbe206 fix(ci): mypy pre-commit issues (#27161)
     add f7c5773a97 feat: bump FAB to 4.4.0 (#27159)
     add 3eedcb4a2f fix: unlock and bump werkzeug (#27164)
     add c4982d4f29 docs: add Dropit Shopping to users list (#27166)
     add e0f4f34f97 chore: Updates CHANGELOG.md with 3.0.4 data (#27169)
     add b8fc2e57cc feat(adt): add 403 to api response status codes (#27162)
     add ceda51617b fix: CSRF exempt unit_tests (#27168)
     add c50dd3690a chore: Updates CHANGELOG.md with 3.1.1 data (#27170)
     add 986e4178f5 chore: Remove obsolete actor (#27147)
     add 3818da8509 feat(helm): optionally set pod disruption budgets (#27163)
     add 8fbaf84f66 fix(sqllab): typeahead search is broken in db selector (#27181)
     add 7e9361fd5f feat(docs): Adds an "Edit this page on GitHub" button to docs pages (#27176)
     add a35f642998 build(deps-dev): bump ip from 2.0.0 to 2.0.1 in /superset-frontend (#27178)
     add 983a1646c4 fix: Failed to execute importScripts on worker-css (#27191)
     add b4aae48c4b chore(docs): change 'install from scratch' to 'install from PyPI' (#27175)
     add fd4f9ac044 feat: Use standardized controls in Big Number with Time Comparison (#27193)
     add ac8c283df0 fix(dashboard): drag and drop indicator UX (#26699)
     add 744f68d637 build(deps): bump ip from 1.1.8 to 1.1.9 in /superset-frontend/cypress-base (#27180)
     add 2e4f6d3f38 perf(export): export generates unnecessary files content (#26765)
     add cc2f6f1ed9 fix: Translations related to the date range filter (#26074)
     add 00b47ab41f build(deps-dev): bump prettier from 3.0.3 to 3.2.4 in /superset-websocket (#26732)
     add 7330125fe9 fix: docker-compose point to master tag (#27179)
     add 127df24c08 refactor(plugins): Time Comparison Utils (#27145)
     add f1cd8cc263 feat(ci): no more docker builds on PR-related events (#27146)
     add 54037972f2 fix(plugin-chart-period-over-period-kpi): Blank chart when switching from BigNumberTotal (#27203)
     add 2a47edc3a7 fix(releasing): fixes npm script for release validation (#27214)
     add c54fbe6e96 fix: no limit in SELECT * for TOP dbs (#27215)
     add c78ea20bef fix: setting important lower bounds versions on requirements (#27167)
     add 62cf0365e9 fix: bump FAB to 4.4.1 (perf issue) (#27233)
     add 6d8870125f chore: Removes Chromatic workflow and dependencies (#27232)
     add 2c564817f1 fix(sqlglot): Address regressions introduced in #26476 (#27217)
     add 6278315072 fix(reports): fixing unit test  (#27236)
     add 11760d3fbf fix(trino): bumping trino to fix hudi schema fetching (#27213)
     add 1d571ec9e6 feat(jinja): current_user_email macro (#27197)
     add ef4b72724e build(deps): bump @ant-design/icons from 4.7.0 to 5.3.0 in /docs (#26932)
     add ed4b973531 fix(docs site): Opening up CSP for 3rd party frame content. (#27256)
     add 4a1f66a6c7 fix(docs site): CSP changes, take 2 (#27259)
     add 8b4dce71d6 fix: Sorting charts/dashboards makes the applied filters ineffective (#27258)
     add 6447cd0e92 fix(import-datasources): Use "admin" user as default for importing datasources (#27154)
     add e817b48ec9 chore: Replace deprecated command with environment file (#24063)
     add ce9e4b4b77 fix: Inoperable dashboard filter slider when range is <= 1 (#27271)
     add 53e1aeccbe fix: docker CI job doesn't trigger on master (#27261)
     add b03ef55aaa build(deps): bump es5-ext from 0.10.53 to 0.10.63 in /docs (#27264)
     add f17afae428 build(deps): bump re-resizable from 6.6.1 to 6.9.11 in /superset-frontend (#27219)
     add 058d6ff5c0 fix(docs): removing meta tag CSP, poking more holes in htaccess (#27274)
     add 13288bd4bb fix(docs): More CSP touchups (#27275)
     add e0ca07ba52 fix(docs): Even more access in CSP policies! (#27277)
     add c320b95be9 fix(docs): even more CSP adjustments... (#27278)
     add 7a86d5e38e fix(docs): more csp tweaks (#27279)
     add 0468c57629 fix(docs): more CSP tweaks (#27280)
     add 0383bedaba fix(ci): docker builds don't work from remote forks (#27282)
     add dfa15d7649 docs: update CVEs for 3.0.4 and 3.1.1 (#27287)
     add 9900f56670 fix: Navigating to an invalid page index in lists (#27273)
     add d6e8dd114b fix: Revert "chore: Replace deprecated command with environment file (#240… (#27296)
     add 228d27f1f2 chore(ci): run unit tests on script changes (#27297)
     add b16c89944e fix(ci): check file changes for python should include the scripts folders (#27303)
     add 7854b622a3 fix: Data zoom with horizontal orientation (#27291)
     add fa04eec2d5 fix: Incorrect data type on import page (#27307)
     add 234a139fb2 chore: Replace deprecated command with environment file (#27304)
     add d65f64d1ce fix(plugin-chart-echarts): calculate Gauge Chart intervals correctly when min value is set (#27285)
     add 8d245704ef fix(sqllab): invalid dump sql shown after closing tab (#27295)
     add 371f2ab851 chore: bump cryptography minimum to 42.0.4 (#27281)
     add eb2561f80c fix(docs): just a missing backtick (#27312)
     add 9beee92da1 feat(logs context): Adding dashboard id to logs context (#27298)
     add ad3995daf6 fix(dashboard): table chart drag preview overflowing container (#27308)
     add 89d49e55bb feat(embedded-sdk): Add 'urlParams' option to pass query parameters to embedded dashboard (#24408)
     add d5814003dd chore: update redis to >= 4.6.0 (#27250)
     add ad6327db95 fix: Migration for single metric in Big Number with Time Comparison (#27351)
     add 7353055e45 chore(docs): remove filterbox section from Exploring docs page (#27356)
     add 60c486a8af build(deps): bump @ant-design/icons from 5.3.0 to 5.3.1 in /docs (#27331)
     add ae8ec9c2b4 fix(sqllab): Missing empty query result state (#27313)
     add fe2f5a7be9 fix: Heatmap numeric sorting (#27360)
     add 8a46694ce9 fix: Missing SQL Lab permission (#27361)
     add f453d5d7e7 chore: numexpr to fix CVE-2023-39631⁠ (2.8.4 => 2.9.0) (#27187)
     add 5915851ba3 fix(deps): resolving canvg and html2canvas module not found (#27315)
     add ecaf201fd0 build(deps): bump express from 4.18.2 to 4.18.3 in /superset-websocket/utils/client-ws-app (#27337)
     add aca1d107a9 build(deps): bump react-lines-ellipsis from 0.15.0 to 0.15.4 in /superset-frontend (#27342)
     add 3b18706d45 build(deps-dev): bump prettier from 3.2.4 to 3.2.5 in /superset-websocket (#27328)
     add e89ec4d593 feat: datediff in datetime_parser (#27368)
     add 2c00cc534c feat: support to fetch multiple date time in time_range endpoint (#27370)
     add 5de2530e3c feat: Responsive UI for Big Number with Time Comparison (#27375)
     add 231e659b56 fix: Results section in Explore shows an infinite spinner (#27366)
     add 32179f1a85 fix(Alerts & Reports): Fixing bug that resets cron value to default when empty   (#27262)
     add 06cfd97bb9 build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.61.0 to 5.62.0 in /superset-websocket (#27324)
     add 42eeaad25d build(deps-dev): bump @types/jsonwebtoken from 9.0.5 to 9.0.6 in /superset-websocket (#27325)
     add d2f7dec208 feat: Add repo activity stats to README.md (#27372)
     add 721977a474 docs(import_datasources): Remove legacy documentation and update current use (#27290)
     add a3d2e0bf44 fix: improve explore REST api validations (#27395)
     add a4c771e013 fix: Allow only dttm columns in comparison filter in Period over Period chart (#27209)
     add 69d870cb7a feat(translations): Turkish translation files added (#27244)
     add 66bf70172f fix(API): Updating assets via the API should preserve ownership configuration (#27364)
     add 5107cc0fd9 fix(sqllab): Close already removed tab (#27391)
     add a54a24e3b5 fix: Re-enable CI checks on release branches (#27390)
     add ce0b70cc86 fix: typescript errors in 4.0 (#27402)
     add 9ced2552db fix: missing shared color in mixed timeseries (#27403)
     add fde93dcf08 fix(dashboard): Only fetch CSS templates for dashboard header menu when in edit mode (#27411)
     add 89e89de341 fix: SSH Tunnel configuration settings  (#27186)
     add 372cac9527 chore: upgrade setuptools/pip in Dockerfile (#27405)
     add 91781ca045 build(deps): bump @storybook/types from 7.6.13 to 7.6.17 in /superset-frontend (#27347)
     add 6f1cbfa12d build(deps-dev): bump @types/node from 20.11.16 to 20.11.24 in /superset-websocket (#27326)
     add b1adede1ee feat: docker-compose to work off repo Dockerfile (#27434)
     add fbc8943fbd feat: show more information when loading chart (#27255)
     add 2a5b5fe049 build(deps-dev): bump eslint from 8.56.0 to 8.57.0 in /superset-websocket (#27327)
     add 6a7e5c2faf chore: add unit test for `values_for_column` (#27469)
     add 47ae9d4cc3 fix(webpack): remove double-dotted file extensions in webpack config (#27471)
     add 85d0d88fc2 test(Migration to RTL): Refactor ChartTable.test.tsx from Enzyme to RTL (#27429)
     add 735b895dd5 fix: check if guest user modified query (#27484)
     add a75bb7685d chore: Add an extension for Home submenu (#27480)
     add 26d8077e97 chore: improve SQL parsing (#26767)
     add 24cb06285c feat(supersetbot): introduce `supersetbot` as its own npm package, CLI and comment-operated bot (#27046)
     add 2fdf6d7b64 fix: docker builds in master fail (#27503)
     new 40f3607af8 feat: support for KQL in SQLQuery

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (c7ad3d5fa8)
            \
             N -- N -- N   refs/heads/remove-sqlparse-kusto (40f3607af8)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .asf.yaml                                          |      5 +-
 .github/CODEOWNERS                                 |     19 +-
 .github/ISSUE_TEMPLATE/bug-report.yml              |      4 +-
 .github/dependabot.yml                             |    108 +-
 .github/labeler.yml                                |    148 +
 .github/supersetbot/.eslintrc.json                 |     22 +
 .github/supersetbot/README.md                      |     37 +
 .github/supersetbot/jest.config.js                 |      8 +
 .github/supersetbot/package-lock.json              |  11020 ++
 .github/supersetbot/package.json                   |     36 +
 .github/supersetbot/src/cli.js                     |    175 +
 .github/supersetbot/src/context.js                 |    152 +
 .github/supersetbot/src/docker.js                  |    142 +
 .github/supersetbot/src/docker.test.js             |    244 +
 .github/supersetbot/src/git.js                     |    120 +
 .github/supersetbot/src/git_release.js             |     50 +
 .github/supersetbot/src/github.js                  |    252 +
 .github/supersetbot/src/index.js                   |     39 +
 .github/supersetbot/src/index.test.js              |     51 +
 .github/supersetbot/src/metadata.js                |     35 +
 .github/supersetbot/src/supersetbot                |     27 +
 .github/supersetbot/src/utils.js                   |     78 +
 .github/workflows/bashlib.sh                       |      6 +-
 .github/workflows/cancel_duplicates.yml            |      4 +-
 .github/workflows/check_db_migration_confict.yml   |     18 +-
 .github/workflows/chromatic-master.yml             |     72 -
 .github/workflows/codeql-analysis.yml              |     23 +-
 .github/workflows/dependency-review.yml            |      6 +-
 .github/workflows/docker-release.yml               |     63 +-
 .github/workflows/docker.yml                       |    112 +-
 .github/workflows/embedded-sdk-release.yml         |      9 +-
 .github/workflows/embedded-sdk-test.yml            |      9 +-
 .github/workflows/ephemeral-env-pr-close.yml       |     10 +-
 .github/workflows/ephemeral-env.yml                |    133 +-
 .github/workflows/generate-FOSSA-report.yml        |     65 +
 .github/workflows/label-migration-pr.yml           |     25 -
 .github/workflows/labeler.yml                      |     21 +
 .github/workflows/latest-release-tag.yml           |      7 +-
 .github/workflows/license-check.yml                |     59 +-
 .github/workflows/no-hold-label.yml                |     25 +
 .github/workflows/no-op.yml                        |      2 +-
 .github/workflows/pr-lint.yml                      |      4 +-
 .github/workflows/pre-commit.yml                   |     60 +
 .github/workflows/prefer-typescript.yml            |     13 +-
 .github/workflows/release.yml                      |     13 +-
 .github/workflows/superset-applitool-cypress.yml   |      6 +-
 .../workflows/superset-applitools-storybook.yml    |      4 +-
 .github/workflows/superset-cli.yml                 |     16 +-
 .github/workflows/superset-docs-deploy.yml         |     60 +
 .github/workflows/superset-docs-verify.yml         |     39 +
 .github/workflows/superset-docs.yml                |     59 -
 .github/workflows/superset-e2e.yml                 |     17 +-
 .github/workflows/superset-frontend.yml            |     10 +-
 .github/workflows/superset-helm-lint.yml           |     13 +-
 .github/workflows/superset-helm-release.yml        |      5 +-
 .../workflows/superset-python-integrationtest.yml  |     31 +-
 .github/workflows/superset-python-misc.yml         |     61 +-
 .github/workflows/superset-python-presto-hive.yml  |     24 +-
 .github/workflows/superset-python-unittest.yml     |     24 +-
 .github/workflows/superset-translations.yml        |     18 +-
 .github/workflows/superset-websocket.yml           |     12 +-
 .github/workflows/supersetbot.yml                  |     57 +
 .github/workflows/tech-debt.yml                    |     47 +
 .github/workflows/update-monorepo-lockfiles.yml    |     47 +
 .gitignore                                         |      1 +
 .pre-commit-config.yaml                            |      2 +-
 .pylintrc                                          |      2 +-
 .rat-excludes                                      |      8 +-
 CHANGELOG.md                                       |   4126 +-
 CHANGELOG/1.4.1.md                                 |     40 +
 CHANGELOG/1.4.2.md                                 |     32 +
 CHANGELOG/1.5.0.md                                 |    860 +
 CHANGELOG/1.5.1.md                                 |     36 +
 CHANGELOG/1.5.2.md                                 |     48 +
 CHANGELOG/1.5.3.md                                 |     46 +
 CHANGELOG/2.0.0.md                                 |    514 +
 CHANGELOG/2.0.1.md                                 |     82 +
 CHANGELOG/2.1.0.md                                 |   1197 +
 CHANGELOG/2.1.1.md                                 |     67 +
 CHANGELOG/2.1.2.md                                 |     41 +
 CHANGELOG/2.1.3.md                                 |     40 +
 CHANGELOG/3.0.0.md                                 |    792 +
 CHANGELOG/3.0.1.md                                 |     65 +
 CHANGELOG/3.0.2.md                                 |     73 +
 CHANGELOG/3.0.3.md                                 |     80 +
 CHANGELOG/3.0.4.md                                 |     72 +
 CHANGELOG/3.1.0.md                                 |    417 +
 CHANGELOG/3.1.1.md                                 |     75 +
 CONTRIBUTING.md                                    |      4 +-
 Dockerfile                                         |      1 +
 README.md                                          |     10 +
 RELEASING/README.md                                |     41 +-
 RELEASING/email_templates/announce.j2              |     10 +-
 RELEASING/email_templates/result_pmc.j2            |      4 +-
 RELEASING/email_templates/vote_pmc.j2              |      8 +-
 RELEASING/release-notes-1-4/README.md              |      5 +-
 RELEASING/release-notes-1-5/README.md              |      2 +-
 RELEASING/validate_this_release.sh                 |      7 +-
 RELEASING/verify_release.py                        |     18 +
 RESOURCES/FEATURE_FLAGS.md                         |      4 +-
 RESOURCES/INTHEWILD.md                             |      2 +
 RESOURCES/STANDARD_ROLES.md                        |    439 +-
 UPDATING.md                                        |     10 +
 docker-compose-image-tag.yml                       |    101 +
 docker-compose-non-dev.yml                         |     31 +-
 docker-compose.yml                                 |     32 +-
 docker/.env                                        |      2 +
 docker/.env-non-dev                                |     53 -
 docker/docker-entrypoint-initdb.d/examples-init.sh |     19 +
 docker/docker-frontend.sh                          |     18 +-
 dockerize.Dockerfile                               |     17 +
 docs/README.md                                     |      6 +-
 docs/docs/contributing/local-backend.mdx           |      2 +-
 .../creating-charts-dashboards/exploring-data.mdx  |     27 -
 docs/docs/databases/firebolt.mdx                   |     11 +-
 .../docs/databases/installing-database-drivers.mdx |      2 +-
 docs/docs/databases/presto.mdx                     |     11 +
 docs/docs/frequently-asked-questions.mdx           |      2 +-
 docs/docs/installation/alerts-reports.mdx          |     10 +-
 docs/docs/installation/cache.mdx                   |      2 +-
 docs/docs/installation/docker.mdx                  |     93 +
 .../installation/installing-superset-from-pypi.mdx |    156 +
 .../installing-superset-from-scratch.mdx           |    169 -
 .../installing-superset-using-docker-compose.mdx   |    177 +-
 docs/docs/installation/sql-templating.mdx          |     23 +-
 docs/docs/intro.mdx                                |     12 +-
 .../importing-exporting-datasources.mdx            |     32 +-
 docs/docs/security/cves.mdx                        |     10 +
 docs/docusaurus.config.js                          |      6 +-
 docs/package.json                                  |      8 +-
 docs/src/components/SectionHeader.tsx              |      2 +-
 docs/src/pages/community.tsx                       |      1 -
 docs/src/styles/main.less                          |     10 +
 docs/src/theme/DocItem/index.js                    |     57 +
 docs/static/.htaccess                              |      2 +
 docs/static/img/calendar-icon.svg                  |     18 +
 docs/static/img/check-icon.svg                     |     18 +
 docs/static/img/databases/apache-hive.svg          |      2 +-
 docs/static/img/databases/apache-pinot.svg         |     18 +
 docs/static/img/databases/csv.svg                  |     18 +
 docs/yarn.lock                                     |    242 +-
 helm/superset/Chart.yaml                           |      2 +-
 helm/superset/README.md                            |     29 +-
 helm/superset/templates/_helpers.tpl               |     64 +-
 helm/superset/templates/deployment-beat.yaml       |      3 +-
 helm/superset/templates/deployment-flower.yaml     |      3 +-
 helm/superset/templates/deployment-worker.yaml     |      3 +-
 helm/superset/templates/deployment-ws.yaml         |      3 +-
 helm/superset/templates/deployment.yaml            |      3 +-
 helm/superset/templates/pdb-beat.yaml              |     45 +
 helm/superset/templates/pdb-flower.yaml            |     45 +
 helm/superset/templates/pdb-worker.yaml            |     45 +
 helm/superset/templates/pdb-ws.yaml                |     45 +
 helm/superset/templates/pdb.yaml                   |     45 +
 helm/superset/templates/secret-env.yaml            |      7 +
 helm/superset/values.yaml                          |     57 +-
 pytest.ini                                         |      1 +
 requirements/base.in                               |      3 +
 requirements/base.txt                              |     63 +-
 requirements/development.in                        |      1 -
 requirements/development.txt                       |     10 +-
 requirements/docker.in                             |      3 +-
 requirements/docker.txt                            |      6 +-
 requirements/integration.txt                       |      2 +-
 requirements/testing.in                            |      1 +
 requirements/testing.txt                           |     25 +-
 scripts/build_docker.py                            |    294 +
 scripts/ci_check_no_file_changes.sh                |      2 +-
 scripts/docker_build_push.sh                       |    149 -
 scripts/gen_changelog.sh                           |     23 -
 scripts/tag_latest_release.sh                      |     40 +-
 setup.py                                           |     21 +-
 superset-embedded-sdk/README.md                    |      7 +-
 superset-embedded-sdk/package-lock.json            |      4 +-
 superset-embedded-sdk/package.json                 |      2 +-
 superset-embedded-sdk/src/index.ts                 |     18 +-
 superset-frontend/.eslintrc.js                     |     85 +-
 superset-frontend/.prettierignore                  |      2 +-
 superset-frontend/.storybook/main.js               |     33 +-
 superset-frontend/.storybook/preview.jsx           |     12 +-
 superset-frontend/cypress-base/.eslintrc           |      7 +-
 superset-frontend/cypress-base/cypress.config.ts   |      4 +
 .../cypress/e2e/chart_list/list.test.ts            |      7 +
 .../cypress/e2e/dashboard/drillby.test.ts          |     25 +-
 .../cypress/e2e/dashboard/drilltodetail.test.ts    |     14 +-
 .../cypress/e2e/dashboard/editmode.test.ts         |      3 +-
 .../cypress-base/cypress/e2e/dashboard/utils.ts    |     14 +-
 .../cypress/e2e/dashboard_list/list.test.ts        |      7 +
 .../cypress/e2e/explore/control.test.ts            |      2 +-
 .../cypress-base/cypress/e2e/sqllab/query.test.ts  |      3 -
 .../cypress-base/cypress/support/e2e.ts            |      2 +
 .../cypress-base/cypress/utils/index.ts            |     29 +-
 .../cypress-base/cypress/utils/vizPlugins.ts       |      1 +
 superset-frontend/cypress-base/package-lock.json   |     24 +-
 superset-frontend/cypress-base/tsconfig.json       |      3 +-
 superset-frontend/package-lock.json                | 125987 +++++++++---------
 superset-frontend/package.json                     |    130 +-
 .../templates/src/plugin/controlPanel.erb          |      2 +-
 .../superset-ui-chart-controls/CHANGELOG.md        |      3 +-
 .../superset-ui-chart-controls/package.json        |      2 +-
 .../components/ColumnTypeLabel/ColumnTypeLabel.tsx |      8 +-
 .../src/components/Select.tsx                      |      4 +-
 .../superset-ui-chart-controls/src/constants.ts    |      8 +-
 .../superset-ui-chart-controls/src/fixtures.ts     |     10 +-
 .../superset-ui-chart-controls/src/index.ts        |      1 +
 .../src/operators/contributionOperator.ts          |     25 +-
 .../src/operators/sortOperator.ts                  |      2 -
 .../src/operators/timeCompareOperator.ts           |     41 +-
 .../src/operators/timeComparePivotOperator.ts      |     51 +-
 .../src/sections/echartsTimeSeriesQuery.tsx        |     22 +-
 .../src/sections/sections.tsx                      |     20 +-
 .../src/shared-controls/customControls.tsx         |      6 +-
 .../src/shared-controls/mixins.tsx                 |     10 +-
 .../src/shared-controls/sharedControls.tsx         |      7 +-
 .../superset-ui-chart-controls/src/types.ts        |    107 +-
 .../src/utils/getColorFormatters.ts                |     36 +-
 .../test/components/ColumnOption.test.tsx          |      6 +-
 .../test/components/ColumnTypeLabel.test.tsx       |     10 +-
 .../test/operators/sortOperator.test.ts            |     23 -
 .../test/utils/checkColumnType.test.ts             |     12 +-
 .../test/utils/columnChoices.test.tsx              |      6 +-
 .../test/utils/getColorFormatters.test.ts          |     44 +-
 .../test/utils/getTemporalColumns.test.ts          |      2 +-
 .../packages/superset-ui-core/package.json         |     10 +-
 .../src/chart/components/ChartDataProvider.tsx     |      2 +-
 .../src/chart/components/SuperChart.tsx            |      1 -
 .../src/chart/components/createLoadableRenderer.ts |     11 +-
 .../src/chart/models/ChartPlugin.ts                |      2 +-
 .../registries/ChartBuildQueryRegistrySingleton.ts |      2 +-
 .../registries/ChartComponentRegistrySingleton.ts  |      2 +-
 .../registries/ChartMetadataRegistrySingleton.ts   |      2 +-
 .../ChartTransformPropsRegistrySingleton.ts        |      2 +-
 .../superset-ui-core/src/chart/types/Base.ts       |     38 +-
 .../src/color/CategoricalColorScale.ts             |      4 +-
 .../src/color/ColorSchemeRegistry.ts               |      2 +-
 .../src/color/SharedLabelColorSingleton.ts         |     10 +-
 .../src/components/SafeMarkdown.tsx                |      2 +-
 .../src/connection/callApi/parseResponse.ts        |      8 +-
 .../packages/superset-ui-core/src/index.ts         |      1 +
 .../superset-ui-core/src/models/Registry.ts        |     16 +-
 .../src/number-format/NumberFormats.ts             |      6 +-
 .../src/number-format/NumberFormatterRegistry.ts   |      2 +-
 .../superset-ui-core/src/query/api/v1/makeApi.ts   |      9 +-
 .../superset-ui-core/src/query/api/v1/types.ts     |     28 +-
 .../src/query/extractQueryFields.ts                |     18 +-
 .../superset-ui-core/src/query/getXAxis.ts         |      6 -
 .../superset-ui-core/src/query/types/Dashboard.ts  |     12 +-
 .../superset-ui-core/src/query/types/Operator.ts   |      6 +-
 .../superset-ui-core/src/query/types/Query.ts      |     59 +-
 .../src/query/types/QueryFormData.ts               |      4 +-
 .../src/query/types/QueryResponse.ts               |      8 +-
 .../superset-ui-core/src/time-comparison/README.md |     47 +
 .../src/time-comparison/getComparisonFilters.ts    |     67 +
 .../src/time-comparison/getComparisonInfo.ts       |     65 +
 .../superset-ui-core/src/time-comparison/index.ts  |     23 +
 .../superset-ui-core/src/time-comparison/types.ts  |     30 +
 .../src/time-format/TimeFormatterRegistry.ts       |      2 +-
 .../superset-ui-core/src/ui-overrides/types.ts     |     51 +-
 .../superset-ui-core/src/utils/featureFlags.ts     |     69 +-
 .../packages/superset-ui-core/src/utils/html.tsx   |     18 +
 .../superset-ui-core/src/validator/index.ts        |      1 +
 .../src/validator/validateMaxValue.ts              |     18 +
 .../validator/validateTimeComparisonRangeValues.ts |     37 +
 .../test/chart/components/MockChartPlugins.tsx     |      4 +-
 .../test/chart/models/ChartProps.test.ts           |      2 +-
 .../test/color/CategoricalColorScale.test.ts       |      8 +-
 .../test/color/SharedLabelColorSingleton.test.ts   |     10 +-
 .../packages/superset-ui-core/test/fixtures.ts     |      2 +-
 .../superset-ui-core/test/models/Registry.test.ts  |      8 +-
 .../test/query/api/v1/handleError.test.ts          |      2 +-
 .../test/query/buildQueryContext.test.ts           |     25 +-
 .../test/query/extractQueryFields.test.ts          |     20 +-
 .../test/query/normalizeTimeColumn.test.ts         |    397 +-
 .../test/query/types/Dashboard.test.ts             |      4 +-
 .../time-comparison/getComparisonFilters.test.ts   |    144 +
 .../test/time-comparison/getComparisonInfo.test.ts |    174 +
 .../test/time-comparison/index.test.ts             |     32 +
 .../test/utils/featureFlag.test.ts                 |      6 +-
 .../validateTimeComparisonRangeValues.test.ts      |     58 +
 .../packages/superset-ui-demo/.babelrc.json        |     18 +
 .../packages/superset-ui-demo/.storybook/main.js   |     30 +-
 .../superset-ui-demo/.storybook/preview.js         |     20 +-
 .../superset-ui-demo/.storybook/storybook.css      |      6 +-
 .../packages/superset-ui-demo/CHANGELOG.md         |     12 -
 .../packages/superset-ui-demo/package.json         |     26 +-
 .../shared/components/ResizableChartDemo.tsx       |      4 +-
 .../storybook/shared/components/ResizablePanel.tsx |      6 +-
 .../shared/components/createQuery.story.tsx        |    111 +
 .../shared/components/createQueryStory.tsx         |    103 -
 ...s.tsx => LegacyPluginChartCalendar.stories.tsx} |      0
 ...ries.tsx => LegacyPluginChartChord.stories.tsx} |      0
 .../CountryMap.stories.tsx                         |    120 +
 .../CountryMapStories.tsx                          |     97 -
 .../{Stories.jsx => EventFlow.stories.jsx}         |      0
 .../{Stories.tsx => Heatmap.stories.tsx}           |      0
 .../{Stories.tsx => Histogram.stories.tsx}         |      0
 .../{Stories.tsx => Horizon.stories.tsx}           |      0
 .../{Stories.tsx => MapBox.stories.tsx}            |      0
 .../{Stories.tsx => TTest.stories.tsx}             |      0
 ...Stories.tsx => ParallelCoordinates.stories.tsx} |      0
 .../{Stories.tsx => Partition.stories.tsx}         |      0
 .../{Stories.tsx => Rose.stories.tsx}              |      0
 .../{Stories.tsx => SankeyLoop.stories.tsx}        |      0
 .../{Stories.tsx => Sankey.stories.tsx}            |      0
 .../{Stories.tsx => WorldMap.stories.tsx}          |      0
 ...{BigNumberStories.tsx => BigNumber.stories.tsx} |      0
 ...TotalStories.tsx => BigNumberTotal.stories.tsx} |      0
 .../Arc/{Stories.tsx => Arc.stories.tsx}           |      0
 .../Grid/{Stories.tsx => Grid.stories.tsx}         |      0
 .../Hex/{Stories.tsx => Hex.stories.tsx}           |      0
 .../Path/{Stories.tsx => Path.stories.tsx}         |      0
 .../Polygon/{Stories.tsx => Polygon.stories.tsx}   |      0
 .../Scatter/{Stories.tsx => Scatter.stories.tsx}   |      0
 .../Area/{Stories.tsx => NVD3Area.stories.tsx}     |      0
 .../Area/stories/stackedWithBounds.tsx             |      8 +-
 .../Bar/{Stories.tsx => NVD3Bar.stories.tsx}       |      0
 .../{Stories.tsx => NVD3BoxPlot.stories.tsx}       |      0
 .../Bubble/{Stories.tsx => NVD3Bubble.stories.tsx} |      0
 .../Bullet/{Stories.tsx => NVD3Bullet.stories.tsx} |      0
 .../{Stories.tsx => NVD3Compare.stories.tsx}       |      0
 .../{Stories.tsx => NVD3DistBar.stories.tsx}       |      0
 .../Line/{Stories.tsx => NVD3Line.stories.tsx}     |      0
 .../Pie/{Stories.tsx => NVD3Pie.stories.tsx}       |      0
 .../AreaSeries/AreaSeries.stories.tsx              |    198 +
 .../{AreaTimeseries => AreaSeries}/data.ts         |      0
 .../AreaTimeseries/Stories.tsx                     |     88 -
 .../BoxPlot/BoxPolot.stories.tsx                   |     75 +
 .../plugin-chart-echarts/BoxPlot/Stories.tsx       |     63 -
 .../Bubble/BubbleChart.stories.tsx                 |    187 +
 .../plugin-chart-echarts/Bubble/Stories.tsx        |    128 -
 .../plugin-chart-echarts/Funnel/Funnel.stories.tsx |    110 +
 .../plugin-chart-echarts/Funnel/Stories.tsx        |     73 -
 .../plugin-chart-echarts/Gauge/Gauge.stories.tsx   |     53 +
 .../plugins/plugin-chart-echarts/Gauge/Stories.tsx |     54 -
 .../plugin-chart-echarts/Graph/Graph.stories.tsx   |     55 +
 .../plugins/plugin-chart-echarts/Graph/Stories.tsx |     56 -
 .../MixedSeries/MixedSeries.stories.tsx            |    352 +
 .../negativeData.ts                                |      0
 .../MixedTimeseries/Stories.tsx                    |    173 -
 .../plugin-chart-echarts/Pie/Pie.stories.tsx       |    195 +
 .../plugins/plugin-chart-echarts/Pie/Stories.tsx   |    108 -
 .../plugin-chart-echarts/Radar/Radar.stories.tsx   |     68 +
 .../plugins/plugin-chart-echarts/Radar/Stories.tsx |     69 -
 .../plugin-chart-echarts/Sunburst/Stories.tsx      |     57 -
 .../Sunburst/Sunburst.stories.tsx                  |     73 +
 .../plugin-chart-echarts/Timeseries/Stories.tsx    |    172 -
 .../Timeseries/Timeseries.stories.tsx              |    253 +
 .../plugins/plugin-chart-echarts/Tree/Stories.tsx  |     87 -
 .../plugin-chart-echarts/Tree/Tree.stories.tsx     |    143 +
 .../plugin-chart-echarts/Treemap/Stories.tsx       |     63 -
 .../Treemap/Treemap.stories.tsx                    |     84 +
 .../plugin-chart-echarts/Waterfall/Stories.tsx     |     69 -
 .../Waterfall/Waterfall.stories.tsx                |     68 +
 .../PivotTable.stories.tsx                         |     69 +
 .../plugin-chart-pivot-table/PivotTableStories.tsx |     74 -
 .../plugins/plugin-chart-table/Table.stories.tsx   |    202 +
 .../plugins/plugin-chart-table/TableStories.tsx    |    153 -
 .../stories/plugins/plugin-chart-table/testData.ts |      8 +-
 .../plugins/plugin-chart-word-cloud/Stories.tsx    |    167 -
 .../plugin-chart-word-cloud/WordCloud.stories.tsx  |    203 +
 .../ChartDataProvider.stories.tsx                  |    143 +
 .../superset-ui-chart/ChartDataProviderStories.tsx |    125 -
 .../superset-ui-chart/SuperChart.stories.tsx       |    255 +
 .../superset-ui-chart/SuperChartStories.tsx        |    169 -
 ...lettesStories.tsx => ColorPalettes.stories.tsx} |      0
 .../superset-ui-connection/Connection.stories.tsx  |    121 +
 .../superset-ui-connection/ConnectionStories.tsx   |     86 -
 ...gNumberStories.tsx => NumberFormat.stories.tsx} |      0
 .../{ThemeStories.tsx => Theme.stories.tsx}        |      0
 ...imeFormatStories.tsx => TimeFormat.stories.tsx} |      0
 .../superset-ui-switchboard/src/switchboard.ts     |      5 +-
 .../legacy-plugin-chart-calendar/CHANGELOG.md      |      4 -
 .../legacy-plugin-chart-calendar/package.json      |      2 +-
 .../plugins/legacy-plugin-chart-chord/CHANGELOG.md |      4 -
 .../legacy-plugin-chart-chord/src/controlPanel.ts  |      2 -
 .../legacy-plugin-chart-country-map/CHANGELOG.md   |      4 -
 .../scripts/Country Map GeoJSON Generator.ipynb    |   4273 +-
 .../src/controlPanel.ts                            |      2 -
 .../src/countries.ts                               |     58 +-
 .../src/countries/afghanistan.geojson              |     40 +
 .../src/countries/albania.geojson                  |     18 +
 .../src/countries/algeria.geojson                  |     54 +
 .../src/countries/austria.geojson                  |     18 +-
 .../src/countries/china.geojson                    |      4 +-
 .../{costa rica.geojson => costa_rica.geojson}     |      0
 ...republic.geojson => dominican_republic.geojson} |      0
 .../src/countries/egypt.geojson                    |      2 +-
 .../{el salvador.geojson => el_salvador.geojson}   |      0
 .../src/countries/finland.geojson                  |      5 +-
 .../src/countries/france.geojson                   |      5 +
 .../src/countries/france_regions.geojson           |     34 +-
 .../src/countries/germany.geojson                  |      2 +-
 .../src/countries/india.geojson                    |      4 +-
 .../src/countries/iran.geojson                     |      2 +-
 .../src/countries/jordan.geojson                   |      4 +-
 .../src/countries/kuwait.geojson                   |      2 +-
 .../src/countries/malaysia.geojson                 |      2 +-
 .../src/countries/myanmar.geojson                  |      2 +-
 .../src/countries/norway.geojson                   |      2 +-
 .../src/countries/oman.geojson                     |      2 +-
 .../src/countries/pakistan.geojson                 |     16 +-
 .../src/countries/papua new guinea.geojson         |     28 -
 .../src/countries/papua_new_guinea.geojson         |     26 +
 .../src/countries/peru.geojson                     |     53 +-
 .../src/countries/philippines.geojson              |    234 +-
 .../src/countries/poland.geojson                   |      2 +-
 .../src/countries/portugal.geojson                 |      2 +-
 .../{puerto rico.geojson => puerto_rico.geojson}   |      0
 .../src/countries/russia.geojson                   |      2 +-
 ...barthelemy.geojson => saint_barthelemy.geojson} |      0
 .../{saint martin.geojson => saint_martin.geojson} |      0
 .../src/countries/saudi_arabia.geojson             |     20 +-
 .../src/countries/sri_lanka.geojson                |     31 +
 .../src/countries/sweden.geojson                   |      2 +-
 .../src/countries/syria.geojson                    |     12 +-
 .../src/countries/thailand.geojson                 |      2 +-
 .../src/countries/turkey.geojson                   |    162 +-
 .../src/countries/uk.geojson                       |      6 +-
 .../src/countries/ukraine.geojson                  |      3 +-
 .../src/countries/united_arab_emirates.geojson     |     10 +-
 .../src/countries/vietnam.geojson                  |      4 +-
 .../italy_regions.geojson                          |      0
 .../legacy-plugin-chart-event-flow/CHANGELOG.md    |      4 -
 .../src/controlPanel.tsx                           |      2 -
 .../legacy-plugin-chart-heatmap/CHANGELOG.md       |      4 -
 .../legacy-plugin-chart-heatmap/src/Heatmap.js     |     17 +-
 .../src/controlPanel.tsx                           |      2 -
 .../src/transformProps.js                          |     12 +-
 .../legacy-plugin-chart-histogram/CHANGELOG.md     |      4 -
 .../legacy-plugin-chart-histogram/package.json     |      4 +-
 .../src/controlPanel.ts                            |      2 -
 .../legacy-plugin-chart-horizon/CHANGELOG.md       |      4 -
 .../src/controlPanel.ts                            |      2 -
 .../legacy-plugin-chart-map-box/CHANGELOG.md       |      4 -
 .../src/controlPanel.ts                            |      2 -
 .../legacy-plugin-chart-paired-t-test/CHANGELOG.md |      4 -
 .../src/controlPanel.ts                            |      3 +-
 .../CHANGELOG.md                                   |      4 -
 .../src/controlPanel.ts                            |      3 +-
 .../legacy-plugin-chart-partition/CHANGELOG.md     |      4 -
 .../src/controlPanel.tsx                           |      2 -
 .../plugins/legacy-plugin-chart-rose/CHANGELOG.md  |      4 -
 .../legacy-plugin-chart-sankey-loop/package.json   |      2 +-
 .../src/controlPanel.ts                            |      3 +-
 .../legacy-plugin-chart-sankey/CHANGELOG.md        |      4 -
 .../legacy-plugin-chart-sankey/src/controlPanel.ts |      2 -
 .../legacy-plugin-chart-world-map/CHANGELOG.md     |      4 -
 .../legacy-plugin-chart-world-map/src/WorldMap.js  |      2 +-
 .../src/controlPanel.ts                            |     12 +-
 .../legacy-plugin-chart-world-map/src/index.js     |      6 +-
 .../legacy-plugin-chart-world-map/src/utils.ts     |      4 +-
 .../legacy-preset-chart-deckgl/package.json        |      4 +-
 .../src/Multi/controlPanel.ts                      |      2 -
 .../legacy-preset-chart-deckgl/src/index.ts        |      2 +
 .../src/layers/Arc/Arc.tsx                         |      8 +-
 .../src/layers/Arc/controlPanel.ts                 |      3 +-
 .../src/layers/Contour/controlPanel.ts             |      2 -
 .../src/layers/Geojson/Geojson.tsx                 |      4 +-
 .../src/layers/Geojson/controlPanel.ts             |      3 +-
 .../src/layers/Grid/controlPanel.ts                |      2 -
 .../src/layers/Heatmap/Heatmap.tsx                 |      2 +-
 .../src/layers/Heatmap/controlPanel.ts             |      2 -
 .../src/layers/Hex/controlPanel.ts                 |      2 -
 .../src/layers/Path/Path.tsx                       |      2 +-
 .../src/layers/Path/controlPanel.ts                |      3 +-
 .../src/layers/Polygon/Polygon.tsx                 |     10 +-
 .../src/layers/Polygon/controlPanel.ts             |      2 -
 .../src/layers/Scatter/Scatter.tsx                 |     10 +-
 .../src/layers/Scatter/controlPanel.ts             |      3 +-
 .../src/layers/Screengrid/Screengrid.tsx           |      4 +-
 .../src/layers/Screengrid/controlPanel.ts          |      2 -
 .../legacy-preset-chart-deckgl/src/layers/index.ts |      4 +
 .../src/utilities/Shared_DeckGL.jsx                |      4 +-
 .../plugins/legacy-preset-chart-nvd3/CHANGELOG.md  |     12 -
 .../plugins/legacy-preset-chart-nvd3/package.json  |      2 +-
 .../legacy-preset-chart-nvd3/src/Area/index.js     |      2 +-
 .../legacy-preset-chart-nvd3/src/Bar/index.js      |      2 +-
 .../src/Bubble/controlPanel.ts                     |      2 -
 .../legacy-preset-chart-nvd3/src/Bubble/index.js   |      2 +-
 .../src/Bullet/controlPanel.ts                     |      3 +-
 .../src/DistBar/controlPanel.ts                    |      2 -
 .../legacy-preset-chart-nvd3/src/DistBar/index.js  |      2 +-
 .../legacy-preset-chart-nvd3/src/Line/index.js     |      2 +-
 .../legacy-preset-chart-nvd3/src/Pie/index.js      |      2 +-
 .../plugins/plugin-chart-echarts/CHANGELOG.md      |     13 +-
 .../plugins/plugin-chart-echarts/package.json      |      2 +-
 .../BigNumber/BigNumberPeriodOverPeriod/PopKPI.tsx |    225 +
 .../BigNumberPeriodOverPeriod/buildQuery.ts        |     67 +
 .../BigNumberPeriodOverPeriod/controlPanel.ts      |    167 +
 .../BigNumberPeriodOverPeriod/images/thumbnail.png |    Bin 0 -> 10434 bytes
 .../BigNumber/BigNumberPeriodOverPeriod/index.ts   |     51 +
 .../BigNumberPeriodOverPeriod/transformProps.ts    |    160 +
 .../BigNumber/BigNumberPeriodOverPeriod/types.ts   |     64 +
 .../useOverflowDetection.ts                        |     63 +
 .../BigNumberPeriodOverPeriod/utils.test.ts        |     39 +
 .../BigNumber/BigNumberPeriodOverPeriod/utils.ts   |     59 +
 .../src/BigNumber/BigNumberTotal/controlPanel.ts   |      4 +-
 .../src/BigNumber/BigNumberTotal/index.ts          |      2 +-
 .../src/BigNumber/BigNumberTotal/transformProps.ts |      4 +-
 .../src/BigNumber/BigNumberViz.tsx                 |      1 +
 .../BigNumberWithTrendline/controlPanel.tsx        |      8 +-
 .../src/BigNumber/BigNumberWithTrendline/index.ts  |      2 +-
 .../BigNumberWithTrendline/transformProps.ts       |      4 +-
 .../src/BigNumber/CHANGELOG.md                     |     11 +-
 .../plugin-chart-echarts/src/BigNumber/index.ts    |      1 +
 .../src/BoxPlot/controlPanel.ts                    |      1 -
 .../plugin-chart-echarts/src/BoxPlot/index.ts      |      6 +-
 .../plugin-chart-echarts/src/Bubble/index.ts       |      2 +-
 .../src/Bubble/transformProps.ts                   |      4 +-
 .../src/Funnel/controlPanel.tsx                    |     13 +-
 .../plugin-chart-echarts/src/Funnel/index.ts       |      6 +-
 .../src/Funnel/transformProps.ts                   |      6 +-
 .../plugin-chart-echarts/src/Funnel/types.ts       |      6 +-
 .../src/Gauge/controlPanel.tsx                     |      2 -
 .../plugin-chart-echarts/src/Gauge/index.ts        |      6 +-
 .../src/Gauge/transformProps.ts                    |     13 +-
 .../src/Graph/controlPanel.tsx                     |      2 -
 .../plugin-chart-echarts/src/Graph/index.ts        |      6 +-
 .../src/MixedTimeseries/EchartsMixedTimeseries.tsx |      4 +-
 .../src/MixedTimeseries/controlPanel.tsx           |     15 +-
 .../src/MixedTimeseries/index.ts                   |     25 +-
 .../src/MixedTimeseries/transformProps.ts          |     35 +-
 .../plugin-chart-echarts/src/Pie/controlPanel.tsx  |      2 -
 .../plugins/plugin-chart-echarts/src/Pie/index.ts  |      6 +-
 .../src/Radar/controlPanel.tsx                     |      4 +-
 .../plugin-chart-echarts/src/Radar/index.ts        |      6 +-
 .../src/Sunburst/controlPanel.tsx                  |      2 -
 .../plugin-chart-echarts/src/Sunburst/index.ts     |      6 +-
 .../src/Timeseries/Area/controlPanel.tsx           |      1 -
 .../src/Timeseries/Area/index.ts                   |     27 +-
 .../src/Timeseries/EchartsTimeseries.tsx           |      4 +-
 .../src/Timeseries/Regular/Bar/controlPanel.tsx    |     13 +-
 .../src/Timeseries/Regular/Bar/index.ts            |     23 +-
 .../src/Timeseries/Regular/Line/controlPanel.tsx   |      1 -
 .../src/Timeseries/Regular/Line/index.ts           |     27 +-
 .../Timeseries/Regular/Scatter/controlPanel.tsx    |      1 -
 .../src/Timeseries/Regular/Scatter/index.ts        |     27 +-
 .../Timeseries/Regular/SmoothLine/controlPanel.tsx |      1 -
 .../src/Timeseries/Regular/SmoothLine/index.ts     |     27 +-
 .../src/Timeseries/Step/controlPanel.tsx           |      1 -
 .../src/Timeseries/Step/index.ts                   |     27 +-
 .../src/Timeseries/constants.ts                    |     27 +-
 .../plugin-chart-echarts/src/Timeseries/index.ts   |     25 +-
 .../src/Timeseries/transformProps.ts               |     21 +-
 .../src/Timeseries/transformers.ts                 |     43 +-
 .../plugin-chart-echarts/src/Timeseries/types.ts   |      4 +-
 .../plugin-chart-echarts/src/Tree/controlPanel.tsx |      2 -
 .../src/Treemap/controlPanel.tsx                   |      2 -
 .../plugin-chart-echarts/src/Treemap/index.ts      |      6 +-
 .../src/Waterfall/controlPanel.tsx                 |      8 +-
 .../plugin-chart-echarts/src/Waterfall/index.ts    |      2 +-
 .../src/Waterfall/transformProps.ts                |      8 +-
 .../plugins/plugin-chart-echarts/src/index.ts      |      6 +-
 .../plugin-chart-echarts/src/utils/annotation.ts   |      4 +-
 .../plugin-chart-echarts/src/utils/forecast.ts     |     15 +-
 .../plugin-chart-echarts/src/utils/formatters.ts   |     11 +-
 .../plugin-chart-echarts/src/utils/series.ts       |     30 +-
 .../test/Funnel/transformProps.test.ts             |     20 +-
 .../test/Gauge/transformProps.test.ts              |     54 +-
 .../test/MixedTimeseries/buildQuery.test.ts        |    147 +-
 .../test/Timeseries/buildQuery.test.ts             |    106 +-
 .../test/utils/annotation.test.ts                  |      6 +-
 .../test/utils/formatters.test.ts                  |     37 +
 .../plugin-chart-echarts/test/utils/series.test.ts |     74 +-
 .../plugins/plugin-chart-handlebars/package.json   |      2 +-
 .../src/plugin/controlPanel.tsx                    |      2 -
 .../src/plugin/controls/queryMode.tsx              |      4 +-
 .../src/plugin/controls/shared.ts                  |      8 +-
 .../plugins/plugin-chart-pivot-table/CHANGELOG.md  |      7 +-
 .../plugins/plugin-chart-pivot-table/package.json  |      2 +-
 .../src/PivotTableChart.tsx                        |      4 +-
 .../src/plugin/buildQuery.ts                       |      5 -
 .../src/plugin/controlPanel.tsx                    |     61 +-
 .../plugin-chart-pivot-table/src/plugin/index.ts   |      6 +-
 .../src/plugin/transformProps.ts                   |      2 +-
 .../src/react-pivottable/TableRenderers.jsx        |      6 +-
 .../src/react-pivottable/utilities.js              |      3 +-
 .../test/plugin/buildQuery.test.ts                 |     28 +-
 .../plugins/plugin-chart-table/CHANGELOG.md        |      4 -
 .../plugins/plugin-chart-table/package.json        |      6 +-
 .../src/DataTable/hooks/useSticky.tsx              |     16 +-
 .../plugins/plugin-chart-table/src/TableChart.tsx  |      8 +-
 .../plugins/plugin-chart-table/src/buildQuery.ts   |     12 +-
 .../plugin-chart-table/src/controlPanel.tsx        |     88 +-
 .../plugins/plugin-chart-table/src/index.ts        |      6 +-
 .../plugin-chart-table/src/transformProps.ts       |     15 +-
 .../plugins/plugin-chart-table/src/utils/extent.ts |      9 +-
 .../plugin-chart-table/src/utils/formatValue.ts    |     10 +-
 .../plugin-chart-table/test/TableChart.test.tsx    |     42 +
 .../plugin-chart-table/test/buildQuery.test.ts     |     19 +-
 .../plugins/plugin-chart-table/test/testData.ts    |     18 +-
 .../plugins/plugin-chart-word-cloud/CHANGELOG.md   |      4 -
 .../plugins/plugin-chart-word-cloud/package.json   |      2 +-
 .../src/chart/WordCloud.tsx                        |     11 +-
 .../src/plugin/controlPanel.ts                     |      2 -
 .../scripts/eslint-metrics-uploader.js             |    144 +
 .../spec/fixtures/mockDashboardInfo.js             |      2 +-
 .../spec/fixtures/mockNativeFilters.ts             |      4 +-
 superset-frontend/spec/fixtures/mockStore.js       |      4 +-
 superset-frontend/spec/helpers/reducerIndex.ts     |      4 +-
 superset-frontend/src/GlobalStyles.tsx             |      1 +
 superset-frontend/src/SqlLab/actions/sqlLab.js     |     54 +-
 .../src/SqlLab/actions/sqlLab.test.js              |     11 +-
 .../AceEditorWrapper/AceEditorWrapper.test.tsx     |      1 +
 .../SqlLab/components/AceEditorWrapper/index.tsx   |     19 +-
 .../components/AceEditorWrapper/useAnnotations.ts  |     18 +-
 .../src/SqlLab/components/App/App.test.jsx         |    118 -
 .../src/SqlLab/components/App/App.test.tsx         |    131 +
 .../src/SqlLab/components/App/index.jsx            |    232 -
 .../src/SqlLab/components/App/index.tsx            |    251 +
 .../components/KeyboardShortcutButton/index.tsx    |     56 +-
 .../components/QueryHistory/QueryHistory.test.tsx  |      5 +-
 .../src/SqlLab/components/QueryHistory/index.tsx   |     29 +-
 .../QueryLimitSelect/QueryLimitSelect.test.tsx     |     12 +-
 .../SqlLab/components/QueryLimitSelect/index.tsx   |      2 +-
 .../src/SqlLab/components/QueryTable/index.tsx     |      3 +-
 .../SqlLab/components/ResultSet/ResultSet.test.tsx |    333 +-
 .../src/SqlLab/components/ResultSet/index.tsx      |     89 +-
 .../SqlLab/components/SaveDatasetModal/index.tsx   |     10 +-
 .../SqlLab/components/ShareSqlLabQuery/index.tsx   |      4 +-
 .../SqlLab/components/SouthPane/Results.test.tsx   |    135 +
 .../src/SqlLab/components/SouthPane/Results.tsx    |    106 +
 .../SqlLab/components/SouthPane/SouthPane.test.tsx |     90 +-
 .../src/SqlLab/components/SouthPane/index.tsx      |    172 +-
 .../SqlLab/components/SqlEditor/SqlEditor.test.tsx |     50 +-
 .../src/SqlLab/components/SqlEditor/index.tsx      |    180 +-
 .../SqlEditorLeftBar/SqlEditorLeftBar.test.jsx     |    212 -
 .../SqlEditorLeftBar/SqlEditorLeftBar.test.tsx     |    229 +
 .../SqlLab/components/SqlEditorLeftBar/index.tsx   |     27 +-
 .../TabbedSqlEditors/TabbedSqlEditors.test.jsx     |    228 -
 .../TabbedSqlEditors/TabbedSqlEditors.test.tsx     |    178 +
 .../SqlLab/components/TabbedSqlEditors/index.jsx   |    361 -
 .../SqlLab/components/TabbedSqlEditors/index.tsx   |    355 +
 .../components/TableElement/TableElement.test.tsx  |      7 +-
 .../src/SqlLab/components/TableElement/index.tsx   |      4 +-
 superset-frontend/src/SqlLab/fixtures.ts           |     30 +-
 .../middlewares/persistSqlLabStateEnhancer.js      |      2 +-
 .../src/SqlLab/reducers/getInitialState.ts         |      9 +-
 superset-frontend/src/SqlLab/reducers/sqlLab.js    |     41 +-
 .../src/SqlLab/reducers/sqlLab.test.js             |     25 +-
 superset-frontend/src/SqlLab/types.ts              |     33 +-
 .../src/SqlLab/utils/emptyQueryResults.test.js     |     93 -
 .../src/SqlLab/utils/emptyQueryResults.test.ts     |     94 +
 .../src/SqlLab/utils/newQueryTabName.ts            |      4 +-
 .../SqlLab/utils/reduxStateToLocalStorageHelper.js |    122 -
 .../SqlLab/utils/reduxStateToLocalStorageHelper.ts |    130 +
 superset-frontend/src/assets/staticPages/404.html  |      2 +-
 superset-frontend/src/assets/staticPages/500.html  |      2 +-
 .../src/assets/stylesheets/less/variables.less     |      8 +-
 .../src/components/Alert/Alert.stories.tsx         |     25 +-
 .../AlteredSliceTag/AlteredSliceTag.stories.tsx    |      8 -
 .../AlteredSliceTag/AlteredSliceTagMocks.js        |    174 -
 .../AlteredSliceTag/AlteredSliceTagMocks.ts        |    177 +
 .../src/components/AlteredSliceTag/index.jsx       |    226 -
 .../src/components/AlteredSliceTag/index.tsx       |    273 +
 .../AsyncAceEditor/AsyncAceEditor.stories.tsx      |     11 +-
 .../src/components/AsyncAceEditor/index.tsx        |      4 +
 .../AsyncEsmComponent.stories.tsx                  |      8 -
 .../src/components/AuditInfo/ModifiedInfo.test.tsx |     18 +
 .../src/components/AuditInfo/index.tsx             |     18 +
 .../src/components/Badge/Badge.stories.tsx         |     42 +-
 .../src/components/Button/Button.stories.tsx       |     25 +-
 superset-frontend/src/components/Button/index.tsx  |     20 +-
 .../components/ButtonGroup/ButtonGroup.stories.tsx |     11 +-
 .../src/components/Card/Card.stories.tsx           |      8 -
 .../CertifiedBadge/CertifiedBadge.stories.tsx      |      8 -
 superset-frontend/src/components/Chart/Chart.jsx   |     66 +-
 .../Chart/ChartContextMenu/ChartContextMenu.tsx    |     20 +-
 .../Chart/ChartContextMenu/useContextMenu.test.tsx |     64 +-
 .../src/components/Chart/ChartRenderer.jsx         |     10 +-
 .../Chart/DrillBy/DrillByMenuItems.test.tsx        |      2 +-
 .../components/Chart/DrillBy/DrillByMenuItems.tsx  |      2 +-
 .../components/Chart/DrillBy/DrillByModal.test.tsx |     36 +-
 .../src/components/Chart/DrillBy/DrillByModal.tsx  |     32 +-
 .../Chart/DrillBy/useDisplayModeToggle.tsx         |      4 +-
 .../DrillDetail/DrillDetailMenuItems.test.tsx      |      7 +-
 .../Chart/DrillDetail/DrillDetailMenuItems.tsx     |      2 +-
 .../Chart/DrillDetail/DrillDetailModal.test.tsx    |     26 +-
 .../Chart/DrillDetail/DrillDetailModal.tsx         |     63 +-
 .../Chart/DrillDetail/DrillDetailPane.tsx          |     23 +-
 .../src/components/Chart/chartAction.js            |     54 +-
 .../src/components/Chart/chartActions.test.js      |     43 +-
 .../src/components/Chart/chartReducer.ts           |      2 +-
 .../src/components/Collapse/Collapse.stories.tsx   |     11 +-
 .../ConfirmStatusChange.stories.tsx                |      8 -
 .../CopyToClipboard/CopyToClipboard.stories.tsx    |      8 -
 .../components/CronPicker/CronPicker.stories.tsx   |      8 -
 .../src/components/CronPicker/CronPicker.tsx       |    115 +-
 .../DatabaseSelector/DatabaseSelector.test.tsx     |     26 +
 .../src/components/DatabaseSelector/index.tsx      |      4 +-
 .../src/components/Datasource/CollectionTable.tsx  |     16 +-
 .../src/components/Datasource/DatasourceEditor.jsx |     10 +-
 .../src/components/Datasource/DatasourceModal.tsx  |      2 +-
 .../components/DatePicker/DatePicker.stories.tsx   |     16 -
 .../src/components/DesignSystem.stories.mdx        |     25 -
 .../src/components/DesignSystem.stories.tsx        |     54 +
 .../src/components/Dropdown/Dropdown.stories.tsx   |      8 -
 .../src/components/Dropdown/index.tsx              |     10 +-
 .../DropdownButton/DropdownButton.stories.tsx      |      8 -
 .../DropdownContainer/Overview.stories.mdx         |     17 -
 .../DropdownContainer/Overview.stories.tsx         |     47 +
 .../DropdownSelectableIcon.stories.tsx             |      8 -
 .../components/DropdownSelectableIcon/index.tsx    |     33 +-
 .../src/components/DynamicPlugins/index.tsx        |      4 +-
 .../EditableTitle/EditableTitle.stories.tsx        |      8 -
 .../src/components/EmptyState/index.tsx            |      2 +-
 .../ErrorBoundary/ErrorBoundary.test.tsx           |      8 +-
 .../src/components/ErrorBoundary/index.jsx         |     70 -
 .../src/components/ErrorBoundary/index.tsx         |     79 +
 .../ErrorMessage/BasicErrorAlert.test.tsx          |      5 +-
 .../ErrorMessage/DatabaseErrorMessage.test.tsx     |      5 +-
 .../DatasetNotFoundErrorMessage.test.tsx           |      5 +-
 .../components/ErrorMessage/ErrorAlert.test.tsx    |      5 +-
 .../ErrorMessageWithStackTrace.test.tsx            |      5 +-
 .../ErrorMessage/ParameterErrorMessage.test.tsx    |      5 +-
 .../ErrorMessage/TimeoutErrorMessage.test.tsx      |      5 +-
 .../getErrorMessageComponentRegistry.ts            |      2 +-
 .../src/components/FacePile/FacePile.stories.tsx   |      9 +-
 .../FilterableTable/FilterableTable.stories.tsx    |      8 -
 .../src/components/FilterableTable/index.tsx       |      2 +-
 .../src/components/FormRow/FormRow.stories.tsx     |      8 -
 .../components/IconTooltip/IconTooltip.stories.tsx |      8 -
 .../src/components/Icons/Icons.stories.tsx         |      8 -
 .../IndeterminateCheckbox.stories.tsx              |      8 -
 .../components/InfoTooltip/InfoTooltip.stories.tsx |      8 -
 .../src/components/ListView/CardSortSelect.tsx     |     18 +-
 .../src/components/ListView/ListView.test.tsx      |     74 +
 .../src/components/ListView/ListView.tsx           |     17 +-
 superset-frontend/src/components/ListView/types.ts |     60 +-
 superset-frontend/src/components/ListView/utils.ts |      4 +-
 .../ListViewCard/ListViewCard.stories.tsx          |     41 +-
 .../src/components/Loading/Loading.stories.tsx     |     25 +-
 .../src/components/MessageToasts/Toast.tsx         |      6 +-
 .../components/MessageToasts/ToastPresenter.tsx    |      3 +-
 .../src/components/MessageToasts/actions.ts        |      8 +-
 .../MessageToasts/getToastsFromPyFlashMessages.js  |     40 -
 .../getToastsFromPyFlashMessages.test.js           |     48 -
 .../components/MessageToasts/mockMessageToasts.js  |      4 +-
 .../src/components/MessageToasts/types.ts          |      8 +-
 .../src/components/MetadataBar/ContentConfig.tsx   |     16 +-
 .../src/components/MetadataBar/ContentType.ts      |     32 +-
 .../components/MetadataBar/MetadataBar.stories.mdx |    145 -
 .../components/MetadataBar/MetadataBar.stories.tsx |     18 +-
 .../components/MetadataBar/MetadataBar.test.tsx    |     16 +-
 .../MetadataBar/MetadataBarOverview.stories.tsx    |    177 +
 .../src/components/Modal/Modal.stories.tsx         |      8 -
 superset-frontend/src/components/Modal/Modal.tsx   |      7 +-
 .../PopoverDropdown/PopoverDropdown.stories.tsx    |      8 -
 .../PopoverSection/PopoverSection.stories.tsx      |      8 -
 .../RefreshLabel/RefreshLabel.stories.tsx          |      8 -
 .../ResizableSidebar/useStoredSidebarWidth.test.ts |      6 +-
 .../ResizableSidebar/useStoredSidebarWidth.ts      |      4 +-
 .../src/components/Select/AsyncSelect.stories.tsx  |      8 -
 .../src/components/Select/AsyncSelect.test.tsx     |      4 +-
 .../src/components/Select/Select.stories.tsx       |     42 +-
 .../src/components/Slider/Slider.stories.tsx       |      8 -
 .../src/components/Switch/Switch.stories.tsx       |      8 -
 .../src/components/Table/Table.overview.mdx        |    339 -
 .../src/components/Table/Table.stories.tsx         |     46 +-
 .../src/components/Table/Table.test.tsx            |      2 +-
 .../src/components/Table/TableOverview.stories.tsx |    385 +
 .../src/components/Table/VirtualTable.tsx          |      4 +-
 .../ActionCell/ActionCell.overview.mdx             |     69 -
 .../ActionCell/ActionCell.overview.tsx             |     43 +
 .../Table/cell-renderers/ActionCell/index.tsx      |      2 +-
 .../NumericCell/NumericCell.stories.tsx            |      4 +-
 .../NumericCell/NumericCell.test.tsx               |      4 +-
 .../Table/cell-renderers/NumericCell/index.tsx     |     99 +-
 superset-frontend/src/components/Table/index.tsx   |     26 +-
 .../TableSelector/TableSelector.test.tsx           |      2 +-
 .../src/components/TableSelector/index.tsx         |      5 +-
 .../src/components/TableView/TableView.stories.tsx |      8 -
 .../src/components/Tabs/Tabs.stories.tsx           |      8 -
 .../src/components/Tags/TagsList.stories.tsx       |      8 -
 .../src/components/Tags/utils.test.tsx             |     18 +
 superset-frontend/src/components/Tags/utils.tsx    |      9 +-
 .../src/components/TelemetryPixel/index.tsx        |      1 +
 .../src/components/Timer/Timer.stories.tsx         |     11 +-
 .../src/components/TimezoneSelector/index.tsx      |      4 +-
 .../src/components/Tooltip/Tooltip.stories.tsx     |      8 -
 .../TooltipParagraph/TooltipParagraph.stories.tsx  |      8 -
 .../src/components/UiConfigContext/index.tsx       |     31 +-
 .../WarningIconWithTooltip.stories.tsx             |      8 -
 .../src/dashboard/actions/dashboardState.js        |      8 +-
 .../src/dashboard/actions/datasources.ts           |     12 +-
 superset-frontend/src/dashboard/actions/hydrate.js |      8 +-
 .../components/AddSliceCard/AddSliceCard.test.tsx  |      4 +-
 .../components/AddSliceCard/AddSliceCard.tsx       |      2 +-
 .../components/AnchorLink/AnchorLink.stories.tsx   |      8 -
 .../components/CssEditor/CssEditor.test.tsx        |     54 +-
 .../src/dashboard/components/CssEditor/index.jsx   |     25 +-
 .../src/dashboard/components/Dashboard.jsx         |      4 +-
 .../src/dashboard/components/Dashboard.test.jsx    |      1 -
 .../DashboardBuilder/DashboardBuilder.tsx          |    156 +-
 .../DashboardBuilder/DashboardWrapper.test.tsx     |     18 +-
 .../DashboardBuilder/DashboardWrapper.tsx          |     34 +-
 .../components/DashboardEmbedControls.tsx          |    248 -
 .../src/dashboard/components/DashboardGrid.jsx     |    115 +-
 .../dashboard/components/DashboardGrid.test.jsx    |    124 +-
 .../EmbeddedModal/EmbeddedModal.test.tsx           |    172 +
 .../dashboard/components/EmbeddedModal/index.tsx   |    255 +
 .../components/FiltersBadge/FiltersBadge.test.tsx  |    198 +-
 .../Header/HeaderActionsDropdown/index.jsx         |     22 +-
 .../src/dashboard/components/Header/index.jsx      |      4 +-
 .../PropertiesModal/PropertiesModal.test.jsx       |     22 +-
 .../dashboard/components/PropertiesModal/index.tsx |     12 +-
 .../components/RefreshIntervalModal.test.tsx       |    210 +-
 .../src/dashboard/components/SliceAdder.jsx        |      7 +-
 .../SliceHeaderControls.test.tsx                   |    127 +-
 .../components/SliceHeaderControls/index.tsx       |     54 +-
 .../SyncDashboardState/SyncDashboardState.test.tsx |      2 +-
 .../components/SyncDashboardState/index.tsx        |      4 +-
 .../src/dashboard/components/dnd/DragDroppable.jsx |     62 +-
 .../src/dashboard/components/dnd/handleDrop.js     |     32 +-
 .../components/filterscope/FilterScope.test.tsx    |      4 +-
 .../dashboard/components/gridComponents/Chart.jsx  |      4 +-
 .../components/gridComponents/Chart.test.jsx       |    305 +-
 .../components/gridComponents/ChartHolder.tsx      |      9 +-
 .../dashboard/components/gridComponents/Column.jsx |    118 +-
 .../components/gridComponents/Column.test.jsx      |    281 +-
 .../components/gridComponents/Divider.jsx          |     11 +-
 .../components/gridComponents/Divider.test.jsx     |      6 +-
 .../components/gridComponents/DynamicComponent.tsx |      9 +-
 .../dashboard/components/gridComponents/Header.jsx |     10 +-
 .../components/gridComponents/Header.test.jsx      |      6 +-
 .../components/gridComponents/Markdown.jsx         |      9 +-
 .../components/gridComponents/Markdown.test.jsx    |      8 +-
 .../dashboard/components/gridComponents/Row.jsx    |    177 +-
 .../components/gridComponents/Row.test.jsx         |    239 +-
 .../dashboard/components/gridComponents/Tab.jsx    |     93 +-
 .../components/gridComponents/Tab.test.tsx         |     59 +-
 .../dashboard/components/gridComponents/Tabs.jsx   |     19 +-
 .../components/gridComponents/Tabs.test.jsx        |    318 +-
 .../components/gridComponents/Tabs.test.tsx        |     12 +-
 .../gridComponents/new/NewColumn.test.jsx          |     38 +-
 .../gridComponents/new/NewDivider.test.jsx         |     38 +-
 .../gridComponents/new/NewHeader.test.jsx          |     38 +-
 .../components/gridComponents/new/NewRow.test.jsx  |     38 +-
 .../components/gridComponents/new/NewTabs.test.jsx |     38 +-
 .../components/menu/BackgroundStyleDropdown.tsx    |      7 +-
 .../DownloadMenuItems/DownloadAsImage.test.tsx     |     18 +
 .../menu/DownloadMenuItems/DownloadAsImage.tsx     |     18 +
 .../menu/DownloadMenuItems/DownloadAsPdf.test.tsx  |     18 +
 .../menu/DownloadMenuItems/DownloadAsPdf.tsx       |     18 +
 .../DownloadMenuItems/DownloadMenuItems.test.tsx   |     18 +
 .../dashboard/components/menu/HoverMenu.test.tsx   |     10 +-
 .../components/menu/WithPopoverMenu.test.jsx       |    107 +-
 .../FilterBar/ActionButtons/index.tsx              |      4 +-
 .../FilterBar/CrossFilters/CrossFilter.test.tsx    |      2 +-
 .../FilterBar/CrossFilters/CrossFilter.tsx         |      6 +-
 .../FilterBar/CrossFilters/CrossFilterTag.test.tsx |      2 +-
 .../FilterBar/CrossFilters/CrossFilterTag.tsx      |      2 +-
 .../CrossFilters/CrossFilterTitle.test.tsx         |      2 +-
 .../FilterBar/CrossFilters/CrossFilterTitle.tsx    |      2 +-
 .../FilterBar/CrossFilters/VerticalCollapse.tsx    |      2 +-
 .../nativeFilters/FilterBar/FilterBar.test.tsx     |      2 +-
 .../FilterBarSettings/FilterBarSettings.test.tsx   |     29 +-
 .../FilterBar/FilterBarSettings/index.tsx          |     10 +-
 .../FilterBar/FilterControls/FilterControl.tsx     |      8 +-
 .../FilterBar/FilterControls/FilterControls.tsx    |     16 +-
 .../FilterControls/FilterDivider.stories.tsx       |     10 +-
 .../FilterControls/FilterDivider.test.tsx          |      8 +-
 .../FilterBar/FilterControls/FilterDivider.tsx     |      4 +-
 .../FilterBar/FilterControls/FilterValue.tsx       |      6 +-
 .../FilterBar/FiltersDropdownContent/index.tsx     |      4 +-
 .../nativeFilters/FilterBar/Header/index.tsx       |      4 +-
 .../nativeFilters/FilterBar/Horizontal.tsx         |      6 +-
 .../FilterBar/HorizontalFilterBar.test.tsx         |      2 +-
 .../nativeFilters/FilterBar/Vertical.tsx           |      2 +-
 .../components/nativeFilters/FilterBar/index.tsx   |      4 +-
 .../nativeFilters/FilterCard/FilterCard.test.tsx   |      6 +-
 .../nativeFilters/FilterCard/useFilterScope.ts     |      9 +-
 .../FiltersConfigModal/DividerConfigForm.tsx       |      2 +-
 .../FiltersConfigModal/FilterTitlePane.tsx         |      4 +-
 .../FiltersConfigForm/ColumnSelect.tsx             |      4 +-
 .../FiltersConfigForm/DefaultValue.tsx             |      4 +-
 .../FiltersConfigForm/FilterScope/FilterScope.tsx  |     25 +-
 .../FiltersConfigForm/FilterScope/types.ts         |      4 +-
 .../FiltersConfigForm/FiltersConfigForm.tsx        |     10 +-
 .../FiltersConfigForm/constants.ts                 |     16 +-
 .../FiltersConfigForm/getControlItemsMap.test.tsx  |      2 +-
 .../FiltersConfigModal/FiltersConfigForm/utils.ts  |      2 +-
 .../FiltersConfigModal/FiltersConfigModal.tsx      |      2 +-
 .../FiltersConfigModal/NativeFiltersModal.test.tsx |    127 +-
 .../nativeFilters/FiltersConfigModal/state.ts      |      2 +-
 .../nativeFilters/FiltersConfigModal/types.ts      |      4 +-
 .../nativeFilters/FiltersConfigModal/utils.ts      |      6 +-
 .../components/nativeFilters/selectors.ts          |      6 +-
 .../components/nativeFilters/utils.test.ts         |     14 +-
 .../dashboard/components/nativeFilters/utils.ts    |      8 +-
 superset-frontend/src/dashboard/constants.ts       |      1 +
 .../src/dashboard/containers/Dashboard.ts          |      1 -
 .../src/dashboard/containers/DashboardPage.tsx     |      4 +-
 .../src/dashboard/fixtures/mockNativeFilters.ts    |      2 +-
 .../src/dashboard/reducers/datasources.ts          |      4 +-
 superset-frontend/src/dashboard/reducers/types.ts  |      2 +-
 superset-frontend/src/dashboard/types.ts           |      7 +-
 superset-frontend/src/dashboard/util/constants.ts  |      8 +-
 .../src/dashboard/util/crossFilters.test.ts        |     10 +-
 .../src/dashboard/util/crossFilters.ts             |      6 +-
 .../src/dashboard/util/getDashboardUrl.test.js     |     12 +-
 .../src/dashboard/util/getDropPosition.js          |      3 +-
 .../src/dashboard/util/getDropPosition.test.js     |      5 +-
 .../src/dashboard/util/permissionUtils.test.ts     |      4 +-
 .../src/dashboard/util/permissionUtils.ts          |      2 +-
 superset-frontend/src/dataMask/reducer.ts          |      2 +-
 .../src/explore/actions/hydrateExplore.ts          |      2 -
 .../src/explore/actions/saveModalActions.js        |      6 +-
 .../src/explore/components/ChartPills.tsx          |     11 +-
 .../src/explore/components/Control.test.tsx        |     93 +-
 .../explore/components/ControlHeader.stories.tsx   |      8 -
 .../explore/components/ControlPanelsContainer.tsx  |     18 +-
 .../explore/components/DataTableControl/index.tsx  |     10 +-
 .../DataTableControl/useTableColumns.test.ts       |     12 +-
 .../explore/components/DataTableControl/utils.ts   |     15 +-
 .../components/DataTablesPane/DataTablesPane.tsx   |     11 +-
 .../components/DataTableControls.tsx               |      2 +-
 .../DataTablesPane/test/DataTablesPane.test.tsx    |      4 +-
 .../components/DataTablesPane/test/fixture.tsx     |      6 +-
 .../components/DatasourcePanel/fixtures.tsx        |      6 +-
 .../ExploreChartHeader/ExploreChartHeader.test.tsx |      7 +-
 .../components/ExploreChartHeader/index.jsx        |      8 +-
 .../ExploreChartPanel/ExploreChartPanel.test.jsx   |      2 +-
 .../explore/components/ExploreChartPanel/index.jsx |     10 +-
 .../components/ExploreViewContainer/index.jsx      |     12 +-
 .../components/ExportToCSVDropdown/index.tsx       |     14 +-
 .../PropertiesModal/PropertiesModal.test.tsx       |      2 +-
 .../explore/components/PropertiesModal/index.tsx   |      8 +-
 .../RunQueryButton/RunQueryButton.stories.tsx      |      8 -
 .../src/explore/components/SaveModal.test.jsx      |    261 +-
 .../components/controls/BoundsControl.stories.tsx  |      8 -
 .../ColorSchemeControl/ColorSchemeControl.test.tsx |      2 +-
 .../ColumnConfigControl/ColumnConfigPopover.tsx    |      6 +-
 .../ColumnConfigControl/ControlForm/index.tsx      |      2 +-
 .../controls/ColumnConfigControl/constants.tsx     |      9 +-
 .../controls/ColumnConfigControl/types.ts          |      2 +-
 .../ConditionalFormattingControl.tsx               |     20 +-
 .../FormattingPopoverContent.tsx                   |     40 +-
 .../controls/ConditionalFormattingControl/types.ts |     25 +-
 .../ContourControl/ContourPopoverControl.tsx       |     20 +-
 .../components/controls/ContourControl/types.ts    |     18 +
 .../components/controls/CurrencyControl/index.ts   |     18 +
 .../DatasourceControl/DatasourceControl.test.tsx   |      4 +-
 .../controls/DateFilterControl/DateFilterLabel.tsx |     16 +-
 .../DateFilterControl/components/CommonFrame.tsx   |      7 +-
 .../DateFilterControl/components/DateLabel.tsx     |      4 +-
 .../tests/DateFilterLabel.test.tsx                 |     10 +-
 .../controls/DateFilterControl/utils/constants.ts  |     24 +-
 .../DateFilterControl/utils/dateFilterUtils.ts     |      4 +-
 .../DndColumnSelectControl/ColumnSelectPopover.tsx |      4 +-
 .../DndFilterSelect.test.tsx                       |      6 +-
 .../DndColumnSelectControl/DndFilterSelect.tsx     |     57 +-
 .../DndColumnSelectControl/DndMetricSelect.tsx     |      8 +-
 .../FilterControl/AdhocFilter/AdhocFilter.test.js  |     92 +-
 .../controls/FilterControl/AdhocFilter/index.js    |     27 +-
 .../AdhocFilterControl/AdhocFilterControl.test.jsx |     28 +-
 .../FilterControl/AdhocFilterControl/index.jsx     |     20 +-
 .../AdhocFilterEditPopover.test.jsx                |     14 +-
 .../FilterControl/AdhocFilterEditPopover/index.jsx |      6 +-
 ...AdhocFilterEditPopoverSimpleTabContent.test.tsx |     84 +-
 .../index.tsx                                      |     65 +-
 .../AdhocFilterEditPopoverSqlTabContent.test.jsx   |     10 +-
 .../AdhocFilterEditPopoverSqlTabContent/index.jsx  |      8 +-
 .../AdhocFilterOption/AdhocFilterOption.test.tsx   |      6 +-
 .../AdhocFilterPopoverTrigger.test.tsx             |      6 +-
 .../controls/FilterControl/adhocFilterType.js      |     10 +-
 .../components/controls/FilterControl/types.ts     |     12 +-
 .../controls/FilterControl/utils/translateToSQL.ts |      2 +-
 .../utils/useDatePickerInAdhocFilter.tsx           |      4 +-
 .../utils/useDatePickerInAdhocfilter.test.ts       |     21 -
 .../utils/useGetTimeRangeLabel.test.ts             |     30 +-
 .../FilterControl/utils/useGetTimeRangeLabel.tsx   |     12 +-
 .../FixedOrMetricControl.test.tsx                  |      5 +-
 .../controls/MetricControl/AdhocMetric.js          |      4 +-
 .../MetricControl/AdhocMetricEditPopoverTitle.tsx  |    135 +-
 .../TimeSeriesColumnControl.test.tsx               |     13 +
 .../controls/TimeSeriesColumnControl/index.jsx     |      4 +-
 .../controls/VizTypeControl/FastVizSwitcher.tsx    |      3 +-
 .../VizTypeControl/VizTypeControl.test.tsx         |     45 +-
 .../controls/VizTypeControl/VizTypeGallery.tsx     |     35 +-
 .../useExploreAdditionalActionsMenu/index.jsx      |      2 +-
 superset-frontend/src/explore/constants.ts         |     97 +-
 .../controlUtils/standardizedFormData.test.ts      |      4 +-
 .../src/explore/exploreUtils/exploreUtils.test.jsx |      2 +-
 .../exploreUtils/getSimpleSQLExpression.test.ts    |      4 +-
 .../src/explore/exploreUtils/index.js              |      2 +-
 .../src/features/alerts/AlertReportModal.test.jsx  |    367 -
 .../src/features/alerts/AlertReportModal.test.tsx  |    632 +-
 .../src/features/alerts/AlertReportModal.tsx       |   1298 +-
 .../alerts/buildErrorTooltipMessage.test.tsx       |     70 +
 .../features/alerts/buildErrorTooltipMessage.tsx   |     49 +
 .../components/AlertReportCronScheduler.test.tsx   |    153 -
 .../alerts/components/AlertReportCronScheduler.tsx |    161 +-
 .../alerts/components/NotificationMethod.tsx       |     31 +-
 .../src/features/alerts/components/NumberInput.tsx |     52 +
 .../src/features/alerts/components/StyledPanel.tsx |     75 +
 .../alerts/components/ValidatedPanelHeader.tsx     |     53 +
 superset-frontend/src/features/alerts/types.ts     |     22 +-
 .../src/features/charts/ChartCard.tsx              |      2 +-
 .../src/features/dashboards/DashboardCard.tsx      |      2 +-
 .../DatabaseConnectionForm/CommonParameters.tsx    |     35 +-
 .../DatabaseConnectionForm/EncryptedField.tsx      |     14 +-
 .../DatabaseConnectionForm/TableCatalog.tsx        |      3 +-
 .../DatabaseConnectionForm/ValidatedInputField.tsx |      2 +-
 .../DatabaseModal/DatabaseConnectionForm/index.tsx |    130 +-
 .../databases/DatabaseModal/SSHTunnelForm.tsx      |     22 +-
 .../DatabaseModal/SSHTunnelSwitch.test.tsx         |    162 +
 .../databases/DatabaseModal/SSHTunnelSwitch.tsx    |     82 +-
 .../databases/DatabaseModal/index.test.tsx         |     71 +-
 .../src/features/databases/DatabaseModal/index.tsx |    319 +-
 superset-frontend/src/features/databases/types.ts  |     88 +-
 .../AddDataset/DatasetPanel/DatasetPanel.test.tsx  |      5 +-
 .../AddDataset/DatasetPanel/DatasetPanel.tsx       |      4 +-
 .../AddDataset/EditDataset/UsageTab/index.tsx      |      4 +-
 .../features/datasets/AddDataset/Header/index.tsx  |      2 +-
 .../datasets/AddDataset/LeftPanel/index.tsx        |      8 +-
 .../src/features/datasets/AddDataset/types.tsx     |     16 +-
 .../DatasetMetadataBar.skipped-stories.tsx         |      8 -
 .../datasets/metadataBar/useDatasetMetadataBar.tsx |     18 +-
 .../src/features/home/ActivityTable.tsx            |      6 +-
 .../src/features/home/ChartTable.test.tsx          |    130 +-
 superset-frontend/src/features/home/ChartTable.tsx |      8 +-
 .../src/features/home/DashboardTable.tsx           |      8 +-
 superset-frontend/src/features/home/Menu.tsx       |     16 +-
 .../src/features/home/RightMenu.test.tsx           |      6 +-
 superset-frontend/src/features/home/RightMenu.tsx  |     10 +-
 superset-frontend/src/features/home/types.ts       |      6 +-
 .../features/queries/QueryPreviewModal.test.tsx    |      2 +-
 .../features/queries/SavedQueryPreviewModal.tsx    |    133 +-
 .../HeaderReportDropdown/index.test.tsx            |      2 +-
 .../ReportModal/HeaderReportDropdown/index.tsx     |     12 +-
 .../reports/ReportModal/ReportModal.test.tsx       |      2 +-
 .../src/features/reports/ReportModal/index.tsx     |     25 +-
 superset-frontend/src/features/reports/types.ts    |      8 +-
 .../features/rls/RowLevelSecurityModal.test.tsx    |      6 +-
 .../src/features/rls/RowLevelSecurityModal.tsx     |     92 +-
 superset-frontend/src/features/rls/constants.ts    |      2 +-
 superset-frontend/src/features/rls/types.ts        |      4 +-
 superset-frontend/src/features/tags/TagCard.tsx    |      2 +-
 superset-frontend/src/features/tags/tags.ts        |     16 +-
 .../components/Range/RangeFilterPlugin.stories.tsx |      4 +-
 .../components/Range/RangeFilterPlugin.test.tsx    |      8 +-
 .../filters/components/Range/RangeFilterPlugin.tsx |     20 +-
 .../src/filters/components/Range/buildQuery.ts     |      4 +-
 .../src/filters/components/Range/controlPanel.ts   |      2 -
 .../src/filters/components/Range/index.ts          |      2 +-
 .../Select/SelectFilterPlugin.stories.tsx          |     14 +-
 .../components/Select/SelectFilterPlugin.test.tsx  |      2 +-
 .../components/Select/SelectFilterPlugin.tsx       |      6 +-
 .../filters/components/Select/buildQuery.test.ts   |      4 +-
 .../src/filters/components/Select/buildQuery.ts    |      4 +-
 .../src/filters/components/Select/controlPanel.ts  |      3 -
 .../src/filters/components/Select/index.ts         |      2 +-
 .../src/filters/components/Time/index.ts           |      2 +-
 .../TimeColumn/TimeColumnFilterPlugin.tsx          |      2 +-
 .../src/filters/components/TimeColumn/index.ts     |      2 +-
 .../src/filters/components/TimeGrain/index.ts      |      2 +-
 superset-frontend/src/filters/utils.test.ts        |     88 +-
 superset-frontend/src/filters/utils.ts             |     14 +-
 .../src/hooks/apiResources/apiResources.test.ts    |     16 +-
 .../src/hooks/apiResources/apiResources.ts         |     22 +-
 .../src/hooks/apiResources/queryApi.ts             |      5 +-
 superset-frontend/src/middleware/asyncEvent.ts     |      2 +-
 .../src/pages/AlertReportList/index.tsx            |     12 +-
 superset-frontend/src/pages/AllEntities/index.tsx  |      6 +-
 .../src/pages/AnnotationLayerList/index.tsx        |      6 +-
 superset-frontend/src/pages/Chart/Chart.test.tsx   |     13 +-
 superset-frontend/src/pages/Chart/index.tsx        |      6 +-
 superset-frontend/src/pages/ChartList/index.tsx    |     32 +-
 .../src/pages/CssTemplateList/index.tsx            |      6 +-
 .../src/pages/DashboardList/index.tsx              |     26 +-
 superset-frontend/src/pages/DatabaseList/index.tsx |     12 +-
 .../src/pages/DatasetCreation/index.tsx            |      8 +-
 superset-frontend/src/pages/DatasetList/index.tsx  |     16 +-
 .../src/pages/ExecutionLogList/index.tsx           |      4 +-
 superset-frontend/src/pages/Home/Home.test.tsx     |     16 +
 superset-frontend/src/pages/Home/index.tsx         |     15 +-
 .../QueryHistoryList/QueryHistoryList.test.tsx     |      2 +-
 .../src/pages/QueryHistoryList/index.tsx           |     52 +-
 .../src/pages/RowLevelSecurityList/index.tsx       |     10 +-
 .../src/pages/SavedQueryList/index.tsx             |     16 +-
 superset-frontend/src/pages/SqlLab/index.tsx       |      2 +-
 superset-frontend/src/pages/Tags/index.tsx         |     30 +-
 superset-frontend/src/types/ace-builds.ts          |     19 +
 superset-frontend/src/types/bootstrapTypes.ts      |      1 +
 superset-frontend/src/types/dom-to-pdf.d.ts        |     25 +-
 superset-frontend/src/utils/downloadAsPdf.ts       |      1 +
 .../src/utils/isDashboardVirtualizationEnabled.ts  |     14 +-
 .../src/utils/localStorageHelpers.test.ts          |      6 +-
 superset-frontend/src/utils/localStorageHelpers.ts |     32 +-
 superset-frontend/src/utils/simpleFilterToAdhoc.ts |      8 +-
 superset-frontend/src/utils/urlUtils.ts            |      2 +-
 superset-frontend/src/views/CRUD/hooks.ts          |      7 +-
 superset-frontend/src/views/CRUD/types.ts          |     36 +-
 superset-frontend/src/views/routes.tsx             |      2 +-
 superset-frontend/src/views/store.ts               |      2 +-
 .../src/visualizations/TimeTable/TimeTable.jsx     |      6 +-
 .../src/visualizations/TimeTable/transformProps.ts |     13 +-
 .../src/visualizations/presets/MainPreset.js       |     14 +-
 superset-frontend/webpack.config.js                |     41 +-
 superset-frontend/webpack.proxy-config.js          |     12 +-
 superset-websocket/package-lock.json               |    393 +-
 superset-websocket/package.json                    |     15 +-
 superset-websocket/utils/client-ws-app/bin/www     |      8 +-
 .../utils/client-ws-app/package-lock.json          |    352 +-
 .../utils/client-ws-app/package.json               |      2 +-
 superset/advanced_data_type/api.py                 |      4 +
 .../advanced_data_type/plugins/internet_port.py    |     11 +-
 superset/charts/api.py                             |      2 +-
 superset/charts/data/api.py                        |     22 +-
 superset/charts/schemas.py                         |      8 +
 superset/cli/importexport.py                       |     46 +-
 superset/commands/base.py                          |     20 +-
 superset/commands/chart/delete.py                  |      5 +-
 superset/commands/chart/export.py                  |     17 +-
 superset/commands/chart/importers/v1/__init__.py   |     10 +-
 superset/commands/chart/importers/v1/utils.py      |     26 +-
 superset/commands/chart/update.py                  |      5 +-
 superset/commands/dashboard/delete.py              |      5 +-
 superset/commands/dashboard/export.py              |     66 +-
 superset/commands/dashboard/importers/v0.py        |      2 +-
 .../commands/dashboard/importers/v1/__init__.py    |     19 +-
 superset/commands/dashboard/importers/v1/utils.py  |     25 +-
 superset/commands/dashboard/update.py              |      9 +-
 superset/commands/database/create.py               |     68 +-
 superset/commands/database/delete.py               |      5 +-
 superset/commands/database/export.py               |     28 +-
 .../commands/database/importers/v1/__init__.py     |      8 +-
 superset/commands/database/importers/v1/utils.py   |     13 +-
 superset/commands/database/ssh_tunnel/create.py    |     34 +-
 .../commands/database/ssh_tunnel/exceptions.py     |      4 +
 superset/commands/database/ssh_tunnel/update.py    |     25 +-
 superset/commands/database/test_connection.py      |     45 +-
 superset/commands/database/update.py               |     79 +-
 superset/commands/database/validate_sql.py         |     11 +-
 superset/commands/dataset/export.py                |     25 +-
 superset/commands/dataset/importers/v0.py          |     57 +-
 superset/commands/dataset/importers/v1/__init__.py |      8 +-
 superset/commands/dataset/importers/v1/utils.py    |     27 +-
 superset/commands/dataset/update.py                |      5 +-
 superset/commands/explore/get.py                   |     11 +-
 superset/commands/explore/parameters.py            |      3 -
 superset/commands/export/assets.py                 |    127 +-
 superset/commands/export/models.py                 |     17 +-
 superset/commands/importers/v1/__init__.py         |      6 +-
 superset/commands/importers/v1/assets.py           |     21 +-
 superset/commands/importers/v1/examples.py         |     11 +-
 superset/commands/query/export.py                  |     34 +-
 superset/commands/query/importers/v1/__init__.py   |      8 +-
 superset/commands/query/importers/v1/utils.py      |     13 +-
 superset/commands/report/alert.py                  |     17 +-
 superset/commands/report/update.py                 |      7 +-
 superset/commands/utils.py                         |     21 +-
 superset/common/query_object.py                    |      2 +-
 superset/common/utils/time_range_utils.py          |      3 +
 superset/config.py                                 |     10 +-
 superset/connectors/sqla/models.py                 |     17 +-
 superset/connectors/sqla/utils.py                  |      6 +-
 superset/constants.py                              |      8 +
 superset/daos/base.py                              |     13 +-
 superset/dashboards/api.py                         |      2 +-
 superset/databases/api.py                          |     23 +-
 superset/databases/filters.py                      |      4 +-
 superset/datasets/api.py                           |      2 +-
 superset/db_engine_specs/README.md                 |     19 +
 superset/db_engine_specs/base.py                   |      6 +-
 superset/db_engine_specs/databend.py               |     10 +
 superset/db_engine_specs/drill.py                  |     37 +-
 superset/db_engine_specs/gsheets.py                |      6 +-
 superset/db_engine_specs/pinot.py                  |      2 +-
 superset/db_engine_specs/postgres.py               |      6 +-
 superset/errors.py                                 |      1 +
 superset/examples/supported_charts_dashboard.py    |     36 +-
 superset/explore/api.py                            |      3 +-
 superset/extensions/__init__.py                    |      2 +-
 superset/importexport/api.py                       |      2 +-
 superset/initialization/__init__.py                |      2 -
 superset/jinja_context.py                          |     35 +-
 superset/legacy.py                                 |     17 +-
 superset/migrations/env.py                         |      1 +
 superset/migrations/shared/constraints.py          |     16 +
 superset/migrations/shared/migrate_viz/base.py     |      3 +-
 superset/migrations/shared/native_filters.py       |     16 +
 ...d83218_migrate_can_view_and_drill_permission.py |     85 +
 ...14-43_17fcea065655_change_text_to_mediumtext.py |     87 +
 ...47_be1b217cd8cd_big_number_kpi_single_metric.py |     93 +
 superset/models/annotations.py                     |      5 +-
 superset/models/core.py                            |      4 +-
 superset/models/dashboard.py                       |      4 +-
 superset/models/helpers.py                         |     33 +-
 superset/models/slice.py                           |      4 +-
 superset/models/sql_lab.py                         |     12 +-
 superset/queries/saved_queries/api.py              |      2 +-
 superset/reports/models.py                         |     13 +-
 superset/security/manager.py                       |    156 +-
 superset/sql_parse.py                              |     92 +-
 superset/sqllab/api.py                             |      8 +-
 superset/sqllab/execution_context_convertor.py     |      1 -
 superset/sqllab/schemas.py                         |      2 +-
 superset/tables/models.py                          |      2 +-
 superset/tags/api.py                               |      3 +
 superset/tags/filters.py                           |     39 +
 superset/tags/models.py                            |     24 +-
 superset/tasks/cache.py                            |      4 +-
 superset/translations/de/LC_MESSAGES/messages.json |    530 +-
 superset/translations/de/LC_MESSAGES/messages.po   |  10907 +-
 superset/translations/en/LC_MESSAGES/messages.json |    553 +-
 superset/translations/en/LC_MESSAGES/messages.po   |  10564 +-
 superset/translations/es/LC_MESSAGES/messages.json |    421 +-
 superset/translations/es/LC_MESSAGES/messages.po   |  10762 +-
 superset/translations/fr/LC_MESSAGES/messages.json |   4777 +-
 superset/translations/fr/LC_MESSAGES/messages.po   |  17221 ++-
 superset/translations/it/LC_MESSAGES/messages.json |    439 +-
 superset/translations/it/LC_MESSAGES/messages.po   |  10669 +-
 superset/translations/ja/LC_MESSAGES/messages.json |    429 +-
 superset/translations/ja/LC_MESSAGES/messages.po   |  10684 +-
 superset/translations/ko/LC_MESSAGES/messages.json |    439 +-
 superset/translations/ko/LC_MESSAGES/messages.po   |  10662 +-
 superset/translations/messages.pot                 |  10582 +-
 superset/translations/nl/LC_MESSAGES/messages.json |    493 +-
 superset/translations/nl/LC_MESSAGES/messages.po   |  10711 +-
 superset/translations/pt/LC_MESSAGES/messages.json |    425 +-
 superset/translations/pt/LC_MESSAGES/messages.po   |  10712 +-
 .../translations/pt_BR/LC_MESSAGES/messages.json   |    513 +-
 .../translations/pt_BR/LC_MESSAGES/messages.po     |  11023 +-
 superset/translations/ru/LC_MESSAGES/messages.json |    504 +-
 superset/translations/ru/LC_MESSAGES/messages.po   |  10872 +-
 superset/translations/sk/LC_MESSAGES/messages.json |    529 +-
 superset/translations/sk/LC_MESSAGES/messages.po   |  10559 +-
 superset/translations/sl/LC_MESSAGES/messages.json |   2390 +-
 superset/translations/sl/LC_MESSAGES/messages.po   |  13316 +-
 superset/translations/tr/LC_MESSAGES/messages.json |   4864 +
 superset/translations/tr/LC_MESSAGES/messages.po   |  19372 +++
 superset/translations/uk/LC_MESSAGES/messages.json |   6108 +
 superset/translations/uk/LC_MESSAGES/messages.po   |  20432 +++
 superset/translations/zh/LC_MESSAGES/messages.json |    412 +-
 superset/translations/zh/LC_MESSAGES/messages.po   |  10755 +-
 superset/utils/core.py                             |     22 +
 superset/utils/dashboard_import_export.py          |      7 +-
 superset/utils/date_parser.py                      |    119 +-
 superset/utils/decorators.py                       |     19 +
 superset/utils/dict_import_export.py               |      7 +-
 superset/utils/pandas_postprocessing/prophet.py    |      7 +-
 superset/views/api.py                              |     35 +-
 superset/views/core.py                             |     25 +-
 superset/views/database/forms.py                   |      3 +-
 superset/views/datasource/views.py                 |      4 +-
 superset/views/sql_lab/views.py                    |     35 +-
 superset/viz.py                                    |      2 +-
 tests/integration_tests/async_events/api_tests.py  |      4 +-
 tests/integration_tests/base_tests.py              |     31 +-
 tests/integration_tests/cache_tests.py             |      4 +-
 tests/integration_tests/celery_tests.py            |      2 +-
 tests/integration_tests/charts/api_tests.py        |     80 +-
 tests/integration_tests/charts/commands_tests.py   |      8 +-
 tests/integration_tests/charts/data/api_tests.py   |     83 +-
 tests/integration_tests/conftest.py                |     21 +-
 tests/integration_tests/core_tests.py              |     39 +-
 tests/integration_tests/dashboards/api_tests.py    |     41 +-
 .../integration_tests/dashboards/commands_tests.py |      6 +-
 .../dashboards/filter_state/api_tests.py           |      7 +-
 .../dashboards/permalink/api_tests.py              |      6 +-
 .../dashboards/security/security_rbac_tests.py     |     24 +-
 .../dashboards/superset_factory_util.py            |     58 +-
 tests/integration_tests/databases/api_tests.py     |    227 +-
 .../integration_tests/databases/commands_tests.py  |      6 +-
 .../ssh_tunnel/commands/commands_tests.py          |     17 -
 tests/integration_tests/datasets/api_tests.py      |     56 +-
 tests/integration_tests/datasets/commands_tests.py |      6 +-
 tests/integration_tests/datasource/api_tests.py    |     10 +
 tests/integration_tests/datasource_tests.py        |     45 +-
 .../db_engine_specs/databricks_tests.py            |     16 +-
 .../db_engine_specs/hive_tests.py                  |     14 +-
 .../db_engine_specs/pinot_tests.py                 |     14 +
 .../db_engine_specs/postgres_tests.py              |     24 +-
 .../db_engine_specs/presto_tests.py                |     14 +-
 .../integration_tests/dict_import_export_tests.py  |     26 +-
 tests/integration_tests/explore/api_tests.py       |     30 +-
 .../explore/form_data/api_tests.py                 |     10 +-
 .../explore/form_data/commands_tests.py            |     32 +-
 .../explore/permalink/api_tests.py                 |      3 +-
 .../explore/permalink/commands_tests.py            |     32 +-
 tests/integration_tests/fixtures/datasource.py     |     13 +-
 tests/integration_tests/import_export_tests.py     |     15 +-
 .../importexport/commands_tests.py                 |      2 +-
 .../key_value/commands/fixtures.py                 |      3 +-
 ...migrate_can_view_and_drill_permission__tests.py |     61 +
 .../queries/saved_queries/commands_tests.py        |      8 +-
 tests/integration_tests/reports/api_tests.py       |     87 +
 .../security/guest_token_security_tests.py         |     30 +-
 .../security/migrate_roles_tests.py                |      5 +-
 .../security/row_level_security_tests.py           |     29 +-
 tests/integration_tests/security_tests.py          |     47 +-
 tests/integration_tests/sql_lab/api_tests.py       |     59 +
 tests/integration_tests/sqla_models_tests.py       |     30 +-
 tests/integration_tests/sqllab_tests.py            |      6 +-
 tests/integration_tests/superset_test_config.py    |      3 +-
 .../superset_test_config_thumbnails.py             |      1 -
 tests/integration_tests/tags/api_tests.py          |     46 +
 tests/integration_tests/tasks/test_cache.py        |     58 +
 tests/integration_tests/test_jinja_context.py      |     38 +-
 tests/integration_tests/utils/get_dashboards.py    |      5 +-
 tests/integration_tests/utils_tests.py             |      4 +-
 .../charts/commands/importers/v1/import_test.py    |    164 +-
 tests/unit_tests/charts/dao/dao_tests.py           |     16 +-
 tests/unit_tests/charts/test_post_processing.py    |      7 +-
 tests/unit_tests/columns/test_models.py            |      7 +-
 tests/unit_tests/commands/export_test.py           |     22 +-
 .../commands/importers/v1/assets_test.py           |     34 +-
 tests/unit_tests/commands/test_utils.py            |    118 +
 tests/unit_tests/config_test.py                    |      4 +-
 tests/unit_tests/conftest.py                       |      4 +-
 tests/unit_tests/dao/dataset_test.py               |      5 +-
 tests/unit_tests/dao/queries_test.py               |     80 +-
 tests/unit_tests/dao/tag_test.py                   |      2 +-
 .../commands/importers/v1/import_test.py           |    152 +-
 tests/unit_tests/dashboards/dao_tests.py           |     12 +-
 tests/unit_tests/databases/api_test.py             |     50 +-
 .../databases/commands/importers/v1/import_test.py |     27 +-
 tests/unit_tests/databases/dao/dao_tests.py        |     10 +-
 .../databases/ssh_tunnel/commands/create_test.py   |     53 +-
 .../databases/ssh_tunnel/commands/delete_test.py   |     10 +-
 .../databases/ssh_tunnel/commands/update_test.py   |     43 +-
 tests/unit_tests/databases/ssh_tunnel/dao_tests.py |      4 +-
 tests/unit_tests/datasets/api_tests.py             |      8 +-
 tests/unit_tests/datasets/commands/export_test.py  |     65 +-
 .../datasets/commands/importers/v1/import_test.py  |     58 +-
 tests/unit_tests/datasets/dao/dao_tests.py         |     10 +-
 tests/unit_tests/datasource/dao_tests.py           |     14 +-
 tests/unit_tests/db_engine_specs/test_base.py      |     77 +-
 tests/unit_tests/db_engine_specs/test_druid.py     |     16 +-
 tests/unit_tests/db_engine_specs/test_pinot.py     |      8 +-
 tests/unit_tests/extensions/test_sqlalchemy.py     |     27 +-
 tests/unit_tests/fixtures/bash_mock.py             |     12 -
 tests/unit_tests/forms_tests.py                    |     16 +
 tests/unit_tests/importexport/api_test.py          |      9 +-
 tests/unit_tests/jinja_context_test.py             |      9 +
 tests/unit_tests/legacy_tests.py                   |     13 +-
 .../migrations/viz/time_related_fields_test.py     |     12 +-
 tests/unit_tests/models/helpers_test.py            |     72 +
 tests/unit_tests/queries/dao_test.py               |      4 +-
 tests/unit_tests/scripts/docker_build.py           |    291 +
 tests/unit_tests/scripts/docker_build_push_test.py |     50 -
 .../unit_tests/scripts/tag_latest_release_test.py  |     20 +-
 tests/unit_tests/security/api_test.py              |      6 +-
 tests/unit_tests/security/manager_test.py          |    290 +
 tests/unit_tests/sql_lab_test.py                   |     10 +-
 tests/unit_tests/sql_parse_tests.py                |     31 +-
 tests/unit_tests/tables/test_models.py             |     10 +-
 tests/unit_tests/tags/__init__.py                  |     16 +
 tests/unit_tests/tags/commands/create_test.py      |     45 +-
 tests/unit_tests/tags/commands/update_test.py      |     39 +-
 tests/unit_tests/tasks/test_async_queries.py       |     16 +
 tests/unit_tests/test_jinja_context.py             |     38 +
 tests/unit_tests/utils/date_parser_tests.py        |    104 +
 tests/unit_tests/utils/docker.py                   |    269 +
 tests/unit_tests/utils/test_decorators.py          |     45 +
 1357 files changed, 251560 insertions(+), 176998 deletions(-)
 create mode 100644 .github/labeler.yml
 create mode 100644 .github/supersetbot/.eslintrc.json
 create mode 100644 .github/supersetbot/README.md
 create mode 100644 .github/supersetbot/jest.config.js
 create mode 100644 .github/supersetbot/package-lock.json
 create mode 100644 .github/supersetbot/package.json
 create mode 100755 .github/supersetbot/src/cli.js
 create mode 100644 .github/supersetbot/src/context.js
 create mode 100644 .github/supersetbot/src/docker.js
 create mode 100644 .github/supersetbot/src/docker.test.js
 create mode 100644 .github/supersetbot/src/git.js
 create mode 100644 .github/supersetbot/src/git_release.js
 create mode 100644 .github/supersetbot/src/github.js
 create mode 100644 .github/supersetbot/src/index.js
 create mode 100644 .github/supersetbot/src/index.test.js
 create mode 100644 .github/supersetbot/src/metadata.js
 create mode 100755 .github/supersetbot/src/supersetbot
 create mode 100644 .github/supersetbot/src/utils.js
 delete mode 100644 .github/workflows/chromatic-master.yml
 create mode 100644 .github/workflows/generate-FOSSA-report.yml
 delete mode 100644 .github/workflows/label-migration-pr.yml
 create mode 100644 .github/workflows/labeler.yml
 create mode 100644 .github/workflows/no-hold-label.yml
 create mode 100644 .github/workflows/pre-commit.yml
 create mode 100644 .github/workflows/superset-docs-deploy.yml
 create mode 100644 .github/workflows/superset-docs-verify.yml
 delete mode 100644 .github/workflows/superset-docs.yml
 create mode 100644 .github/workflows/supersetbot.yml
 create mode 100644 .github/workflows/tech-debt.yml
 create mode 100644 .github/workflows/update-monorepo-lockfiles.yml
 create mode 100644 CHANGELOG/1.4.1.md
 create mode 100644 CHANGELOG/1.4.2.md
 create mode 100644 CHANGELOG/1.5.0.md
 create mode 100644 CHANGELOG/1.5.1.md
 create mode 100644 CHANGELOG/1.5.2.md
 create mode 100644 CHANGELOG/1.5.3.md
 create mode 100644 CHANGELOG/2.0.0.md
 create mode 100644 CHANGELOG/2.0.1.md
 create mode 100644 CHANGELOG/2.1.0.md
 create mode 100644 CHANGELOG/2.1.1.md
 create mode 100644 CHANGELOG/2.1.2.md
 create mode 100644 CHANGELOG/2.1.3.md
 create mode 100644 CHANGELOG/3.0.0.md
 create mode 100644 CHANGELOG/3.0.1.md
 create mode 100644 CHANGELOG/3.0.2.md
 create mode 100644 CHANGELOG/3.0.3.md
 create mode 100644 CHANGELOG/3.0.4.md
 create mode 100644 CHANGELOG/3.1.0.md
 create mode 100644 CHANGELOG/3.1.1.md
 create mode 100644 docker-compose-image-tag.yml
 delete mode 100644 docker/.env-non-dev
 create mode 100644 docs/docs/installation/docker.mdx
 create mode 100644 docs/docs/installation/installing-superset-from-pypi.mdx
 delete mode 100644 docs/docs/installation/installing-superset-from-scratch.mdx
 create mode 100644 docs/src/theme/DocItem/index.js
 create mode 100644 helm/superset/templates/pdb-beat.yaml
 create mode 100644 helm/superset/templates/pdb-flower.yaml
 create mode 100644 helm/superset/templates/pdb-worker.yaml
 create mode 100644 helm/superset/templates/pdb-ws.yaml
 create mode 100644 helm/superset/templates/pdb.yaml
 create mode 100755 scripts/build_docker.py
 delete mode 100755 scripts/docker_build_push.sh
 delete mode 100755 scripts/gen_changelog.sh
 create mode 100644 superset-frontend/packages/superset-ui-core/src/time-comparison/README.md
 create mode 100644 superset-frontend/packages/superset-ui-core/src/time-comparison/getComparisonFilters.ts
 create mode 100644 superset-frontend/packages/superset-ui-core/src/time-comparison/getComparisonInfo.ts
 create mode 100644 superset-frontend/packages/superset-ui-core/src/time-comparison/index.ts
 create mode 100644 superset-frontend/packages/superset-ui-core/src/time-comparison/types.ts
 create mode 100644 superset-frontend/packages/superset-ui-core/src/validator/validateTimeComparisonRangeValues.ts
 create mode 100644 superset-frontend/packages/superset-ui-core/test/time-comparison/getComparisonFilters.test.ts
 create mode 100644 superset-frontend/packages/superset-ui-core/test/time-comparison/getComparisonInfo.test.ts
 create mode 100644 superset-frontend/packages/superset-ui-core/test/time-comparison/index.test.ts
 create mode 100644 superset-frontend/packages/superset-ui-core/test/validator/validateTimeComparisonRangeValues.test.ts
 create mode 100644 superset-frontend/packages/superset-ui-demo/.babelrc.json
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/shared/components/createQuery.story.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/shared/components/createQueryStory.tsx
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-calendar/{Stories.tsx => LegacyPluginChartCalendar.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-chord/{Stories.tsx => LegacyPluginChartChord.stories.tsx} (100%)
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-country-map/CountryMap.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-country-map/CountryMapStories.tsx
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-event-flow/{Stories.jsx => EventFlow.stories.jsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-heatmap/{Stories.tsx => Heatmap.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-histogram/{Stories.tsx => Histogram.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-horizon/{Stories.tsx => Horizon.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-map-box/{Stories.tsx => MapBox.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-paired-t-test/{Stories.tsx => TTest.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-parallel-coordinates/{Stories.tsx => ParallelCoordinates.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-partition/{Stories.tsx => Partition.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-rose/{Stories.tsx => Rose.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-sankey-loop/{Stories.tsx => SankeyLoop.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-sankey/{Stories.tsx => Sankey.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-plugin-chart-world-map/{Stories.tsx => WorldMap.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-big-number/BigNumber/{BigNumberStories.tsx => BigNumber.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-big-number/BigNumberTotal/{BigNumberTotalStories.tsx => BigNumberTotal.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Arc/{Stories.tsx => Arc.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Grid/{Stories.tsx => Grid.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Hex/{Stories.tsx => Hex.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Path/{Stories.tsx => Path.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Polygon/{Stories.tsx => Polygon.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-deckgl/Scatter/{Stories.tsx => Scatter.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Area/{Stories.tsx => NVD3Area.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Bar/{Stories.tsx => NVD3Bar.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/BoxPlot/{Stories.tsx => NVD3BoxPlot.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Bubble/{Stories.tsx => NVD3Bubble.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Bullet/{Stories.tsx => NVD3Bullet.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Compare/{Stories.tsx => NVD3Compare.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/DistBar/{Stories.tsx => NVD3DistBar.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Line/{Stories.tsx => NVD3Line.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/legacy-preset-chart-nvd3/Pie/{Stories.tsx => NVD3Pie.stories.tsx} (100%)
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/AreaSeries/AreaSeries.stories.tsx
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/{AreaTimeseries => AreaSeries}/data.ts (100%)
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/AreaTimeseries/Stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/BoxPlot/BoxPolot.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/BoxPlot/Stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Bubble/BubbleChart.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Bubble/Stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Funnel/Funnel.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Funnel/Stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Gauge/Gauge.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Gauge/Stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Graph/Graph.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Graph/Stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/MixedSeries/MixedSeries.stories.tsx
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/{MixedTimeseries => MixedSeries}/negativeData.ts (100%)
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/MixedTimeseries/Stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Pie/Pie.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Pie/Stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Radar/Radar.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Radar/Stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Sunburst/Stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Sunburst/Sunburst.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Timeseries/Stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Timeseries/Timeseries.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Tree/Stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Tree/Tree.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Treemap/Stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Treemap/Treemap.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Waterfall/Stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-echarts/Waterfall/Waterfall.stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-pivot-table/PivotTable.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-pivot-table/PivotTableStories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-table/Table.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-table/TableStories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-word-cloud/Stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/plugins/plugin-chart-word-cloud/WordCloud.stories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/superset-ui-chart/ChartDataProvider.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/superset-ui-chart/ChartDataProviderStories.tsx
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/superset-ui-chart/SuperChart.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/superset-ui-chart/SuperChartStories.tsx
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/superset-ui-color/{ColorPallettesStories.tsx => ColorPalettes.stories.tsx} (100%)
 create mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/superset-ui-connection/Connection.stories.tsx
 delete mode 100644 superset-frontend/packages/superset-ui-demo/storybook/stories/superset-ui-connection/ConnectionStories.tsx
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/superset-ui-number-format/{BigNumberStories.tsx => NumberFormat.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/superset-ui-style/{ThemeStories.tsx => Theme.stories.tsx} (100%)
 rename superset-frontend/packages/superset-ui-demo/storybook/stories/superset-ui-time-format/{TimeFormatStories.tsx => TimeFormat.stories.tsx} (100%)
 create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/afghanistan.geojson
 create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/albania.geojson
 create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/algeria.geojson
 rename superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/{costa rica.geojson => costa_rica.geojson} (100%)
 rename superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/{dominican republic.geojson => dominican_republic.geojson} (100%)
 rename superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/{el salvador.geojson => el_salvador.geojson} (100%)
 delete mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/papua new guinea.geojson
 create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/papua_new_guinea.geojson
 copy superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/{puerto rico.geojson => puerto_rico.geojson} (100%)
 rename superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/{saint barthelemy.geojson => saint_barthelemy.geojson} (100%)
 rename superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/{saint martin.geojson => saint_martin.geojson} (100%)
 mode change 100755 => 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/saudi_arabia.geojson
 create mode 100644 superset-frontend/plugins/legacy-plugin-chart-country-map/src/countries/sri_lanka.geojson
 copy superset-frontend/plugins/legacy-plugin-chart-country-map/src/{countries => countries_custom}/italy_regions.geojson (100%)
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/PopKPI.tsx
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/buildQuery.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/controlPanel.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/images/thumbnail.png
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/index.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/transformProps.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/types.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/useOverflowDetection.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/utils.test.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/src/BigNumber/BigNumberPeriodOverPeriod/utils.ts
 create mode 100644 superset-frontend/plugins/plugin-chart-echarts/test/utils/formatters.test.ts
 create mode 100644 superset-frontend/scripts/eslint-metrics-uploader.js
 delete mode 100644 superset-frontend/src/SqlLab/components/App/App.test.jsx
 create mode 100644 superset-frontend/src/SqlLab/components/App/App.test.tsx
 delete mode 100644 superset-frontend/src/SqlLab/components/App/index.jsx
 create mode 100644 superset-frontend/src/SqlLab/components/App/index.tsx
 create mode 100644 superset-frontend/src/SqlLab/components/SouthPane/Results.test.tsx
 create mode 100644 superset-frontend/src/SqlLab/components/SouthPane/Results.tsx
 delete mode 100644 superset-frontend/src/SqlLab/components/SqlEditorLeftBar/SqlEditorLeftBar.test.jsx
 create mode 100644 superset-frontend/src/SqlLab/components/SqlEditorLeftBar/SqlEditorLeftBar.test.tsx
 delete mode 100644 superset-frontend/src/SqlLab/components/TabbedSqlEditors/TabbedSqlEditors.test.jsx
 create mode 100644 superset-frontend/src/SqlLab/components/TabbedSqlEditors/TabbedSqlEditors.test.tsx
 delete mode 100644 superset-frontend/src/SqlLab/components/TabbedSqlEditors/index.jsx
 create mode 100644 superset-frontend/src/SqlLab/components/TabbedSqlEditors/index.tsx
 delete mode 100644 superset-frontend/src/SqlLab/utils/emptyQueryResults.test.js
 create mode 100644 superset-frontend/src/SqlLab/utils/emptyQueryResults.test.ts
 delete mode 100644 superset-frontend/src/SqlLab/utils/reduxStateToLocalStorageHelper.js
 create mode 100644 superset-frontend/src/SqlLab/utils/reduxStateToLocalStorageHelper.ts
 delete mode 100644 superset-frontend/src/components/AlteredSliceTag/AlteredSliceTagMocks.js
 create mode 100644 superset-frontend/src/components/AlteredSliceTag/AlteredSliceTagMocks.ts
 delete mode 100644 superset-frontend/src/components/AlteredSliceTag/index.jsx
 create mode 100644 superset-frontend/src/components/AlteredSliceTag/index.tsx
 delete mode 100644 superset-frontend/src/components/DesignSystem.stories.mdx
 create mode 100644 superset-frontend/src/components/DesignSystem.stories.tsx
 delete mode 100644 superset-frontend/src/components/DropdownContainer/Overview.stories.mdx
 create mode 100644 superset-frontend/src/components/DropdownContainer/Overview.stories.tsx
 delete mode 100644 superset-frontend/src/components/ErrorBoundary/index.jsx
 create mode 100644 superset-frontend/src/components/ErrorBoundary/index.tsx
 create mode 100644 superset-frontend/src/components/ListView/ListView.test.tsx
 delete mode 100644 superset-frontend/src/components/MessageToasts/getToastsFromPyFlashMessages.js
 delete mode 100644 superset-frontend/src/components/MessageToasts/getToastsFromPyFlashMessages.test.js
 delete mode 100644 superset-frontend/src/components/MetadataBar/MetadataBar.stories.mdx
 create mode 100644 superset-frontend/src/components/MetadataBar/MetadataBarOverview.stories.tsx
 delete mode 100644 superset-frontend/src/components/Table/Table.overview.mdx
 create mode 100644 superset-frontend/src/components/Table/TableOverview.stories.tsx
 delete mode 100644 superset-frontend/src/components/Table/cell-renderers/ActionCell/ActionCell.overview.mdx
 create mode 100644 superset-frontend/src/components/Table/cell-renderers/ActionCell/ActionCell.overview.tsx
 delete mode 100644 superset-frontend/src/dashboard/components/DashboardEmbedControls.tsx
 create mode 100644 superset-frontend/src/dashboard/components/EmbeddedModal/EmbeddedModal.test.tsx
 create mode 100644 superset-frontend/src/dashboard/components/EmbeddedModal/index.tsx
 delete mode 100644 superset-frontend/src/features/alerts/AlertReportModal.test.jsx
 create mode 100644 superset-frontend/src/features/alerts/buildErrorTooltipMessage.test.tsx
 create mode 100644 superset-frontend/src/features/alerts/buildErrorTooltipMessage.tsx
 delete mode 100644 superset-frontend/src/features/alerts/components/AlertReportCronScheduler.test.tsx
 create mode 100644 superset-frontend/src/features/alerts/components/NumberInput.tsx
 create mode 100644 superset-frontend/src/features/alerts/components/StyledPanel.tsx
 create mode 100644 superset-frontend/src/features/alerts/components/ValidatedPanelHeader.tsx
 create mode 100644 superset-frontend/src/features/databases/DatabaseModal/SSHTunnelSwitch.test.tsx
 create mode 100644 superset-frontend/src/types/ace-builds.ts
 create mode 100644 superset/migrations/versions/2024-02-07_17-13_87d38ad83218_migrate_can_view_and_drill_permission.py
 create mode 100644 superset/migrations/versions/2024-02-14_14-43_17fcea065655_change_text_to_mediumtext.py
 create mode 100644 superset/migrations/versions/2024-03-01_10-47_be1b217cd8cd_big_number_kpi_single_metric.py
 create mode 100644 superset/tags/filters.py
 create mode 100644 superset/translations/tr/LC_MESSAGES/messages.json
 create mode 100644 superset/translations/tr/LC_MESSAGES/messages.po
 create mode 100644 superset/translations/uk/LC_MESSAGES/messages.json
 create mode 100644 superset/translations/uk/LC_MESSAGES/messages.po
 create mode 100644 tests/integration_tests/migrations/87d38ad83218_migrate_can_view_and_drill_permission__tests.py
 create mode 100644 tests/integration_tests/tasks/test_cache.py
 create mode 100644 tests/unit_tests/commands/test_utils.py
 create mode 100644 tests/unit_tests/models/helpers_test.py
 create mode 100644 tests/unit_tests/scripts/docker_build.py
 delete mode 100644 tests/unit_tests/scripts/docker_build_push_test.py
 create mode 100644 tests/unit_tests/utils/docker.py


(superset) 01/01: feat: support for KQL in SQLQuery

Posted by be...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

beto pushed a commit to branch remove-sqlparse-kusto
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 40f3607af8ad69a51e6b9ea07a8c411f2c712257
Author: Beto Dealmeida <ro...@dealmeida.net>
AuthorDate: Wed Jan 24 10:02:47 2024 -0500

    feat: support for KQL in SQLQuery
---
 superset/sql_parse.py               | 389 ++++++++++++++++++++++++++++++------
 tests/unit_tests/sql_parse_tests.py |  88 +++++++-
 2 files changed, 408 insertions(+), 69 deletions(-)

diff --git a/superset/sql_parse.py b/superset/sql_parse.py
index 58dc210e2b..29a7e3425d 100644
--- a/superset/sql_parse.py
+++ b/superset/sql_parse.py
@@ -17,12 +17,15 @@
 
 # pylint: disable=too-many-lines
 
+from __future__ import annotations
+
+import enum
 import logging
 import re
 import urllib.parse
 from collections.abc import Iterable, Iterator
 from dataclasses import dataclass
-from typing import Any, cast, Optional, Union
+from typing import Any, cast, Generic, TypeVar
 
 import sqlglot
 import sqlparse
@@ -138,7 +141,7 @@ class CtasMethod(StrEnum):
     VIEW = "VIEW"
 
 
-def _extract_limit_from_query(statement: TokenList) -> Optional[int]:
+def _extract_limit_from_query(statement: TokenList) -> int | None:
     """
     Extract limit clause from SQL statement.
 
@@ -159,9 +162,7 @@ def _extract_limit_from_query(statement: TokenList) -> Optional[int]:
     return None
 
 
-def extract_top_from_query(
-    statement: TokenList, top_keywords: set[str]
-) -> Optional[int]:
+def extract_top_from_query(statement: TokenList, top_keywords: set[str]) -> int | None:
     """
     Extract top clause value from SQL statement.
 
@@ -185,7 +186,7 @@ def extract_top_from_query(
     return top
 
 
-def get_cte_remainder_query(sql: str) -> tuple[Optional[str], str]:
+def get_cte_remainder_query(sql: str) -> tuple[str | None, str]:
     """
     parse the SQL and return the CTE and rest of the block to the caller
 
@@ -193,7 +194,7 @@ def get_cte_remainder_query(sql: str) -> tuple[Optional[str], str]:
     :return: CTE and remainder block to the caller
 
     """
-    cte: Optional[str] = None
+    cte: str | None = None
     remainder = sql
     stmt = sqlparse.parse(sql)[0]
 
@@ -211,7 +212,7 @@ def get_cte_remainder_query(sql: str) -> tuple[Optional[str], str]:
     return cte, remainder
 
 
-def strip_comments_from_sql(statement: str, engine: Optional[str] = None) -> str:
+def strip_comments_from_sql(statement: str, engine: str | None = None) -> str:
     """
     Strips comments from a SQL statement, does a simple test first
     to avoid always instantiating the expensive ParsedQuery constructor
@@ -235,8 +236,8 @@ class Table:
     """
 
     table: str
-    schema: Optional[str] = None
-    catalog: Optional[str] = None
+    schema: str | None = None
+    catalog: str | None = None
 
     def __str__(self) -> str:
         """
@@ -255,7 +256,7 @@ class Table:
 
 def extract_tables_from_statement(
     statement: exp.Expression,
-    dialect: Optional[Dialects],
+    dialect: Dialects | None,
 ) -> set[Table]:
     """
     Extract all table references in a single statement.
@@ -326,82 +327,151 @@ def is_cte(source: exp.Table, scope: Scope) -> bool:
     return source.name in ctes_in_scope
 
 
-class SQLScript:
+# To avoid unnecessary parsing/formatting of queries, the statement has the concept of
+# an "internal representation", which is the AST of the SQL statement. For most of the
+# engines supported by Superset this is `sqlglot.exp.Expression`, but there is a special
+# case: KustoKQL uses a different syntax and there are no Python parsed, so we store the
+# AST as a string (the original query), and manipulate it with regular expressions.
+InternalRepresentation = TypeVar("InternalRepresentation")
+
+# The base type. This helps type checking the `split_query` method correctly, since each
+# derived class has a more specific return type (the class itself). This will no longer
+# be needed once Python 3.11 is the smalled version supported. See SIP 673 for more
+# information: https://peps.python.org/pep-0673/
+TBaseSQLStatement = TypeVar("TBaseSQLStatement")
+
+
+class BaseSQLStatement(Generic[InternalRepresentation]):
     """
-    A SQL script, with 0+ statements.
+    Base class for SQL statements.
+
+    The class can be instantiated with a string representation of the query or, for
+    efficiency reasons, with a pre-parsed AST. This is useful with `sqlglot.parse`,
+    which will split a query in multiple already parsed statements.
+
+    The `engine` parameters comes from the `engine` attribute in a Superset DB engine
+    spec.
     """
 
     def __init__(
         self,
-        query: str,
-        engine: Optional[str] = None,
+        statement: str | InternalRepresentation,
+        engine: str,
     ):
-        dialect = SQLGLOT_DIALECTS.get(engine) if engine else None
+        self._parsed: InternalRepresentation = (
+            self._parse_statement(statement, engine)
+            if isinstance(statement, str)
+            else statement
+        )
+        self.engine = engine
+        self.tables = self._extract_tables_from_statement(self._parsed, self.engine)
 
-        self.statements = [
-            SQLStatement(statement, engine=engine)
-            for statement in parse(query, dialect=dialect)
-            if statement
-        ]
+    @classmethod
+    def split_query(
+        cls: type[TBaseSQLStatement],
+        query: str,
+        engine: str,
+    ) -> list[TBaseSQLStatement]:
+        """
+        Split a query into multiple instantiated statements.
+
+        This is a helper function to split a full SQL query into multiple
+        `BaseSQLStatement` instances. It's used by `SQLScript` when instantiating the
+        statements within a query.
+        """
+        raise NotImplementedError()
+
+    @classmethod
+    def _parse_statement(
+        cls,
+        statement: str,
+        engine: str,
+    ) -> InternalRepresentation:
+        """
+        Parse a string containing a single SQL statement, and returns the parsed AST.
+
+        Derived classes should not assume that `statement` contains a single statement,
+        and MUST explicitly validate that. Since this validation is parser dependent the
+        responsibility is left to the children classes.
+        """
+        raise NotImplementedError()
+
+    @classmethod
+    def _extract_tables_from_statement(
+        cls,
+        parsed: InternalRepresentation,
+        engine: str,
+    ) -> set[Table]:
+        """
+        Extract all table references in a given statement.
+        """
+        raise NotImplementedError()
 
     def format(self, comments: bool = True) -> str:
         """
-        Pretty-format the SQL query.
+        Format the statement, optionally ommitting comments.
         """
-        return ";\n".join(statement.format(comments) for statement in self.statements)
+        raise NotImplementedError()
 
-    def get_settings(self) -> dict[str, str]:
+    def get_settings(self) -> dict[str, str | bool]:
         """
-        Return the settings for the SQL query.
+        Return any settings set by the statement.
 
-            >>> statement = SQLScript("SET foo = 'bar'; SET foo = 'baz'")
-            >>> statement.get_settings()
-            {"foo": "'baz'"}
+        For example, for this statement:
+
+            sql> SET foo = 'bar';
 
+        The method should return `{"foo": "'bar'"}`. Note the single quotes.
         """
-        settings: dict[str, str] = {}
-        for statement in self.statements:
-            settings.update(statement.get_settings())
+        raise NotImplementedError()
 
-        return settings
+    def __str__(self) -> str:
+        return self.format()
 
 
-class SQLStatement:
+class SQLStatement(BaseSQLStatement[exp.Expression]):
     """
     A SQL statement.
 
-    This class provides helper methods to manipulate and introspect SQL.
+    This class is used for all engines with dialects that can be parsed using sqlglot.
     """
 
     def __init__(
         self,
-        statement: Union[str, exp.Expression],
-        engine: Optional[str] = None,
+        statement: str | exp.Expression,
+        engine: str,
     ):
-        dialect = SQLGLOT_DIALECTS.get(engine) if engine else None
-
-        if isinstance(statement, str):
-            try:
-                self._parsed = self._parse_statement(statement, dialect)
-            except ParseError as ex:
-                raise SupersetParseError(statement, engine) from ex
-        else:
-            self._parsed = statement
+        self._dialect = SQLGLOT_DIALECTS.get(engine) if engine else None
+        super().__init__(statement, engine)
 
-        self._dialect = dialect
-        self.tables = extract_tables_from_statement(self._parsed, dialect)
+    @classmethod
+    def split_query(
+        cls,
+        query: str,
+        engine: str,
+    ) -> list[SQLStatement]:
+        return [
+            cls(statement, engine)
+            for statement in sqlglot.parse(query, engine)
+            if statement
+        ]
 
-    @staticmethod
+    @classmethod
     def _parse_statement(
-        sql_statement: str,
-        dialect: Optional[Dialects],
+        cls,
+        statement: str,
+        engine: str,
     ) -> exp.Expression:
         """
         Parse a single SQL statement.
         """
+        dialect = SQLGLOT_DIALECTS.get(engine) if engine else None
+
+        # We could parse with `sqlglot.parse_one` to get a single statement, but we need
+        # to verify that the string contains exactly one statement.
         statements = [
             statement
-            for statement in sqlglot.parse(sql_statement, dialect=dialect)
+            for statement in sqlglot.parse(statement, dialect=dialect)
             if statement
         ]
         if len(statements) != 1:
@@ -409,6 +479,18 @@ class SQLStatement:
 
         return statements[0]
 
+    @classmethod
+    def _extract_tables_from_statement(
+        cls,
+        parsed: exp.Expression,
+        engine: str,
+    ) -> set[Table]:
+        """
+        Find all referenced tables.
+        """
+        dialect = SQLGLOT_DIALECTS.get(engine) if engine else None
+        return extract_tables_from_statement(parsed, dialect)
+
     def format(self, comments: bool = True) -> str:
         """
         Pretty-format the SQL statement.
@@ -416,7 +498,7 @@ class SQLStatement:
         write = Dialect.get_or_raise(self._dialect)
         return write.generate(self._parsed, copy=False, comments=comments, pretty=True)
 
-    def get_settings(self) -> dict[str, str]:
+    def get_settings(self) -> dict[str, str | bool]:
         """
         Return the settings for the SQL statement.
 
@@ -432,12 +514,189 @@ class SQLStatement:
         }
 
 
+class KustoKQLStatement(BaseSQLStatement[str]):
+    """
+    Special class for Kusto KQL.
+
+    Kusto KQL is a SQL-like language, but it's not supported by sqlglot. Queries look
+    like this:
+
+        StormEvents
+        | summarize PropertyDamage = sum(DamageProperty) by State
+        | join kind=innerunique PopulationData on State
+        | project State, PropertyDamagePerCapita = PropertyDamage / Population
+        | sort by PropertyDamagePerCapita
+
+    See https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/ for more
+    details about it.
+    """
+
+    @classmethod
+    def split_query(
+        cls,
+        query: str,
+        engine: str,
+    ) -> list[KustoKQLStatement]:
+        """
+        Split a query at semi-colons.
+
+        Since we don't have a parser, we use a simple state machine based function. See
+        https://learn.microsoft.com/en-us/azure/data-explorer/kusto/query/scalar-data-types/string
+        for more information.
+        """
+
+        class KQLSplitState(enum.Enum):
+            """
+            State machine for splitting a KQL query.
+
+            The state machine keeps track of whether we're inside a string or not, so we
+            don't split the query in a semi-colon that's part of a string.
+            """
+
+            OUTSIDE_STRING = enum.auto()
+            INSIDE_SINGLE_QUOTED_STRING = enum.auto()
+            INSIDE_DOUBLE_QUOTED_STRING = enum.auto()
+            INSIDE_MULTILINE_STRING = enum.auto()
+
+        statements = []
+        state = KQLSplitState.OUTSIDE_STRING
+        statement_start = 0
+        query = query if query.endswith(";") else query + ";"
+        for i, character in enumerate(query):
+            if state == KQLSplitState.OUTSIDE_STRING:
+                if character == ";":
+                    statements.append(query[statement_start:i])
+                    statement_start = i + 1
+                elif character == "'":
+                    state = KQLSplitState.INSIDE_SINGLE_QUOTED_STRING
+                elif character == '"':
+                    state = KQLSplitState.INSIDE_DOUBLE_QUOTED_STRING
+                elif character == "`" and query[i - 2 : i] == "``":
+                    state = KQLSplitState.INSIDE_MULTILINE_STRING
+
+            elif (
+                state == KQLSplitState.INSIDE_SINGLE_QUOTED_STRING
+                and character == "'"
+                and query[i - 1] != "\\"
+            ):
+                state = KQLSplitState.OUTSIDE_STRING
+
+            elif (
+                state == KQLSplitState.INSIDE_DOUBLE_QUOTED_STRING
+                and character == '"'
+                and query[i - 1] != "\\"
+            ):
+                state = KQLSplitState.OUTSIDE_STRING
+
+            elif (
+                state == KQLSplitState.INSIDE_MULTILINE_STRING
+                and character == "`"
+                and query[i - 2 : i] == "``"
+            ):
+                state = KQLSplitState.OUTSIDE_STRING
+
+        return [cls(statement, engine) for statement in statements]
+
+    @classmethod
+    def _parse_statement(
+        cls,
+        statement: str,
+        engine: str,
+    ) -> str:
+        if engine != "kustokql":
+            raise ValueError(f"Invalid engine: {engine}")
+
+        # TODO: check if it's just a single statement
+
+        return statement.strip()
+
+    @classmethod
+    def _extract_tables_from_statement(cls, parsed: str, engine: str) -> set[Table]:
+        """
+        Extract all tables referenced in the statement.
+
+            StormEvents
+            | where InjuriesDirect + InjuriesIndirect > 50
+            | join (PopulationData) on State
+            | project State, Population, TotalInjuries = InjuriesDirect + InjuriesIndirect
+
+        """
+        logger.warning(
+            "Kusto KQL doesn't support table extraction. This means that data access "
+            "roles will not be enforced by Superset in the database."
+        )
+        return set()
+
+    def format(self, comments: bool = True) -> str:
+        """
+        Pretty-format the SQL statement.
+        """
+        return self._parsed
+
+    def get_settings(self) -> dict[str, str | bool]:
+        """
+        Return the settings for the SQL statement.
+
+            >>> statement = KustoKQLStatement("set querytrace;")
+            >>> statement.get_settings()
+            {"querytrace": True}
+
+        """
+        set_regex = r"^set\s+(?P<name>\w+)(?:\s*=\s*(?P<value>\w+))?$"
+        if match := re.match(set_regex, self._parsed, re.IGNORECASE):
+            return {match.group("name"): match.group("value") or True}
+
+        return {}
+
+
+class SQLScript:
+    """
+    A SQL script, with 0+ statements.
+    """
+
+    # Special engines that can't be parsed using sqlglot. Supporting non-SQL engines
+    # adds a lot of complexity to Superset, so we should avoid adding new engines to
+    # this data structure.
+    special_engines = {
+        "kustokql": KustoKQLStatement,
+    }
+
+    def __init__(
+        self,
+        query: str,
+        engine: str,
+    ):
+        statement_class = self.special_engines.get(engine, SQLStatement)
+        self.statements = statement_class.split_query(query, engine)
+
+    def format(self, comments: bool = True) -> str:
+        """
+        Pretty-format the SQL query.
+        """
+        return ";\n".join(statement.format(comments) for statement in self.statements)
+
+    def get_settings(self) -> dict[str, str | bool]:
+        """
+        Return the settings for the SQL query.
+
+            >>> statement = SQLScript("SET foo = 'bar'; SET foo = 'baz'")
+            >>> statement.get_settings()
+            {"foo": "'baz'"}
+
+        """
+        settings: dict[str, str | bool] = {}
+        for statement in self.statements:
+            settings.update(statement.get_settings())
+
+        return settings
+
+
 class ParsedQuery:
     def __init__(
         self,
         sql_statement: str,
         strip_comments: bool = False,
-        engine: Optional[str] = None,
+        engine: str | None = None,
     ):
         if strip_comments:
             sql_statement = sqlparse.format(sql_statement, strip_comments=True)
@@ -446,7 +705,7 @@ class ParsedQuery:
         self._dialect = SQLGLOT_DIALECTS.get(engine) if engine else None
         self._tables: set[Table] = set()
         self._alias_names: set[str] = set()
-        self._limit: Optional[int] = None
+        self._limit: int | None = None
 
         logger.debug("Parsing with sqlparse statement: %s", self.sql)
         self._parsed = sqlparse.parse(self.stripped())
@@ -550,7 +809,7 @@ class ParsedQuery:
         return source.name in ctes_in_scope
 
     @property
-    def limit(self) -> Optional[int]:
+    def limit(self) -> int | None:
         return self._limit
 
     def _get_cte_tables(self, parsed: dict[str, Any]) -> list[dict[str, Any]]:
@@ -631,7 +890,7 @@ class ParsedQuery:
 
         return True
 
-    def get_inner_cte_expression(self, tokens: TokenList) -> Optional[TokenList]:
+    def get_inner_cte_expression(self, tokens: TokenList) -> TokenList | None:
         for token in tokens:
             if self._is_identifier(token):
                 for identifier_token in token.tokens:
@@ -695,7 +954,7 @@ class ParsedQuery:
         return statements
 
     @staticmethod
-    def get_table(tlist: TokenList) -> Optional[Table]:
+    def get_table(tlist: TokenList) -> Table | None:
         """
         Return the table if valid, i.e., conforms to the [[catalog.]schema.]table
         construct.
@@ -731,7 +990,7 @@ class ParsedQuery:
     def as_create_table(
         self,
         table_name: str,
-        schema_name: Optional[str] = None,
+        schema_name: str | None = None,
         overwrite: bool = False,
         method: CtasMethod = CtasMethod.TABLE,
     ) -> str:
@@ -891,8 +1150,8 @@ def add_table_name(rls: TokenList, table: str) -> None:
 def get_rls_for_table(
     candidate: Token,
     database_id: int,
-    default_schema: Optional[str],
-) -> Optional[TokenList]:
+    default_schema: str | None,
+) -> TokenList | None:
     """
     Given a table name, return any associated RLS predicates.
     """
@@ -938,7 +1197,7 @@ def get_rls_for_table(
 def insert_rls_as_subquery(
     token_list: TokenList,
     database_id: int,
-    default_schema: Optional[str],
+    default_schema: str | None,
 ) -> TokenList:
     """
     Update a statement inplace applying any associated RLS predicates.
@@ -954,7 +1213,7 @@ def insert_rls_as_subquery(
     This method is safer than ``insert_rls_in_predicate``, but doesn't work in all
     databases.
     """
-    rls: Optional[TokenList] = None
+    rls: TokenList | None = None
     state = InsertRLSState.SCANNING
     for token in token_list.tokens:
         # Recurse into child token list
@@ -1030,7 +1289,7 @@ def insert_rls_as_subquery(
 def insert_rls_in_predicate(
     token_list: TokenList,
     database_id: int,
-    default_schema: Optional[str],
+    default_schema: str | None,
 ) -> TokenList:
     """
     Update a statement inplace applying any associated RLS predicates.
@@ -1041,7 +1300,7 @@ def insert_rls_in_predicate(
         after:  SELECT * FROM some_table WHERE ( 1=1) AND some_table.id=42
 
     """
-    rls: Optional[TokenList] = None
+    rls: TokenList | None = None
     state = InsertRLSState.SCANNING
     for token in token_list.tokens:
         # Recurse into child token list
@@ -1175,7 +1434,7 @@ RE_JINJA_BLOCK = re.compile(r"\{[%#][^\{\}%#]+[%#]\}")
 
 def extract_table_references(
     sql_text: str, sqla_dialect: str, show_warning: bool = True
-) -> set["Table"]:
+) -> set[Table]:
     """
     Return all the dependencies from a SQL sql_text.
     """
diff --git a/tests/unit_tests/sql_parse_tests.py b/tests/unit_tests/sql_parse_tests.py
index f097fd1df3..8bdd1ee4de 100644
--- a/tests/unit_tests/sql_parse_tests.py
+++ b/tests/unit_tests/sql_parse_tests.py
@@ -33,6 +33,7 @@ from superset.sql_parse import (
     has_table_query,
     insert_rls_as_subquery,
     insert_rls_in_predicate,
+    KustoKQLStatement,
     ParsedQuery,
     sanitize_clause,
     SQLScript,
@@ -1858,21 +1859,31 @@ def test_sqlquery() -> None:
     """
     Test the `SQLScript` class.
     """
-    script = SQLScript("SELECT 1; SELECT 2;")
+    script = SQLScript("SELECT 1; SELECT 2;", "sqlite")
 
     assert len(script.statements) == 2
     assert script.format() == "SELECT\n  1;\nSELECT\n  2"
     assert script.statements[0].format() == "SELECT\n  1"
 
-    script = SQLScript("SET a=1; SET a=2; SELECT 3;")
+    script = SQLScript("SET a=1; SET a=2; SELECT 3;", "sqlite")
     assert script.get_settings() == {"a": "2"}
 
+    query = SQLScript(
+        """set querytrace;
+Events | take 100""",
+        "kustokql",
+    )
+    assert query.get_settings() == {"querytrace": True}
+
 
 def test_sqlstatement() -> None:
     """
     Test the `SQLStatement` class.
     """
-    statement = SQLStatement("SELECT * FROM table1 UNION ALL SELECT * FROM table2")
+    statement = SQLStatement(
+        "SELECT * FROM table1 UNION ALL SELECT * FROM table2",
+        "sqlite",
+    )
 
     assert statement.tables == {
         Table(table="table1", schema=None, catalog=None),
@@ -1883,5 +1894,74 @@ def test_sqlstatement() -> None:
         == "SELECT\n  *\nFROM table1\nUNION ALL\nSELECT\n  *\nFROM table2"
     )
 
-    statement = SQLStatement("SET a=1")
+    statement = SQLStatement("SET a=1", "sqlite")
     assert statement.get_settings() == {"a": "1"}
+
+
+def test_kustokqlstatement() -> None:
+    """
+    Test the `KustoKQLStatement` class.
+    """
+    statements = KustoKQLStatement.split_query(
+        """
+let totalPagesPerDay = PageViews
+| summarize by Page, Day = startofday(Timestamp)
+| summarize count() by Day;
+let materializedScope = PageViews
+| summarize by Page, Day = startofday(Timestamp);
+let cachedResult = materialize(materializedScope);
+cachedResult
+| project Page, Day1 = Day
+| join kind = inner
+(
+    cachedResult
+    | project Page, Day2 = Day
+)
+on Page
+| where Day2 > Day1
+| summarize count() by Day1, Day2
+| join kind = inner
+    totalPagesPerDay
+on $left.Day1 == $right.Day
+| project Day1, Day2, Percentage = count_*100.0/count_1
+        """,
+        "kustokql",
+    )
+    assert len(statements) == 4
+
+    statements = KustoKQLStatement.split_query(
+        """
+print program = ```
+  public class Program {
+    public static void Main() {
+      System.Console.WriteLine("Hello!");
+    }
+  }```
+        """,
+        "kustokql",
+    )
+    assert len(statements) == 1
+
+    statements = KustoKQLStatement.split_query(
+        """
+set querytrace;
+Events | take 100
+        """,
+        "kustokql",
+    )
+    assert len(statements) == 2
+    assert statements[0].format() == "set querytrace"
+    assert statements[1].format() == "Events | take 100"
+
+
+@pytest.mark.parametrize(
+    "kql,statements",
+    [
+        ('print banner=strcat("Hello", ", ", "World!")', 1),
+        (r"print 'O\'Malley\'s'", 1),
+        (r"print 'O\'Mal;ley\'s'", 1),
+        ("print ```foo;\nbar;\nbaz;```\n", 1),
+    ],
+)
+def test_kustokql_statement_split_special(kql: str, statements: int) -> None:
+    assert len(KustoKQLStatement.split_query(kql, "kustokql")) == statements