Avoid multiple round trips to the database for history API calls (#91193)
* delete more code * tweak * tweak * wrappers * restore lost performance * restore lost performance * restore lost performance * compact * reduce * fix refactor * DRY * tweak * delete the start time state injector * move away the legacy code * tweak * adjust * adjust * tweak * ignore impossible * fix a bug where the first start was changed to the start time when there was no previous history recorded before * avoid the empty scan most cases * postgresql * fixes * workaround for mariadb < 10.4 * remove unused * remove unused * adjust * bail early * tweak * tweak * fix more tests * fix recorderrun being init in the future in the test * run history tests on schema 30 as well * Revert "run history tests on schema 30 as well" This reverts commitd798b100ac
. * reduce * cleanup * tweak * reduce * prune * adjust * adjust * adjust * reverse later is faster because the index is in forward order and the data size we are reversing is much smaller even if we are in python code * Revert "reverse later is faster because the index is in forward order and the data size we are reversing is much smaller even if we are in python code" This reverts commitbf974e103e
. * fix test * Revert "Revert "reverse later is faster because the index is in forward order and the data size we are reversing is much smaller even if we are in python code"" This reverts commit119354499e
. * more coverage * adjust * fix for table order * impossible for it to be missing * remove some more legacy from the all states
This commit is contained in:
parent
7f62ed15fa
commit
4e6937d20f
13 changed files with 891 additions and 427 deletions
|
@ -7,7 +7,7 @@ import sqlite3
|
|||
from unittest.mock import MagicMock, Mock, patch
|
||||
|
||||
import pytest
|
||||
from sqlalchemy import text
|
||||
from sqlalchemy import lambda_stmt, text
|
||||
from sqlalchemy.engine.result import ChunkedIteratorResult
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
from sqlalchemy.sql.elements import TextClause
|
||||
|
@ -18,7 +18,7 @@ from homeassistant.components.recorder import util
|
|||
from homeassistant.components.recorder.const import DOMAIN, SQLITE_URL_PREFIX
|
||||
from homeassistant.components.recorder.db_schema import RecorderRuns
|
||||
from homeassistant.components.recorder.history.modern import (
|
||||
_get_single_entity_states_stmt,
|
||||
_get_single_entity_start_time_stmt,
|
||||
)
|
||||
from homeassistant.components.recorder.models import (
|
||||
UnsupportedDialect,
|
||||
|
@ -908,7 +908,12 @@ def test_execute_stmt_lambda_element(
|
|||
with session_scope(hass=hass) as session:
|
||||
# No time window, we always get a list
|
||||
metadata_id = instance.states_meta_manager.get("sensor.on", session, True)
|
||||
stmt = _get_single_entity_states_stmt(dt_util.utcnow(), metadata_id, False)
|
||||
start_time_ts = dt_util.utcnow().timestamp()
|
||||
stmt = lambda_stmt(
|
||||
lambda: _get_single_entity_start_time_stmt(
|
||||
start_time_ts, metadata_id, False, False
|
||||
)
|
||||
)
|
||||
rows = util.execute_stmt_lambda_element(session, stmt)
|
||||
assert isinstance(rows, list)
|
||||
assert rows[0].state == new_state.state
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue