Skip to content

Commit

Permalink
Revert query as it may be more efficient
Browse files Browse the repository at this point in the history
  • Loading branch information
omar-selo committed Jun 19, 2023
1 parent b42a0e9 commit 6b89841
Showing 1 changed file with 34 additions and 15 deletions.
49 changes: 34 additions & 15 deletions backend/test_observer/data_access/repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
"""Services for working with objects from DB"""


from sqlalchemy import select
from sqlalchemy import and_, func
from sqlalchemy.dialects.postgresql import insert
from sqlalchemy.orm import Session
from sqlalchemy.orm import Session, joinedload


from .models_enums import FamilyName
Expand Down Expand Up @@ -61,22 +61,41 @@ def get_artefacts_by_family_name(
the latest one in a stage
:return: list of Artefacts
"""
query = (
select(Artefact)
.join(Stage)
.where(Stage.family_id.in_(select(Family.id).where(Family.name == family_name)))
)
if latest_only:
query = query.distinct(
Artefact.name, Artefact.source, Artefact.stage_id
).order_by(
Artefact.name,
Artefact.source,
Artefact.stage_id,
Artefact.created_at.desc(),
subquery = (
session.query(
Artefact.stage_id,
Artefact.name,
Artefact.source,
func.max(Artefact.created_at).label("max_created"),
)
.where(Stage.family.has(Family.name == family_name))
.group_by(Artefact.stage_id, Artefact.name, Artefact.source)
.subquery()
)

return list(session.scalars(query).all())
artefacts = (
session.query(Artefact)
.join(
subquery,
and_(
Artefact.stage_id == subquery.c.stage_id,
Artefact.name == subquery.c.name,
Artefact.source == subquery.c.source,
Artefact.created_at == subquery.c.max_created,
),
)
.all()
)
else:
artefacts = (
session.query(Artefact)
.join(Stage)
.filter(Stage.family.has(Family.name == family_name))
.options(joinedload(Artefact.stage))
.all()
)
return artefacts


def get_or_create(db: Session, model: type[DataModel], **kwargs) -> DataModel:
Expand Down

0 comments on commit 6b89841

Please sign in to comment.