mirror of
https://github.com/home-assistant/core.git
synced 2025-07-31 19:25:12 +02:00
Increase max bind vars based on database version (#101464)
This commit is contained in:
@@ -31,7 +31,15 @@ from homeassistant.core import HomeAssistant, callback
|
||||
from homeassistant.helpers import config_validation as cv, issue_registry as ir
|
||||
import homeassistant.util.dt as dt_util
|
||||
|
||||
from .const import DATA_INSTANCE, DOMAIN, SQLITE_URL_PREFIX, SupportedDialect
|
||||
from .const import (
|
||||
DATA_INSTANCE,
|
||||
DEFAULT_MAX_BIND_VARS,
|
||||
DOMAIN,
|
||||
SQLITE_MAX_BIND_VARS,
|
||||
SQLITE_MODERN_MAX_BIND_VARS,
|
||||
SQLITE_URL_PREFIX,
|
||||
SupportedDialect,
|
||||
)
|
||||
from .db_schema import (
|
||||
TABLE_RECORDER_RUNS,
|
||||
TABLE_SCHEMA_CHANGES,
|
||||
@@ -87,6 +95,7 @@ MARIADB_WITH_FIXED_IN_QUERIES_108 = _simple_version("10.8.4")
|
||||
MIN_VERSION_MYSQL = _simple_version("8.0.0")
|
||||
MIN_VERSION_PGSQL = _simple_version("12.0")
|
||||
MIN_VERSION_SQLITE = _simple_version("3.31.0")
|
||||
MIN_VERSION_SQLITE_MODERN_BIND_VARS = _simple_version("3.32.0")
|
||||
|
||||
|
||||
# This is the maximum time after the recorder ends the session
|
||||
@@ -471,6 +480,7 @@ def setup_connection_for_dialect(
|
||||
version: AwesomeVersion | None = None
|
||||
slow_range_in_select = False
|
||||
if dialect_name == SupportedDialect.SQLITE:
|
||||
max_bind_vars = SQLITE_MAX_BIND_VARS
|
||||
if first_connection:
|
||||
old_isolation = dbapi_connection.isolation_level # type: ignore[attr-defined]
|
||||
dbapi_connection.isolation_level = None # type: ignore[attr-defined]
|
||||
@@ -488,6 +498,9 @@ def setup_connection_for_dialect(
|
||||
version or version_string, "SQLite", MIN_VERSION_SQLITE
|
||||
)
|
||||
|
||||
if version and version > MIN_VERSION_SQLITE_MODERN_BIND_VARS:
|
||||
max_bind_vars = SQLITE_MODERN_MAX_BIND_VARS
|
||||
|
||||
# The upper bound on the cache size is approximately 16MiB of memory
|
||||
execute_on_connection(dbapi_connection, "PRAGMA cache_size = -16384")
|
||||
|
||||
@@ -506,6 +519,7 @@ def setup_connection_for_dialect(
|
||||
execute_on_connection(dbapi_connection, "PRAGMA foreign_keys=ON")
|
||||
|
||||
elif dialect_name == SupportedDialect.MYSQL:
|
||||
max_bind_vars = DEFAULT_MAX_BIND_VARS
|
||||
execute_on_connection(dbapi_connection, "SET session wait_timeout=28800")
|
||||
if first_connection:
|
||||
result = query_on_connection(dbapi_connection, "SELECT VERSION()")
|
||||
@@ -546,6 +560,7 @@ def setup_connection_for_dialect(
|
||||
# Ensure all times are using UTC to avoid issues with daylight savings
|
||||
execute_on_connection(dbapi_connection, "SET time_zone = '+00:00'")
|
||||
elif dialect_name == SupportedDialect.POSTGRESQL:
|
||||
max_bind_vars = DEFAULT_MAX_BIND_VARS
|
||||
if first_connection:
|
||||
# server_version_num was added in 2006
|
||||
result = query_on_connection(dbapi_connection, "SHOW server_version")
|
||||
@@ -566,6 +581,7 @@ def setup_connection_for_dialect(
|
||||
dialect=SupportedDialect(dialect_name),
|
||||
version=version,
|
||||
optimizer=DatabaseOptimizer(slow_range_in_select=slow_range_in_select),
|
||||
max_bind_vars=max_bind_vars,
|
||||
)
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user