Skip to content
Snippets Groups Projects
Commit 94ba8b9c authored by Julian's avatar Julian
Browse files

Fix ORM cartesian product warnings

SQLAlchemy v1.4 (Debian Bookworm) annoyingly warns about select statements
that result in a cartesion product of multiple tables. We actually want
cartesion products in all affected cases, so we change "SELECT FROM a,b" to
the equivalent "SELECT FROM a JOIN b ON TRUE".

See https://docs.sqlalchemy.org/en/14/changelog/migration_14.html
parent ccc90a8f
No related branches found
No related tags found
No related merge requests found
...@@ -23,7 +23,10 @@ def upgrade(): ...@@ -23,7 +23,10 @@ def upgrade():
) )
service = sa.table('service', sa.column('id')) service = sa.table('service', sa.column('id'))
user = sa.table('user', sa.column('id')) user = sa.table('user', sa.column('id'))
op.execute(service_user.insert().from_select(['service_id', 'user_id'], sa.select([service.c.id, user.c.id]))) op.execute(service_user.insert().from_select(
['service_id', 'user_id'],
sa.select([service.c.id, user.c.id]).select_from(sa.join(service, user, sa.true()))
))
def downgrade(): def downgrade():
op.drop_table('service_user') op.drop_table('service_user')
...@@ -178,7 +178,7 @@ def create_service_users(session, flush_context): # pylint: disable=unused-argum ...@@ -178,7 +178,7 @@ def create_service_users(session, flush_context): # pylint: disable=unused-argum
return return
db.session.execute(db.insert(ServiceUser).from_select( db.session.execute(db.insert(ServiceUser).from_select(
['service_id', 'user_id'], ['service_id', 'user_id'],
db.select([Service.id, User.id]).where(db.or_( db.select([Service.id, User.id]).select_from(db.join(Service, User, db.true())).where(db.or_(
Service.id.in_(new_service_ids), Service.id.in_(new_service_ids),
User.id.in_(new_user_ids), User.id.in_(new_user_ids),
)) ))
...@@ -193,7 +193,7 @@ def create_missing_service_users(): ...@@ -193,7 +193,7 @@ def create_missing_service_users():
# pylint: disable=no-member # pylint: disable=no-member
db.session.execute(db.insert(ServiceUser).from_select( db.session.execute(db.insert(ServiceUser).from_select(
['service_id', 'user_id'], ['service_id', 'user_id'],
db.select([Service.id, User.id]).where(db.not_( db.select([Service.id, User.id]).select_from(db.join(Service, User, db.true())).where(db.not_(
ServiceUser.query.filter( ServiceUser.query.filter(
ServiceUser.service_id == Service.id, ServiceUser.service_id == Service.id,
ServiceUser.user_id == User.id ServiceUser.user_id == User.id
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment