You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ru...@apache.org on 2026/07/18 23:24:17 UTC
(superset) branch refactor/sqla2-cascade-savedquery created (now da88be60c35)
This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a change to branch refactor/sqla2-cascade-savedquery
in repository https://gitbox.apache.org/repos/asf/superset.git
at da88be60c35 refactor: set cascade_backrefs=False for SavedQuery
This branch includes the following new commits:
new da88be60c35 refactor: set cascade_backrefs=False for SavedQuery
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.
(superset) 01/01: refactor: set cascade_backrefs=False for SavedQuery
Posted by ru...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
rusackas pushed a commit to branch refactor/sqla2-cascade-savedquery
in repository https://gitbox.apache.org/repos/asf/superset.git
commit da88be60c35527982c2a012a38c7d42c79afb982
Author: Evan Rusackas <ev...@rusackas.com>
AuthorDate: Sat Jul 18 16:23:56 2026 -0700
refactor: set cascade_backrefs=False for SavedQuery
Enable the pytest error filter for the "'SavedQuery' object is being
merged into a Session along the backref cascade path" RemovedIn20Warning
and adopt the SQLAlchemy 2.0 behavior for both SavedQuery backrefs
(User.saved_queries and Database.saved_queries).
Constructing SavedQuery(database=...) or SavedQuery(user=...) no longer
implicitly merges the new object into the parent's session. All
persisting code paths already add saved queries explicitly.
See discussion #40273.
Co-Authored-By: Claude Fable 5 <no...@anthropic.com>
---
pytest.ini | 2 +-
superset/models/sql_lab.py | 16 ++++++++++++++--
2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/pytest.ini b/pytest.ini
index 1a4054f036b..96eb946ca00 100644
--- a/pytest.ini
+++ b/pytest.ini
@@ -30,7 +30,7 @@ filterwarnings =
always::sqlalchemy.exc.RemovedIn20Warning
error:Passing a string to Connection.execute\(\) is deprecated:sqlalchemy.exc.RemovedIn20Warning
# error:"Query" object is being merged into a Session:sqlalchemy.exc.RemovedIn20Warning
-# error:"SavedQuery" object is being merged into a Session:sqlalchemy.exc.RemovedIn20Warning
+ error:"SavedQuery" object is being merged into a Session:sqlalchemy.exc.RemovedIn20Warning
# error:"SqlaTable" object is being merged into a Session:sqlalchemy.exc.RemovedIn20Warning
# error:"SqlMetric" object is being merged into a Session:sqlalchemy.exc.RemovedIn20Warning
# error:"TableColumn" object is being merged into a Session:sqlalchemy.exc.RemovedIn20Warning
diff --git a/superset/models/sql_lab.py b/superset/models/sql_lab.py
index 7d28306bb22..0a287d73516 100644
--- a/superset/models/sql_lab.py
+++ b/superset/models/sql_lab.py
@@ -493,13 +493,25 @@ class SavedQuery(
template_parameters = Column(Text)
user = relationship(
security_manager.user_model,
- backref=backref("saved_queries", cascade="all, delete-orphan"),
+ backref=backref(
+ "saved_queries",
+ cascade="all, delete-orphan",
+ # SQLAlchemy 2.0 behavior: assigning `saved_query.user` no longer
+ # cascades the SavedQuery into the User's session; callers must
+ # add objects to a session explicitly.
+ cascade_backrefs=False,
+ ),
foreign_keys=[user_id],
)
database = relationship(
"Database",
foreign_keys=[db_id],
- backref=backref("saved_queries", cascade="all, delete-orphan"),
+ backref=backref(
+ "saved_queries",
+ cascade="all, delete-orphan",
+ # SQLAlchemy 2.0 behavior: see `user` above.
+ cascade_backrefs=False,
+ ),
)
rows = Column(Integer, nullable=True)
last_run = Column(DateTime, nullable=True)