diff --git a/scripts/create_tables.py b/scripts/create_tables.py index 179e24e..68ad1f6 100644 --- a/scripts/create_tables.py +++ b/scripts/create_tables.py @@ -264,6 +264,38 @@ async def main(): except Exception as e: print(f' WARN: pipeline_agent_questions migrate failed: {e}') + # pipeline_human_tasks SDLC 项目级人类任务列迁移(项目/迭代/bug 归属 + QC + bug 验收) + try: + _pht_cols = { + "project_id": "VARCHAR(32) NULL COMMENT '项目ID'", + "iteration_id": "VARCHAR(32) NULL COMMENT '迭代ID'", + "bug_id": "VARCHAR(32) NULL COMMENT '关联BugID'", + "qc_status": "VARCHAR(20) NULL DEFAULT 'pending' COMMENT 'QC状态'", + "qc_comment": "VARCHAR(500) NULL COMMENT 'QC意见'", + } + for col, ddl in _pht_cols.items(): + r = await sor.sqlExe( + "SELECT COUNT(*) as c FROM information_schema.COLUMNS " + "WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='pipeline_human_tasks' " + "AND COLUMN_NAME=${col}$", {"col": col}) + await sor.sqlExe("COMMIT", {}) + if not r or getattr(r[0], 'c', 0) == 0: + await sor.execute( + f"ALTER TABLE pipeline_human_tasks ADD COLUMN {col} {ddl}", {}) + for idx_name, idx_col in [("pipeline_human_tasks_idx_pht_project", "project_id"), + ("pipeline_human_tasks_idx_pht_iteration", "iteration_id")]: + r = await sor.sqlExe( + "SELECT COUNT(*) as c FROM information_schema.STATISTICS " + "WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='pipeline_human_tasks' " + "AND INDEX_NAME=${idx}$", {"idx": idx_name}) + await sor.sqlExe("COMMIT", {}) + if not r or getattr(r[0], 'c', 0) == 0: + await sor.execute( + f"CREATE INDEX {idx_name} ON pipeline_human_tasks({idx_col})", {}) + print(' migrate: pipeline_human_tasks project/iteration/bug/qc columns ensured') + except Exception as e: + print(f' WARN: pipeline_human_tasks migrate failed: {e}') + # sd_features 功能/需求表(pipeline-sdlc 业务表)幂等建表——手写 DDL 避开 json2ddl 的 DEFAULT ''N'' bug try: await sor.execute(_SD_FEATURES_DDL, {})