Query Builder / Row Mapper 實作前確認

返回文件首頁

Query Builder / Row Mapper 實作前確認

1. 文件目的

本文件整理進入 MySqlSchemaInspector Query Builder / Row Mapper 第一版實作前的確認項目,目標是把可實作範圍、預計新增類別、方法、測試檔、影響範圍與停止線先列清楚。

本節點仍不導入 MySqlConnector、不修改 .csproj、不連線 MySQL、不讀取真實 information_schema、不執行 DDL,也不調整 ConsoleHost 啟動方式。

2. 實作目標

本批建議只做「不依賴真實 DB 的純程式元件」。

目標說明
Query Builder產生 table / column / index metadata 查詢字串與參數名稱
Metadata Row Model表示 information_schema 查詢結果的 table / column / index row
Row Mapper將 metadata row 轉成 schema model 可使用的中間結構
Snapshot Assembler將 table / column / index metadata 組成 schema snapshot
單元測試驗證 SQL 條件、參數化、nullable / unique / primary key / composite index mapping

3. 明確不做

不做項目原因
不新增 MySqlConnector新增 NuGet package 需使用者確認
不修改 .csproj避免影響 restore / build
不建立真實 connection string避免密碼與環境資訊進入 repo
不連線 MySQL外部服務操作需另行確認
不讀取真實 information_schema真實 DB metadata 存取需另行確認
不執行 DDL會修改資料庫
不改 ConsoleHost 啟動方式會影響使用流程
不改 public method 簽章避免破壞既有契約

4. 建議新增類別

以下命名為建議,實作時仍需依程式 repo 現有 namespace 與資料夾調整。

類別建議用途是否 public
MySqlSchemaInspectorQueryBuilder產生 metadata 查詢internal 優先
MySqlSchemaQuery包裝 SQL text 與 parameter namesinternal 優先
MySqlTableMetadataRowtable metadata rowinternal 或測試可見
MySqlColumnMetadataRowcolumn metadata rowinternal 或測試可見
MySqlIndexMetadataRowindex metadata rowinternal 或測試可見
MySqlSchemaMetadataMapperrow mappinginternal 優先
MySqlSchemaSnapshotAssembler組合 schema snapshotinternal 優先

若現有專案沒有啟用 InternalsVisibleTo,第一版可以先將測試需要的 helper 設成 public,但需避免進入正式對外契約;若需新增 InternalsVisibleTo,要先確認是否符合專案規則。

5. 建議方法

5.1 Query Builder

BuildTableQuery(SchemaInspectRequest request)
BuildColumnQuery(SchemaInspectRequest request)
BuildIndexQuery(SchemaInspectRequest request)

預期:

5.2 Row Mapper

MapTable(MySqlTableMetadataRow row)
MapColumn(MySqlColumnMetadataRow row)
MapIndex(MySqlIndexMetadataRow row)

預期:

5.3 Snapshot Assembler

Assemble(
    IEnumerable<MySqlTableMetadataRow> tables,
    IEnumerable<MySqlColumnMetadataRow> columns,
    IEnumerable<MySqlIndexMetadataRow> indexes)

預期:

6. 建議測試檔

測試檔測試重點
MySqlSchemaInspectorQueryBuilderTeststable / column / index query 條件、排序、參數化
MySqlSchemaMetadataMapperTestsnullable、unique、primary key、comment、缺欄位錯誤
MySqlSchemaSnapshotAssemblerTeststable / column / index 組合、複合 index、warning

測試專案應優先放在既有 schema / infrastructure 相關測試區。若現有測試專案命名不明確,實作前需先檢查程式 repo 結構再決定。

7. 測試案例清單

測試預期
Table query 包含 TABLE_SCHEMA = @DatabaseName只能讀指定 database
Column query 排序穩定ORDER BY TABLE_NAME, ORDINAL_POSITION
Index query 排序穩定ORDER BY TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX
Table filter 參數化不直接拼接 table name
空 table filter不產生 IN ()
Nullable mappingYES / NO 正確轉換
Unique mappingNON_UNIQUE = 0 為 unique
Primary key mappingPRIMARY 不放入一般 index
Composite index assembly欄位順序正確
Null comment轉空字串
缺少 table name回傳標準錯誤
column 指向不存在 table產生 warning
index 指向不存在 column產生 warning

8. 影響範圍

預期影響:

9. 實作前檢查

真正進入程式 repo 實作前,需要先檢查:

10. 停止線

實作中若遇到以下情況需停下確認:

情況原因
需要新增 NuGet package超出本批不導入套件範圍
需要修改 .csproj可能影響 build
需要修改 public method 簽章可能影響既有契約
需要改 schema model 欄位可能影響既有 SQL Generator / Dry Run
需要新增 ConsoleHost CLI 參數影響啟動方式
需要連真實 DB外部服務操作
需要執行 DDL修改資料庫

11. 建議下一步

可以進入「Query Builder / Row Mapper 第一版實作」,但第一步應先讀取程式 repo 結構與現有 schema inspector 程式碼,再提出實作範圍。

若實作前發現需要新增套件、修改 public contract 或改 .csproj,必須先停下確認。

返回文件首頁