Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
6e9b7d5
refactor(db): composite PK on M2M association tables (sc-105349)
May 4, 2026
d75a305
fix(migration): always run NULL-FK cleanup; correct RLS test parent name
May 4, 2026
621eb54
docs(migration): address SQLAlchemy review follow-ups
May 4, 2026
be6d3d1
refactor(migration): build pre-flight SQL via SQLAlchemy core (review)
May 4, 2026
0da7e81
fix(migration): drop FKs before recreate on MySQL (sc-105349)
May 4, 2026
f436efd
fix(migration): MySQL downgrade FK + AUTO_INCREMENT (sc-105349)
May 5, 2026
d994ebf
fix(migration): explicit NOT NULL on FK columns for SQLite (sc-105349)
May 5, 2026
d6b6959
fix(migration): rebase down_revision onto 33d7e0e21daa (sc-105349)
May 5, 2026
02662c5
docs(UPDATING): add Postgres-targeted maintenance-window queries (sc-…
May 7, 2026
4c4c891
docs(UPDATING): add MySQL-targeted maintenance-window queries (sc-105…
May 7, 2026
7258deb
build(docker): add MySQL compose override for dialect-swap evaluation
May 7, 2026
6b59619
fix(docker): MySQL examples DB + EXAMPLES_PORT override (sc-105349)
May 7, 2026
0107d7d
build(scripts): add stress-test data generator for migration timing
May 7, 2026
dd9487d
feat(scripts): add --dirty-duplicates-pct to seed_junction_load.py
May 7, 2026
ba7a450
fix(migration): skip alter_column nullable=False on non-SQLite (sc-10…
May 20, 2026
550c560
fix(migration): address aminghadersohi review feedback (sc-105349)
May 20, 2026
65e5efe
fix(migration): allowlist guard on _downgrade_mysql_table
Jun 2, 2026
519c628
fix(versioning): re-point composite-PK migration at master's head
Jun 11, 2026
e7c7899
fix(versioning): capture FK list before dropping in composite-PK upgrade
Jun 11, 2026
536ebfd
fix(migration): resumable MySQL upgrade + stale revision references
Jun 11, 2026
061b316
test(migration): cover the composite-PK data-cleanup paths
Jun 11, 2026
494f5ee
docs(migration): correct composite-PK operator sizing guidance
Jun 11, 2026
43b29bb
fix(db): re-point composite-PK migration onto current master head
Jun 17, 2026
f6d5ed7
feat(versioning): entity-version base infrastructure (gated off)
Jun 17, 2026
fd7bac0
fix(versioning): gate write-path bookkeeping and harden capture
Jun 17, 2026
0d95acb
fix(versioning): make tests capture-on compatible
Jun 22, 2026
51879d2
test(versioning): clear version tables around each versioning test
Jun 22, 2026
9273e18
fix(versioning): address review findings on the base-infra PR
Jun 22, 2026
c6b1531
chore(versioning): strip remaining internal refs + tighten importer g…
Jun 22, 2026
e21db8f
test(versioning): toggle capture via options flag, not listener detach
Jun 22, 2026
dfcd394
feat(versioning): bound change-record output with value + count caps
Jun 22, 2026
3634e01
feat(activity-view): cross-entity version activity view
Jun 18, 2026
e868237
fix(activity-view): address review findings
Jun 22, 2026
55a14a9
fix(activity-view): verification follow-ups
Jun 22, 2026
0b10933
test(activity-view): seed a baseline in the perm-only-rewrite test
Jun 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
266 changes: 266 additions & 0 deletions UPDATING.md

Large diffs are not rendered by default.

117 changes: 117 additions & 0 deletions docker-compose-mysql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# Compose override that swaps the default Postgres metadata DB for MySQL 8.
# Useful for evaluating dialect-specific behaviour (e.g., DDL-migration
# cost on a deployment whose production metadata DB is MySQL).
#
# Usage:
# docker compose -f docker-compose.yml -f docker-compose-mysql.yml up
# docker compose -f docker-compose.yml -f docker-compose-mysql.yml down
#
# To switch back to Postgres, just drop the second `-f` flag — the MySQL
# data lives in a separate volume (`db_home_mysql`) so neither side is
# corrupted by switching dialects.
#
# Notes:
# - Mirrors the connection settings used by CI's `test-mysql` shard:
# dialect ``mysql+mysqldb``, charset utf8mb4 with binary_prefix.
# - Host port 13306 (configurable via DATABASE_PORT_MYSQL) to avoid
# colliding with a native MySQL install on 3306.
# - The Postgres-specific init scripts under
# docker/docker-entrypoint-initdb.d/ are not mounted (they are
# postgres-only); examples / cypress fixtures still load via
# `superset-init`'s post-startup steps.

# Shared environment override applied to every Superset-side service that
# connects to the metadata DB. ``environment:`` takes precedence over the
# values inherited from the env_file in docker-compose.yml.
x-mysql-env: &mysql-env
DATABASE_DIALECT: mysql+mysqldb
DATABASE_HOST: db
DATABASE_PORT: "3306"
DATABASE_DB: superset
DATABASE_USER: superset
DATABASE_PASSWORD: superset
SQLALCHEMY_DATABASE_URI: "mysql+mysqldb://superset:superset@db:3306/superset?charset=utf8mb4&binary_prefix=true"
# Override the analytics-examples DB connection too. ``EXAMPLES_PORT``
# in docker/.env is hardcoded to 5432 (the Postgres port); without
# this override the examples connection would try MySQL on 5432 and
# fail. The examples user/DB are created by docker/mysql-init/
# examples-init.sql on first MySQL boot.
EXAMPLES_HOST: db
EXAMPLES_PORT: "3306"
EXAMPLES_DB: examples
EXAMPLES_USER: examples
EXAMPLES_PASSWORD: examples
SUPERSET__SQLALCHEMY_EXAMPLES_URI: "mysql+mysqldb://examples:examples@db:3306/examples?charset=utf8mb4&binary_prefix=true"

services:
db:
image: mysql:8.0
environment:
MYSQL_DATABASE: superset
MYSQL_USER: superset
MYSQL_PASSWORD: superset
MYSQL_ROOT_PASSWORD: root
# The original 5432 port mapping is harmless on a MySQL container
# (nothing listens on 5432 inside it) but we add 13306->3306 so the
# MySQL port is reachable from the host without colliding with a
# native MySQL on 3306. Compose merges port lists.
ports:
- "127.0.0.1:${DATABASE_PORT_MYSQL:-13306}:3306"
# Override the init-scripts mount by re-binding the same target path
# to a MySQL-compatible directory. Compose merges volume lists by
# target path; later definitions win on conflict, so this displaces
# the Postgres-specific ``./docker/docker-entrypoint-initdb.d`` mount
# from docker-compose.yml. Without this, MySQL would try to run
# ``cypress-init.sh`` (which invokes ``psql``, not in the MySQL
# image), abort the init phase, and never create the ``examples``
# database. Add the MySQL data volume separately.
volumes:
- db_home_mysql:/var/lib/mysql
- ./docker/mysql-init:/docker-entrypoint-initdb.d
command:
- --default-authentication-plugin=caching_sha2_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_0900_ai_ci
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost -uroot -proot --silent"]
interval: 5s
timeout: 5s
retries: 20

superset:
environment: *mysql-env

superset-init:
environment: *mysql-env

superset-worker:
environment: *mysql-env

superset-worker-beat:
environment: *mysql-env

superset-node:
environment: *mysql-env

superset-tests-worker:
environment: *mysql-env

volumes:
db_home_mysql:
32 changes: 32 additions & 0 deletions docker/mysql-init/examples-init.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
-- Licensed to the Apache Software Foundation (ASF) under one
-- or more contributor license agreements. See the NOTICE file
-- distributed with this work for additional information
-- regarding copyright ownership. The ASF licenses this file
-- to you under the Apache License, Version 2.0 (the
-- "License"); you may not use this file except in compliance
-- with the License. You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing,
-- software distributed under the License is distributed on an
-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-- KIND, either express or implied. See the License for the
-- specific language governing permissions and limitations
-- under the License.

-- MySQL counterpart to docker/docker-entrypoint-initdb.d/examples-init.sh.
-- Creates the analytics-examples database and user that Superset's
-- ``load-examples`` command writes to. Mounted by docker-compose-mysql.yml
-- at /docker-entrypoint-initdb.d/ so the MySQL image's first-boot
-- entrypoint runs it automatically. (The Postgres init scripts under
-- docker/docker-entrypoint-initdb.d/ are NOT mounted on the MySQL
-- service — they invoke psql, which doesn't exist in the MySQL image.)

CREATE DATABASE IF NOT EXISTS examples
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;

CREATE USER IF NOT EXISTS 'examples'@'%' IDENTIFIED BY 'examples';
GRANT ALL PRIVILEGES ON examples.* TO 'examples'@'%';
FLUSH PRIVILEGES;
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ dependencies = [
"simplejson>=4.1.1",
"slack_sdk>=3.19.0, <4",
"sqlalchemy>=1.4, <2",
"sqlalchemy-continuum>=1.6.0, <2.0.0",
"sqlalchemy-utils>=0.38.0, <0.43", # expanding lowerbound to work with pydoris
"sqlglot>=30.8.0, <31",
# newer pandas needs 0.9+
Expand Down
3 changes: 3 additions & 0 deletions requirements/base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,10 @@ sqlalchemy==1.4.54
# flask-sqlalchemy
# marshmallow-sqlalchemy
# shillelagh
# sqlalchemy-continuum
# sqlalchemy-utils
sqlalchemy-continuum==1.6.0
# via apache-superset (pyproject.toml)
sqlalchemy-utils==0.42.0
# via
# apache-superset (pyproject.toml)
Expand Down
5 changes: 5 additions & 0 deletions requirements/development.txt
Original file line number Diff line number Diff line change
Expand Up @@ -973,9 +973,14 @@ sqlalchemy==1.4.54
# marshmallow-sqlalchemy
# shillelagh
# sqlalchemy-bigquery
# sqlalchemy-continuum
# sqlalchemy-utils
sqlalchemy-bigquery==1.17.0
# via apache-superset
sqlalchemy-continuum==1.6.0
# via
# -c requirements/base-constraint.txt
# apache-superset
sqlalchemy-utils==0.42.0
# via
# -c requirements/base-constraint.txt
Expand Down
Loading
Loading