Deduplicate event_types in the events table (#89465)
* Deduplicate event_types in the events table
* Deduplicate event_types in the events table
* more fixes
* adjust
* adjust
* fix product
* fix tests
* adjust
* migrate
* migrate
* migrate
* more test fixes
* more test fixes
* fix
* migration test
* adjust
* speed up
* fix index
* fix more tests
* handle db failure
* preload
* tweak
* adjust
* fix stale docs strings, remove dead code
* refactor
* fix slow tests
* coverage
* self join to resolve query performance
* fix typo
* no need for quiet
* no need to drop index already dropped
* remove index that will never be used
* drop index sooner as we no longer use it
* Revert "remove index that will never be used"
This reverts commit 461aad2c52
.
* typo
This commit is contained in:
parent
56454c8580
commit
8bd43760b6
22 changed files with 725 additions and 39 deletions
|
@ -17,10 +17,12 @@ from homeassistant.components.recorder.db_schema import (
|
|||
STATES_CONTEXT_ID_BIN_INDEX,
|
||||
EventData,
|
||||
Events,
|
||||
EventTypes,
|
||||
StateAttributes,
|
||||
States,
|
||||
)
|
||||
from homeassistant.components.recorder.filters import like_domain_matchers
|
||||
from homeassistant.components.recorder.queries import select_event_type_ids
|
||||
|
||||
from ..const import ALWAYS_CONTINUOUS_DOMAINS, CONDITIONALLY_CONTINUOUS_DOMAINS
|
||||
|
||||
|
@ -44,7 +46,7 @@ PSEUDO_EVENT_STATE_CHANGED: Final = None
|
|||
|
||||
EVENT_COLUMNS = (
|
||||
Events.event_id.label("event_id"),
|
||||
Events.event_type.label("event_type"),
|
||||
EventTypes.event_type.label("event_type"),
|
||||
Events.event_data.label("event_data"),
|
||||
Events.time_fired_ts.label("time_fired_ts"),
|
||||
Events.context_id_bin.label("context_id_bin"),
|
||||
|
@ -115,7 +117,8 @@ def select_events_context_id_subquery(
|
|||
return (
|
||||
select(Events.context_id_bin)
|
||||
.where((Events.time_fired_ts > start_day) & (Events.time_fired_ts < end_day))
|
||||
.where(Events.event_type.in_(event_types))
|
||||
.where(Events.event_type_id.in_(select_event_type_ids(event_types)))
|
||||
.outerjoin(EventTypes, (Events.event_type_id == EventTypes.event_type_id))
|
||||
.outerjoin(EventData, (Events.data_id == EventData.data_id))
|
||||
)
|
||||
|
||||
|
@ -147,7 +150,8 @@ def select_events_without_states(
|
|||
return (
|
||||
select(*EVENT_ROWS_NO_STATES, NOT_CONTEXT_ONLY)
|
||||
.where((Events.time_fired_ts > start_day) & (Events.time_fired_ts < end_day))
|
||||
.where(Events.event_type.in_(event_types))
|
||||
.where(Events.event_type_id.in_(select_event_type_ids(event_types)))
|
||||
.outerjoin(EventTypes, (Events.event_type_id == EventTypes.event_type_id))
|
||||
.outerjoin(EventData, (Events.data_id == EventData.data_id))
|
||||
)
|
||||
|
||||
|
@ -182,6 +186,7 @@ def legacy_select_events_context_id(
|
|||
.outerjoin(
|
||||
StateAttributes, (States.attributes_id == StateAttributes.attributes_id)
|
||||
)
|
||||
.outerjoin(EventTypes, (Events.event_type_id == EventTypes.event_type_id))
|
||||
.where((Events.time_fired_ts > start_day) & (Events.time_fired_ts < end_day))
|
||||
.where(Events.context_id_bin == context_id_bin)
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue