32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
"""
|
|
Database secondary indexes helper.
|
|
|
|
Creates small B-tree indexes for common equality filters to speed up searches.
|
|
Uses CREATE INDEX IF NOT EXISTS so it is safe to call repeatedly at startup
|
|
and works for existing databases without running a migration.
|
|
"""
|
|
from sqlalchemy.engine import Engine
|
|
from sqlalchemy import text
|
|
|
|
|
|
def ensure_secondary_indexes(engine: Engine) -> None:
|
|
statements = [
|
|
# Files
|
|
"CREATE INDEX IF NOT EXISTS idx_files_status ON files(status)",
|
|
"CREATE INDEX IF NOT EXISTS idx_files_file_type ON files(file_type)",
|
|
"CREATE INDEX IF NOT EXISTS idx_files_empl_num ON files(empl_num)",
|
|
# Ledger
|
|
"CREATE INDEX IF NOT EXISTS idx_ledger_t_type ON ledger(t_type)",
|
|
"CREATE INDEX IF NOT EXISTS idx_ledger_empl_num ON ledger(empl_num)",
|
|
]
|
|
with engine.begin() as conn:
|
|
for stmt in statements:
|
|
try:
|
|
conn.execute(text(stmt))
|
|
except Exception:
|
|
# Ignore failures (e.g., non-SQLite engines that still support IF NOT EXISTS;
|
|
# if not supported, users should manage indexes via migrations)
|
|
pass
|
|
|
|
|