MySqlSchemaInspector 真實 DB provider 實作前確認

返回文件首頁

MySqlSchemaInspector 真實 DB provider 實作前確認

1. 文件目的

本文件整理進入 MySqlSchemaInspector 真實 DB provider 前的確認項目,目標是判斷是否可以從「純程式 helper」進入「導入 MySQL 套件並讀取真實 information_schema」。

此節點仍是實作前確認,不會導入 MySqlConnector、不會修改 .csproj、不會建立 connection string、不會連線 MySQL、不會讀取真實 information_schema,也不會執行任何 DDL。

2. 目前狀態

項目狀態
MySQL 版本使用者指定為 MySQL 5.6.2
Schema Attribute已完成
SQL Generator已完成
ALTER TABLE Dry Run已完成
ISchemaInspector已完成抽象與 mock inspector
SchemaDryRunPlanner已完成
SchemaInitializer DryRun已完成
ConsoleHost DryRun 顯示已完成
Query Builder / Row Mapper / Snapshot Assembler已完成,程式 repo commit 51cb17c
測試數dotnet test 合計 329 個測試通過
真實 DB provider尚未開始
MySQL 套件尚未導入
真實 DB 連線尚未執行
DDL / Apply尚未允許

3. 本節點建議結論

建議下一步可以進入「真實 DB provider 第一版」,但必須先取得使用者確認。

第一版 provider 建議只做唯讀 inspect:

範圍是否納入說明
導入 MySqlConnector需確認後才可納入需修改程式 repo .csproj
建立 provider class可在確認後納入將真實 DB metadata 轉成既有 schema snapshot。
讀取 information_schema需確認後才可納入僅限指定 database。
產生 Dry Run Plan可納入只比對,不套用。
執行 CREATE / ALTER / DROP不納入Apply / DDL executor 需另行設計與確認。
寫入 TaskStore不納入等 inspect / dry run 穩定後再進入。

4. 實作位置建議

類型建議位置原因
真實 DB provider新增 Infrastructure 或 MySQL 專屬實作專案避免 Core 直接依賴 MySQL 套件。
ISchemaInspector沿用 Core 既有抽象讓 mock 與真實 provider 可替換。
Query Builder / Mapper / Assembler沿用目前 internal helper已有測試覆蓋,不需重寫。
Connection settingsInfrastructure / ConsoleHost 設定層密碼不得寫死,不污染 Core schema model。
真實驗證入口ConsoleHost 或獨立驗證工具需明確標示只讀,不改既有代表流程。

若目前程式 repo 尚未建立 Infrastructure 專案,建議先停下確認「是否新增 Infrastructure 專案」,不得直接把 MySQL provider 放進 Core。

5. 套件導入確認

確認項建議
套件MySqlConnector
導入位置Infrastructure / MySQL provider 專案,不放 Core
.NET 相容性需選擇支援 .NET 5.0 的版本
CI 影響GitHub Actions 需能 restore / build / test
測試策略單元測試不依賴真實 DB;真實 DB 只做人工驗證節點
停止條件套件導入失敗、CI restore 失敗、需要升級 .NET 時停下討論

6. 連線資訊來源

資訊建議來源是否可寫入 repo
Host / IP本機未追蹤設定檔或環境變數可寫範例,不可寫正式值
Port本機未追蹤設定檔或環境變數可寫預設 3306
DatabaseName本機未追蹤設定檔或環境變數可寫範例
User本機未追蹤設定檔或環境變數不建議寫正式帳號
Password環境變數、Secret、本機未追蹤設定不可寫入 repo
SSL / Timeout設定檔欄位可寫預設值,但需可覆寫

建議第一版環境變數命名:

HS_DB_HOST
HS_DB_PORT
HS_DB_NAME
HS_DB_USER
HS_DB_PASSWORD
HS_DB_SSL_MODE
HS_DB_TIMEOUT_SECONDS

7. 第一版 provider 流程

flowchart LR
    A["讀取安全來源設定"] --> B["建立 MySQL 連線"]
    B --> C["查詢 information_schema.TABLES"]
    B --> D["查詢 information_schema.COLUMNS"]
    B --> E["查詢 information_schema.STATISTICS"]
    C --> F["Metadata Rows"]
    D --> F
    E --> F
    F --> G["Snapshot Assembler"]
    G --> H["SchemaInspectResult"]
    H --> I["SchemaDryRunPlanner"]

8. 錯誤處理規則

情境建議錯誤資訊
缺少 Host / Database / User回傳設定錯誤,不嘗試連線
缺少 Password回傳安全設定錯誤,不提示或寫出密碼
連線失敗回傳 provider、host、database、exception type、message
權限不足回傳權限錯誤,標示讀取 information_schema 失敗
database 不存在回傳 schema not found 類型錯誤
metadata 欄位缺失回傳 mapping error 或 warning
查詢逾時回傳 timeout error 與 timeout 秒數

錯誤不得只回傳 false,也不得吞掉 exception。

9. 測試策略

測試類型是否需要真實 DB說明
Query Builder 單元測試已有基礎,可補 provider 使用情境。
Row Mapper 單元測試使用 fake metadata row。
Provider settings validation 測試驗證缺少必要欄位會被擋下。
Provider command flow 測試可用 fake executor 模擬 reader。
真實 MySQL inspect 人工驗證使用唯讀帳號與指定 database。
CI 自動真實 DB 測試第一版不做避免 CI 需要密碼與外部 DB。

10. 人工驗證節點

未來真實 provider 完成後,需建立「真實 MySQL metadata inspect 人工驗證」。

回報至少包含:

項目說明
驗證節點名稱真實 MySQL metadata inspect 人工驗證
驗證目的確認 provider 可唯讀讀取指定 database metadata
驗證方式使用安全來源提供 Host / Port / Database / User / Password
實際結果table / column / index 數量
安全結果是否未執行任何 DDL
錯誤結果若失敗,列出錯誤碼、階段、訊息與限制
下一步是否串接 ConsoleHost dry run 顯示或補 mapping 規則

11. 必須停下確認

以下事項必須先取得使用者明確確認:

事項原因
新增 MySqlConnector新增套件與修改 .csproj
新增 Infrastructure 專案改變 solution / project 結構
新增 connection settings 格式可能影響設定檔格式
修改 public method 簽章可能影響既有契約
修改 ConsoleHost 啟動方式可能影響既有使用流程
連線真實 MySQL涉及外部服務與敏感資訊
讀取真實 information_schema進入真實 DB metadata 存取
執行任何 DDL會修改資料庫

12. 本次結論

目前可以進入下一個決策點:「是否允許導入 MySqlConnector 並新增真實 DB provider 所需專案 / 設定」。

若使用者同意,建議下一步先做程式 repo 的「provider 實作前程式結構檢查」,確認現有 .sln、專案分層、Core helper、測試專案與是否需要新增 Infrastructure 專案。

若使用者尚未同意,則維持在文件與規劃階段,不修改 .csproj、不導入套件、不連 DB。

返回文件首頁