fix: make code index migration mysql-compatible
This commit is contained in:
35
app/main.py
35
app/main.py
@@ -96,6 +96,25 @@ def _migrate_schema():
|
|||||||
{"column_name": column_name},
|
{"column_name": column_name},
|
||||||
).fetchone() is not None
|
).fetchone() is not None
|
||||||
|
|
||||||
|
def _has_index(db, table_name: str, index_name: str) -> bool:
|
||||||
|
return db.execute(
|
||||||
|
text(
|
||||||
|
"""
|
||||||
|
SELECT 1
|
||||||
|
FROM information_schema.STATISTICS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME = :table_name
|
||||||
|
AND INDEX_NAME = :index_name
|
||||||
|
LIMIT 1
|
||||||
|
"""
|
||||||
|
),
|
||||||
|
{"table_name": table_name, "index_name": index_name},
|
||||||
|
).fetchone() is not None
|
||||||
|
|
||||||
|
def _ensure_unique_index(db, table_name: str, index_name: str, columns_sql: str):
|
||||||
|
if not _has_index(db, table_name, index_name):
|
||||||
|
db.execute(text(f"CREATE UNIQUE INDEX {index_name} ON {table_name} ({columns_sql})"))
|
||||||
|
|
||||||
def _drop_fk_constraints(db, table_name: str, referenced_table: str):
|
def _drop_fk_constraints(db, table_name: str, referenced_table: str):
|
||||||
rows = db.execute(text(
|
rows = db.execute(text(
|
||||||
"""
|
"""
|
||||||
@@ -139,9 +158,7 @@ def _migrate_schema():
|
|||||||
result = db.execute(text("SHOW COLUMNS FROM projects LIKE 'project_code'"))
|
result = db.execute(text("SHOW COLUMNS FROM projects LIKE 'project_code'"))
|
||||||
if not result.fetchone():
|
if not result.fetchone():
|
||||||
db.execute(text("ALTER TABLE projects ADD COLUMN project_code VARCHAR(16) NULL"))
|
db.execute(text("ALTER TABLE projects ADD COLUMN project_code VARCHAR(16) NULL"))
|
||||||
db.execute(text("CREATE UNIQUE INDEX idx_projects_project_code ON projects (project_code)"))
|
_ensure_unique_index(db, "projects", "idx_projects_project_code", "project_code")
|
||||||
else:
|
|
||||||
db.execute(text("CREATE UNIQUE INDEX IF NOT EXISTS idx_projects_project_code ON projects (project_code)"))
|
|
||||||
|
|
||||||
# projects.owner_name
|
# projects.owner_name
|
||||||
result = db.execute(text("SHOW COLUMNS FROM projects LIKE 'owner_name'"))
|
result = db.execute(text("SHOW COLUMNS FROM projects LIKE 'owner_name'"))
|
||||||
@@ -176,7 +193,7 @@ def _migrate_schema():
|
|||||||
db.execute(text("ALTER TABLE tasks ADD COLUMN created_by_id INTEGER NULL"))
|
db.execute(text("ALTER TABLE tasks ADD COLUMN created_by_id INTEGER NULL"))
|
||||||
_ensure_fk(db, "tasks", "created_by_id", "users", "id", "fk_tasks_created_by_id")
|
_ensure_fk(db, "tasks", "created_by_id", "users", "id", "fk_tasks_created_by_id")
|
||||||
if _has_column(db, "tasks", "task_code"):
|
if _has_column(db, "tasks", "task_code"):
|
||||||
db.execute(text("CREATE UNIQUE INDEX IF NOT EXISTS idx_tasks_task_code ON tasks (task_code)"))
|
_ensure_unique_index(db, "tasks", "idx_tasks_task_code", "task_code")
|
||||||
|
|
||||||
# milestones creator field
|
# milestones creator field
|
||||||
result = db.execute(text("SHOW COLUMNS FROM milestones LIKE 'created_by_id'"))
|
result = db.execute(text("SHOW COLUMNS FROM milestones LIKE 'created_by_id'"))
|
||||||
@@ -207,7 +224,7 @@ def _migrate_schema():
|
|||||||
# --- Milestone status enum migration (old -> new) ---
|
# --- Milestone status enum migration (old -> new) ---
|
||||||
if _has_table(db, "milestones"):
|
if _has_table(db, "milestones"):
|
||||||
if _has_column(db, "milestones", "milestone_code"):
|
if _has_column(db, "milestones", "milestone_code"):
|
||||||
db.execute(text("CREATE UNIQUE INDEX IF NOT EXISTS idx_milestones_milestone_code ON milestones (milestone_code)"))
|
_ensure_unique_index(db, "milestones", "idx_milestones_milestone_code", "milestone_code")
|
||||||
# Alter enum column to accept new values
|
# Alter enum column to accept new values
|
||||||
db.execute(text(
|
db.execute(text(
|
||||||
"ALTER TABLE milestones MODIFY COLUMN status "
|
"ALTER TABLE milestones MODIFY COLUMN status "
|
||||||
@@ -264,16 +281,16 @@ def _migrate_schema():
|
|||||||
db.execute(text("ALTER TABLE server_states ADD COLUMN plugin_version VARCHAR(64) NULL"))
|
db.execute(text("ALTER TABLE server_states ADD COLUMN plugin_version VARCHAR(64) NULL"))
|
||||||
|
|
||||||
if _has_table(db, "meetings") and _has_column(db, "meetings", "meeting_code"):
|
if _has_table(db, "meetings") and _has_column(db, "meetings", "meeting_code"):
|
||||||
db.execute(text("CREATE UNIQUE INDEX IF NOT EXISTS idx_meetings_meeting_code ON meetings (meeting_code)"))
|
_ensure_unique_index(db, "meetings", "idx_meetings_meeting_code", "meeting_code")
|
||||||
|
|
||||||
if _has_table(db, "supports") and _has_column(db, "supports", "support_code"):
|
if _has_table(db, "supports") and _has_column(db, "supports", "support_code"):
|
||||||
db.execute(text("CREATE UNIQUE INDEX IF NOT EXISTS idx_supports_support_code ON supports (support_code)"))
|
_ensure_unique_index(db, "supports", "idx_supports_support_code", "support_code")
|
||||||
|
|
||||||
if _has_table(db, "proposes") and _has_column(db, "proposes", "propose_code"):
|
if _has_table(db, "proposes") and _has_column(db, "proposes", "propose_code"):
|
||||||
db.execute(text("CREATE UNIQUE INDEX IF NOT EXISTS idx_proposes_propose_code ON proposes (propose_code)"))
|
_ensure_unique_index(db, "proposes", "idx_proposes_propose_code", "propose_code")
|
||||||
|
|
||||||
if _has_table(db, "essentials") and _has_column(db, "essentials", "essential_code"):
|
if _has_table(db, "essentials") and _has_column(db, "essentials", "essential_code"):
|
||||||
db.execute(text("CREATE UNIQUE INDEX IF NOT EXISTS idx_essentials_essential_code ON essentials (essential_code)"))
|
_ensure_unique_index(db, "essentials", "idx_essentials_essential_code", "essential_code")
|
||||||
|
|
||||||
# --- server_states nginx telemetry for generic monitor client ---
|
# --- server_states nginx telemetry for generic monitor client ---
|
||||||
if _has_table(db, "server_states") and not _has_column(db, "server_states", "nginx_installed"):
|
if _has_table(db, "server_states") and not _has_column(db, "server_states", "nginx_installed"):
|
||||||
|
|||||||
Reference in New Issue
Block a user