This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a change to branch rls-splice
in repository https://gitbox.apache.org/repos/asf/superset.git
omit a6b6193f99c fix(tests): actually apply the raw-predicate fix to
parse_tests.py
omit 49006291efa Merge branch 'master' into rls-splice
omit 86205f67487 Small fixes
omit a1d12ee2463 Bump code coverage to 100%
omit d3aaa3783c8 Address comments
omit ee32ea1ef43 Add dialects for Exa/Solr
omit a33f3dd9085 Add to DB without sqlglot dialect
omit 28441575491 Fix lint
omit f130feb1e7f Run ruff-format
omit 0e205552273 Increase coverage
omit 36f89fa8b40 Increase parity
omit b5c4bbe950d Simplify function signature
omit a1f7bd2fdcf Simplify
omit 723655ba073 Improvements
omit 7b3536031cc feat: new splice RLSMethod
add 47fd4f4cbfc fix(matrixify): lazy-load grid cells with dashboard
virtualization (#43053)
add 250a4797bf1 fix(plugin-chart-ag-grid-table): send export column
filters as structured filters (#44308)
add c6d0890f2e0 fix(api): restore three schema fields disabled by a stray
trailing comma (#43225)
add 61a5d0e3348 fix(csrf): recover from an expired CSRF token without a
page reload (#43655)
add d21aa9b4f46 chore(deps): bump yeoman-generator from 9.1.0 to 9.2.0 in
/superset-frontend (#44522)
add 2b5a929523d fix(chart-controls): type post-processing columns as a
string-to-string mapping (#43589)
add a3afedeaab4 fix(core): normalize bare date-only strings to UTC in
normalizeTimestamp (#43807)
add 107a61c4caf feat(databend): add a sqlglot dialect based on Postgres
(#43964)
add c163112f4e2 chore(deps): bump @googleapis/sheets from 17.0.0 to 18.0.0
in /superset-frontend (#44523)
add 5c1f617740c fix(echarts): apply the bar label legibility floor to
manual label positions (#44469)
add c4943a0ab34 feat(native-filters): add configurable display format for
time filters (#44237)
add cef83b3f8df fix(import): catch KeyError for missing uuid/ssh_tunnel in
load_configs (#43305)
add df6e0d08b35 fix(sqla): wrap TypeError from virtual dataset Jinja
rendering as a validation error (#44312)
add 1788486228c fix(datasets): soften render-time UndefinedError in
get_virtual_table_metadata (#44316)
add ee4b8ddff6e fix(ci): align superset-cache tag consumers with the
Dockerfile PY_VER (#44534)
add 43f0f8876ad chore(ci): make the DB migration conflict bot comment less
emoji-heavy and more actionable (#44506)
add 0fe0662b271 fix(i18n): regenerate messages.pot to match source (#44509)
add 9f48d0eac9e fix(tests): await userEvent.click in CsrfErrorMessage
compact-mode test (#44540)
add 7024401aef2 fix(mcp): drop tiktoken, size-guard responses by exact
byte length (#44508)
add 9413294b2bd docs(pivot-table): document the "Show values as"
percentage display option (#44127)
add 48795f9a2d4 docs(explore): document show_download param for standalone
chart embeds (#43906)
add 7dd70eaf2d6 fix: tighten object-level and destination checks across
four unrelated endpoints (#44036)
add add97e5d190 fix(embedded): tighten guest-token scoping for
annotations, result types, and channels (#43391)
add ca7cdfcd0ff fix(pinot): require the SQLAlchemy 2 driver extra (#44287)
add 0f229fda75f fix(security): exempt health blueprint from forced
password changes (#44504)
add 269b9f99fef fix(views): return 401 for NoAuthorizationError in
handle_api_exception (SC-121647) (#44533)
add 50bbcedf13b docs(mcp): document restore_chart and restore_dashboard
tools (#44207)
add ea1ffcf0adb fix: fixed inverseSelection (#40970)
add 350dd0d60ec fix(security): delete deprecated permissions left over
after upgrades (#44142)
add 7a9fe06762b fix(mcp): stop data tool responses crashing on binary and
NaT values (#44495)
add 9612437a9c8 fix(extensions): preserve chat state across display modes
(#44490)
add 61fffbe0c08 chore(deps-dev): bump oxlint from 1.82.0 to 1.83.0 in
/superset-frontend (#44525)
add c14ac29f477 fix(mcp): complete Treemap round-trip and previews (#44152)
add 3b4e5f5d0c6 chore(deps): bump markdown-to-jsx from 9.10.2 to 9.10.3 in
/superset-frontend (#44570)
add 7fe03a536b6 chore(deps-dev): bump @types/node from 26.5.1 to 26.6.1 in
/superset-frontend (#44569)
add 6403e16fe56 chore(deps-dev): bump vitest from 5.0.0 to 5.0.1 in
/superset-embedded-sdk (#44568)
add d1f395914f1 chore(deps-dev): bump @types/node from 26.5.1 to 26.6.1 in
/superset-embedded-sdk (#44567)
add 6c9138a6b7c chore(deps-dev): bump baseline-browser-mapping from
2.11.23 to 2.11.24 in /superset-frontend (#44566)
add 4b180bddad7 chore(deps): bump baseline-browser-mapping from 2.11.23 to
2.11.24 in /docs (#44565)
add 4290d94d6c9 chore(deps-dev): bump vitest from 5.0.0 to 5.0.1 in
/superset-websocket (#44564)
add 3e80a53e14f chore(deps-dev): bump @types/node from 26.5.1 to 26.6.1 in
/superset-websocket (#44563)
add f8f293d2666 chore(deps): bump benchmark-action/github-action-benchmark
from 1.22.1 to 1.22.2 (#44520)
add 689ab4a77af fix(translations): regenerate messages.pot after the
connection-move reword (#44574)
add 02dbfd2ab5b fix(dashboard): don't register an active tab for childless
TABS components (#44345)
add 838376dbc28 fix(mongodb): treat the Mongo database as the SQL Lab
schema so Data Preview returns rows (#44141)
add 6323b37f50a fix(dashboard): prevent and repair self-nested layout
components (#44303)
add 7c7b3adf745 fix(export): keep the acting user in streaming CSV exports
(#44425)
add c0c688d3e4b fix(mcp): return a specific error per failure class on
tool calls (#44387)
add a071d23b41f fix(dashboard): guest sessions, pluggable storage, and
streamed downloads for the Excel export (#43805)
add d7a918b814c fix(ci): make check_pot_drift extract from an isolated git
snapshot (#44578)
add 775f7c5a1fd fix(db2): Use DATE_TRUNC to improve timegrain expressions
(#43236)
add 298aa2f0ba4 fix(dataset): bump changed_on on column refresh so chart
cache invalidates (#43921)
add 082961ba168 fix(chart): require edit rights for query-context-only
updates (#44494)
add 3b355b6a854 fix(chart): allow semantic view datasource when saving
charts (#44169)
add 390bf299ff9 fix(i18n): stop f-strings in gettext leaking a bogus msgid
on Python 3.12 (#44584)
add 8141d666d6d fix(dashboard): show loading spinner for charts outside an
in-flight auto-refresh batch (#44272)
add d4370cd46eb chore(deps): bump the rjsf group in /superset-frontend
with 3 updates (#44593)
add 0ad50dc77e7 chore(deps-dev): bump jsdom from 30.0.1 to 30.1.0 in
/superset-frontend (#44596)
add b4cc82b7662 chore(deps-dev): bump jsdom from 30.0.1 to 30.1.0 in
/superset-embedded-sdk (#44592)
add 687dcbc63eb chore(deps): bump swagger-ui-react from 5.32.15 to 5.33.0
in /docs (#44594)
add ad7fcac11f9 fix(export): stamp ZIP entries with the export time
(#44391)
add 92a3b7d7e33 chore(deps): bump google-auth-library from 11.0.2 to
11.1.0 in /superset-frontend (#44599)
add 45d76f6abaf chore(deps): bump react-draggable from 4.7.1 to 4.7.2 in
/superset-frontend (#44597)
add 2ac6e2468d5 chore(deps-dev): bump webpack-bundle-analyzer from 5.3.3
to 5.4.0 in /superset-frontend (#44598)
add 613033b294b chore(build): replace external file-related deps with
native Node modules (#42939)
add 25cb6fc02d2 chore(deps): bump the ag-grid group in /superset-frontend
with 2 updates (#44595)
add 732248e4755 fix(logging): record dashboard_id and slice_id for REST
mutation endpoints (#44553)
add 9ad6917600d chore(cypress): remove dead dashboard drill-to-detail
Cypress suite (#44537)
add f5d663c480d fix(versioning): narrow nullable uuid/description reads
flagged by mypy in versioning tests (#44424)
add e357014559b fix(dashboard): initialize label colors before mounting
charts (#44557)
add e04d38a85f2 fix(mypy): resolve the dataset-scope and datasource-perm
errors from the full-repo lint (#44610)
add 1c7d1f049bc fix(utils): return None from cast_to_num for non-decimal
digit strings (#44615)
add defcd639107 fix(mongodb): route dataset FROM clauses through
quote_table so chart queries return rows (#44583)
add f5487f04a36 fix(db_engine_specs): raise
SupersetGenericDBErrorException instead of bare-reraising JSONDecodeError
(#44616)
add 855ca2228cb fix(query_context): raise 422 not 500 on malformed Jinja
in Query datasource access check (#44011)
add 7b716b1838c fix(versioning): clean up history actions and refresh
after saves (#44613)
add 96d31ee3e35 docs(mcp): document deleted_state trash listing for
list_charts/list_dashboards (#44128)
add 599026a0e5a feat(standalone): granular Explore standalone modes and
iframe-safe dashboard fullscreen (#44165)
add 3bd6e103c14 fix(security): apply global guest RLS rules inside adhoc
sub-queries (#44645)
add 1e08d61204f fix(mcp): preserve deduplicated chart tool input schemas
(#44575)
add 02cb1f1a28a fix(table): resolve auto-detected currency on time
comparison columns (#44649)
add 83731ce7b3a test(reports): freeze the clock in the stale retry
boundary test (#44651)
add a9342fa02ab chore(deps-dev): bump oxlint-tsgolint from 7.0.2001 to
7.0.2002 in /superset-websocket (#44634)
add d65e9fba9c4 chore(deps-dev): bump oxlint-tsgolint from 7.0.2001 to
7.0.2002 in /docs (#44635)
add d1f903c66ff chore(deps): bump github/codeql-action/analyze from 4.38.0
to 4.38.1 (#44636)
add a44ab4d9281 chore(deps-dev): bump baseline-browser-mapping from
2.11.24 to 2.11.25 in /superset-frontend (#44641)
add 5085570fb48 chore(deps): bump
apache/infrastructure-actions/allowlist-check from 1.0.3 to 1.0.4 (#44637)
add 5be35992c56 chore(deps): bump github/codeql-action/upload-sarif from
4.38.0 to 4.38.1 (#44640)
add 0034601c062 chore(deps): bump github/codeql-action/init from 4.38.0 to
4.38.1 (#44639)
add 5e8bbc0eb4a chore(deps): bump baseline-browser-mapping from 2.11.24 to
2.11.25 in /docs (#44638)
add 241d1210152 chore(deps): bump image-size from 2.0.2 to 2.0.4 in /docs
in the security group across 1 directory (#44619)
add be0631858c9 chore(deps): bump mapbox-gl from 3.30.0 to 3.31.0 in
/superset-frontend (#44643)
add 4bce27f12f4 fix(dashboard): shrink row height on chart resize and
unblock resize handles above columns (#44359)
add 5aec4342bb5 fix(database): catch JSONDecodeError in get_oauth2_config
(#44658)
add 10ca640e97e fix(import): downgrade expected validation-failure logs
from error to warning (#44655)
add 181422fc604 fix(mcp): return safe argument validation details (#44591)
add 05017968378 chore(ci): collapse Playwright experimental workflow into
E2E playwright-tests (#44659)
add a33154a4c49 chore(deps-dev): bump hdbcli from 2.29.27 to 2.30.27
(#44687)
add 60a0b45b06f chore(deps-dev): bump mysqlclient from 2.2.8 to 2.3.0
(#44689)
add 1aaa1e6ad1a chore(deps): bump greenlet from 3.5.5 to 3.5.6 (#44691)
add 1a65f0ec9be chore(deps-dev): bump google-cloud-bigquery from 3.45.0 to
3.45.2 (#44692)
add b4db7baaff5 chore(deps-dev): bump python-ldap from 3.4.7 to 3.4.8
(#44690)
add 6e2e7c6c84f chore(deps-dev): update playwright requirement from
<2,>=1.62.0 to >=1.63.0,<2 (#44688)
add 5b9733fd60f fix(versioning): resolve nightly pre-commit (next)
failures — mypy UUID-annotation regression and oxfmt version-drift formatting
(#44648)
add eb2ffa28ccf chore(docker): quiet scanner self-match noise, keep OS
packages current (#44124)
add 2e13cfa3e48 fix(charts): stream large CSV exports without executing
the query first (#44624)
add 25e63b54fd8 feat(mcp): add create_dataset_metric and
delete_dataset_metric tools (#44580)
add c54a3315e86 feat(plugin-chart-echarts): add Candlestick Chart (#43863)
add 891c2ede0b6 feat(dashboard): download the Excel export directly when
no export storage is configured (#44082)
add 35e58506061 fix(charts): guard Slice.form_data against non-dict params
JSON (#44731)
add 8a3b86dccd3 fix: guard the isdigit()-then-int() pattern against
non-decimal digits (#44620)
add 1436035b091 fix(bar-chart): show correct value labels per stack group
with stackDimension (#43238)
add ad24cb86342 fix(embedded): initialize feature flags in embedded
dashboard entry point (#37367)
add 8c4b5ae2085 chore(deps): bump codecov/codecov-action from 7.1.0 to
7.1.1 (#44571)
add b6be1dd5548 build(dev-deps): use `@hainenber/po2json` as modernized
`po2json` fork (#44457)
add ffe9a00fc42 fix(reports): export full paginated table results (#44218)
add f3e3c3fefdd fix(security): apply global guest RLS rules to sub-queries
in virtual datasets (#44650)
add 049c9777f03 fix(dashboard): load chart editors and viewers up front
(#43990)
add 5ba3b8d4fc7 fix(security): keep guest RLS on sub-queries beside an
unaliased source (#44768)
add d1307422f17 fix(reports): require a Slack channel id in report
recipients (#42850)
add 4977a2a5347 chore(deps-dev): bump the babel group in
/superset-embedded-sdk with 3 updates (#44747)
add ba6268bddf6 chore(deps-dev): bump jest-environment-jsdom from 30.5.1
to 30.5.2 in /superset-frontend (#44764)
add a5ae32d3911 chore(deps-dev): bump tsx from 4.23.13 to 4.23.15 in
/superset-frontend (#44757)
add d9df1b3b83d chore(deps): bump astral-sh/setup-uv from 10.1.0 to 10.2.0
(#44750)
add 1ad6c118003 chore(deps-dev): bump minimizer-webpack-plugin from 5.10.1
to 5.11.0 in /superset-frontend (#44755)
add ca6fc26fa4a fix(deps): resolve npm security alerts for fflate,
image-size, js-yaml and smol-toml (#44740)
add f6d9b7b94cd fix(mcp): use chart metrics for the preview y axis (#44684)
add b2d54504537 chore(deps): bump antd from 6.6.4 to 6.6.5 in
/superset-frontend (#44766)
add c217fe4d1e7 chore(deps-dev): bump jest from 30.5.1 to 30.5.2 in
/superset-frontend (#44763)
add 0085640384d chore(deps-dev): bump babel-jest from 30.5.1 to 30.5.2 in
/superset-frontend (#44762)
add e8539f9aff8 chore(deps-dev): bump @types/node from 26.6.1 to 26.6.2 in
/superset-frontend (#44761)
add 7c1979ec542 chore(deps): bump react-error-boundary from 6.1.5 to 6.1.6
in /superset-frontend (#44760)
add 21ed6880d5e chore(deps-dev): bump webpack from 5.111.0 to 5.111.1 in
/superset-frontend (#44756)
add 6ae6e7b2874 chore(deps-dev): bump webpack from 5.111.0 to 5.111.1 in
/docs (#44753)
add 6de85946c40 chore(deps-dev): bump @babel/eslint-parser from 7.29.7 to
7.29.9 in /superset-frontend in the babel group (#44752)
add 565f49d9343 chore(deps): bump antd from 6.6.4 to 6.6.5 in /docs
(#44751)
add 1c2e7c2988f chore(deps-dev): bump webpack from 5.111.0 to 5.111.1 in
/superset-embedded-sdk (#44749)
add feb4c4f6227 chore(deps-dev): bump @types/node from 26.6.1 to 26.6.2 in
/superset-embedded-sdk (#44748)
add 60fc9966025 chore(deps-dev): bump @types/node from 26.6.1 to 26.6.2 in
/superset-websocket (#44745)
add 68ccc99e950 fix(dataset): hide Normalize column names for virtual
datasets (#44579)
add 766f46b6e99 fix(deps): pin qs 6.16.0 in docs to resolve Dependabot
alerts (#44741)
add 5af034ff6f8 fix(translations): capture stderr and harden
check_pot_drift.py follow-ups from #44578 (#44582)
add c9455b2c4cc fix(i18n): correct Slovak SQL Lab progress message
placeholders (#44587)
add a629c91929d test(explore): migrate remaining explore e2e coverage to
Playwright (#44621)
add 891dbc424b1 fix(deps): bump anyio to 4.15.1 (CVE-2026-63374) (#44735)
add 74d9d94aed1 test(dashboard): cover native filter dependency cycles and
config modal save gating (#44669)
add 169514aebd7 test(dashboard): cover dashboard load modes and URL param
hydration (#44672)
add 3667f5bcaa6 test(dashboard): cover color scheme precedence and label
color map helpers (#44677)
add 89bf40ee04e fix(calendar): position Month/Week cells within their own
month block (#44601)
add 0e688a534b6 fix(ci): retry databend testcontainers bring-up past the
image's metasrv race (#44729)
add ff55a99ab73 test(dashboard): cover filter plugin data masks and
horizontal overflow (#44676)
add 78fdd0dafa9 test(dashboard): cover native filter bar key persistence
and state hooks (#44675)
add e5100cd9986 test(dashboard): cover tab switching visibility and hidden
chart updates (#44674)
add 3ae8e2f9bc4 test(dashboard): cover save and refresh interval modals
(#44671)
add 98c74d8d8bf test(dashboard): cover drill to detail payloads and page
reset (#44673)
add 6cad838c823 chore(dev-deps): drop po2json entirely, build .po->Jed
JSON on gettext-parser (#44742)
add 77295721ff9 feat(versioning): gate history APIs and runtime capture
(#44514)
add 6f6e52ba8b1 fix(chart/data): guard against non-dict chart.params in
get_data (#44770)
add 593080e1a2c feat(mcp): add update_dataset, delete_dataset and
restore_dataset tools (#44337)
add 8bd92b7073e fix(databases): surface dataset dependents in the delete
confirmation (#44392)
add 211339b9a78 chore: add @geido and @msyavuz as code owners (#44771)
add 1e167aedbc0 fix(dashboard): refresh version history after cross-filter
scoping save (#44623)
add 9593bc42c64 fix(ui): normalize BigInt values in memory formatter
(#44507)
add b65d5482b2c feat(dataset): support epoch_us python_date_format (#44500)
add 697b056909c fix(chart): prevent stacking bars on a logarithmic axis
(#44556)
add a374f847d61 fix(echarts): reserve grid room for Gantt category names
(#43189)
add 95db7730256 fix(timeseries): preserve explicit UTC offsets in
normalizeTimestamp (#43960)
add 506716f2f88 fix(query-context): resolve legacy granularity_sqla for
stored queries (#44460)
add c7821516e39 fix(security): vary SQL Lab ad-hoc query cache key by
effective RLS predicates (#43985)
add 4679a471015 test(dashboard): cover header refresh controls while
charts load (#44670)
add ae11708faab test(dashboard): cover edit-mode drag-and-drop drop rules
(#44678)
add 0fbad0de99d feat(db_engine_specs): add metadata blocks to all
remaining incomplete engine specs (#43566)
add 7cb19e2b50d fix(embedded-sdk): re-authenticate the iframe after a
navigation internal to the dashboard (#44470)
add c67c88fbf1e fix(reports): drop the sign of negative numbers that round
to zero in text reports (#44644)
add 1fdb9171b7b fix(explore): include dataset editors in the Explore
datasource payload (#44633)
add d3f57264890 fix(echarts): stop the zoom controls overlapping the
legend selector (#44367)
add 0e5a3b21215 feat(motherduck): set session_name on user impersonation
(#42705)
add 33d24f496c9 fix(ci): fall back to the lean Dockerfile target when
publishing a pre-#44100 release (#44248)
add b4f79f94f82 fix(d1): support SQLAlchemy 2 with sqlalchemy-d1 0.2.0
(#44505)
add cfeceedb605 fix(types): preserve shared control registry option types
(#44559)
add 1e91b933774 refactor(dashboard): simplify cross-filter scope
resolution (#38762)
add db87cd2a2b2 fix(dataframe): normalize trusted nonfinite scalars
(#44219)
add e86af4ee954 fix: DashboardAccessFilter to preserve dashboards with
empty layouts (#44256)
add 49e71752e48 fix(excel): keep wall-clock datetimes when exporting
timezones (#44360)
add 19ea6b231c7 fix(mcp): hide internal sanitization warnings from input
schemas (#44602)
add c40eba410b7 fix(kylin): time grains and labels that work on Calcite
and Spark pushdown (#44712)
add ca3d3560895 feat(oracle): support cancelling running queries in SQL
Lab (#44704)
add e7275f15ae0 feat(echarts): double-click chart legend to isolate a
series (#44562)
add 4a51382f819 chore(deps-dev): bump oxfmt from 0.68.0 to 0.70.0 in
/superset-frontend (#44785)
add 983d00165a7 chore(deps-dev): bump jsdom from 30.1.0 to 30.1.1 in
/superset-frontend (#44784)
add f837f839708 chore(deps): bump react-window from 2.3.1 to 2.3.2 in
/superset-frontend (#44782)
add 5150266456a chore(deps-dev): bump oxlint from 1.83.0 to 1.85.0 in
/docs (#44781)
add b8e40175053 chore(deps-dev): bump the typescript-eslint group in
/superset-frontend with 2 updates (#44779)
add 4422cf38776 chore(deps-dev): bump oxfmt from 0.68.0 to 0.70.0 in
/superset-websocket (#44778)
add ce86ac9aefc chore(deps-dev): bump jsdom from 30.1.0 to 30.1.1 in
/superset-embedded-sdk (#44777)
add ef99eeac8ee chore(deps-dev): bump oxlint from 1.83.0 to 1.85.0 in
/superset-frontend (#44783)
add 72c8969ce38 chore(deps-dev): bump oxfmt from 0.68.0 to 0.70.0 in /docs
(#44780)
add 3d436f579c9 chore(deps-dev): bump oxlint from 1.83.0 to 1.85.0 in
/superset-websocket (#44776)
add e65de1fc0f0 fix(chart-data): roll back db.session after swallowed
metadata-DB errors (#44653)
add 45f4dd80092 fix: use database rollups for pivot table subtotals in
Actual Values mode (#44631)
add c51f192be6b fix(sqllab): stringify integer columns that overflow int64
(#44743)
add 2eb620e7372 fix(databases): validate schema before listing tables
(#44683)
add 27c6f5a8d90 fix(db_engine_specs): restore shared compiler state after
loading third-party dialects (#44686)
add 732e6551e0a fix(cratedb): recognize reflected timestamp types for
epoch milliseconds (#44720)
add 03227878ba3 fix(db_engine_specs): don't fail DDL/DML when the
statement has no result set (#44714)
add 3e9bd8b45b4 fix(dynamodb): map NUMBER columns and order charts by
metric expressions (#44711)
add 2b050596c0b fix(databricks): derive omitted OAuth2 endpoints from the
workspace host (#44710)
add 041f84c6f31 fix(clickhouse): rename SELECT aliases that shadow a
source column (#44715)
add f6a7802c81d fix(database): mask secrets in create and update responses
(#44733)
add f639b22c6c8 fix(api): return 4xx from oauth2 callback errors, not 500
(#44769)
add cba2574241e fix(i18n): clear 1,188 fuzzy translations with broken
placeholders (#44611)
add afe8b14d794 fix(database): coerce LazyString validation messages to
str in validate_parameters (#44802)
add c6e7bd47a4a fix(dashboard): catch JSONDecodeError on malformed
default_filters in set_dash_metadata (#44716)
add 9a5faa8af5b refactor(db_engine_specs): derive epoch method dispatch
from EPOCH_FORMATS (#44772)
add 63c004fe66c feat(mcp): add a permission-filtered asset catalog tool
(#44694)
add 6b2d3b15116 fix(auth): gate registration UI by auth type, not just the
flag (#44368)
add e1daa2f7e10 chore(deps-dev): bump ip-address from 10.4.0 to 10.7.2 in
/superset-frontend in the security group across 1 directory (#44774)
add 8bd268f9cef docs(versioning): screenshots, retention, and permission
guidance for version history and archives (#44190)
add 14b87366bc7 chore(deps-dev): bump brace-expansion from 5.0.9 to 5.0.12
in /superset-embedded-sdk in the security group across 1 directory (#44812)
add 1dbb7aaace6 chore(deps): bump fast-uri from 3.1.7 to 3.1.8 in /docs in
the security group across 1 directory (#44814)
add 6d1bfaa4cd4 fix(dashboard): forward clearAllTriggers from vertical
filter bar to FilterControls (#44531)
add df450dc2a24 fix(mypy): narrow nullable uuid before
RestoreVersionCommand calls (#44789)
add 92b0cf82ca9 fix(echarts-timeseries): convert xAxisLabelInterval string
'0' to number 0 (#43729)
add 517e94d1062 fix(echarts): fix sparse sub-daily bar sizing and x-axis
mislabeling (#44628)
add 48a3b02d129 fix(mysql): require TLS when SSL is requested (#44723)
add 773f976b6de fix(dynamodb): render time bounds as ISO 8601 so sub-day
ranges match stored timestamps (#44702)
add 005eadcacd8 fix(opensearch): page drill-to-detail samples with the
OpenSearch SQL response format (#44703)
add 542e4661837 fix(gsheets): pass the OAuth2 token and delegation subject
through connect_args (#44709)
add 16271bbfbb7 fix(databricks): stop the string-type patch writing
SQLAlchemy's shared colspecs (#44707)
add 7154f2790a9 fix(oracle): map Oracle NUMBER, BINARY_FLOAT/DOUBLE and
CLOB column types (#44685)
add 3e8cec55c4b chore(deps): bump undici from 7.29.0 to 7.30.0 in
/superset-frontend in the security group across 1 directory (#44809)
add 89759eba5d9 chore(deps): bump react-window from 2.3.2 to 2.3.3 in
/superset-frontend (#44820)
add 3e36b242a61 fix(datafusion): render temporal SQL that DataFusion
accepts (#44700)
add 8c3b985c22c fix(db2): set current_schema to the catalog name of the
selected schema (#44706)
add ba62c867258 chore(deps): bump brace-expansion from 5.0.9 to 5.0.12 in
/superset-frontend/cypress-base (#44813)
add 3f8a23622c7 perf(security): memoise the user subject lookup within a
request (#44017)
add 3f408238baa refactor(mcp): one plugin lifecycle contract and compact
chart config schemas (#44746)
add 5668faf18e6 fix(doris): quarter grain, SSL toggle, parameters URI,
error mapping and column types (#44718)
add 929c44097f8 chore(deps): bump the security group across 1 directory
with 2 updates (#44824)
add e93f8ce638c test(semantic-views): wait for views refetches to settle
before selecting a view (#44792)
add 21d46d52dfd chore(build): remove unused dependencies in `docs` and
`superset-frontend` (#44697)
add af794f8c93a chore(deps): bump the security group across 1 directory
with 2 updates (#44831)
add 8a7be3b327b fix: avoid provider calls when rendering datasource access
denials (#44432)
add 3b06cadca4c fix(csv-import): add primary key when MySQL requires one
(#44411)
add 88efac09c67 fix(mcp): align histogram and waterfall query contracts
(#44744)
add 65a6012843b ci(python): run the Python-next canary nightly, bump to
3.13 (#44767)
add e90b9fb751e chore(deps): bump dompurify from 3.4.15 to 3.4.16 in
/superset-frontend in the security group across 1 directory (#44830)
add 51378f529d8 fix(matrixify): fan metrics-axis selection into
multi-query fields (#44629)
add 883e43ee2da fix(sqllab): ignore non-object template_params in
format_sql instead of 500 (#44826)
add bbf0fa5f42f fix(core): stop discarding API errors that quote an HTML
tag (#42489)
add d80fcfc02a2 fix(i18n): make babel_update.sh .pot normalization
actually run (#44395)
add f02f53df234 fix(sql): reject client-side file-transfer statements in
query execution (#44496)
add fd524f4b217 fix(sqllab): preserve exact decimals in results and
exports (#44739)
add d2101c8dba2 fix(exasol): classify common server errors (#44721)
add dc0e306a24c fix(elasticsearch): classify byte, short, half_float,
scaled_float and unsigned_long columns (#44713)
add 8baa9c1f2e3 fix(db2): accept sqlglot's parse_mod in the DB2 term
parser (#44708)
add 5cf8213354c fix(databricks): keep the user's OAuth2 token and extra
connect_args; re-auth on HTTP 401 (#44705)
add 855bb4e21c8 fix(gsheets): align service-account validation and
serialize upload dates (#44695)
add bbf00956d46 fix(mcp): prioritize exact tool names in BM25 search
(#44682)
add 90fc4735835 test(embedded-sdk): cross-document test rig for the
navigation fix (#44608)
add e91ce19a606 fix(auth): drain flash messages on the login page (#44605)
add 924343e3ee6 fix(gantt): prevent y-axis category labels from being
clipped (#44321)
add d2fb52ac83e fix(auth): remove the legacy FAB password reset views and
move password resets into the SPA (#44626)
add 4cdd680f399 fix: increase dataset edit modal size (#38215) (#39257)
add 1c43136ddea feat: new splice RLSMethod
add bf4d51e4257 Improvements
add 71c155f1104 Simplify
add 395b0a484c2 Simplify function signature
add be783d122d9 Increase parity
add 8a2527573ac Increase coverage
add f1d12ed384d Run ruff-format
add 26504b1ca9f Fix lint
add 21c093154d5 Add to DB without sqlglot dialect
add 99608dd1f06 Add dialects for Exa/Solr
add c67cdeb4bc3 Address comments
add 9d8f8b2de20 Bump code coverage to 100%
add 390fb634079 Small fixes
add 5ddc6790c49 fix(tests): actually apply the raw-predicate fix to
parse_tests.py
add 2a0d46b42f0 fix(rls): restore gaps left by a flattened rebase onto
master
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 (a6b6193f99c)
\
N -- N -- N refs/heads/rls-splice (2a0d46b42f0)
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.
No new revisions were added by this update.
Summary of changes:
.github/CODEOWNERS | 16 +-
.github/actions/setup-backend/action.yml | 5 +-
.github/workflows/asf-allowlist-check.yml | 2 +-
.github/workflows/bashlib.sh | 6 +-
.github/workflows/bump-python-package.yml | 2 +-
.github/workflows/check-db-migration-confict.yml | 21 +-
.github/workflows/codeql-analysis.yml | 4 +-
.github/workflows/docker.yml | 2 +-
.github/workflows/frontend-bundle-size-nightly.yml | 4 +-
.github/workflows/python-nightly-canary.yml | 94 +
.github/workflows/superset-e2e.yml | 22 +-
.github/workflows/superset-extensions-cli.yml | 2 +-
.github/workflows/superset-frontend.yml | 6 +-
.github/workflows/superset-playwright.yml | 222 --
.../workflows/superset-python-integrationtest.yml | 6 +-
.github/workflows/superset-python-presto-hive.yml | 4 +-
.github/workflows/superset-python-unittest.yml | 9 +-
.github/workflows/tag-release.yml | 31 +-
.grype.yaml | 39 +
RESOURCES/STANDARD_ROLES.md | 6 -
UPDATING.md | 421 +++-
docker/apt-install.sh | 8 +
.../configuration/configuring-superset.mdx | 17 +
docs/admin_docs/configuration/google-sheets.mdx | 49 +
docs/admin_docs/configuration/mcp-server.mdx | 171 +-
docs/developer_docs/api.mdx | 13 +
docs/developer_docs/contributing/howtos.md | 7 +-
.../extensions/extension-points/chat.md | 4 +
docs/developer_docs/extensions/mcp.md | 21 +
docs/docs/using-superset/embedding.mdx | 21 +
docs/docs/using-superset/exploring-data.mdx | 22 +
.../using-superset/exporting-dashboard-data.mdx | 176 +-
docs/docs/using-superset/number-formatting.mdx | 16 +
docs/docs/using-superset/recently-archived.mdx | 101 +-
.../docs/using-superset/using-ai-with-superset.mdx | 27 +
docs/docs/using-superset/version-history.mdx | 186 +-
docs/docusaurus.config.ts | 1 -
docs/package.json | 23 +-
docs/src/data/databases.json | 14 +-
docs/static/feature-flags.json | 2 +-
.../img/version-history/recently-archived.jpg | Bin 0 -> 23897 bytes
.../img/version-history/version-history-panel.jpg | Bin 0 -> 19792 bytes
.../version-history/version-history-preview.jpg | Bin 0 -> 64287 bytes
docs/static/resources/openapi.json | 159 +-
.../databases/supported/apache-doris.mdx | 8 +
.../version-6.1.0/databases/supported/mysql.mdx | 18 +
docs/yarn.lock | 1303 +++++-----
pyproject.toml | 59 +-
requirements/base.txt | 2 +-
requirements/development.in | 11 +
requirements/development.txt | 24 +-
scripts/change_detector.py | 1 +
scripts/docker_release_target.py | 129 +
scripts/translations/babel_update.sh | 15 +-
scripts/translations/check_pot_drift.py | 95 +-
superset-embedded-sdk/package-lock.json | 484 ++--
superset-embedded-sdk/package.json | 14 +-
superset-embedded-sdk/src/index.test.ts | 349 ++-
superset-embedded-sdk/src/index.ts | 374 ++-
superset-embedded-sdk/testrig/README.md | 89 +
superset-embedded-sdk/testrig/drive.mjs | 655 +++++
superset-embedded-sdk/testrig/embedded.html | 127 +
superset-embedded-sdk/testrig/host.html | 239 ++
superset-embedded-sdk/testrig/server.mjs | 199 ++
.../cypress/e2e/dashboard/drilltodetail.test.ts | 614 -----
.../e2e/dashboard/shared_dashboard_functions.ts | 201 --
.../cypress-base/cypress/e2e/dashboard/utils.ts | 559 ----
.../cypress-base/cypress/e2e/explore/chart.test.js | 157 --
.../cypress-base/cypress/e2e/explore/utils.ts | 76 -
.../e2e/explore/visualizations/shared.helper.js | 139 -
.../cypress-base/cypress/support/directories.ts | 678 -----
.../cypress-base/cypress/utils/urls.ts | 2 -
superset-frontend/cypress-base/package-lock.json | 28 +-
superset-frontend/cypress-base/package.json | 2 +-
superset-frontend/jest.config.js | 6 +-
superset-frontend/package-lock.json | 1691 ++++++-------
superset-frontend/package.json | 80 +-
.../packages/generator-superset/package.json | 5 +-
.../generator-superset/test/plugin-chart.test.ts | 6 +-
.../packages/superset-core/package.json | 2 -
.../src/shared-controls/sharedControls.tsx | 13 +-
.../packages/superset-ui-core/package.json | 14 +-
.../Matrixify/MatrixifyGridCell.test.tsx | 273 +-
.../components/Matrixify/MatrixifyGridCell.tsx | 127 +-
.../Matrixify/MatrixifyGridGenerator.test.ts | 63 +
.../components/Matrixify/MatrixifyGridGenerator.ts | 34 +-
.../components/Matrixify/virtualizationEvents.ts | 82 +
.../superset-ui-core/src/chart/types/VizType.ts | 1 +
.../components/DeleteModal/DeleteModal.test.tsx | 37 +-
.../src/components/DeleteModal/index.tsx | 14 +-
.../src/components/DeleteModal/types.ts | 4 +-
.../src/connection/SupersetClientClass.ts | 83 +-
.../superset-ui-core/src/connection/constants.ts | 3 +
.../superset-ui-core/src/currency-format/utils.ts | 22 +
.../factories/createMemoryFormatter.ts | 11 +-
.../superset-ui-core/src/query/api/v1/types.ts | 3 +
.../src/query/extractQueryFields.ts | 4 +
.../src/query/getClientErrorObject.ts | 29 +-
.../src/query/types/PostProcessing.ts | 6 +-
.../superset-ui-core/src/query/types/Query.ts | 1 +
.../src/time-comparison/fetchTimeRange.ts | 29 +-
.../src/time-format/utils/normalizeTimestamp.ts | 31 +
.../superset-ui-core/src/ui-overrides/types.ts | 1 +
.../connection/SupersetClientCsrfRecovery.test.ts | 191 ++
.../test/currency-format/utils.test.ts | 33 +
.../factories/createMemoryFormatter.test.ts | 7 +
.../test/query/extractQueryFields.test.ts | 12 +
.../test/query/getClientErrorObject.test.ts | 66 +
.../test/query/types/PostProcessing.test.ts | 6 +-
.../test/time-comparison/fetchTimeRange.test.ts | 60 +
.../time-format/utils/normalizeTimestamp.test.ts | 75 +
superset-frontend/playwright.config.ts | 9 -
.../playwright/components/core/Menu.ts | 7 +
.../playwright/components/core/Radio.ts | 69 +
.../playwright/components/core/index.ts | 1 +
.../components/dashboard/DashboardFilterBar.ts | 6 +-
.../playwright/components/modals/SaveChartModal.ts | 105 +
.../playwright/components/modals/index.ts | 1 +
superset-frontend/playwright/helpers/api/chart.ts | 44 +
.../playwright/helpers/api/dashboard.ts | 37 +
superset-frontend/playwright/pages/ExplorePage.ts | 95 +
.../playwright/tests/chart/chart-test-helpers.ts | 24 +-
.../tests/chart/handlebars-format-date.spec.ts | 2 +-
.../tests/dashboard/clear-all-filters.spec.ts | 112 +
.../dashboard/dashboard-drill-to-detail.spec.ts | 3 -
.../tests/dashboard/gauge-interval-colors.spec.ts | 2 +-
.../mixed-chart-dashboard-filters.spec.ts | 2 +-
.../tests/embedded/pivot-collapse-state.spec.ts | 2 +-
.../playwright/tests/experimental/README.md | 123 -
.../explore/cross-referenced-dashboards.spec.ts | 173 ++
.../tests/explore/explore-no-results.spec.ts | 59 +
.../playwright/tests/explore/explore-save.spec.ts | 131 +
.../tests/explore/explore-test-helpers.ts | 50 +
.../explore/results-tab-reuse.spec.ts | 16 +-
.../plugin-chart-ag-grid-table/src/buildQuery.ts | 125 +-
.../plugin-chart-ag-grid-table/src/index.ts | 1 -
.../src/stateConversion.ts | 302 +--
.../src/transformProps.ts | 44 +-
.../src/utils/agGridFilterConverter.ts | 73 +-
.../test/buildQuery.test.ts | 206 +-
.../test/stateConversion.test.ts | 77 +-
.../test/transformProps.test.ts | 45 +
.../test/utils/agGridFilterConverter.test.ts | 55 +-
.../test/utils/filterStateManager.test.ts | 2 +-
.../src/vendor/cal-heatmap.ts | 60 +-
.../plugin-chart-calendar/test/cal-heatmap.test.ts | 40 +
.../src/BigNumber/BigNumberViz.test.tsx | 131 +-
.../src/Bubble/EchartsBubble.tsx | 16 +-
.../src/Bubble/transformProps.ts | 31 +-
.../src/Butterfly/Butterfly.tsx | 16 +-
.../src/Butterfly/transformProps.ts | 11 +-
.../src/Candlestick/EchartsCandlestick.tsx | 174 ++
.../src/Candlestick/buildQuery.ts} | 52 +-
.../src/Candlestick/constants.ts | 61 +
.../src/Candlestick/controlPanel.tsx | 417 +++
.../src/Candlestick/images/example1-dark.png | Bin 0 -> 55933 bytes
.../src/Candlestick/images/example1.png | Bin 0 -> 56139 bytes
.../src/Candlestick/images/thumbnail-dark.png | Bin 0 -> 31389 bytes
.../src/Candlestick/images/thumbnail.png | Bin 0 -> 31318 bytes
.../plugin-chart-echarts/src/Candlestick/index.ts | 65 +
.../src/Candlestick/transformProps.ts | 770 ++++++
.../plugin-chart-echarts/src/Candlestick/types.ts | 84 +
.../plugin-chart-echarts/src/Candlestick/utils.ts | 91 +
.../src/Funnel/EchartsFunnel.tsx | 19 +-
.../src/Funnel/transformProps.ts | 15 +-
.../src/Gantt/EchartsGantt.tsx | 23 +-
.../plugin-chart-echarts/src/Gantt/constants.ts | 9 +
.../src/Gantt/transformProps.ts | 63 +-
.../src/Graph/EchartsGraph.tsx | 8 +
.../src/Graph/transformProps.ts | 11 +-
.../src/Histogram/Histogram.tsx | 17 +-
.../src/Histogram/transformProps.ts | 10 +-
.../src/MixedTimeseries/EchartsMixedTimeseries.tsx | 9 +
.../src/MixedTimeseries/transformProps.ts | 107 +-
.../plugin-chart-echarts/src/Pie/EchartsPie.tsx | 19 +-
.../plugin-chart-echarts/src/Pie/transformProps.ts | 15 +-
.../src/Radar/EchartsRadar.tsx | 19 +-
.../src/Radar/transformProps.ts | 15 +-
.../src/Timeseries/EchartsTimeseries.tsx | 19 +-
.../src/Timeseries/Regular/Bar/controlPanel.tsx | 14 +-
.../src/Timeseries/transformProps.ts | 177 +-
.../src/Timeseries/transformers.ts | 87 +-
.../src/Waterfall/EchartsWaterfall.tsx | 16 +-
.../src/components/Echart.test.tsx | 4 +-
.../plugin-chart-echarts/src/components/Echart.tsx | 7 +-
.../plugins/plugin-chart-echarts/src/constants.ts | 20 +-
.../plugins/plugin-chart-echarts/src/index.ts | 2 +
.../plugin-chart-echarts/src/utils/formatters.ts | 7 +
.../src/utils/legendEventHandlers.test.ts | 275 ++
.../src/utils/legendEventHandlers.ts | 131 +
.../plugin-chart-echarts/src/utils/series.ts | 291 ++-
.../test/Butterfly/Butterfly.test.tsx | 32 +-
.../test/Candlestick/EchartsCandlestick.test.tsx | 325 +++
.../test/Candlestick/buildQuery.test.ts | 57 +
.../test/Candlestick/controlPanel.test.ts | 257 ++
.../test/Candlestick/transformProps.test.ts | 1271 ++++++++++
.../test/Candlestick/utils.test.ts | 53 +
.../test/Gantt/transformProps.test.ts | 261 ++
.../test/MixedTimeseries/transformProps.test.ts | 30 +-
.../test/Timeseries/Bar/controlPanel.test.ts | 62 +-
.../Bar/sparseSubDailyBarGeometry.test.ts | 505 ++++
.../test/Timeseries/Bar/transformProps.test.ts | 107 +-
.../test/Timeseries/transformProps.test.ts | 391 +++
.../test/Timeseries/transformers.test.ts | 106 +-
.../test/Treemap/EchartsTreemap.test.tsx | 123 +
.../test/utils/eventHandlers.test.ts | 74 +
.../test/utils/formatters.test.ts | 37 +
.../plugin-chart-echarts/test/utils/series.test.ts | 255 +-
.../plugins/plugin-chart-handlebars/package.json | 2 +-
.../plugins/plugin-chart-pivot-table/package.json | 2 +-
.../plugin-chart-point-cluster-map/package.json | 2 +-
.../plugin-chart-table/src/transformProps.ts | 44 +-
.../plugin-chart-table/test/TableChart.test.tsx | 32 +
superset-frontend/scripts/build.js | 21 +-
superset-frontend/scripts/copyAssets.js | 56 -
.../EchartsFunnel.tsx => scripts/po2json-cli.js} | 37 +-
superset-frontend/scripts/po2json.js | 96 +
superset-frontend/scripts/po2json.sh | 6 +-
superset-frontend/spec/helpers/testing-library.tsx | 1 +
superset-frontend/spec/scripts/po2json.test.ts | 130 +
.../Chart/DrillDetail/DrillDetailPane.test.tsx | 74 +-
.../useDrillDetailMenuItems.test.tsx | 26 +
.../Datasource/DatasourceModal/index.tsx | 19 +-
.../DatasourceEditor/DatasourceEditor.tsx | 139 +-
.../tests/DatasourceEditor.test.tsx | 31 +
.../ErrorMessage/CsrfErrorMessage.test.tsx | 79 +
.../components/ErrorMessage/CsrfErrorMessage.tsx | 49 +
.../src/components/ErrorMessage/index.tsx | 1 +
.../FilterableTable/exactDecimals.test.tsx | 92 +
.../src/components/FilterableTable/index.tsx | 41 +-
.../components/FilterableTable/sortResults.test.ts | 238 ++
.../src/components/FilterableTable/sortResults.ts | 180 ++
superset-frontend/src/core/chat/ChatHost.tsx | 20 +-
.../actions/chartCustomizationActions.test.ts | 20 +-
.../dashboard/actions/chartCustomizationActions.ts | 4 +-
.../src/dashboard/actions/dashboardInfo.test.ts | 71 +
.../src/dashboard/actions/dashboardInfo.ts | 7 +
.../src/dashboard/actions/hydrate.test.ts | 222 +-
superset-frontend/src/dashboard/actions/hydrate.ts | 28 +-
.../src/dashboard/components/Dashboard.test.tsx | 13 +
.../DashboardBuilder/DashboardContainer.test.tsx | 145 +-
.../DashboardBuilder/DashboardContainer.tsx | 12 +-
.../dashboard/components/Header/Header.test.tsx | 219 +-
.../Header/useHeaderActionsDropdownMenu.tsx | 10 +-
.../Header/useHeaderAutoRefresh.test.tsx | 58 +-
.../components/Header/useHeaderAutoRefresh.ts | 2 +-
.../PropertiesModal/PropertiesModal.test.tsx | 6 +
.../dashboard/components/PropertiesModal/index.tsx | 6 +-
.../components/RefreshIntervalModal.test.tsx | 114 +
.../src/dashboard/components/SaveModal.test.tsx | 178 ++
.../SliceHeaderControls.test.tsx | 43 +
.../components/dnd/dragDroppableConfig.test.ts | 270 ++
.../dashboard/components/dnd/handleDrop.test.ts | 346 +++
.../components/gridComponents/Chart/Chart.test.tsx | 75 +
.../components/gridComponents/Chart/Chart.tsx | 4 +-
.../components/gridComponents/Row/Row.test.tsx | 43 +-
.../components/gridComponents/Row/Row.tsx | 124 +-
.../components/gridComponents/Tabs/Tabs.test.tsx | 147 ++
.../components/gridComponents/Tabs/Tabs.tsx | 22 +-
.../gridComponents/TabsRenderer/TabsRenderer.tsx | 2 +-
.../DownloadMenuItems/DownloadMenuItems.test.tsx | 834 +++++-
.../components/menu/DownloadMenuItems/index.tsx | 322 ++-
.../src/dashboard/components/menu/HoverMenu.tsx | 4 +-
.../nativeFilters/FilterBar/FilterBar.test.tsx | 293 ++-
.../FilterControls.overflow.test.tsx | 93 +-
.../nativeFilters/FilterBar/Vertical.tsx | 6 +
.../nativeFilters/FilterBar/keyValue.test.ts | 147 ++
.../nativeFilters/FilterBar/state.test.ts | 220 ++
.../FiltersConfigForm/FiltersConfigForm.tsx | 61 +-
.../FiltersConfigForm/getControlItemsMap.test.tsx | 14 +
.../FiltersConfigForm/getControlItemsMap.tsx | 3 +-
.../hooks/useFilterOperations.test.ts | 171 +-
.../hooks/useModalSaveLogic.test.ts | 118 +
.../nativeFilters/FiltersConfigModal/utils.test.ts | 42 +
.../components/nativeFilters/utils.test.ts | 13 +
.../components/resizable/ResizableContainer.tsx | 3 +-
superset-frontend/src/dashboard/constants.ts | 6 +
.../dashboard/contexts/AutoRefreshContext.test.tsx | 69 +
.../src/dashboard/contexts/AutoRefreshContext.tsx | 31 +-
.../src/dashboard/reducers/dashboardInfo.ts | 10 +
.../src/dashboard/reducers/dashboardLayout.test.ts | 62 +
.../src/dashboard/reducers/dashboardLayout.ts | 26 +
.../src/dashboard/reducers/dashboardState.test.ts | 23 +
.../src/dashboard/reducers/dashboardState.ts | 2 +
.../src/dashboard/util/crossFilters.test.ts | 75 +
.../src/dashboard/util/crossFilters.ts | 23 +-
.../src/dashboard/util/getDropPosition.test.ts | 83 +
.../src/dashboard/util/getDropPosition.ts | 13 +
.../src/dashboard/util/getRelatedCharts.ts | 32 +-
.../util/removeUnreachableComponents.test.ts | 283 +++
.../dashboard/util/removeUnreachableComponents.ts | 225 ++
.../util/updateComponentParentsList.test.ts | 17 +
.../dashboard/util/updateComponentParentsList.ts | 7 +-
.../ExploreChartHeader/ExploreChartHeader.test.tsx | 8 +
.../ExploreChartPanel/ExploreChartPanel.test.tsx | 11 +-
.../explore/components/ExploreChartPanel/index.tsx | 17 +-
.../ExploreViewContainer.test.tsx | 77 +-
.../components/ExploreViewContainer/index.tsx | 28 +-
.../explore/components/PropertiesModal/index.tsx | 4 +
.../controls/DateFilterControl/DateFilterLabel.tsx | 116 +-
.../tests/DateFilterLabel.test.tsx | 114 +
.../components/controls/DateFilterControl/types.ts | 1 +
superset-frontend/src/explore/constants.ts | 6 +
.../controlUtils/standardizedFormData.test.ts | 29 +
.../explore/controlUtils/standardizedFormData.ts | 4 +
.../src/explore/exploreUtils/exploreUtils.test.tsx | 25 +
.../src/explore/exploreUtils/index.ts | 8 +-
.../src/explore/reducers/exploreReducer.ts | 2 +-
.../src/explore/reducers/saveModalReducer.ts | 15 +-
superset-frontend/src/explore/types.ts | 5 +-
superset-frontend/src/features/home/Menu.test.tsx | 19 +
.../semanticViews/AddSemanticViewModal.test.tsx | 22 +
.../src/features/userInfo/UserInfoModal.test.tsx | 62 +-
.../src/features/userInfo/UserInfoModal.tsx | 26 +-
.../src/features/users/UserListModal.test.tsx | 178 ++
.../src/features/users/UserListModal.tsx | 108 +-
superset-frontend/src/features/users/utils.ts | 8 +-
.../src/features/versionHistory/ActionRow.tsx | 110 +-
.../DashboardVersionHistory.test.tsx | 89 +-
.../versionHistory/DashboardVersionHistory.tsx | 46 +-
.../versionHistory/ExploreVersionHistory.test.tsx | 344 ++-
.../versionHistory/ExploreVersionHistory.tsx | 53 +-
.../features/versionHistory/SaveGroupItem.test.tsx | 92 +-
.../src/features/versionHistory/SaveGroupItem.tsx | 5 -
.../versionHistory/VersionHistoryPanel.test.tsx | 3 +-
.../versionHistory/VersionHistoryPanel.tsx | 16 +-
.../components/Select/SelectFilterPlugin.test.tsx | 41 +
.../components/Select/SelectFilterPlugin.tsx | 22 +-
.../components/Time/TimeFilterPlugin.test.tsx | 133 +
.../filters/components/Time/TimeFilterPlugin.tsx | 1 +
.../src/filters/components/Time/controlPanel.ts | 17 +
.../src/filters/components/Time/types.ts | 1 +
.../TimeColumn/TimeColumnFilterPlugin.test.tsx | 110 +
.../DatabaseList.datasetDependents.test.tsx | 289 +++
superset-frontend/src/pages/DatabaseList/index.tsx | 108 +-
superset-frontend/src/pages/Login/Login.test.tsx | 152 +-
superset-frontend/src/pages/Login/index.tsx | 45 +-
superset-frontend/src/preamble.test.ts | 29 +-
superset-frontend/src/preamble.ts | 10 +-
superset-frontend/src/setup/setupApp.ts | 16 +-
superset-frontend/src/setup/setupErrorMessages.ts | 5 +
superset-frontend/src/types/bootstrapTypes.ts | 1 +
superset-frontend/src/utils/colorScheme.test.ts | 230 ++
superset-frontend/src/utils/softDeleteCopy.test.ts | 11 +
superset-frontend/src/utils/softDeleteCopy.ts | 14 +
superset-frontend/src/utils/urlUtils.test.ts | 23 +
superset-frontend/src/views/App.test.tsx | 125 +
superset-frontend/src/views/App.tsx | 28 +-
.../src/visualizations/presets/MainPreset.ts | 4 +
superset-websocket/package-lock.json | 580 ++---
superset-websocket/package.json | 10 +-
superset/charts/api.py | 23 +-
superset/charts/client_processing.py | 9 +-
superset/charts/data/api.py | 65 +-
superset/charts/schemas.py | 61 +-
superset/cli/deletion_retention.py | 20 +-
superset/cli/importexport.py | 8 +-
superset/commands/chart/update.py | 11 +-
superset/commands/dashboard/update.py | 7 +-
superset/commands/database/exceptions.py | 14 +-
superset/commands/database/oauth2.py | 27 +-
superset/commands/database/tables.py | 41 +-
superset/commands/database/update.py | 54 +-
superset/commands/database/utils.py | 47 +
superset/commands/dataset/refresh.py | 5 +
superset/commands/dataset/update.py | 19 +-
superset/commands/deletion_retention/window.py | 77 +-
superset/commands/distributed_lock/acquire.py | 9 +-
superset/commands/importers/v1/__init__.py | 6 +-
superset/commands/importers/v1/utils.py | 23 +-
superset/commands/report/alert.py | 12 +-
superset/commands/semantic_layer/update.py | 55 +-
superset/commands/sql_lab/estimate.py | 10 +-
superset/commands/sql_lab/export.py | 14 +
superset/commands/streaming_export/base.py | 52 +-
superset/commands/version_restore.py | 9 +-
superset/common/query_context_factory.py | 36 +
superset/common/query_context_processor.py | 32 +-
superset/common/utils/query_cache_manager.py | 2 +
superset/config.py | 302 ++-
superset/connectors/sqla/models.py | 78 +-
superset/connectors/sqla/utils.py | 10 +
superset/constants.py | 9 +
superset/daos/base.py | 9 +-
superset/daos/dashboard.py | 63 +-
superset/daos/database.py | 43 +-
superset/daos/dataset.py | 31 +-
superset/daos/datasource.py | 2 +-
superset/dashboards/api.py | 500 +++-
superset/dashboards/excel_export/download_link.py | 160 ++
superset/dashboards/excel_export/email.py | 46 +-
superset/dashboards/excel_export/storage.py | 81 +
superset/dashboards/excel_export/sync_budget.py | 272 ++
superset/dashboards/excel_export/workbook.py | 324 +++
superset/dashboards/filters.py | 22 +-
superset/dashboards/layout.py | 269 ++
superset/databases/api.py | 43 +-
superset/databases/schemas.py | 15 +
superset/dataframe.py | 133 +-
superset/datasets/api.py | 16 +-
superset/datasets/schemas.py | 3 +-
superset/db_engine_specs/__init__.py | 31 +-
superset/db_engine_specs/aurora.py | 79 +
superset/db_engine_specs/base.py | 183 +-
superset/db_engine_specs/bigquery.py | 4 +
superset/db_engine_specs/clickhouse.py | 22 +-
superset/db_engine_specs/crate.py | 35 +-
superset/db_engine_specs/d1.py | 142 +-
superset/db_engine_specs/databend.py | 2 +-
superset/db_engine_specs/databricks.py | 234 +-
superset/db_engine_specs/datafusion.py | 34 +-
superset/db_engine_specs/db2.py | 39 +-
superset/db_engine_specs/doris.py | 111 +-
superset/db_engine_specs/duckdb.py | 39 +
superset/db_engine_specs/dynamodb.py | 24 +-
superset/db_engine_specs/elasticsearch.py | 84 +-
superset/db_engine_specs/exasol.py | 76 +
superset/db_engine_specs/gsheets.py | 142 +-
superset/db_engine_specs/ibmi.py | 45 +-
superset/db_engine_specs/impala.py | 21 +
superset/db_engine_specs/kusto.py | 35 +
superset/db_engine_specs/kylin.py | 50 +-
superset/db_engine_specs/mongodb.py | 72 +-
superset/db_engine_specs/mssql.py | 2 -
superset/db_engine_specs/mysql.py | 349 +++
superset/db_engine_specs/oracle.py | 118 +-
superset/db_engine_specs/pinot.py | 11 +
superset/db_engine_specs/postgres.py | 14 +-
superset/db_engine_specs/snowflake.py | 13 +-
superset/db_engine_specs/starrocks.py | 12 +-
superset/embedded/view.py | 8 +-
superset/errors.py | 1 +
superset/exceptions.py | 41 +
superset/extensions/__init__.py | 6 +-
superset/extensions/metastore_cache.py | 35 +-
superset/importexport/api.py | 9 +-
superset/initialization/__init__.py | 2 +-
superset/jinja_context.py | 12 +-
superset/key_value/types.py | 1 +
superset/mcp_service/SECURITY.md | 2 +-
superset/mcp_service/__main__.py | 4 +-
superset/mcp_service/app.py | 21 +-
superset/mcp_service/auth.py | 35 +-
superset/mcp_service/caching.py | 28 +-
.../mcp_service/catalog}/__init__.py | 0
superset/mcp_service/catalog/schemas.py | 131 +
.../catalog/tool}/__init__.py | 19 +-
superset/mcp_service/catalog/tool/get_catalog.py | 443 ++++
superset/mcp_service/chart/chart_helpers.py | 180 +-
superset/mcp_service/chart/chart_utils.py | 248 +-
superset/mcp_service/chart/compile.py | 49 +-
superset/mcp_service/chart/plugin.py | 222 +-
superset/mcp_service/chart/plugins/big_number.py | 55 +-
superset/mcp_service/chart/plugins/bubble.py | 27 +-
superset/mcp_service/chart/plugins/gantt.py | 79 +-
superset/mcp_service/chart/plugins/gauge.py | 63 +-
superset/mcp_service/chart/plugins/handlebars.py | 4 +
superset/mcp_service/chart/plugins/histogram.py | 98 +-
.../mcp_service/chart/plugins/mixed_timeseries.py | 43 +
superset/mcp_service/chart/plugins/table.py | 1 +
superset/mcp_service/chart/plugins/treemap.py | 151 +-
superset/mcp_service/chart/plugins/waterfall.py | 35 +
superset/mcp_service/chart/preview_utils.py | 237 +-
superset/mcp_service/chart/query_result.py | 126 +-
superset/mcp_service/chart/registry.py | 49 +-
superset/mcp_service/chart/schemas.py | 475 ++--
superset/mcp_service/chart/tool/generate_chart.py | 7 +-
superset/mcp_service/chart/tool/get_chart_data.py | 65 +-
.../mcp_service/chart/tool/get_chart_preview.py | 126 +-
superset/mcp_service/chart/tool/get_chart_sql.py | 4 +-
.../chart/tool/get_chart_type_schema.py | 21 +-
superset/mcp_service/chart/tool/update_chart.py | 73 +-
.../mcp_service/chart/tool/update_chart_preview.py | 85 +-
superset/mcp_service/chart/treemap_preview.py | 297 +++
.../chart/validation/dataset_validator.py | 6 +-
superset/mcp_service/constants.py | 30 +-
superset/mcp_service/dashboard/schemas.py | 30 +-
.../mcp_service/dashboard/tool/delete_dashboard.py | 2 +-
.../dashboard/tool/generate_dashboard.py | 3 +-
superset/mcp_service/dataset/schemas.py | 357 ++-
superset/mcp_service/dataset/tool/__init__.py | 10 +
.../dataset/tool/create_dataset_metric.py | 172 ++
.../mcp_service/dataset/tool/delete_dataset.py | 217 ++
.../dataset/tool/delete_dataset_metric.py | 246 ++
superset/mcp_service/dataset/tool/list_datasets.py | 7 +-
.../mcp_service/dataset/tool/restore_dataset.py | 258 ++
.../mcp_service/dataset/tool/update_dataset.py | 340 +++
superset/mcp_service/dataset_scope.py | 6 +-
.../explore/tool/generate_explore_link.py | 5 +-
superset/mcp_service/mcp_config.py | 49 +-
superset/mcp_service/middleware.py | 519 +++-
superset/mcp_service/semantic_layer/schemas.py | 29 +-
superset/mcp_service/server.py | 179 +-
superset/mcp_service/sql_lab/schemas.py | 18 +-
superset/mcp_service/sql_lab/tool/execute_sql.py | 19 -
.../{token_utils.py => response_size_utils.py} | 324 +--
superset/mcp_service/utils/response_utils.py | 8 +-
superset/mcp_service/utils/serialization.py | 225 ++
superset/mcp_service/utils/validation.py | 218 ++
superset/migrations/shared/security_converge.py | 34 +
...4fb8bfc1_delete_deprecated_permissions_33272.py | 153 ++
...a4572f8a_rename_deprecated_permissions_33272.py | 193 ++
...e6_merge_deprecated_permissions_with_master.py} | 36 +-
...merge_deprecated_permissions_with_master_v2.py} | 36 +-
...merge_deprecated_permissions_with_master_v3.py} | 36 +-
superset/models/core.py | 62 +-
superset/models/dashboard.py | 3 +
superset/models/helpers.py | 118 +-
superset/models/slice.py | 7 +-
superset/models/sql_lab.py | 29 +-
superset/queries/saved_queries/api.py | 7 +-
superset/reports/schemas.py | 41 +
superset/result_set.py | 8 +
superset/security/api.py | 13 +-
superset/security/manager.py | 598 ++++-
superset/security/password_change.py | 70 +-
superset/sql/dialects/__init__.py | 2 +
superset/sql/dialects/databend.py | 604 +++++
superset/sql/dialects/db2.py | 81 +-
superset/sql/execution/celery_task.py | 2 +-
superset/sql/execution/executor.py | 13 +
superset/sql/parse.py | 523 +++-
superset/sql_lab.py | 7 +-
superset/sqllab/api.py | 7 +
superset/subjects/utils.py | 40 +-
superset/tasks/deletion_retention.py | 10 +-
superset/tasks/export_dashboard_excel.py | 564 ++---
superset/tasks/version_history_retention.py | 33 +-
superset/themes/api.py | 7 +-
superset/translations/ar/LC_MESSAGES/messages.po | 660 +++--
superset/translations/ca/LC_MESSAGES/messages.po | 601 +++--
superset/translations/cs/LC_MESSAGES/messages.po | 529 +++-
superset/translations/de/LC_MESSAGES/messages.po | 327 ++-
superset/translations/en/LC_MESSAGES/messages.po | 305 ++-
superset/translations/es/LC_MESSAGES/messages.po | 332 ++-
superset/translations/fa/LC_MESSAGES/messages.po | 658 +++--
superset/translations/fi/LC_MESSAGES/messages.po | 636 +++--
superset/translations/fr/LC_MESSAGES/messages.po | 333 ++-
superset/translations/it/LC_MESSAGES/messages.po | 339 ++-
superset/translations/ja/LC_MESSAGES/messages.po | 311 ++-
superset/translations/ko/LC_MESSAGES/messages.po | 765 ++++--
superset/translations/lv/LC_MESSAGES/messages.po | 546 ++--
superset/translations/messages.pot | 2657 ++++++--------------
superset/translations/mi/LC_MESSAGES/messages.po | 594 +++--
superset/translations/nl/LC_MESSAGES/messages.po | 676 +++--
superset/translations/pl/LC_MESSAGES/messages.po | 717 ++++--
superset/translations/pt/LC_MESSAGES/messages.po | 337 ++-
.../translations/pt_BR/LC_MESSAGES/messages.po | 657 +++--
superset/translations/ro/LC_MESSAGES/messages.po | 335 ++-
superset/translations/ru/LC_MESSAGES/messages.po | 328 ++-
superset/translations/sk/LC_MESSAGES/messages.po | 533 +++-
superset/translations/sl/LC_MESSAGES/messages.po | 332 ++-
superset/translations/sr/LC_MESSAGES/messages.po | 334 ++-
.../translations/sr_Latn/LC_MESSAGES/messages.po | 334 ++-
superset/translations/ta/LC_MESSAGES/messages.po | 619 +++--
superset/translations/th/LC_MESSAGES/messages.po | 611 +++--
superset/translations/tr/LC_MESSAGES/messages.po | 353 ++-
superset/translations/uk/LC_MESSAGES/messages.po | 547 ++--
superset/translations/zh/LC_MESSAGES/messages.po | 361 ++-
.../translations/zh_TW/LC_MESSAGES/messages.po | 597 +++--
superset/utils/core.py | 32 +-
superset/utils/csv.py | 10 +
superset/utils/database.py | 76 +-
superset/utils/date_parser.py | 2 +-
superset/utils/error_sanitization.py | 1 +
superset/utils/excel.py | 83 +-
superset/utils/export_storage.py | 76 +
superset/utils/gcs.py | 101 +
superset/utils/log.py | 101 +-
superset/utils/network.py | 115 +
superset/utils/number_format.py | 10 +-
superset/utils/rls.py | 114 +-
superset/utils/s3.py | 124 +-
superset/utils/screenshots.py | 9 +-
superset/utils/webdriver.py | 8 +-
superset/versioning/api_helpers.py | 38 +-
superset/versioning/baseline/listener.py | 3 +-
superset/versioning/changes/listener.py | 7 +
superset/versioning/queries.py | 4 +-
superset/versioning/restore.py | 225 +-
superset/versioning/snapshot.py | 275 ++
superset/versioning/unit_of_work.py | 54 +
superset/versioning/utils.py | 40 +-
superset/views/auth.py | 11 +-
superset/views/base.py | 7 +-
superset/views/error_handling.py | 18 +-
superset/views/users/api.py | 7 +-
superset/views/users/schemas.py | 39 +-
superset/views/utils.py | 14 +-
tests/integration_tests/base_tests.py | 14 +-
tests/integration_tests/charts/api_tests.py | 120 +
tests/integration_tests/charts/commands_tests.py | 133 +-
.../charts/semantic_save_tests.py | 82 +-
tests/integration_tests/core_tests.py | 30 +-
tests/integration_tests/dashboards/api_tests.py | 1006 +++++++-
.../dashboards/soft_delete_tests.py | 7 +
tests/integration_tests/databases/api_tests.py | 108 +-
.../integration_tests/databases/commands_tests.py | 19 +-
tests/integration_tests/datasets/api_tests.py | 15 +-
tests/integration_tests/embedded/test_view.py | 23 +
tests/integration_tests/reports/api_tests.py | 75 +
tests/integration_tests/reports/commands_tests.py | 65 +-
tests/integration_tests/security/api_tests.py | 28 +
.../security/row_level_security_tests.py | 110 +
tests/integration_tests/security_tests.py | 8 +
.../versioning/activity_write_after_read_tests.py | 4 +-
.../versioning/conditional_token_lock_tests.py | 22 +-
.../versioning/creation_row_tests.py | 34 +-
.../versioning/restore_fails_closed_tests.py | 27 +-
.../versioning/retention_prune_tests.py | 2 +-
.../versioning/versions_api_tests.py | 108 +-
.../db_engine_specs/test_databend.py | 43 +-
.../unit_tests/charts/data/test_non_dict_params.py | 116 +
.../charts/semantic_view_chart_filter_test.py | 9 +-
tests/unit_tests/charts/test_chart_data_api.py | 197 ++
tests/unit_tests/charts/test_client_processing.py | 55 +
tests/unit_tests/charts/test_filters.py | 96 +
tests/unit_tests/charts/test_schemas.py | 92 +-
tests/unit_tests/cli/deletion_retention_test.py | 30 +-
tests/unit_tests/commands/chart/create_test.py | 33 +-
.../chart/streaming_export_command_test.py | 61 +
tests/unit_tests/commands/chart/update_test.py | 66 +-
tests/unit_tests/commands/dashboard/update_test.py | 46 +
tests/unit_tests/commands/databases/oauth2_test.py | 73 +-
tests/unit_tests/commands/databases/tables_test.py | 165 ++
tests/unit_tests/commands/databases/update_test.py | 114 +
tests/unit_tests/commands/databases/utils_test.py | 58 +
tests/unit_tests/commands/dataset/refresh_test.py | 27 +-
.../commands/importers/v1/import_models_test.py | 93 +
.../unit_tests/commands/importers/v1/utils_test.py | 196 +-
tests/unit_tests/commands/report/alert_test.py | 37 +
.../commands/report/execution_claim_test.py | 5 +-
.../commands/semantic_layer/update_test.py | 96 +
tests/unit_tests/commands/sql_lab/export_test.py | 113 +
.../sql_lab/streaming_export_command_test.py | 74 +
tests/unit_tests/commands/sql_lab/test_estimate.py | 30 +
.../common/test_query_context_factory.py | 201 ++
.../common/test_query_context_processor.py | 117 +-
tests/unit_tests/config_test.py | 286 ++-
tests/unit_tests/connectors/sqla/models_test.py | 376 ++-
tests/unit_tests/connectors/sqla/utils_test.py | 27 +-
tests/unit_tests/dao/base_dao_test.py | 29 +-
tests/unit_tests/dao/dashboard_test.py | 386 ++-
tests/unit_tests/dao/test_query_stop_race.py | 68 +-
.../unit_tests/daos/test_dataset_dao.py | 35 +-
tests/unit_tests/dashboards/api_test.py | 116 +
tests/unit_tests/dashboards/datasets_test.py | 1 +
tests/unit_tests/dashboards/layout_test.py | 325 +++
.../dashboards/semantic_view_access_test.py | 68 +-
.../dashboards/test_excel_export_download_link.py | 65 +
.../dashboards/test_excel_export_email.py | 19 +
.../dashboards/test_excel_export_storage.py | 178 ++
.../dashboards/test_excel_export_sync_budget.py | 563 +++++
.../dashboards/test_excel_export_workbook.py | 146 ++
tests/unit_tests/databases/api_test.py | 218 +-
.../databases/dao/related_objects_test.py | 122 +
tests/unit_tests/databases/oauth2_api_test.py | 32 +-
tests/unit_tests/dataframe_test.py | 258 +-
tests/unit_tests/datasets/schema_tests.py | 1 +
tests/unit_tests/datasource/dao_tests.py | 16 +
tests/unit_tests/db_engine_specs/test_base.py | 421 +++-
tests/unit_tests/db_engine_specs/test_crate.py | 83 +-
tests/unit_tests/db_engine_specs/test_d1.py | 337 +++
.../unit_tests/db_engine_specs/test_databricks.py | 300 ++-
.../db_engine_specs/test_databricks_multi_cloud.py | 4 +
.../unit_tests/db_engine_specs/test_datafusion.py | 32 +-
tests/unit_tests/db_engine_specs/test_db2.py | 87 +-
tests/unit_tests/db_engine_specs/test_doris.py | 227 +-
tests/unit_tests/db_engine_specs/test_duckdb.py | 145 ++
tests/unit_tests/db_engine_specs/test_dynamodb.py | 88 +-
.../db_engine_specs/test_elasticsearch.py | 185 +-
tests/unit_tests/db_engine_specs/test_exasol.py | 191 ++
tests/unit_tests/db_engine_specs/test_gsheets.py | 496 +++-
tests/unit_tests/db_engine_specs/test_ibmi.py | 76 +
tests/unit_tests/db_engine_specs/test_impala.py | 109 +
tests/unit_tests/db_engine_specs/test_init.py | 143 ++
tests/unit_tests/db_engine_specs/test_kylin.py | 50 +
tests/unit_tests/db_engine_specs/test_mariadb.py | 83 +
tests/unit_tests/db_engine_specs/test_mongodb.py | 241 +-
tests/unit_tests/db_engine_specs/test_mysql.py | 741 ++++++
tests/unit_tests/db_engine_specs/test_oracle.py | 111 +-
tests/unit_tests/db_engine_specs/test_pinot.py | 41 +-
tests/unit_tests/db_engine_specs/test_postgres.py | 16 +-
tests/unit_tests/db_engine_specs/test_snowflake.py | 54 +-
tests/unit_tests/db_engine_specs/test_starrocks.py | 73 +-
tests/unit_tests/db_engine_specs/test_trino.py | 7 +-
.../distributed_lock/distributed_lock_tests.py | 22 +
.../unit_tests/extensions/metastore_cache_test.py | 93 +
tests/unit_tests/jinja_context_test.py | 31 +
.../unit_tests/mcp_service/catalog}/__init__.py | 0
.../mcp_service/catalog/tool}/__init__.py | 0
.../mcp_service/catalog/tool/test_get_catalog.py | 921 +++++++
.../mcp_service/chart/test_chart_helpers.py | 113 +
.../chart/test_chart_plugin_contract.py | 762 ++++++
.../chart/test_histogram_boxplot_charts.py | 62 +
.../mcp_service/chart/test_preview_utils.py | 191 ++
.../unit_tests/mcp_service/chart/test_registry.py | 56 +-
.../mcp_service/chart/test_registry_filters.py | 9 +
.../mcp_service/chart/test_treemap_completeness.py | 1437 +++++++++++
.../mcp_service/chart/tool/test_generate_chart.py | 57 +
.../mcp_service/chart/tool/test_get_chart_data.py | 218 +-
.../chart/tool/test_get_chart_preview.py | 37 +
.../chart/tool/test_get_chart_type_schema.py | 36 +
.../mcp_service/chart/tool/test_update_chart.py | 43 +-
.../chart/tool/test_update_chart_preview.py | 31 +
.../dashboard/tool/test_dashboard_generation.py | 63 +
.../dashboard/tool/test_duplicate_dashboard.py | 21 +-
.../dataset/tool/test_create_dataset.py | 1 +
.../dataset/tool/test_dataset_metric_mutations.py | 529 ++++
.../mcp_service/dataset/tool/test_dataset_tools.py | 18 +-
.../dataset/tool/test_delete_dataset.py | 340 +++
.../tool/test_list_datasets_deleted_state.py | 206 ++
.../dataset/tool/test_restore_dataset.py | 384 +++
.../dataset/tool/test_update_dataset.py | 574 +++++
.../explore/tool/test_generate_explore_link.py | 74 +
.../semantic_layer/tool/test_list_metrics.py | 62 +-
.../mcp_service/sql_lab/tool/test_execute_sql.py | 104 +-
.../mcp_service/test_chart_tool_inventory.py | 351 +++
.../mcp_service/test_error_classification.py | 678 +++++
.../test_isdigit_isdecimal_regression.py | 149 ++
tests/unit_tests/mcp_service/test_mcp_caching.py | 67 +-
.../mcp_service/test_mcp_tool_registration.py | 16 +-
tests/unit_tests/mcp_service/test_middleware.py | 231 +-
.../mcp_service/test_rbac_tool_enforcement.py | 30 +
.../mcp_service/test_response_serialization.py | 321 +++
.../test_sanitization_warning_inputs.py | 80 +
.../unit_tests/mcp_service/test_tool_inventory.py | 226 ++
.../mcp_service/test_tool_search_transform.py | 759 +++---
.../mcp_service/test_validation_contract.py | 511 ++++
..._token_utils.py => test_response_size_utils.py} | 265 +-
.../mcp_service/utils/test_serialization.py | 294 +++
.../migrations/shared/security_converge_test.py | 218 ++
.../test_deprecated_permissions_33272.py | 420 ++++
tests/unit_tests/models/core_test.py | 186 +-
tests/unit_tests/models/dashboard_test.py | 41 +-
.../unit_tests/models/helpers_rls_rollback_test.py | 80 +
tests/unit_tests/models/helpers_test.py | 59 +-
.../models/select_alias_shadowing_test.py | 184 ++
tests/unit_tests/models/slice_test.py | 28 +
.../models/test_virtual_dataset_format.py | 76 +-
tests/unit_tests/reports/schemas_test.py | 83 +
tests/unit_tests/result_set_test.py | 93 +
tests/unit_tests/scripts/change_detector_test.py | 10 +
.../scripts/docker_release_target_test.py | 177 ++
.../scripts/translations/babel_update_test.py | 355 +++
.../scripts/translations/check_pot_drift_test.py | 82 +
tests/unit_tests/security/guest_rls_test.py | 373 ++-
tests/unit_tests/security/manager_test.py | 722 +++++-
tests/unit_tests/security/test_password_change.py | 166 +-
.../security/test_permission_instructions_link.py | 4 +-
tests/unit_tests/semantic_layers/models_test.py | 225 ++
.../sql/dialects/databend_function_catalogue.txt | 741 ++++++
tests/unit_tests/sql/dialects/databend_tests.py | 1553 ++++++++++++
tests/unit_tests/sql/dialects/db2_tests.py | 20 +
tests/unit_tests/sql/execution/test_celery_task.py | 40 +
tests/unit_tests/sql/execution/test_executor.py | 51 +
tests/unit_tests/sql/parse_tests.py | 523 +++-
tests/unit_tests/sql_lab_test.py | 92 +-
tests/unit_tests/sqllab/api_test.py | 45 +
tests/unit_tests/subjects/test_raise_for_access.py | 122 +
tests/unit_tests/subjects/test_utils.py | 80 +
tests/unit_tests/tasks/test_deletion_retention.py | 206 +-
.../tasks/test_export_dashboard_excel.py | 797 +++++-
.../tasks/test_version_history_retention.py | 223 +-
.../sk_sql_lab_progress_message_test.py | 64 +
tests/unit_tests/utils/create_zip_tests.py | 84 +
tests/unit_tests/utils/excel_tests.py | 38 +-
tests/unit_tests/utils/gcs_tests.py | 120 +
tests/unit_tests/utils/log_tests.py | 150 +-
tests/unit_tests/utils/number_format_test.py | 26 +
tests/unit_tests/utils/rls_test.py | 36 +
tests/unit_tests/utils/s3_tests.py | 102 +-
tests/unit_tests/utils/screenshot_test.py | 57 +
tests/unit_tests/utils/test_core.py | 65 +-
tests/unit_tests/utils/test_database.py | 110 +-
tests/unit_tests/utils/test_network.py | 81 +-
.../unit_tests/versioning/test_api_feature_flag.py | 167 ++
.../versioning/test_capture_gap_restore.py | 809 ++++++
tests/unit_tests/versioning/test_listener.py | 88 +-
tests/unit_tests/versioning/test_restore.py | 78 +-
.../unit_tests/versioning/test_runtime_capture.py | 396 +++
tests/unit_tests/views/test_auth_login.py | 77 +
tests/unit_tests/views/test_bootstrap_auth.py | 20 +
tests/unit_tests/views/test_current_user_api.py | 103 +-
tests/unit_tests/views/test_error_handling.py | 136 +-
tests/unit_tests/views/test_utils.py | 69 +-
786 files changed, 83305 insertions(+), 16091 deletions(-)
create mode 100644 .github/workflows/python-nightly-canary.yml
delete mode 100644 .github/workflows/superset-playwright.yml
create mode 100644 .grype.yaml
create mode 100644 docs/admin_docs/configuration/google-sheets.mdx
create mode 100644 docs/static/img/version-history/recently-archived.jpg
create mode 100644 docs/static/img/version-history/version-history-panel.jpg
create mode 100644 docs/static/img/version-history/version-history-preview.jpg
create mode 100644 scripts/docker_release_target.py
create mode 100644 superset-embedded-sdk/testrig/README.md
create mode 100644 superset-embedded-sdk/testrig/drive.mjs
create mode 100644 superset-embedded-sdk/testrig/embedded.html
create mode 100644 superset-embedded-sdk/testrig/host.html
create mode 100644 superset-embedded-sdk/testrig/server.mjs
delete mode 100644
superset-frontend/cypress-base/cypress/e2e/dashboard/drilltodetail.test.ts
delete mode 100644
superset-frontend/cypress-base/cypress/e2e/dashboard/shared_dashboard_functions.ts
delete mode 100644
superset-frontend/cypress-base/cypress/e2e/dashboard/utils.ts
delete mode 100644
superset-frontend/cypress-base/cypress/e2e/explore/chart.test.js
delete mode 100644 superset-frontend/cypress-base/cypress/e2e/explore/utils.ts
delete mode 100644
superset-frontend/cypress-base/cypress/e2e/explore/visualizations/shared.helper.js
delete mode 100644
superset-frontend/cypress-base/cypress/support/directories.ts
create mode 100644
superset-frontend/packages/superset-ui-core/src/chart/components/Matrixify/virtualizationEvents.ts
create mode 100644
superset-frontend/packages/superset-ui-core/test/connection/SupersetClientCsrfRecovery.test.ts
create mode 100644 superset-frontend/playwright/components/core/Radio.ts
create mode 100644
superset-frontend/playwright/components/modals/SaveChartModal.ts
delete mode 100644 superset-frontend/playwright/tests/experimental/README.md
create mode 100644
superset-frontend/playwright/tests/explore/cross-referenced-dashboards.spec.ts
create mode 100644
superset-frontend/playwright/tests/explore/explore-no-results.spec.ts
create mode 100644
superset-frontend/playwright/tests/explore/explore-save.spec.ts
create mode 100644
superset-frontend/playwright/tests/explore/explore-test-helpers.ts
rename superset-frontend/playwright/tests/{experimental =>
}/explore/results-tab-reuse.spec.ts (87%)
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/EchartsCandlestick.tsx
copy superset-frontend/{src/filters/components/Time/types.ts =>
plugins/plugin-chart-echarts/src/Candlestick/buildQuery.ts} (54%)
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/constants.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/controlPanel.tsx
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/images/example1-dark.png
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/images/example1.png
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/images/thumbnail-dark.png
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/images/thumbnail.png
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/index.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/transformProps.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/types.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/Candlestick/utils.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/utils/legendEventHandlers.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/src/utils/legendEventHandlers.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Candlestick/EchartsCandlestick.test.tsx
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Candlestick/buildQuery.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Candlestick/controlPanel.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Candlestick/transformProps.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Candlestick/utils.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Timeseries/Bar/sparseSubDailyBarGeometry.test.ts
create mode 100644
superset-frontend/plugins/plugin-chart-echarts/test/Treemap/EchartsTreemap.test.tsx
delete mode 100644 superset-frontend/scripts/copyAssets.js
copy
superset-frontend/{plugins/plugin-chart-echarts/src/Funnel/EchartsFunnel.tsx =>
scripts/po2json-cli.js} (55%)
create mode 100644 superset-frontend/scripts/po2json.js
create mode 100644 superset-frontend/spec/scripts/po2json.test.ts
create mode 100644
superset-frontend/src/components/ErrorMessage/CsrfErrorMessage.test.tsx
create mode 100644
superset-frontend/src/components/ErrorMessage/CsrfErrorMessage.tsx
create mode 100644
superset-frontend/src/components/FilterableTable/exactDecimals.test.tsx
create mode 100644
superset-frontend/src/components/FilterableTable/sortResults.test.ts
create mode 100644
superset-frontend/src/components/FilterableTable/sortResults.ts
create mode 100644
superset-frontend/src/dashboard/actions/dashboardInfo.test.ts
create mode 100644
superset-frontend/src/dashboard/components/RefreshIntervalModal.test.tsx
create mode 100644
superset-frontend/src/dashboard/components/SaveModal.test.tsx
create mode 100644
superset-frontend/src/dashboard/components/dnd/dragDroppableConfig.test.ts
create mode 100644
superset-frontend/src/dashboard/components/dnd/handleDrop.test.ts
create mode 100644
superset-frontend/src/dashboard/components/nativeFilters/FilterBar/keyValue.test.ts
create mode 100644
superset-frontend/src/dashboard/components/nativeFilters/FilterBar/state.test.ts
create mode 100644
superset-frontend/src/dashboard/components/nativeFilters/FiltersConfigModal/hooks/useModalSaveLogic.test.ts
create mode 100644
superset-frontend/src/dashboard/util/removeUnreachableComponents.test.ts
create mode 100644
superset-frontend/src/dashboard/util/removeUnreachableComponents.ts
create mode 100644 superset-frontend/src/features/users/UserListModal.test.tsx
create mode 100644
superset-frontend/src/filters/components/Time/TimeFilterPlugin.test.tsx
create mode 100644
superset-frontend/src/filters/components/TimeColumn/TimeColumnFilterPlugin.test.tsx
create mode 100644
superset-frontend/src/pages/DatabaseList/DatabaseList.datasetDependents.test.tsx
create mode 100644 superset-frontend/src/utils/colorScheme.test.ts
create mode 100644 superset-frontend/src/views/App.test.tsx
create mode 100644 superset/dashboards/excel_export/download_link.py
create mode 100644 superset/dashboards/excel_export/storage.py
create mode 100644 superset/dashboards/excel_export/sync_budget.py
create mode 100644 superset/dashboards/excel_export/workbook.py
create mode 100644 superset/dashboards/layout.py
copy {scripts => superset/mcp_service/catalog}/__init__.py (100%)
create mode 100644 superset/mcp_service/catalog/schemas.py
copy superset/{sql/dialects => mcp_service/catalog/tool}/__init__.py (68%)
create mode 100644 superset/mcp_service/catalog/tool/get_catalog.py
create mode 100644 superset/mcp_service/chart/treemap_preview.py
create mode 100644 superset/mcp_service/dataset/tool/create_dataset_metric.py
create mode 100644 superset/mcp_service/dataset/tool/delete_dataset.py
create mode 100644 superset/mcp_service/dataset/tool/delete_dataset_metric.py
create mode 100644 superset/mcp_service/dataset/tool/restore_dataset.py
create mode 100644 superset/mcp_service/dataset/tool/update_dataset.py
rename superset/mcp_service/utils/{token_utils.py => response_size_utils.py}
(81%)
create mode 100644 superset/mcp_service/utils/serialization.py
create mode 100644 superset/mcp_service/utils/validation.py
create mode 100644
superset/migrations/versions/2026-09-10_00-00_1f5f4fb8bfc1_delete_deprecated_permissions_33272.py
create mode 100644
superset/migrations/versions/2026-09-10_00-01_3ce9a4572f8a_rename_deprecated_permissions_33272.py
copy superset/{sql/dialects/__init__.py =>
migrations/versions/2026-09-16_00-01_2ce579e91ae6_merge_deprecated_permissions_with_master.py}
(67%)
copy superset/{sql/dialects/__init__.py =>
migrations/versions/2026-09-17_00-00_53a7abc31422_merge_deprecated_permissions_with_master_v2.py}
(67%)
copy superset/{sql/dialects/__init__.py =>
migrations/versions/2026-09-23_00-00_95d8a99c822e_merge_deprecated_permissions_with_master_v3.py}
(67%)
create mode 100644 superset/sql/dialects/databend.py
create mode 100644 superset/utils/export_storage.py
create mode 100644 superset/utils/gcs.py
create mode 100644 superset/versioning/snapshot.py
create mode 100644 superset/versioning/unit_of_work.py
create mode 100644 tests/unit_tests/charts/data/test_non_dict_params.py
create mode 100644 tests/unit_tests/commands/importers/v1/import_models_test.py
create mode 100644 tests/unit_tests/commands/sql_lab/export_test.py
copy superset/sql/dialects/__init__.py =>
tests/unit_tests/daos/test_dataset_dao.py (63%)
create mode 100644 tests/unit_tests/dashboards/layout_test.py
create mode 100644
tests/unit_tests/dashboards/test_excel_export_download_link.py
create mode 100644 tests/unit_tests/dashboards/test_excel_export_storage.py
create mode 100644 tests/unit_tests/dashboards/test_excel_export_sync_budget.py
create mode 100644 tests/unit_tests/dashboards/test_excel_export_workbook.py
create mode 100644 tests/unit_tests/databases/dao/related_objects_test.py
create mode 100644 tests/unit_tests/db_engine_specs/test_d1.py
create mode 100644 tests/unit_tests/db_engine_specs/test_exasol.py
create mode 100644 tests/unit_tests/db_engine_specs/test_ibmi.py
create mode 100644 tests/unit_tests/extensions/metastore_cache_test.py
copy {scripts => tests/unit_tests/mcp_service/catalog}/__init__.py (100%)
copy {scripts => tests/unit_tests/mcp_service/catalog/tool}/__init__.py (100%)
create mode 100644
tests/unit_tests/mcp_service/catalog/tool/test_get_catalog.py
create mode 100644
tests/unit_tests/mcp_service/chart/test_chart_plugin_contract.py
create mode 100644
tests/unit_tests/mcp_service/chart/test_treemap_completeness.py
create mode 100644
tests/unit_tests/mcp_service/dataset/tool/test_dataset_metric_mutations.py
create mode 100644
tests/unit_tests/mcp_service/dataset/tool/test_delete_dataset.py
create mode 100644
tests/unit_tests/mcp_service/dataset/tool/test_list_datasets_deleted_state.py
create mode 100644
tests/unit_tests/mcp_service/dataset/tool/test_restore_dataset.py
create mode 100644
tests/unit_tests/mcp_service/dataset/tool/test_update_dataset.py
create mode 100644 tests/unit_tests/mcp_service/test_chart_tool_inventory.py
create mode 100644 tests/unit_tests/mcp_service/test_error_classification.py
create mode 100644
tests/unit_tests/mcp_service/test_isdigit_isdecimal_regression.py
create mode 100644 tests/unit_tests/mcp_service/test_response_serialization.py
create mode 100644
tests/unit_tests/mcp_service/test_sanitization_warning_inputs.py
create mode 100644 tests/unit_tests/mcp_service/test_tool_inventory.py
create mode 100644 tests/unit_tests/mcp_service/test_validation_contract.py
rename tests/unit_tests/mcp_service/utils/{test_token_utils.py =>
test_response_size_utils.py} (87%)
create mode 100644 tests/unit_tests/mcp_service/utils/test_serialization.py
create mode 100644 tests/unit_tests/migrations/shared/security_converge_test.py
create mode 100644
tests/unit_tests/migrations/test_deprecated_permissions_33272.py
create mode 100644 tests/unit_tests/models/helpers_rls_rollback_test.py
create mode 100644 tests/unit_tests/models/select_alias_shadowing_test.py
create mode 100644 tests/unit_tests/scripts/docker_release_target_test.py
create mode 100644 tests/unit_tests/scripts/translations/babel_update_test.py
create mode 100644
tests/unit_tests/sql/dialects/databend_function_catalogue.txt
create mode 100644 tests/unit_tests/sql/dialects/databend_tests.py
create mode 100644
tests/unit_tests/translations/sk_sql_lab_progress_message_test.py
create mode 100644 tests/unit_tests/utils/create_zip_tests.py
create mode 100644 tests/unit_tests/utils/gcs_tests.py
create mode 100644 tests/unit_tests/versioning/test_api_feature_flag.py
create mode 100644 tests/unit_tests/versioning/test_capture_gap_restore.py
create mode 100644 tests/unit_tests/versioning/test_runtime_capture.py
create mode 100644 tests/unit_tests/views/test_auth_login.py