Fix sqlalchemy warning about logbook query being converted from subquery (#71710)

This commit is contained in:
J. Nick Koston 2022-05-11 21:30:36 -05:00 committed by GitHub
parent 08851d8366
commit 19168227eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -6,7 +6,7 @@ from datetime import datetime as dt
from typing import Any from typing import Any
import sqlalchemy import sqlalchemy
from sqlalchemy import lambda_stmt, select from sqlalchemy import lambda_stmt, select, union_all
from sqlalchemy.orm import aliased from sqlalchemy.orm import aliased
from sqlalchemy.sql.expression import literal from sqlalchemy.sql.expression import literal
from sqlalchemy.sql.lambdas import StatementLambdaElement from sqlalchemy.sql.lambdas import StatementLambdaElement
@ -118,15 +118,15 @@ def _select_entities_context_ids_sub_query(
entity_ids: list[str], entity_ids: list[str],
) -> Select: ) -> Select:
"""Generate a subquery to find context ids for multiple entities.""" """Generate a subquery to find context ids for multiple entities."""
return ( return select(
_select_events_context_id_subquery(start_day, end_day, event_types) union_all(
.where(_apply_event_entity_id_matchers(entity_ids)) _select_events_context_id_subquery(start_day, end_day, event_types).where(
.union_all( _apply_event_entity_id_matchers(entity_ids)
),
select(States.context_id) select(States.context_id)
.filter((States.last_updated > start_day) & (States.last_updated < end_day)) .filter((States.last_updated > start_day) & (States.last_updated < end_day))
.where(States.entity_id.in_(entity_ids)) .where(States.entity_id.in_(entity_ids)),
) ).c.context_id
.subquery()
) )
@ -183,18 +183,16 @@ def _select_entity_context_ids_sub_query(
entity_id_like: str, entity_id_like: str,
) -> Select: ) -> Select:
"""Generate a subquery to find context ids for a single entity.""" """Generate a subquery to find context ids for a single entity."""
return ( return select(
_select_events_context_id_subquery(start_day, end_day, event_types) union_all(
.where( _select_events_context_id_subquery(start_day, end_day, event_types).where(
Events.event_data.like(entity_id_like) Events.event_data.like(entity_id_like)
| EventData.shared_data.like(entity_id_like) | EventData.shared_data.like(entity_id_like)
) ),
.union_all(
select(States.context_id) select(States.context_id)
.filter((States.last_updated > start_day) & (States.last_updated < end_day)) .filter((States.last_updated > start_day) & (States.last_updated < end_day))
.where(States.entity_id == entity_id) .where(States.entity_id == entity_id),
) ).c.context_id
.subquery()
) )