Ensure new MariaDB/MySQL tables are created using the InnoDB engine (#88468)
Ensure new tables are created using InnoDB InnoDB is the only supported engine to use with MariaDB or MySQL as we currently have large keys in the states table that will not work with MyIASM. Other storage engines including Aria will likely work fine, but they are not officially supported.
This commit is contained in:
parent
6a0ea09f29
commit
1759f58fc1
1 changed files with 14 additions and 11 deletions
|
@ -111,6 +111,15 @@ ENTITY_ID_LAST_UPDATED_INDEX_TS = "ix_states_entity_id_last_updated_ts"
|
|||
EVENTS_CONTEXT_ID_INDEX = "ix_events_context_id"
|
||||
STATES_CONTEXT_ID_INDEX = "ix_states_context_id"
|
||||
|
||||
_DEFAULT_TABLE_ARGS = {
|
||||
"mysql_default_charset": "utf8mb4",
|
||||
"mysql_collate": "utf8mb4_unicode_ci",
|
||||
"mysql_engine": "InnoDB",
|
||||
"mariadb_default_charset": "utf8mb4",
|
||||
"mariadb_collate": "utf8mb4_unicode_ci",
|
||||
"mariadb_engine": "InnoDB",
|
||||
}
|
||||
|
||||
|
||||
class FAST_PYSQLITE_DATETIME(sqlite.DATETIME):
|
||||
"""Use ciso8601 to parse datetimes instead of sqlalchemy built-in regex."""
|
||||
|
@ -165,7 +174,7 @@ class Events(Base):
|
|||
# Used for fetching events at a specific time
|
||||
# see logbook
|
||||
Index("ix_events_event_type_time_fired_ts", "event_type", "time_fired_ts"),
|
||||
{"mysql_default_charset": "utf8mb4", "mysql_collate": "utf8mb4_unicode_ci"},
|
||||
_DEFAULT_TABLE_ARGS,
|
||||
)
|
||||
__tablename__ = TABLE_EVENTS
|
||||
event_id: Mapped[int] = mapped_column(Integer, Identity(), primary_key=True)
|
||||
|
@ -256,9 +265,7 @@ class Events(Base):
|
|||
class EventData(Base):
|
||||
"""Event data history."""
|
||||
|
||||
__table_args__ = (
|
||||
{"mysql_default_charset": "utf8mb4", "mysql_collate": "utf8mb4_unicode_ci"},
|
||||
)
|
||||
__table_args__ = (_DEFAULT_TABLE_ARGS,)
|
||||
__tablename__ = TABLE_EVENT_DATA
|
||||
data_id: Mapped[int] = mapped_column(Integer, Identity(), primary_key=True)
|
||||
hash: Mapped[int | None] = mapped_column(BigInteger, index=True)
|
||||
|
@ -309,7 +316,7 @@ class States(Base):
|
|||
# Used for fetching the state of entities at a specific time
|
||||
# (get_states in history.py)
|
||||
Index(ENTITY_ID_LAST_UPDATED_INDEX_TS, "entity_id", "last_updated_ts"),
|
||||
{"mysql_default_charset": "utf8mb4", "mysql_collate": "utf8mb4_unicode_ci"},
|
||||
_DEFAULT_TABLE_ARGS,
|
||||
)
|
||||
__tablename__ = TABLE_STATES
|
||||
state_id: Mapped[int] = mapped_column(Integer, Identity(), primary_key=True)
|
||||
|
@ -440,9 +447,7 @@ class States(Base):
|
|||
class StateAttributes(Base):
|
||||
"""State attribute change history."""
|
||||
|
||||
__table_args__ = (
|
||||
{"mysql_default_charset": "utf8mb4", "mysql_collate": "utf8mb4_unicode_ci"},
|
||||
)
|
||||
__table_args__ = (_DEFAULT_TABLE_ARGS,)
|
||||
__tablename__ = TABLE_STATE_ATTRIBUTES
|
||||
attributes_id: Mapped[int] = mapped_column(Integer, Identity(), primary_key=True)
|
||||
hash: Mapped[int | None] = mapped_column(BigInteger, index=True)
|
||||
|
@ -611,9 +616,7 @@ class StatisticsShortTerm(Base, StatisticsBase):
|
|||
class StatisticsMeta(Base):
|
||||
"""Statistics meta data."""
|
||||
|
||||
__table_args__ = (
|
||||
{"mysql_default_charset": "utf8mb4", "mysql_collate": "utf8mb4_unicode_ci"},
|
||||
)
|
||||
__table_args__ = (_DEFAULT_TABLE_ARGS,)
|
||||
__tablename__ = TABLE_STATISTICS_META
|
||||
id: Mapped[int] = mapped_column(Integer, Identity(), primary_key=True)
|
||||
statistic_id: Mapped[str | None] = mapped_column(
|
||||
|
|
Loading…
Add table
Reference in a new issue