MySQL Schema Inspector 純程式 helper 實作紀錄

返回文件首頁

MySQL Schema Inspector 純程式 helper 實作紀錄

1. 文件目的

本文件記錄程式 repo commit 51cb17c 的實作結果,說明本次完成的 Query Builder、metadata row mapper、snapshot assembler 與測試覆蓋範圍。

本次仍未導入 MySqlConnector、未修改 .csproj、未連線 MySQL、未讀取真實 information_schema,也未執行任何 DDL。

2. 實作基準

項目內容
程式 repohs-device-control-template
分支poc/nmodbus-tcp
commit51cb17c
commit 訊息實作 MySQL Schema Inspector 純程式 helper
測試結果dotnet test 合計 329 個測試通過
文件同步狀態本文件同步後待發布

3. 本次新增內容

類別 / 檔案類型說明
AssemblyInfo.csassembly metadata透過 InternalsVisibleTo("HS.DeviceControl.Core.Tests") 讓測試可驗證 internal helper
MySqlSchemaInspectorQueryBuilderinternal helper產生 table / column / index metadata 查詢
MySqlSchemaQueryinternal model保存 SQL 字串與參數名稱
MySqlTableMetadataRowinternal row model承接 table metadata
MySqlColumnMetadataRowinternal row model承接 column metadata
MySqlIndexMetadataRowinternal row model承接 index metadata
MySqlSchemaMetadataMapperinternal mapper將 metadata row 轉成 ColumnDefinition
MySqlSchemaSnapshotAssemblerinternal assembler將 table / column / index row 組成 SchemaDefinition
MySqlSchemaSnapshotAssemblyResultinternal result回傳 schema snapshot 與 warning

4. Query Builder 實作重點

目前 query builder 只產生 SQL 字串與參數名稱,不負責開 connection 或執行 SQL。

Query來源重點
Table queryinformation_schema.TABLES限制 TABLE_SCHEMA = @DatabaseName,並排除非 base table
Column queryinformation_schema.COLUMNS讀取欄位名稱、型別、nullable、primary key、comment 與排序
Index queryinformation_schema.STATISTICS讀取 index 名稱、欄位、唯一性與欄位順序

table filter 會使用 @TableName0@TableName1 這類參數名稱,不直接把 table name 拼進 SQL。

5. Metadata Mapper / Assembler 實作重點

項目行為
欄位型別轉為小寫,例如 VARCHAR(64) 轉成 varchar(64)
property namesnake_case 轉成 PascalCase,例如 task_id 轉成 TaskId
primary key同時支援 column metadata COLUMN_KEY = PRI 與 index metadata PRIMARY
requiredIS_NULLABLE = NO 或 primary key 會視為 required
comment可依 includeComments 開關保留或隱藏
index排除 PRIMARY index,一般 index 依 SEQ_IN_INDEX 排序
warningcolumn / index 指到不存在 table 或 column 時,回傳 warning,不直接執行破壞性動作

6. 測試覆蓋

測試檔覆蓋重點
MySqlSchemaInspectorQueryBuilderTestsdatabase 參數、table filter 參數化、穩定排序、不產生 DDL
MySqlSchemaMetadataMapperTests欄位名稱、型別、required、primary key、comment mapping
MySqlSchemaSnapshotAssemblerTestsschema snapshot 組裝、index 排序、missing table warning、missing column warning、include switches

7. 實際效果

本次完成後,程式 repo 已具備「不連 DB」的真實 MySQL metadata 解析前置能力。

也就是說,下一步若導入 MySqlConnector,主要會新增:

  1. connection / command 執行層。
  2. DbDataReader 或查詢結果轉成目前已建立的 metadata row。
  3. MySqlSchemaSnapshotAssembler 輸出接回 SchemaInspectResult

既有 ISchemaInspector contract 暫時不需要改。

8. 仍未完成

項目狀態
MySqlConnector 套件導入尚未開始,需另行確認
真實 DB connection string尚未建立,需另行確認
實際讀取 MySQL 5.6.2 information_schema尚未執行
ConsoleHost 真實 schema inspect 入口尚未建立
Apply / DDL executor尚未設計與實作

9. 建議下一步

建議下一步先做「MySqlSchemaInspector 真實 DB provider 實作前確認」,明確列出:

  1. 是否允許新增 MySqlConnector
  2. 連線資訊來源與 Secret 規則。
  3. 第一版只做 read-only inspect,不做 apply。
  4. 真實 DB 人工驗證節點如何執行。

未確認前,不應直接新增套件、修改 .csproj、連線 DB 或讀取真實 metadata。

返回文件首頁