Remove sqlalchemy lambda_stmt usage from history, logbook, and statistics (#73191)
This commit is contained in:
@@ -22,7 +22,6 @@ from sqlalchemy.engine.row import Row
|
||||
from sqlalchemy.exc import OperationalError, SQLAlchemyError
|
||||
from sqlalchemy.orm.query import Query
|
||||
from sqlalchemy.orm.session import Session
|
||||
from sqlalchemy.sql.lambdas import StatementLambdaElement
|
||||
from typing_extensions import Concatenate, ParamSpec
|
||||
|
||||
from homeassistant.core import HomeAssistant
|
||||
@@ -166,9 +165,9 @@ def execute(
|
||||
assert False # unreachable # pragma: no cover
|
||||
|
||||
|
||||
def execute_stmt_lambda_element(
|
||||
def execute_stmt(
|
||||
session: Session,
|
||||
stmt: StatementLambdaElement,
|
||||
query: Query,
|
||||
start_time: datetime | None = None,
|
||||
end_time: datetime | None = None,
|
||||
yield_per: int | None = DEFAULT_YIELD_STATES_ROWS,
|
||||
@@ -184,11 +183,12 @@ def execute_stmt_lambda_element(
|
||||
specific entities) since they are usually faster
|
||||
with .all().
|
||||
"""
|
||||
executed = session.execute(stmt)
|
||||
use_all = not start_time or ((end_time or dt_util.utcnow()) - start_time).days <= 1
|
||||
for tryno in range(0, RETRIES):
|
||||
try:
|
||||
return executed.all() if use_all else executed.yield_per(yield_per) # type: ignore[no-any-return]
|
||||
if use_all:
|
||||
return session.execute(query).all() # type: ignore[no-any-return]
|
||||
return session.execute(query).yield_per(yield_per) # type: ignore[no-any-return]
|
||||
except SQLAlchemyError as err:
|
||||
_LOGGER.error("Error executing query: %s", err)
|
||||
if tryno == RETRIES - 1:
|
||||
|
||||
Reference in New Issue
Block a user