ALTER TABLE SQL 產生器與 Dry Run Plan 第一版實作紀錄

記錄 ALTER TABLE SQL 產生器、Dry Run Plan、測試結果、限制與下一步。

返回 docs

ALTER TABLE SQL 產生器與 Dry Run Plan 第一版實作紀錄

1. 驗證節點摘要

項目內容
驗證節點名稱ALTER TABLE SQL 產生器與 Dry Run Plan 第一版
驗證日期2026-05-30
程式 repohs-device-control-template
實作 commitdb0b1b8
驗證分支poc/nmodbus-tcp
自動測試結果dotnet test 通過 278 個測試
狀態已完成第一版驗證

本節點依前一份「ALTER TABLE / Schema Initializer 實作前確認」執行,範圍維持在安全邊界內:

2. 已完成範圍

項目實際完成內容
Dry Run Plan新增 SchemaMigrationPlan
Operation Model新增 SchemaMigrationOperation
Operation Type新增 SchemaMigrationOperationType
ADD COLUMN SQL新增 GenerateAddColumnSql
ADD INDEX SQL新增 GenerateAddIndexSql
Dry Run 比對新增 GenerateDryRunPlan
人工確認項目型別、nullable、primary key、comment、同名 index 定義差異會進 ManualReview
禁止破壞性 SQL測試確認不產生 DROPMODIFYCHANGE
測試新增 8 個 Core 測試,總測試數由 270 增加為 278

3. Dry Run 第一版行為

3.1 可自動產生 SQL

情境輸出
目標 table 不存在CREATE TABLE IF NOT EXISTS
目標 column 不存在ALTER TABLE ... ADD COLUMN ...
目標 index 不存在ALTER TABLE ... ADD INDEX ...
目標 unique index 不存在ALTER TABLE ... ADD UNIQUE INDEX ...

3.2 只回報人工確認

情境處理方式
既有欄位型別不同加入 ManualReviewItems
既有欄位 nullable / required 不同加入 ManualReviewItems
primary key 設定不同加入 ManualReviewItems
comment 不同加入 ManualReviewItems
同名 index 欄位或 unique 設定不同加入 ManualReviewItems
缺少 primary key 欄位加入 ManualReviewItems

4. 實際測試結果

執行指令:

dotnet test

結果:

測試專案通過數
HS.DeviceControl.Core.Tests133
HS.DeviceControl.WorkflowSimulation.Tests11
HS.DeviceControl.Adapters.Tests108
HS.DeviceControl.ModbusPoc.Tests26
合計278

測試結果為全部通過。

執行時仍會出現 .NET 5.0 已不受支援NETSDK1138 warning,這是目前指定 .NET 5.0 的預期限制。

5. 新增測試涵蓋

測試方向驗證結果
GenerateAddColumnSql可產生 ALTER TABLE ... ADD COLUMN ...
GenerateAddIndexSql可產生 ALTER TABLE ... ADD INDEX ...
Unique index可產生 ADD UNIQUE INDEX
缺 column / indexDry Run Plan 會列入 ColumnsToAdd / IndexesToAdd
table 不存在Dry Run Plan 會列入 TablesToCreate
欄位型別不同進入 ManualReviewItems
nullable 不同進入 ManualReviewItems
同名 index 定義不同進入 ManualReviewItems
破壞性 SQL測試確認不產生 DROPMODIFYCHANGE

6. 尚未完成範圍

項目狀態
information_schema 查詢尚未導入
MySQL 實際連線尚未導入
DDL 執行器尚未導入
Schema Initializer尚未導入
ConsoleHost 啟動自動建表尚未導入
TaskStore 寫入 / 查詢尚未導入

7. 實際效果

目前已能在不接觸真實 DB 的情況下,先產生「預計要做什麼」的 Dry Run Plan。

這表示後續進入真實 MySQL 前,可以先用程式內的 schema snapshot 測試:

本節點讓「自動建表」從單純 CREATE TABLE 往前推進到「可描述 schema 差異與可審查 SQL」,但仍未進入真實 DB。

8. 建議下一步

建議下一步進入:

Schema Inspector / information_schema 實作前確認

原因:

建議先不要直接導入 MySqlConnector,而是先整理: